Ich versuche, die Erstellung von Dienstkonten für die Verwendung mit GKE über das Befehlszeilentool gcloud
zu automatisieren. Ich habe einen Flow gefunden, der den von der Google Cloud Console verwendeten Prozess zu spiegeln scheint, aber meinen Nutzern wird nicht der entsprechende Zugriff angezeigt.Wie berechtige ich serviceAccounts über die gcloud-Befehlszeile für den Kubernetes-API-Zugriff?
ist hier die Befehle, die ich bin, um die Ausführung:
# Environment:
# - uname=<username>
# - email=<user's email address>
# - GCLOUD_PROJECT_ID=<project identifier>
# - serviceAccount="${uname}@${GCLOUD_PROJECT_ID}.iam.gserviceaccount.com"
$ gcloud iam service-accounts \
create "${uname}" --display-name "email:${email}" --format json
$ gcloud projects \
add-iam-policy-binding "${GCLOUD_PROJECT_ID}" \
--member "serviceAccount:${serviceAccount}" \
--role=roles/container.developer --format=json
$ gcloud iam service-accounts keys \
create "${GCLOUD_PROJECT_ID}-${uname}.json" \
--iam-account="${serviceAccount}"
Wenn dies ausgeführt wird, erstellt es ein neues Konto Service und generiert eine Schlüsseldatei lokal. Ich versuche dann, diesen Schlüssel zu verwenden, um Anmeldeinformationen für meinen Kubernetes-Cluster zu erhalten.
$ gcloud config configurations create devcluster --activate
$ gcloud config set project devnet-166017
$ gcloud config set compute/zone us-central1-b
$ gcloud auth activate-service-account \
--key-file="${GCLOUD_PROJECT_ID}-${uname}.json"
$ gcloud container clusters get-credentials devcluster
ERROR: (gcloud.container.clusters.get-credentials) ResponseError: \
code=403, message=Required "container.clusters.get" permission for \
"projects/${GCLOUD_PROJECT_ID}/zones/us-central1-b/clusters/devcluster".
Es scheint, dass meine Dienstkonto aus irgendeinem Grund nicht über eine einzige der Berechtigungen muss es Anmeldeinformationen erhalten, aber auf das, was ich gelesen habe und was ich in der Konsole beobachtet, ich glaube, Diese Berechtigung sollte Teil der roles/container.developer
Rolle sein.
Danke!
Irgendeine Lösung dafür? Ich versuchte [this] (https://stackoverflow.com/questions/42556739/service-account-throws-an-insufficient-permission-error-event-it-has-owner-priv) mit nicht Glück – mllm
Art von: I fand heraus, dass, wenn ich mit einem höchst berechtigten Benutzer (ein Projekt "Owner" in Google Cloud) anfing, die obigen Schritte ein Dienstkonto erstellten, das Zugriff darauf hatte, das zu tun, was ich brauchte. Als ich jedoch ein anderes Dienstkonto mit einem feineren Satz von Berechtigungen verwendete, schlug es fehl. Es scheint, als könnte es einige abgeleitete Autorisierungen geben, aber ich habe nicht genau festgestellt, was diese sind. – benschumacher
Ich habe eigentlich nur die fehlerhaften 'gcloud container cluster get-credentials devcluster'-Zeile entfernt. Habe ** keine Ahnung ** warum es jetzt funktioniert, aber das ist meine Lösung. – mllm