2017-02-17 13 views
0

Мы используем контейнеры Docker для большинства наших работ, включая разработку на наших собственных машинах. Это эфемерные (например, запускаются каждый раз, когда мы запускаем тест).Пользовательские учетные данные Google Cloud внутри эфемерного контейнера?

Для AWS авторизация проста - у нас есть ключи в нашей среде, и они передаются в контейнер.

Мы начинаем использовать сервисы Google Cloud, а путь auth кажется более сложным, чем AWS. При локальном развитии gcloud auth login работает хорошо. Но при работе в эфемерном контейнере каждый раз потребуется процесс входа в систему, и я не нашел способ сохранения учетных данных пользователя, используя либо переменные среды a, либо b) объемы отображения - это два способа передачи данных в контейнеры.

Из того, что я могу прочитать, единственный путь - использовать учетные записи служб. Но я думаю, что тогда каждый нуждается в собственной учетной записи службы и должен постоянно обновлять разрешения учетной записи, которые должны быть согласованы с их собственными.

Есть ли лучший способ?

+0

Можно ли использовать одну учетную запись службы для создания ключевого файла JSON и передать это изображение во время сборки докеров, а также установить переменную среды GOOGLE_APPLICATION_CREDENTIALS, а затем все запускают контейнеры с этого изображения? https://developers.google.com/identity/protocols/application-default-credentials#howtheywork – gunit

ответ

1

Самый легкий для создания локального контейнера, см. Учетные данные gcloud, может отображать расположение файловой системы application default credentials в контейнере.

Во-первых, сделать

gcloud auth application-default login 

Затем запустите контейнер в

docker run -ti -v=$HOME/.config/gcloud:/root/.config/gcloud test 

Это должно работать. Я попробовал его с Dockerfile как

FROM node:4 
RUN npm install --save @google-cloud/storage 
ADD test.js . 
CMD node ./test.js 

и test.js файл как

var storage = require('@google-cloud/storage'); 
var gcs = storage({ 
    projectId: 'my-project-515', 
}); 

var bucket = gcs.bucket('my-bucket'); 
bucket.getFiles(function(err, files) { 
    if (err) { 
    console.log("failed to get files: ", err) 
    } else { 
    for (var i in files) { 
     console.log("file: ", files[i].name) 
    } 
    } 
}) 

, и она работала, как ожидалось.