Jak korzystać z GOOGLE_APPLICATION_CREDENTIALS z gcloud na serwerze?

11

Jaki jest najprostszy sposób korzystania z gcloudwiersza polecenia bez interakcji z kontem usługi poza GCE? Najlepiej bez zaśmiecania systemu plików plikami poświadczeń, co się gcloud auth activate-service-account --key-file=...dzieje.

Istnieje wiele przypadków użycia przy użyciu gcloudkonta usługi. Na przykład na serwerze chciałbym przetestować, czy GOOGLE_APPLICATION_CREDENTIALSjest on poprawnie ustawiony i ma wymagane uprawnienia przed uruchomieniem mojej aplikacji. Lub chciałbym uruchomić kilka skryptów instalacyjnych lub skryptów cron, które sprawdzają w gcloudwierszu poleceń.

Biblioteki Google Cloud (np. Python , java ) automatycznie używają zmiennej środowiskowej GOOGLE_APPLICATION_CREDENTIALSdo uwierzytelniania w Google Cloud. Niestety, ten wiersz poleceń wydaje się nie mieć wpływu na gcloud. Jaki jest czysty sposób korzystania gcloud, pozostawiając nienaruszony system plików?

$ 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
źródło
Otwórz prośbę o funkcję w Google Public Issue Tracker ze wskazaniem
Kamran
1
Utworzyłem numer 38098801
yonran

Odpowiedzi:

20

gcloudgeneralnie nie używa GOOGLE_APPLICATION_CREDENTIALSzmiennej środowiskowej. Ma tylko niektóre polecenia, aby ułatwić skonfigurowanie domyślnych poświadczeń aplikacji w gcloud auth application-default [login|revoke|print-access-token...].

Domyślnie gcloudprzechowuje swoją konfigurację w $ {HOME} /. Config / gcloud. Można zastąpić tę lokalizację, ustawiając CLOUDSDK_CONFIGzmienną środowiskową.

Możliwe jest także (choć bardziej żmudne) zastąpienie większości ustawień, aby nie trzeba było ich wstępnie konfigurować za pomocą gcloud config set ...i / lub gcloud auth activate-service-account. Dla każdego ustawienia można określić zmienną środowiskową.

Na przykład równoważne polecenie, które próbujesz użyć pliku klucza konta usługi, to:

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

Zauważ, że nadal będzie to buforować dane uwierzytelniające, CLOUDSDK_CONFIGponieważ musi buforować token dostępu, aby nie musiał odświeżać go przy każdym wywołaniu.

W moim przypadku najlepszym rozwiązaniem byłoby moim zdaniem

  1. Ustaw CLOUDSDK_CONFIGna jakiś katalog tymczasowy
  2. gcloud auth activate-service-account --key-file=...
  3. ... użyj gclouddo wykonania swojej pracy ...
  4. Usuń CLOUDSDK_CONFIGkatalog tymczasowy .
Cherba
źródło
1

Czy spojrzałeś na tę --accountopcję? Lubić

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

( Odniesienie )

Jeśli chodzi o „Najlepiej bez zaśmiecania systemu plików plikami poświadczeń”, nie jestem pewien, czy można to osiągnąć.

Kaczor Donald
źródło
Myślę, że OP pyta o sposób uwierzytelnienia bez konieczności aktywowania poświadczeń konta usługi, które buforują poświadczenia w innym miejscu. Myślę, że możesz użyć tylko --account=po aktywowaniu poświadczeń.
David Xia
1

1) Utwórz konto ServiceAccount w GCP IAM. Zaznacz pole „Dostarcz nowy klucz prywatny” i wybierz JSON jako typ pliku.

2) Pobierz plik JSON na swój serwer i wpisz: gcloud auth activate-service-account --key-file serviceaccount.json

3) Sprawdź, czy poświadczenia zostały zastosowane przez uruchomienie gcloud auth list.

Shane Ramey
źródło