Возможность запускать команды gcloud из контейнера в GKE или CloudRun

Я только что установил gcloud в контейнер для докеров.

Когда я пытаюсь запустить команду локально, я получаю следующую ошибку (что имеет смысл)

root@3c4b9a147de7:/# gcloud projects list
ERROR: (gcloud.projects.list) You do not currently have an active account selected.
Please run:

  $ gcloud auth login

to obtain new credentials, or if you have already logged in with a
different account:

  $ gcloud config set account ACCOUNT

to select an already authenticated account to use.

Если я правильно настрою учетную запись службы (для службы, из которой будет запускаться контейнер), будет ли работать указанная выше команда?




Ответы (4)


Если я правильно настрою учетную запись службы (для службы, из которой будет запускаться контейнер), будет ли работать указанная выше команда?

Я не уверен, что вы имеете в виду под «службой, из которой будет запускаться контейнер». Службе могут быть назначены учетные данные, но ничего внутри контейнера об этом не узнает.

Чтобы использовать учетную запись службы с интерфейсом командной строки Google Cloud SDK, необходимо настроить интерфейс командной строки для использования учетной записи службы. Следующая команда делает это. Замените SA_EMAIL адресом электронной почты своего служебного аккаунта. Адрес электронной почты можно найти в файле ключа JSON сервисного аккаунта.

gcloud auth activate-service-account SA_EMAIL --key-file=service_account.json

После запуска этой команды сохраните контейнер, чтобы учетные данные остались там при следующем запуске этого контейнера.

person John Hanley    schedule 24.09.2019
comment
Я имею в виду, например, что если я запускаю контейнер из CloudRun и назначаю CloudRun учетную запись службы GCP IAM с, скажем, разрешениями, соответствующими вызову gcloud projects list, тогда команда сможет выполняться из контейнера, запущенного через CloudRun? - person pkaramol; 24.09.2019
comment
1/2) Я ответил на это утверждение: когда я пытаюсь запустить команду локально, я получаю следующую ошибку (которая имеет смысл), которая также будет работать при развертывании контейнера. - person John Hanley; 24.09.2019
comment
2/2) Я не могу ответить, работает ли сервер метаданных Cloud Run с CLI внутри Cloud Run, поскольку я никогда не пробовал. Сервер метаданных обрабатывает учетные данные вашей учетной записи внутри вычислительных сервисов (Cloud Run, Cloud Functions, Compute Engine, ...). Когда Google настраивает интерфейс командной строки в сборках образов Compute Engine, я не уверен, делают ли они что-нибудь особенное, чтобы gcloud правильно настроен для доступа к серверу метаданных. Обычно CLI сохраняет свою конфигурацию относительно домашнего каталога пользователя. У вас нет домашнего каталога в Cloud Run. - person John Hanley; 24.09.2019

gcloud auth login не рекомендуется использовать в контейнере, поскольку он ссылается на вашу личность. Предпочитайте сервисный аккаунт. Сохраните его в своем контейнере и определите переменную среды GOOGLE_APPLICATION_CREDENTIAL, указывающую на этот файл.

Вы также можете запустить gcloud auth activate-service-account с файлом учетной записи службы в параметре во время сборки контейнера.

ОДНАКО не рекомендуется использовать этот инструмент в контейнере. С Cloud Run даже возможно, что этот вызов будет заблокирован (я никогда не пробовал, но позаботился о выполнении среды песочницы). Предпочитайте библиотеки или прямой вызов API.

person guillaume blaquiere    schedule 24.09.2019

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

Когда что-то запускается через Cloud Run, по умолчанию используется служебная учетная запись Compute Engine. Если у этой учетной записи есть необходимые разрешения, команда будет выполнена успешно. Узнайте об аутентификации в Cloud Build здесь. GKE относительно учетной записи службы, которую вы можете найти здесь .

person siamsot    schedule 25.09.2019

Если в контейнере докеров установлен gcloud sdk (оболочка SDK Google Cloud), запустите Google Cloud SDK для аутентификации с помощью $ gcloud auth login. После этого вы можете запустить командную строку gcloud. также проверьте путь в переменной Enviroments для каталога gcloud

person Alioua    schedule 24.09.2019