Ich habe ein Projekt in GCP erstellt. Dann habe ich ein Dienstkonto mit Compute Admin
Rolle erstellt. Danach habe ich es Compute Engine API
für mein Projekt aktiviert, kann aber nicht mit Instanzen arbeiten:
#gcloud compute instances list
ERROR: (gcloud.compute.instances.list) Some requests did not succeed:
- Required 'compute.zones.list' permission for 'projects/someproject'
Was mache ich falsch ?
Antwort1
Überprüfen Sie, ob das Dienstkonto, das Sie zum Ausführen dieses Befehls verwenden, über die richtigeCompute Engine-Rolle. Sie können dies hier tun: IAM & Admin > IAM.
-- AKTUALISIEREN --
Um zu überprüfen, ob dieDienstkontoverfügt über die entsprechenden Berechtigungen und führt diese Befehle in der Cloud Shell aus:
$ gcloud iam service-accounts keys create key.json \ --iam-account [email protected]
Der obige Befehl erstellt und lädt den Schlüssel für dieses Dienstkonto im JSON-Format herunter.
$ gcloud projects add-iam-policy-binding some-project-name \ --member serviceAccount:[email protected] \ --role=roles/compute.admin
Dieser Befehl weist dem Dienstkonto new-sa die Rolle compute.admin zu.
$ gcloud auth activate-service-account --key-file=key.json
$ gcloud compute instances list
Und mit diesen imitierenneu-saDienstkonto mit der bereits heruntergeladenen Datei key.json und führen Sie den entsprechenden Befehl aus, um die Instanzen in aufzulistenirgendein-projektnameProjekt. Wenn dies erfolgreich ist, liegt das Problem woanders.
Antwort2
Das erste Mal habe ich im Google-Testzeitraum ein Dienstkonto „cloud66“ erstellt. Dies hatte höchstwahrscheinlich Auswirkungen auf die Zugriffsrechte. Dann habe ich die Abrechnung von einem Testzeitraum auf einen kostenpflichtigen umgestellt. Ich habe das Dienstkonto cloud66 im Abschnitt „APIs & Dienste -> Anmeldeinformationen“ gelöscht und neu erstellt. Es gab jedoch eine Zugriffsrichtlinie für „cloud66“ mit der Rolle „ComputeAdmin“ im Abschnitt „IAM“. Als ich die Zugriffsrichtlinie aus dem Abschnitt „IAM“ gelöscht und das Dienstkonto neu erstellt habe, war das Problem behoben.