Як використовувати 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.

Будь ласка, відкрийте запит на функцію в Google Public Issue Tracker із зазначенням ваших випадків використання: issueetracker.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каталог.

1

Ви подивилися на --accountваріант? Люблю

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

( Довідка )

Щодо "Переважно без засмічення файлової системи файлами облікових даних", я не впевнений, чи можна цього досягти.


Я думаю, що ОП запитує про те, як пройти автентифікацію без необхідності активувати дані облікового запису служби, які кешують облікові дані в інших місцях. Я думаю, ви можете використовувати лише --account=після активації облікових даних.
Девід Ся

1

1) Створіть рахунок рахунку сервісу в GCP IAM. Поставте прапорець "Оформлення нового приватного ключа" та виберіть JSON як тип файлу.

2) Завантажте файл JSON на свій сервер та введіть: gcloud auth activate-service-account --key-file serviceaccount.json

3) Перевірте, чи були застосовані облікові дані, запустивши gcloud auth list.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.