Как проще всего использовать 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
так как ему необходимо кэшировать токен доступа, чтобы ему не приходилось обновлять его при каждом вызове.
На мой взгляд, лучшим вариантом для вашего варианта использования будет
CLOUDSDK_CONFIG
в какой-то временный каталогgcloud auth activate-service-account --key-file=...
gcloud
делать свою работу ...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" ...
(Ссылка)
Что касается «Желательно не засорять файловую систему файлами учетных данных», я не уверен, можно ли этого достичь.