Mit Workload Identity können Sie jeder Anwendung in Ihrem Cluster separate, detaillierte Identitäten und Autorisierungen zuweisen. Workload Identity ist die empfohlene Methode für Anwendungen, die in GKE on AWS ausgeführt werden, um aufGoogle Cloud -Dienste zuzugreifen. Weitere Informationen finden Sie unter Workload Identity.
In diesem Thema wird beschrieben, wie Sie mit Workload Identity von Ihren Arbeitslasten aus eine Verbindung zuGoogle Cloud -Diensten herstellen.
Google Cloud -Dienstkonto konfigurieren
In diesem Abschnitt erstellen Sie ein Google Cloud -Dienstkonto (Google Cloud Service Account, GSA) mit eingeschränkten Berechtigungen für den Zugriff auf Google Cloud -Dienste.
Workload Identity-Pool und -Anbieter abrufen
Zum Konfigurieren von Workload Identity benötigen Sie die Werte für den URI des Identitätsanbieters des Clusters und Workload Identity-Pools.
Workload Identity-Pool für Ihren Cluster ermitteln
Für alle GKE-Cluster wird ein Identitätsanbieter im Workload Identity-Pool
PROJECT_ID.svc.id.googerstellt. Verwenden Sie das Google Cloud CLI, um den Namen des Identitätspools Ihres Clusters abzurufen:gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.workloadPool)'Dabei gilt:
CLUSTER_NAMEdurch den Namen Ihres Clusters.GOOGLE_CLOUD_LOCATIONdurch den Namen des Google CloudStandorts, der den Cluster verwaltet
Die Ausgabe enthält den Namen des Identitätspools Ihres Clusters. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
Identitätsanbieter für den Cluster ermitteln
Verwenden Sie das Google Cloud CLI, um den Namen des Identitätsanbieters Ihres Clusters zu ermitteln:
gcloud container aws clusters describe CLUSTER_NAME \ --location=GOOGLE_CLOUD_LOCATION \ --format='value(workloadIdentityConfig.identityProvider)'Dabei gilt:
CLUSTER_NAMEGOOGLE_CLOUD_LOCATION
Die Ausgabe enthält den Namen des Identitätsanbieters Ihres Clusters. Speichern Sie diesen Wert. Sie benötigen diese Informationen später.
Google Cloud Dienstkonto erstellen
Führen Sie die folgenden Schritte aus, um ein Google Cloud -Dienstkonto (GSA) zu erstellen, ihm Berechtigungen zu erteilen und dem GSA eine IAM-Richtlinienbindung hinzuzufügen:
Erstellen Sie das GSA mit dem Google Cloud CLI:
gcloud iam service-accounts create GSA_NAME --project=PROJECT_IDDabei gilt:
GSA_NAMEist der Name des GSA für Ihre Anwendung.PROJECT_IDist das Google Cloud Projekt des GSA.
Fügen Sie eine IAM-Bindung hinzu, damit das GSA auf Dienste zugreifen kann.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role IAM_ROLEDabei gilt:
GSA_NAMEist der Name des GSA für Ihre Anwendung.PROJECT_IDist die Projekt-ID für das GSA.IAM_ROLEist die IAM-Rolle, die dem GSA zugewiesen werden soll.
In diesem Beispiel verwenden wir die Rolle
roles/compute.viewer, die den Lesezugriff auf Compute-Dienste ermöglicht:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewerGewähren Sie dem Kubernetes-Dienstkonto (KSA) Berechtigungen, um die Identität des GSA zu übernehmen. Fügen Sie dazu eine IAM-Richtlinienbindung mit der Rolle
roles/iam.workloadIdentityUserhinzu:gcloud iam service-accounts add-iam-policy-binding GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE//KSA_NAME] \ --role roles/iam.workloadIdentityUserDabei gilt:
GSA_NAMEPROJECT_IDNAMESPACEdurch den Kubernetes-Namespace für die Anwendung ersetzen.KSA_NAMEdurch das für die Anwendung zu verwendende KSA ersetzen.
Beispielanwendung bereitstellen
In diesem Abschnitt stellen Sie eine Beispielanwendung bereit, die auf die Compute Engine API zugreift. Damit Sie dieses Beispiel verwenden können, muss Ihrem Dienstkonto die IAM-Rolle roles/compute.viewer zugewiesen sein. So stellen Sie die Beispielanwendung bereit:
Kopieren Sie das folgende Manifest in eine Datei mit dem Namen
workload-identity-sample.yaml:apiVersion: v1 kind: Namespace metadata: name: NAMESPACE --- apiVersion: v1 kind: ServiceAccount metadata: name: KSA_NAME namespace: NAMESPACE automountServiceAccountToken: false --- apiVersion: v1 kind: ConfigMap metadata: name: cloud-sdk-config namespace: NAMESPACE data: config: | { "type": "external_account", "audience": "identitynamespace:PROJECT_ID.svc.id.goog:IDENTITY_PROVIDER", "service_account_impersonation_url": "https://iamcredentials.googleapis.com/v1/projects/-/serviceAccounts/GSA_NAME@PROJECT_ID.iam.gserviceaccount.com:generateAccessToken", "subject_token_type": "urn:ietf:params:oauth:token-type:jwt", "token_url": "https://sts.googleapis.com/v1/token", "credential_source": { "file": "/var/run/secrets/tokens/gcp-ksa/token" } } --- apiVersion: v1 kind: Pod metadata: name: cloud-sdk-example namespace: NAMESPACE spec: serviceAccount: KSA_NAME containers: - name: cloud-sdk image: gcr.io/google.com/cloudsdktool/cloud-sdk:latest command: - /bin/bash - -c - 'set -eu -o pipefail; while true; do gcloud compute zones list --filter="name ~ us-central1-*"; sleep 5; done' env: - name: CLOUDSDK_AUTH_CREDENTIAL_FILE_OVERRIDE value: /var/run/secrets/tokens/gcp-ksa/google-application-credentials.json - name: CLOUDSDK_CORE_PROJECT value: PROJECT_ID volumeMounts: - name: gcp-ksa mountPath: /var/run/secrets/tokens/gcp-ksa readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 420 sources: - serviceAccountToken: audience: PROJECT_ID.svc.id.goog expirationSeconds: 86400 path: token - configMap: name: cloud-sdk-config optional: false items: - key: config path: google-application-credentials.jsonDabei gilt:
PROJECT_IDNAMESPACEKSA_NAMEGSA_NAMEIDENTITY_PROVIDERdurch den Namen des Identitätsanbieters für Ihren Cluster.
Wenden Sie das Manifest auf Ihren Cluster an:
kubectl apply -f workload-identity-sample.yamlPrüfen Sie, ob die Beispielanwendung funktioniert; prüfen Sie dazu die Logs des Pods:
kubectl logs -f cloud-sdk-example -n NAMESPACEDabei gilt:
NAMESPACE
Wenn der Pod erfolgreich auf die Google Cloud Compute API zugreift, sehen Sie eine Ausgabe, die in etwa so aussieht:
NAME REGION STATUS NEXT_MAINTENANCE TURNDOWN_DATE us-central1-c us-central1 UP us-central1-a us-central1 UP us-central1-f us-central1 UP us-central1-b us-central1 UP
Bereinigen
Beispielanwendung löschen
kubectl delete -f manifest.yamlIAM-Richtlinienbindung aus dem Google Cloud-Dienstkonto entfernen
gcloud iam service-accounts remove-iam-policy-binding \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --member serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE//KSA_NAME] \ roles/iam.workloadIdentityUserDabei gilt:
GSA_NAMEPROJECT_IDNAMESPACEKSA_NAME
IAM-Richtlinienbindung aus dem Projekt entfernen
gcloud projects remove-iam-policy-binding PROJECT_ID \ --member serviceAccount:GSA_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role roles/compute.viewerDabei gilt:
GSA_NAMEPROJECT_ID
Google Cloud-Dienstkonto löschen
gcloud iam service-accounts delete \ GSA_NAME@PROJECT_ID.iam.gserviceaccount.comDabei gilt:
GSA_NAMEPROJECT_ID