Назад | Перейти на главную страницу

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

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

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

Облачные библиотеки Google (например, питон, Ява) автоматически использовать переменную среды 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.

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 каталог.

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

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

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

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

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

(Ссылка)

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