Wie verwende ich GOOGLE_APPLICATION_CREDENTIALS mit gcloud auf einem Server?

11

Was ist der einfachste Weg, die gcloudBefehlszeile nicht interaktiv mit einem Dienstkonto außerhalb von GCE zu verwenden? Am besten ohne das Dateisystem mit Anmeldeinformationsdateien zu verunreinigen gcloud auth activate-service-account --key-file=....

Es gibt viele Anwendungsfälle für die Verwendung gcloudmit einem Dienstkonto. Auf einem Server möchte ich beispielsweise testen, ob der Server GOOGLE_APPLICATION_CREDENTIALSkorrekt eingestellt ist und über die erforderlichen Berechtigungen verfügt, bevor ich meine Anwendung ausführe. Oder ich möchte einige Setup-Skripte oder Cron-Skripte ausführen, die eine Überprüfung über die gcloudBefehlszeile durchführen.

Google Cloud-Bibliotheken (z. B. Python , Java ) verwenden automatisch die Umgebungsvariable, GOOGLE_APPLICATION_CREDENTIALSum sich bei Google Cloud zu authentifizieren. Leider scheint diese Befehlszeile keine Auswirkungen zu haben gcloud. Was ist eine saubere Methode, gcloudwenn das Dateisystem intakt bleibt?

$ 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
quelle
Bitte öffnen Sie eine Funktionsanfrage auf Google Public Issue Tracker mit Angabe Ihrer Anwendungsfälle: issuetracker.google.com
Kamran
1
Ich habe die Ausgabe 38098801
yonran

Antworten:

19

gcloudVerwendet im Allgemeinen keine GOOGLE_APPLICATION_CREDENTIALSUmgebungsvariablen. Es gibt nur einige Befehle, um das Einrichten dieser Anwendungsstandardanmeldeinformationen in zu erleichtern gcloud auth application-default [login|revoke|print-access-token...].

Standardmäßig wird gclouddie Konfiguration in $ {HOME} /. Config / gcloud gespeichert. Sie können diesen Speicherort überschreiben, indem Sie die CLOUDSDK_CONFIGUmgebungsvariable festlegen.

Es ist auch möglich (wenn auch langwieriger), die meisten Einstellungen zu überschreiben, damit sie nicht über gcloud config set ...und / oder vorkonfiguriert werden müssen gcloud auth activate-service-account. Für jede Einstellung kann eine Umgebungsvariable angegeben werden.

Der entsprechende Befehl, mit dem Sie versucht haben, die Schlüsseldatei des Dienstkontos zu verwenden, lautet beispielsweise:

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

Beachten Sie, dass dadurch weiterhin Anmeldeinformationen zwischengespeichert werden, CLOUDSDK_CONFIGda das Zugriffstoken zwischengespeichert werden muss, damit es nicht bei jedem Aufruf aktualisiert werden muss.

Für Ihren Anwendungsfall wäre aus meiner Sicht die beste Option

  1. Auf CLOUDSDK_CONFIGein temporäres Verzeichnis einstellen
  2. gcloud auth activate-service-account --key-file=...
  3. ... verwenden gcloud, um Ihre Arbeit zu erledigen ...
  4. Temporäres CLOUDSDK_CONFIGVerzeichnis entfernen .
cherba
quelle
1

Haben Sie sich die --accountOption angesehen? Mögen

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

( Referenz )

In Bezug auf "Am besten ohne das Dateisystem mit Anmeldeinformationsdateien zu verunreinigen" bin ich mir nicht sicher, ob dies möglich ist.

Donald Duck
quelle
Ich denke, das OP fragt nach der Authentifizierung, ohne die Anmeldeinformationen des Dienstkontos aktivieren zu müssen, wodurch die Anmeldeinformationen an anderer Stelle zwischengespeichert werden. Ich denke, Sie können nur verwenden, --account=wenn die Anmeldeinformationen aktiviert wurden.
David Xia
1

1) Erstellen Sie ein ServiceAccount in GCP IAM. Aktivieren Sie das Kontrollkästchen "Neuen privaten Schlüssel bereitstellen" und wählen Sie JSON als Dateityp aus.

2) Laden Sie die JSON-Datei auf Ihren Server herunter und geben Sie Folgendes ein: gcloud auth activate-service-account --key-file serviceaccount.json

3) Überprüfen Sie, ob die Anmeldeinformationen durch Ausführen angewendet wurden gcloud auth list.

Shane Ramey
quelle