Как проще всего использовать 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.
источник
Ответы:
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_CONFIG
поскольку ему необходимо кэшировать токен доступа, так что ему не придется обновлять его при каждом вызове.Для вашего варианта использования лучший вариант, на мой взгляд, будет
CLOUDSDK_CONFIG
в какой-то временный каталогgcloud auth activate-service-account --key-file=...
gcloud
чтобы делать свою работу ...CLOUDSDK_CONFIG
каталог.источник
Вы смотрели на
--account
вариант? подобно( Ссылка )
Что касается «Желательно без засорения файловой системы файлами учетных данных», я не уверен, если это возможно достичь.
источник
--account=
только после активации учетных данных.1) Создайте учетную запись службы в GCP IAM. Установите флажок «Создать новый закрытый ключ» и выберите JSON в качестве типа файла.
2) Загрузите файл JSON на свой сервер и введите:
gcloud auth activate-service-account --key-file serviceaccount.json
3) Убедитесь, что учетные данные были применены при запуске
gcloud auth list
.источник