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 gsutil
Befehl auf dem Server zu viele Rechte erteilt werden, habe ich im Abschnitt "Anmeldeinformationen" meines Google-Projekts ein "Dienstkonto" erstellt.
Zum Bucket habe gs://mybucket
ich 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:
- [email protected]
- 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 gcloud
die Berechtigungsdaten gespeichert sind, den veralteten Befehl
gsutil config -e
wird ~/.boto
mit 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
?
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.json
undgsutil cp file gs://testbucket/
funktionierte dann ordnungsgemäß.quelle