Nur GKE mit Workload Identity: Workload Identity konfigurieren
Führen Sie die folgenden Schritte aus, wenn Sie die Überschreibungsdatei für Workload Identity in GKE in Schritt 6: Cluster konfigurieren einrichten.
Wenn Sie Workload Identity nicht in GKE verwenden, fahren Sie mit Teil 3, Schritt 1: Apigee Ingress-Gateway freigeben fort.
Google Cloud-Dienstkonten und Kubernetes-Dienstkonten
Ein Google Cloud-Dienstkonto ist eine spezielle Art von Konto, mit dem autorisierte API-Aufrufe durch Authentifizierung als Dienstkonto selbst ausgeführt werden können. Google Cloud-Dienstkonten können Rollen und Berechtigungen erhalten, die einem einzelnen Nutzer ähneln. Wenn sich eine Anwendung als Dienstkonto authentifiziert, hat sie Zugriff auf alle Ressourcen, auf die das Dienstkonto Zugriff hat. Weitere Informationen zu Google Cloud-Dienstkonten finden Sie in der Übersicht zu Dienstkonten.
Sie haben Google Cloud-Dienstkonten für Ihre Apigee Hybrid-Installation in Schritt 4: Dienstkonten erstellen erstellt. Apigee verwendet diese Dienstkonten zur Authentifizierung der Hybridkomponenten.
Kubernetes-Dienstkonten sind Google Cloud-Dienstkonten ähnlich. Ein Kubernetes-Dienstkonto bietet eine Identität für Prozesse, die in einem Pod ausgeführt werden, und ermöglicht ihnen, sich ähnlich wie ein Nutzer beim API-Server zu authentifizieren. Weitere Informationen zu Kubernetes-Dienstkonten finden Sie unter Dienstkonten für Pods konfigurieren.
Das Tool apigeectl
hat die meisten der von Apigee Hybrid benötigten Kubernetes-Dienstkonten erstellt, als Sie apigeectl apply
im vorherigen Verfahren ausgeführt haben.
Wenn Sie Workload Identity in GKE konfigurieren, verknüpfen Sie die Google Cloud-Dienstkonten mit den Kubernetes-Dienstkonten im Kubernetes-Cluster. Auf diese Weise können die Kubernetes-Dienstkonten die Identität der Google Cloud-Dienstkonten übernehmen und die ihnen zugewiesenen Rollen und Berechtigungen für die Authentifizierung bei den Hybridkomponenten verwenden.
Folgen Sie dieser Anleitung, um Workload Identity für Ihr Projekt zu konfigurieren.
Konfiguration von Workload Identity vorbereiten
Bei diesen Verfahren werden die folgenden Umgebungsvariablen verwendet. Prüfen Sie, ob sie definiert sind und definieren Sie alle, die noch nicht definiert wurden:
echo $APIGEECTL_HOMEecho $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
Wobei:
APIGEECTL_HOME
ist das Verzeichnis, in dem Sieapigeectl
installiert haben.CLUSTER_LOCATION
ist die Region (oder Zone) Ihres Clusters, z. B.us-central1
.ENV_NAME
ist der Name Ihrer Umgebung.HYBRID_FILES
ist das Verzeichnis, in dem Sie die Verzeichnisseoverrides
undcerts
erstellt haben.NAMESPACE
ist Ihr Apigee-Namespace.PROJECT_ID
ist Ihr Google Cloud-Projekt.ORG_NAME
ist der Name Ihrer Apigee-Organisation.
- Prüfen Sie mit dem folgenden Befehl, ob die aktuelle
gcloud
-Konfiguration auf Ihre Google Cloud-Projekt-ID festgelegt ist:gcloud config get project
- Erstellen Sie das Kubernetes-Dienstkonto
apigee-cassandra-restore
.Wenn Sie Ihre Konfiguration mit
apigeectl apply
ausgeführt haben, wurden mithilfe des Befehls die meisten Kubernetes-Dienstkonten erstellt, die für Workload Identity erforderlich sind.Führen Sie zum Erstellen des Kubernetes-Dienstkontos
apigee-cassandra-restore
den Befehlapigeectl apply
mit dem Flag--restore
aus:$APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
- Prüfen Sie, ob Workload Identity für Ihren GKE-Cluster aktiviert ist. Wenn Sie den Cluster in Schritt 1: Cluster erstellen erstellt haben, wurde in Schritt 6 Workload Identity aktiviert. Mit folgendem Befehl können Sie prüfen, ob Workload Identity aktiviert ist:
Regionale Cluster
gcloud container clusters describe $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
Zonale Cluster
gcloud container clusters describe $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten 'workloadIdentityConfig'
Ihre Ausgabe sollte so aussehen:
--- workloadPool: PROJECT_ID.svc.id.goog
Wenn stattdessen in den Ergebnissen
null
angezeigt wird, führen Sie den folgenden Befehl aus, um Workload Identity für Ihren Cluster zu aktivieren:Regionale Cluster
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Zonale Cluster
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID
-
Aktivieren Sie Workload Identity für jeden Knotenpool mit den folgenden Befehlen. Dieser Vorgang kann für jeden Knoten bis zu 30 Minuten dauern:
Regionale Cluster
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Zonale Cluster
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Dabei ist NODE_POOL_NAME der Name jedes Knotenpools. In den meisten Apigee Hybrid-Installationen heißen die beiden Standardknotenpools
apigee-data
undapigee-runtime
. - Prüfen Sie mit den folgenden Befehlen, ob Workload Identity auf Ihren Knotenpools aktiviert ist:
Regionale Cluster
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
Zonale Cluster
gcloud container node-pools describe apigee-data \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
gcloud container node-pools describe apigee-runtime \ --cluster $CLUSTER_NAME \ --zone $CLUSTER_LOCATION \ --project $PROJECT_ID \ --flatten "config:"
Die Ausgabe sollte in etwa so aussehen:
--- diskSizeGb: 100 diskType: pd-standard ... workloadMetadataConfig: mode: GKE_METADATA
- Rufen Sie eine Liste der Namen der Google Cloud-Dienstkonten für Ihr Projekt ab. Sie benötigen diese Namen, um die Dienstkonten von Kubernetes für die Konfiguration von Workload Identity zu verknüpfen. Für Nicht-Produktionsinstallationen sollte es nur ein Google-Dienstkonto geben. In Produktionsinstallationen sollten acht vorhanden sein.
Verwenden Sie den folgenden Befehl, um die Liste der Namen abzurufen:
gcloud iam service-accounts list --project $PROJECT_ID
Die Ausgabe sollte in etwa so aussehen:
Non-prod
Für Nicht-Produktionsumgebungen:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
Produktion
Für Nicht-Produktionsumgebungen:
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@my_project_id.iam.gserviceaccount.com False apigee-logger apigee-logger@my_project_id.iam.gserviceaccount.com False apigee-mart apigee-mart@my_project_id.iam.gserviceaccount.com False apigee-metrics apigee-metrics@my_project_id.iam.gserviceaccount.com False apigee-runtime apigee-runtime@my_project_id.iam.gserviceaccount.com False apigee-synchronizer apigee-synchronizer@my_project_id.iam.gserviceaccount.com False apigee-udca apigee-udca@my_project_id.iam.gserviceaccount.com False apigee-watcher apigee-watcher@my_project_id.iam.gserviceaccount.com False
- Rufen Sie eine Liste der Namen der Kubernetes-Dienstkonten ab. Sie benötigen diese Liste der Namen, um sie später in diesem Verfahren mit Ihren Google Cloud-Dienstkonten zu verknüpfen. Verwenden Sie den folgenden Befehl:
kubectl get sa -n $NAMESPACE
Ihre Ausgabe sollte in etwa so aussehen: Die Kubernetes-Dienstkonten in Fettschrift sind die, die Sie mit Ihren Google-Dienstkonten verknüpfen müssen:
NAME SECRETS AGE apigee-cassandra-backup 1 11m apigee-cassandra-restore 1 11m apigee-cassandra-schema-setup-my-project-id-123abcd-sa 1 11m apigee-cassandra-schema-val-my-project-id-123abcd 1 11m apigee-cassandra-user-setup-my-project-id-123abcd-sa 1 11m apigee-connect-agent-my-project-id-123abcd-sa 1 11m apigee-datastore-default-sa 1 11m apigee-ingressgateway 1 11m apigee-ingressgateway-my-project-id-123abcd 1 11m apigee-ingressgateway-manager 1 11m apigee-init 1 11m apigee-mart-my-project-id-123abcd-sa 1 11m apigee-metrics-sa 1 11m apigee-mint-task-scheduler-my-project-id-123abcd-sa 1 11m apigee-redis-default-sa 1 11m apigee-redis-envoy-default-sa 1 11m apigee-runtime-my-project-id-env-name-234bcde-sa 1 11m apigee-synchronizer-my-project-id-env-name-234bcde-sa 1 11m apigee-udca-my-project-id-123abcd-sa 1 11m apigee-udca-my-project-id-env-name-234bcde-sa 1 11m apigee-watcher-my-project-id-123abcd-sa 1 11m default 1 11m
Legen Sie gegebenenfalls die aktuelle gcloud
-Konfiguration fest:
gcloud config set project $PROJECT_ID
Workload Identity konfigurieren
Gehen Sie folgendermaßen vor, um Workload Identity für Ihre Hybridinstallation zu aktivieren:
-
Annotieren Sie für jede Apigee-Komponente die entsprechenden Kubernetes-Dienstkonten mit dem Google-Dienstkonto für die Komponente.
In den folgenden Schritten werden zwei Umgebungsvariablen verwendet. Sie werden die Werte dieser Variablen vor jeder Gruppe von Befehlen zurücksetzen:
- GSA_NAME: Name eines Google-Dienstkontos. Dies sind die Dienstkonten, die Sie mit dem
create-service-account
-Tool in Schritt 4: Dienstkonten erstellen erstellt haben. - KSA_NAME: Der Name eines Kubernetes-Dienstkontos. Dies sind die oben mit dem Befehl
kubectl get sa -n $NAMESPACE
aufgeführten Konten, z. B.apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
.
- GSA_NAME: Name eines Google-Dienstkontos. Dies sind die Dienstkonten, die Sie mit dem
- Cassandra
Konfigurieren Sie Workload Identity für die Cassandra-Komponente.
Die Cassandra-Komponente umfasst sechs Kubernetes-Dienstkonten:
apigee-cassandra-backup
apigee-cassandra-restore
apigee-cassandra-schema-setup
apigee-cassandra-schema-val
(val
= Validierung)apigee-cassandra-user-setup
apigee-datastore-default
Non-prod
Kubernetes-Dienstkonto
apigee-cassandra-backup
konfigurieren- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-cassandra-backup"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Die Ausgabe sollte eine Zeile wie die folgende enthalten, die die Annotation beschreibt:
Annotations: iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com
Kubernetes-Dienstkonto
apigee-cassandra-restore
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-restore"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes-Dienstkonto
apigee-cassandra-schema-setup
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu: Beispiel:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes-Dienstkonto
apigee-cassandra-schema-val
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu: Beispiel:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes-Dienstkonto
apigee-cassandra-user-setup
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu: Beispiel:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes-Dienstkonto
apigee-datastore-default-sa
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-datastore-default-sa"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
Kubernetes-Dienstkonto
apigee-cassandra-backup
konfigurieren- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Die Ausgabe sollte eine Zeile wie die folgende enthalten, die die Annotation beschreibt:
Annotations: iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
Kubernetes-Dienstkonto
apigee-cassandra-restore
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-restore"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Kubernetes-Dienstkonto
apigee-cassandra-schema-setup
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu: Beispiel:KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
. - Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
Kubernetes-Dienstkonto
apigee-cassandra-schema-val
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu: Beispiel:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes-Dienstkonto
apigee-cassandra-user-setup
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu: Beispiel:KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Kubernetes-Dienstkonto
apigee-datastore-default-sa
konfigurieren- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-datastore-default-sa"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee Connect
Konfigurieren Sie Workload Identity für die Apigee Connect-Komponente.
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
: Beispiel:KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
: Beispiel:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Definieren Sie die Umgebungsvariable
- MART
Konfigurieren Sie Workload Identity für die MART-Komponente.
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
: Beispiel:KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
: Beispiel:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Definieren Sie die Umgebungsvariable
- Apigee-Messwerte
Konfigurieren Sie Workload Identity für die Apigee-Messwertkomponente.
Non-prod
- Definieren Sie die
KSA_NAME
-Umgebungsvariablen:KSA_NAME="apigee-metrics-sa"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Definieren Sie die
- UDCA (Organisationsebene)
Konfigurieren Sie Workload Identity für die UDCA-Komponente auf Organisationsebene.
UDCA ist sowohl auf Organisations- als auch auf Umgebungsebene implementiert. Daher gibt es zwei separate Kubernetes-Dienstkonten für UDCA, eines für jeden Bereich. Sie können sie anhand des Kontonamens unterscheiden. Das Konto enthält den Umgebungsnamen im Dienstkontonamen. Beispiel:
- Organisationsebene:
apigee-udca-my-project-id-123abcd-sa
, wobeimy-project-id
die Projekt-ID des Namens ist. - Umgebung:
apigee-udca-my-project-id-my-env-234bcde-sa
, wobeimy-env
der Name der Umgebung ist.
Non-prod
- Definieren Sie die
KSA_NAME
-Umgebungsvariablen: Beispiel:KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
: Beispiel:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Organisationsebene:
- Apigee Watcher
Konfigurieren Sie Workload Identity für die Apigee Watcher-Komponente.
Non-prod
- Definieren Sie die
KSA_NAME
-Umgebungsvariablen: Beispiel:KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
: Beispiel:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Definieren Sie die
- Laufzeit
Konfigurieren Sie Workload Identity für die Apigee-Laufzeitkomponente.
Non-prod
- Definieren Sie die
KSA_NAME
-Umgebungsvariablen: Beispiel:KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
: Beispiel:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Definieren Sie die
- Synchronizer
Konfigurieren Sie Workload Identity für die MART-Komponente.
Non-prod
- Definieren Sie die
KSA_NAME
-Umgebungsvariablen: Beispiel:KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
: Beispiel:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Definieren Sie die
- UDCA (Umgebungsebene)
Konfigurieren Sie Workload Identity für die UDCA-Komponente auf Umgebungsebene.
Non-prod
- Definieren Sie die
KSA_NAME
-Umgebungsvariablen: Beispiel:KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Produktion
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
: Beispiel:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
. - Binden Sie die IAM-Rolle:
gcloud iam service-accounts add-iam-policy-binding \ --role roles/iam.workloadIdentityUser \ --member "serviceAccount:$PROJECT_ID.svc.id.goog[$NAMESPACE/$KSA_NAME]" \ $GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com \ --project $PROJECT_ID
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
- Überprüfen Sie die Annotation:
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Definieren Sie die
- Optional: Löschen Sie alle heruntergeladenen Dienstkonto-Schlüsseldateien.
Wenn Sie die Google-Dienstkonten mit dem
create-service-account
-Tool erstellt haben, haben sie möglicherweise Dienstkontoschlüssel erstellt und die.json
-Schlüsseldateien heruntergeladen. Wenn Sie Workload Identity in GKE verwenden, benötigen Sie diese Schlüsseldateien nicht.Sie können die Schlüsseldateien mit dem folgenden Befehl löschen:
rm $HYBRID_FILES/service-accounts/*.json
Workload Identity prüfen
- (Optional) Sie können den Status Ihrer Kubernetes-Dienstkonten in der Google Cloud Console auf der Seite Kubernetes: Arbeitslasten – Übersicht sehen.
- So prüfen Sie den Status der Bereitstellung noch einmal mit
apigeectl check-ready
:${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml