Как использовать GOOGLE_APPLICATION_CREDENTIALS с gcloud на сервере?

11

Как проще всего использовать gcloudкомандную строку неинтерактивно с учетной записью службы вне GCE? Желательно без засорения файловой системы файлами учетных данных, что и gcloud auth activate-service-account --key-file=...делает.

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

Библиотеки Google Cloud (например, python , java ) автоматически используют переменную окружения GOOGLE_APPLICATION_CREDENTIALSдля аутентификации в Google Cloud. Но, к сожалению, эта командная строка, кажется, не влияет на gcloud. Какой чистый способ использовать gcloud, оставляя файловую систему нетронутой?

$ GOOGLE_APPLICATION_CREDENTIALS=/etc/my-service-account-4b4b6e63aaed.json gcloud alpha pubsub topics publish testtopic hello
ERROR: (gcloud.alpha.pubsub.topics.publish) 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.
yonran
источник
Пожалуйста, не стесняйтесь открыть запрос на функцию в Общедоступном трекере Google с упоминанием ваших вариантов использования: issetracker.google.com
Kamran
1
Я создал выпуск 38098801
Йонран

Ответы:

20

gcloudкак правило, не использует GOOGLE_APPLICATION_CREDENTIALSпеременную окружения. В нем есть только некоторые команды, облегчающие настройку этих учетных данных приложения по умолчанию в gcloud auth application-default [login|revoke|print-access-token...].

По умолчанию gcloudсохраняет свою конфигурацию в $ {HOME} /. Config / gcloud. Это можно переопределить, установив CLOUDSDK_CONFIGпеременную окружения.

Также можно (хотя и более утомительно) переопределить большинство настроек, чтобы их не нужно было предварительно настраивать с помощью gcloud config set ...и / или gcloud auth activate-service-account. Для каждого параметра можно указать переменную среды.

Например, эквивалентная команда, которую вы пытались использовать файл ключа учетной записи службы:

$ CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE=/etc/my-service-account-4b4b6e63aaed.json \
    gcloud alpha pubsub topics publish testtopic hello

Обратите внимание, что это все еще будет кэшировать учетные данные, CLOUDSDK_CONFIGпоскольку ему необходимо кэшировать токен доступа, так что ему не придется обновлять его при каждом вызове.

Для вашего варианта использования лучший вариант, на мой взгляд, будет

  1. Установите CLOUDSDK_CONFIGв какой-то временный каталог
  2. gcloud auth activate-service-account --key-file=...
  3. ... использовать, gcloudчтобы делать свою работу ...
  4. Удалить временный CLOUDSDK_CONFIGкаталог.
cherba
источник
1

Вы смотрели на --accountвариант? подобно

$gcloud --account="foo" ...

( Ссылка )

Что касается «Желательно без засорения файловой системы файлами учетных данных», я не уверен, если это возможно достичь.

Дональд Дак
источник
Я думаю, что OP спрашивает о том, как пройти аутентификацию, не активируя учетные данные учетной записи службы, которая кэширует учетные данные в другом месте. Я думаю, что вы можете использовать --account=только после активации учетных данных.
Дэвид Ся,
1

1) Создайте учетную запись службы в GCP IAM. Установите флажок «Создать новый закрытый ключ» и выберите JSON в качестве типа файла.

2) Загрузите файл JSON на свой сервер и введите: gcloud auth activate-service-account --key-file serviceaccount.json

3) Убедитесь, что учетные данные были применены при запуске gcloud auth list.

Шейн Рэйми
источник