Auf dieser Seite erfahren Sie, wie Sie Ihre Anwendungen so konfigurieren, dass sie sich bei Google Cloud APIs wie der Compute Engine API oder der AI Platform API von Flotten mit einem gemischten Vertrauensmodell authentifizieren. Wenn Ihre Flotte ein gemeinsames Vertrauensmodell verwendet, lesen Sie den Artikel Authentifizierung bei Google Cloud APIs von Arbeitslasten in Flotten mit gemeinsamem Vertrauensmodell.
Diese Seite richtet sich an Plattformadministratoren und ‑operatoren sowie an Sicherheitsingenieure, die sich programmatisch von Flottenarbeitslasten bei Google Cloud APIs authentifizieren möchten. Weitere Informationen zu den Nutzerrollen und Beispielaufgaben, auf die wir in Google Cloud der Dokumentation verweisen, finden Sie unter Häufig verwendete GKE-Nutzerrollen und -Aufgaben.
Machen Sie sich vor dem Lesen dieser Seite mit den folgenden Konzepten vertraut:
- Informationen zur Identitätsföderation von Arbeitslasten für Flotten
- Kubernetes-ConfigMaps
- IAM-Zulassungsrichtlinien (Identity and Access Management)
- Teambereiche und Flotten-Namespaces
Informationen zur Identitätsföderation von Arbeitslasten für Flotten für Umgebungen mit gemischtem Vertrauensmodell
Mit der Identitätsföderation von Arbeitslasten für Flotten können Sie IAM-Rollen für Google Cloud APIs und Ressourcen an Entitäten in Ihrer Flotte gewähren, z. B. an Arbeitslasten in einem bestimmten Namespace. Standardmäßig verwendet Ihr Flotten-Hostprojekt einen von Google verwalteten Workload Identity-Pool, um Identitäten für Entitäten in der gesamten Flotte bereitzustellen. In Umgebungen mit gemischtem Vertrauensmodell wie Flotten mit mehreren Mandanten oder in Flotten-Hostprojekten, in denen eigenständige Cluster ausgeführt werden, empfehlen wir jedoch, einen separaten selbstverwalteten Workload Identity-Pool für eine Teilmenge Ihrer Arbeitslasten und Cluster zu konfigurieren.
Entitäten, die einen selbstverwalteten Workload Identity-Pool verwenden, haben in IAM-Richtlinien andere IDs als Entitäten, die den von Google verwalteten Workload Identity-Pool des Flotten-Hostprojekts verwenden. So wird sichergestellt, dass durch das Gewähren des Zugriffs auf Prinzipale in einem bestimmten Flotten-Namespace nicht versehentlich Zugriff auf andere Prinzipale gewährt wird, die mit der ID übereinstimmen.
Für selbstverwaltete Workload Identity-Pools müssen Sie Teambereiche verwenden. Mit Teambereichen können Sie den Zugriff auf Teilmengen von Flottenressourcen für einzelne Teams steuern. Sie binden bestimmte Teambereiche an bestimmte Flottenmitgliedscluster, damit das Team Arbeitslasten in diesen Clustern bereitstellen kann. Innerhalb eines Teambereichs können Teammitglieder Arbeitslasten nur in Flotten-Namespaces bereitstellen.
Die Verwendung selbstverwalteter Workload Identity-Pools zur Bereitstellung von Identitäten für Arbeitslasten im Teambereich bietet folgende Vorteile:
- Zugriffsgewährungen für Entitäten in Flotten-Namespaces gelten nicht versehentlich für Entitäten in anderen Namespaces oder Clustern.
- Konfigurieren Sie eine Reihe von Flottenclustern, um Identitäten aus dem selbstverwalteten Pool abzurufen, indem Sie sie an einen Teambereich binden und den selbstverwalteten Pool als Identitätsanbieter in diesen Clustern einrichten.
- Konfigurieren Sie eine Teilmenge der gebundenen Cluster eines Teambereichs, um Identitäten aus dem selbstverwalteten Pool abzurufen, indem Sie den selbstverwalteten Pool nur in bestimmten Clustern als Identitätsanbieter einrichten.
Identitätsgleichheit in einer Umgebung mit gemischtem Vertrauensmodell
Stellen Sie sich folgendes Szenario vor:
- Sie haben zwei Flottenmitgliedscluster:
frontend-clusterundfinance-cluster. - Sie haben keinen selbstverwalteten Workload Identity-Pool konfiguriert.
- Sie erstellen einen Teambereich
finance-teamund einen Flotten-Namespacefinance-nsim Teambereich. - Sie binden den Cluster
finance-clusteran den Teambereichfinance-team. - Sie gewähren dem Kubernetes-Dienstkonto
finance-saim Flotten-Namespacefinance-nseine IAM-Rolle.
Alle Arbeitslasten, die die folgenden Kriterien erfüllen, haben dieselbe Identität:
- Sie werden im Flotten-Namespace
finance-nsausgeführt. - Sie verwenden das Dienstkonto
finance-sa.
Wenn jedoch jemand im Cluster frontend-cluster einen Kubernetes-Namespace finance-ns und ein Dienstkonto finance-sa erstellt, erhält er dieselbe Identität wie die Arbeitslasten im Cluster finance-cluster. Das liegt daran, dass die gesamte Flotte den von Google verwalteten Workload Identity-Pool des Flotten-Hostprojekts verwendet und die Hauptkonto-ID keinen Hostcluster angibt.
Nehmen Sie die folgenden Änderungen am vorherigen Szenario vor:
- Sie richten einen selbstverwalteten Workload Identity-Pool in Ihrer Flotte ein.
- Sie konfigurieren den Cluster
finance-clusterso, dass er Identitäten aus dem selbstverwalteten Pool anstelle des von Google verwalteten Pools abruft. - Sie erstellen eine IAM-Rollenzuweisung, in der der selbstverwaltete Pool in der Hauptkonto-ID anstelle des von Google verwalteten Pools angegeben wird.
Die Arbeitslasten, die im Flotten-Namespace finance-ns in finance-cluster ausgeführt werden, erhalten jetzt eine Identität aus dem selbstverwalteten Pool. Entitäten im Kubernetes-Namespace finance-ns im Cluster frontend-cluster erhalten jedoch weiterhin Identitäten aus dem von Google verwalteten Workload Identity-Pool des Flotten-Hostprojekts.
Diese Änderungen haben folgende Vorteile:
- Sie können Entitäten im Flotten-Namespace
finance-nsexplizit Rollen gewähren. - Entitäten im Cluster
frontend-clusterkönnen nicht denselben Zugriff erhalten, da die Identitäten im Clusterfrontend-clusteraus dem von Google verwalteten Workload Identity-Pool stammen.
Hinweis
Prüfen Sie, ob die folgenden Befehlszeilentools installiert sind:
- Die neueste Version der Google Cloud CLI, die
gcloud, das Befehlszeilentool für die Interaktion mit Google Cloud, enthält. kubectl
Wenn Sie Cloud Shell als Shell-Umgebung für die Interaktion mit Google Cloudverwenden, sind diese Tools für Sie installiert.
- Die neueste Version der Google Cloud CLI, die
Achten Sie darauf, dass die gcloud CLI für die Verwendung mit Ihrem Projekt initialisiert wurde.
Voraussetzungen
Sie müssen in Ihrer Flotte Funktionen zur Verwaltung von Flottenteams wie Teambereiche und Flotten-Namespaces verwenden. In der Anleitung auf dieser Seite wird gezeigt, wie Sie einen Beispielteambereich und einen Flotten-Namespace konfigurieren.
Cluster vorbereiten
Bevor Anwendungen in Ihrer Flotte eine föderierte Identität empfangen können, müssen die Cluster, in denen sie ausgeführt werden, in Ihrer Flotte registriert und ordnungsgemäß für die Verwendung von Workload Identity-Föderation der Flotte konfiguriert werden. In den folgenden Abschnitten wird beschrieben, wie Sie die Workload Identity-Föderation für Flotten für verschiedene Clustertypen einrichten.
GKE
Für GKE-Cluster müssen Sie den Cluster in der Flotte registrieren.
Cluster außerhalb von Google Cloud
Bei den folgenden Clustertypen wird Workload Identity Federation für die Flotte automatisch aktiviert und sie werden bei der Clustererstellung bei Ihrer Flotte registriert:
- Google Distributed Cloud (nur Software) auf VMware
- Google Distributed Cloud (nur Software) auf Bare Metal
- GKE on AWS
- GKE on Azure
Verbundene Cluster
Angehängte EKS- und AKS-Cluster, die mit der GKE Multi-Cloud API registriert wurden, werden standardmäßig mit aktivierter Identitätsförderung von Arbeitslasten für Flotten registriert. Andere angehängte Cluster können mit aktivierter Workload Identity-Föderation der Flotte aktiviert werden, wenn sie die erforderlichen Anforderungen erfüllen. Folgen Sie der Anleitung für Ihren Clustertyp unter Cluster registrieren.
IAM Workload Identity-Pool einrichten
In diesem Abschnitt erstellen Sie einen neuen IAM Workload Identity-Pool im Flotten-Hostprojekt und gewähren dem Flotten-Dienst-Agent Zugriff auf den neuen Pool. Dieser Workload Identity-Pool ist der selbstverwaltete Pool.
Erstellen Sie einen Workload Identity-Pool:
gcloud iam workload-identity-pools create POOL_NAME \ --location=global \ --project=POOL_HOST_PROJECT_ID \ --mode=TRUST_DOMAINErsetzen Sie Folgendes:
POOL_NAME: der Name des neuen Workload Identity-Pools.POOL_HOST_PROJECT_ID: die Projekt-ID des Projekts, in dem Sie den selbstverwalteten Workload Identity-Pool erstellen möchten. Sie können ein beliebiges Google Cloud Projekt verwenden, einschließlich Ihres Flotten-Host Projekts.
Gewähren Sie dem Flotten-Dienst-Agent die Rolle „IAM Workload Identity-Pooladministrator“ (
roles/iam.workloadIdentityPoolAdmin) für den neuen Workload Identity Pool:gcloud iam workload-identity-pools add-iam-policy-binding POOL_NAME \ --project=POOL_HOST_PROJECT_ID \ --location=global \ --member=serviceAccount:service-FLEET_HOST_PROJECT_NUMBER@gcp-sa-gkehub.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityPoolAdmin \ --condition=NoneErsetzen Sie
FLEET_HOST_PROJECT_NUMBERdurch die Projektnummer des Flotten-Hostprojekts.Um das Sicherheitsprinzip der geringsten Berechtigung, zu befolgen, gewährt dieser Befehl die Rolle „IAM Workload Identity-Pooladministrator“ für den spezifischen Workload Identity-Pool, den Sie für die Flotte verwenden, und nicht für alle Workload Identity Pools im Projekt.
Selbstverwalteten Pool zur Flottenkonfiguration hinzufügen
In diesem Abschnitt aktivieren Sie selbstverwaltete Pools mit der Identitätsföderation von Arbeitslasten für Flotten und fügen den erstellten Pool der Flottenkonfiguration hinzu. In diesem Abschnitt finden Sie auch eine Anleitung zum Erstellen eines neuen Teambereichs und eines Flotten-Namespace. Wenn in Ihrer Flotte bereits Teambereiche und Flotten-Namespaces konfiguriert sind, überspringen Sie diese Schritte.
Aktivieren Sie die Identitätsföderation von Arbeitslasten für Flotten auf Flottenebene:
gcloud container fleet workload-identity enable \ --project=FLEET_HOST_PROJECT_IDErsetzen Sie
FLEET_HOST_PROJECT_IDdurch die Projekt-ID Ihres Flotten-Hostprojekts.Fügen Sie der Flottenkonfiguration den selbstverwalteten Workload Identity-Pool hinzu:
gcloud container fleet workload-identity scope-tenancy-pool set POOL_NAMEErsetzen Sie POOL_NAME durch den Namen Ihres selbstverwalteten Workload Identity-Pools. Dieser Wert hat die folgende Syntax:
POOL_NAME.global.POOL_HOST_PROJECT_NUMBER.workload.id.googErstellen Sie einen neuen Teambereich. Wenn Sie bereits einen Teambereich und einen Flotten Namespace haben, fahren Sie mit dem Abschnitt Workload Identity-Poolkonfiguration prüfen fort.
gcloud container fleet scopes create SCOPE_NAMEErsetzen Sie
SCOPE_NAMEdurch den Namen Ihres neuen Teambereichs.Erstellen Sie einen neuen Flotten-Namespace im Teambereich:
gcloud container fleet scopes namespaces create NAMESPACE_NAME \ --scope=SCOPE_NAMEErsetzen Sie
NAMESPACE_NAMEdurch den Namen Ihres neuen Flotten-Namespace.Binden Sie einen Cluster in Ihrer Flotte an den Teambereich:
gcloud container fleet memberships bindings create BINDING_NAME \ --membership=FLEET_CLUSTER_NAME \ --location=global \ --scope=SCOPE_NAMEErsetzen Sie Folgendes:
BINDING_NAME: der Name für Ihre neue Mitgliedschaftsbindung.FLEET_CLUSTER_NAME: der Name des vorhandenen Flottenclusters, der an den Teambereich gebunden werden soll.
Workload Identity-Poolkonfiguration prüfen
In diesem Abschnitt prüfen Sie, ob die Konfiguration Ihres selbstverwalteten Workload Identity-Pools erfolgreich war.
Beschreiben Sie die Konfiguration der Flottenmitgliedschaft:
gcloud container fleet memberships describe FLEET_CLUSTER_NAME \ --location=globalErsetzen Sie
FLEET_CLUSTER_NAMEdurch den Namen eines vorhandenen Flottenclusters, der an einen beliebigen Teambereich in Ihrer Flotte gebunden ist.Die Ausgabe sieht etwa so aus:
authority: ... scopeTenancyIdentityProvider: https://gkehub.googleapis.com/projects/FLEET_HOST_PROJECT_ID/locations/global/memberships/FLEET_CLUSTER_NAME scopeTenancyWorkloadIdentityPool: POOL_NAME.global.FLEET_HOST_PROJECT_NUMBER.workload.id.goog workloadIdentityPool: FLEET_HOST_PROJECT_ID.svc.id.goog ...Diese Ausgabe sollte die folgenden Felder enthalten:
scopeTenancyIdentityProvider: der Identitätsanbieter für Arbeitslasten, die in Flotten-Namespaces innerhalb von Teambereichen ausgeführt werden. Der Wert ist eine Ressourcen-ID für Ihren Cluster.scopeTenancyWorkloadIdentityPool: der Workload Identity-Pool, aus dem Arbeitslasten in Flotten-Namespaces innerhalb von Teambereichen IDs abrufen. Der Wert ist Ihr selbstverwalteter Workload Identity-Pool im FormatPOOL_NAME.global.FLEET_HOST_PROJECT_NUMBER.workload.id.goog.workloadIdentityPool: der Name des von Google verwalteten Workload Identity-Pools des Flotten-Hostprojekts, aus dem standardmäßig alle anderen Arbeitslasten in der Flotte Identitäten abrufen.
Optional: Prüfen Sie, ob Ihr Workload Identity-Pool einen Namespace mit demselben Namen wie Ihr Flotten-Namespace hat:
gcloud iam workload-identity-pools namespaces list \ --workload-identity-pool=POOL_NAME \ --location=globalDie Ausgabe sieht etwa so aus:
--- description: Fleet namespace NAMESPACE_NAME name: projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_NAME/namespaces/NAMESPACE_NAME state: ACTIVE
Ihre Flotte kann jetzt den selbstverwalteten Workload Identity-Pool verwenden, um Identitäten für Arbeitslasten abzurufen, die in Flotten-Namespaces ausgeführt werden. Wenn Sie den selbstverwalteten Pool verwenden möchten, konfigurieren Sie, wie bestimmte Cluster Identitäten abrufen, wie im nächsten Abschnitt beschrieben.
Arbeitslasten für Identitäten selbstverwaltete Pools verwenden lassen
Damit Arbeitslasten den selbstverwalteten Pool verwenden, konfigurieren Sie bestimmte Flotten-Namespaces in Flottenmitgliedsclustern mit einer Kubernetes-ConfigMap. Mit dieser Konfiguration pro Cluster und pro Namespace können Sie den Umfang der Zugriffsgewährungen von gesamten Flotten-Namespaces auf Arbeitslasten weiter reduzieren, die in bestimmten Flotten-Namespaces in bestimmten Clustern ausgeführt werden.
Verbinden Sie sich mit Ihrem Flottenmitgliedscluster:
gcloud container clusters get-credentials FLEET_CLUSTER_NAME \ --project=CLUSTER_PROJECT_ID \ --location=CLUSTER_LOCATIONErsetzen Sie Folgendes:
FLEET_CLUSTER_NAME: der Name eines Flottenmitgliedsclusters, der bereits an einen Teambereich gebunden ist.CLUSTER_PROJECT_ID: die Projekt-ID des Clusterprojekts.CLUSTER_LOCATION: der Standort des Clusters.
Rufen Sie den vollständigen Namen des selbstverwalteten Workload Identity-Pools ab. Sie benötigen ihn später.
gcloud iam workload-identity-pools describe POOL_NAME --location=globalDie Ausgabe sieht etwa so aus:
POOL_NAME.global.FLEET_HOST_PROJECT_NUMBER.workload.id.googRufen Sie den Namen des Identitätsanbieters für Teambereiche ab. Sie benötigen ihn später.
kubectl get membership membership -o json | jq -r ".spec.scope_tenancy_identity_provider"Die Ausgabe sieht etwa so aus:
https://gkehub.googleapis.com/projects/FLEET_HOST_PROJECT_ID/locations/global/memberships/FLEET_CLUSTER_NAMESpeichern Sie das folgende YAML-Manifest für eine ConfigMap in einem Texteditor als
self-managed-pool.yaml:kind: ConfigMap apiVersion: v1 metadata: namespace: NAMESPACE_NAME name: google-application-credentials data: config: | { "type": "external_account", "audience": "identitynamespace:POOL_NAME:IDENTITY_PROVIDER", "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" } }Ersetzen Sie Folgendes:
NAMESPACE_NAME: der Name des Flotten-Namespace.POOL_NAME: der vollständige Name des selbstverwalteten Workload Identity-Pools aus der Ausgabe der vorherigen Schritte in diesem Abschnitt. Beispiel:projects/1234567890/locations/global/workloadIdentityPools/example-pool.IDENTITY_PROVIDER: der Name des Identitätsanbieters aus der Ausgabe der vorherigen Schritte in diesem Abschnitt. Beispiel:https://gkehub.googleapis.com/projects/1234567890/locations/global/memberships/example-cluster.
Stellen Sie die ConfigMap in Ihrem Cluster bereit:
kubectl create -f self-managed-pool.yaml
Durch die Bereitstellung der ConfigMap wird GKE mitgeteilt, dass Arbeitslasten in diesem Namespace den selbstverwalteten Workload Identity-Pool verwenden sollen, um Identitäten abzurufen.
Hauptkonten IAM-Rollen gewähren
In diesem Abschnitt erstellen Sie ein Kubernetes-Dienstkonto in einem Flotten-Namespace und gewähren dem Dienstkonto eine IAM-Rolle. Pods, die dieses Dienstkonto verwenden, können dann auf die Google Cloud Ressourcen zugreifen, für die Sie die Rolle gewähren.
Erstellen Sie ein Kubernetes-Dienstkonto in Ihrem Flotten-Namespace:
kubectl create serviceaccount SERVICEACCOUNT_NAME \ --namespace=NAMESPACE_NAMEErsetzen Sie Folgendes:
SERVICEACCOUNT_NAME: der Name Ihres neuen Dienstkontos.NAMESPACE_NAME: der Name des Flotten-Namespace.
Gewähren Sie dem Dienstkonto eine IAM-Rolle. Der folgende Beispielbefehl gewährt dem Dienstkonto die Rolle „Storage Object Viewer“ (
roles/storage.objectViewer) für einen Bucket:gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \ --member=principal://iam.googleapis.com/projects/FLEET_HOST_PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_NAME.global.FLEET_HOST_PROJECT_NUMBER.workload.id.goog/subject/ns/NAMESPACE_NAME/sa/SERVICEACCOUNT_NAME \ --role=roles/storage.objectViewer \ --condition=None
Das Flag member enthält die Hauptkonto-ID für das neue Dienstkonto, das Sie erstellt haben. Die Anfragen, die Ihre Arbeitslasten an Google Cloud
APIs senden, verwenden ein
föderiertes Zugriffstoken.
Dieses föderierte Zugriffstoken enthält die Hauptkonto-ID der Entität, die die Anfrage sendet. Wenn das Hauptkonto in einer Zulassungsrichtlinie, die eine Rolle für die Zielressource gewährt, mit dem Hauptkonto im föderierten Zugriffstoken übereinstimmt, können Authentifizierung und Autorisierung fortgesetzt werden.
Arbeitslasten bereitstellen, die den selbstverwalteten Pool verwenden
Kubernetes-Manifeste, die Sie in Ihrem Flotten-Namespace anwenden, müssen so konfiguriert sein, dass sie Identitäten aus dem selbstverwalteten Pool abrufen. Die Arbeitslasten, die Sie bereitstellen und die APIs aufrufen Google Cloud müssen, sollten die folgenden Felder enthalten:
metadata.namespace: der Name des Flotten-Namespace.spec.serviceAccountName: der Name des Kubernetes-Dienstkontos im Flotten-Namespace.spec.containers.env: eine Umgebungsvariable mit dem NamenGOOGLE_APPLICATION_CREDENTIALS, die den Pfad zur Datei mit den Standardanmeldedaten für Anwendungen (Application Default Credentials, ADC) angibt.spec.containers.volumeMounts: ein schreibgeschütztes Volume, mit dem der Container das Bearertoken für das Dienstkonto verwenden kann.spec.volumes: ein projiziertes Volume, das ein Dienstkontotoken in den Pod einbindet. Die Zielgruppe des Tokens ist der selbstverwaltete Workload Identity-Pool. Die ConfigMap, die die Konfiguration der Identitätsföderation von Arbeitslasten für Flotten enthält, ist eine Quelle für das Volume.
Ein Beispiel für eine korrekt konfigurierte Manifestdatei finden Sie im Abschnitt Authentifizierung von einer Arbeitslast prüfen.
Authentifizierung von einer Arbeitslast prüfen
In diesem Abschnitt finden Sie eine optionale Anleitung, mit der Sie prüfen können, ob Sie den selbstverwalteten Workload Identity-Pool korrekt konfiguriert haben. Dazu listen Sie den Inhalt eines Beispiel-Cloud Storage-Bucket auf. Sie erstellen einen Bucket, gewähren einem Dienstkonto in einem Flotten-Namespace eine Rolle für den Bucket und stellen einen Pod bereit, um auf den Bucket zuzugreifen.
Erstellen Sie einen Cloud Storage-Bucket:
gcloud storage buckets create gs://FLEET_HOST_PROJECT_ID-workload-id-bucket \ --location=LOCATION \ --project=FLEET_HOST_PROJECT_IDGewähren Sie dem Dienstkonto im Flotten-Namespace die Rolle
roles/storage.objectViewerfür den Bucket:gcloud storage buckets add-iam-policy-binding gs://FLEET_HOST_PROJECT_ID-workload-id-bucket \ --condition=None \ --role=roles/storage.objectViewer \ --member=principal://iam.googleapis.com/projects/FLEET_PROJECT_NUMBER/locations/global/workloadIdentityPools/POOL_NAME.global.FLEET_HOST_PROJECT_NUMBER.workload.id.goog/subject/ns/NAMESPACE_NAME/sa/SERVICEACCOUNT_NAMEErsetzen Sie Folgendes:
FLEET_HOST_PROJECT_NUMBER: die Projektnummer Ihres Flotten-Hostprojekts.POOL_NAME: der Name Ihres selbstverwalteten Workload Identity-Pools.NAMESPACE_NAME: der Name des Flotten-Namespace, in dem Sie den Pod ausführen möchten.SERVICEACCOUNT_NAME: der Name des Kubernetes-Dienstkontos, das der Pod verwenden soll.
Speichern Sie das folgende Manifest als
pod-bucket-access.yaml:apiVersion: v1 kind: Pod metadata: name: bucket-access-pod namespace: NAMESPACE_NAME spec: serviceAccountName: SERVICEACCOUNT_NAME containers: - name: sample-container image: google/cloud-sdk:slim command: ["sleep","infinity"] env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/run/secrets/tokens/gcp-ksa/google-application-credentials.json volumeMounts: - name: gcp-ksa mountPath: /var/run/secrets/tokens/gcp-ksa readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 420 sources: - serviceAccountToken: path: token audience: POOL_NAME expirationSeconds: 172800 - configMap: name: google-application-credentials optional: false items: - key: "config" path: "google-application-credentials.json"Ersetzen Sie Folgendes:
NAMESPACE_NAME: der Name des Flotten-Namespace, in dem Sie den Pod ausführen möchten.SERVICEACCOUNT_NAME: der Name des Kubernetes-Dienstkontos, das der Pod verwenden soll.POOL_NAME: der Name Ihres selbstverwalteten Workload Identity-Pools.
Stellen Sie den Pod in Ihrem Cluster bereit:
kubectl apply -f pod-bucket-access.yamlÖffnen Sie eine Shell-Sitzung im Pod:
kubectl exec -it bucket-access-pod -n NAMESPACE_NAME -- /bin/bashVersuchen Sie, Objekte im Bucket aufzulisten:
curl -X GET -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ "https://storage.googleapis.com/storage/v1/b/FLEET_HOST_PROJECT_ID-workload-id-bucket/o"Die Ausgabe sieht so aus:
{ "kind": "storage#objects" }
Optional können Sie prüfen, ob ein ähnlicher Namespace und ein ähnliches Dienstkonto in einem anderen Flottenmitgliedscluster nicht dieselbe Identität annehmen können. Führen Sie in einem Cluster, der die Identitätsföderation von Arbeitslasten für Flotten verwendet, aber keine Flotten-Namespace- oder selbstverwaltete Poolkonfiguration hat, die folgenden Schritte aus:
- Erstellen Sie einen neuen Kubernetes-Namespace mit demselben Namen wie der Flotten-Namespace, in dem Sie den selbstverwalteten Workload Identity-Pool eingerichtet haben.
- Erstellen Sie ein neues Kubernetes-Dienstkonto mit demselben Namen wie das Dienstkonto, dem Sie in den vorherigen Abschnitten eine IAM-Rolle gewährt haben.
Stellen Sie einen Pod bereit, der dasselbe Dienstkonto und denselben Namespace verwendet, für den aber im Feld
spec.volumes.projected.sources.serviceAccountTokender von Google verwaltete Workload Identity-Pool angegeben ist. Dieser Pool hat die folgende Syntax:FLEET_HOST_PROJECT_ID.svc.id.googVersuchen Sie, über eine Shell-Sitzung im Pod auf den Cloud Storage-Bucket zuzugreifen.
Die Ausgabe sollte den Fehler 401: Unauthorized enthalten, da sich die Hauptkonto-ID für den Pod, der den von Google verwalteten Workload Identity-Pool verwendet, von der Hauptkonto-ID für den Pod unterscheidet, der den selbstverwalteten Pool verwendet.