Wie greife ich über ein Dienstkonto über die Befehlszeile auf einen Google Cloud Storage Bucket zu?


7

Ich dachte, es wäre ziemlich einfach, dies zu tun, aber ich kann es nicht zum Laufen bringen:

Ich versuche, Dateien von einem Server (GCE) in einen Google Cloud Storage Bucket zu übertragen. Um zu vermeiden, dass dem gsutilBefehl auf dem Server zu viele Rechte erteilt werden, habe ich im Abschnitt "Anmeldeinformationen" meines Google-Projekts ein "Dienstkonto" erstellt.

Zum Bucket habe gs://mybucketich die E-Mail-Adresse dieses Dienstkontos mit EIGENTÜMER-Berechtigungen als BENUTZER zum Bucket hinzugefügt.

Auf dem Server habe ich das Dienstkonto folgendermaßen aktiviert:

$gcloud auth activate-service-account --key-file <path-to-keyfile> myservice

$gcloud auth list
Credentialed accounts:
 - 1234567890@project.gserviceaccount.com
 - myservice (active)

To set the active account, run:
  $ gcloud config set account <account>

Bisher scheint also alles in Ordnung zu sein. Der Zugriff auf den Bucket schlägt jedoch fehl:

$gsutil cp tempfile gs://mybucket
CommandException: Error retrieving destination bucket gs://mybucket/: [('PEM routines', 'PEM_read_bio', 'no start line')]

$gsutil cp tempfile gs://mybucket/tempfile
Failure: [('PEM routines', 'PEM_read_bio', 'no start line')].

Natürlich habe ich überprüft, ob die ACLs des Buckets das Dienstkonto als EIGENTÜMER anzeigen. Ich habe dies auch auf einem anderen Computer mit einem anderen Betriebssystem versucht. Gleiches Ergebnis. Unnötig zu erwähnen, dass ich aus den Fehlermeldungen selbst keinen Sinn machen kann. Ich würde mich über Vorschläge freuen. Detailliertes Fehlerprotokoll in dieser Übersicht .

Aktualisieren:

Verwenden Sie nach dem Entfernen ~/.config, wo gclouddie Berechtigungsdaten gespeichert sind, den veralteten Befehl

gsutil config -e

wird ~/.botomit dem Dienstkonto wie beabsichtigt generiert . Der spätere Zugriff auf gs://mybucket funktioniert .

Ich bin mir jedoch nicht sicher, ob dies der Weg ist, dem ich folgen soll. Wie bringe ich das zum Laufen gcloud auth?

Antworten:


1

Ich hatte das gleiche Problem. Die Standardschlüsseldatei, die mir die Google Developers Console zur Verfügung gestellt hat, war eine JSON-Datei mit dem Schlüsselmaterial in einem JSON-Feld. Ich habe das Dienstkonto mit "gcloud auth revoke" widerrufen, einen neuen Schlüssel von der Entwicklerkonsole generiert und den Schlüssel als P12-Datei heruntergeladen. Diesmal nach Aktivierung des Dienstkontos hat es funktioniert.


Vielen Dank für den Hinweis. Anscheinend hat die Kombination aus der .p12-Schlüsseldatei UND der Benennung des Kontos genau wie die E-Mail-Adresse des Kontos dies für mich getan. (Und ich dachte, irgendwo gelesen zu haben, könnte man einen beliebigen Namen für das Konto verwenden.)
bjoseru

Übrigens konvertiert openssl -export -nocerts den aus der json-Datei extrahierten privaten Schlüssel (pem) in eine .p12-Datei. Falls dies einfacher ist als das Herunterladen eines neuen Schlüssels.
Joe Bowbeer

4

Für den Datensatz habe ich heute dieselbe Fehlermeldung gesehen, als ich versucht habe, das Dienstkonto auf einer GCE-Instanz über eine generierte JSON-Schlüsseldatei zu aktivieren . Auf der Instanz vorinstalliertes Gcloud sdk war zu alt und konnte mit json-Schlüsseln nicht richtig arbeiten. Außerdem würde das Tool kein Feedback geben, wenn Sie versuchen, mein Konto auf diese Weise zu aktivieren. Der Versuch, das Konto für die Autorisierung zu verwenden, schlägt jedoch mit dem genannten Fehler fehl.

Nachdem ich die aktuelle Version installiert hatte, konnte ich mein Dienstkonto über aktivieren gcloud auth activate-service-account --key-file /key.jsonund gsutil cp file gs://testbucket/funktionierte dann ordnungsgemäß.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.