In diesem Thema wird das Aktivieren von Workload Identity für Apigee Hybrid erläutert.
Übersicht
Workload Identity ermöglicht Anwendungen, die in GKE ausgeführt werden (Google Kubernetes Engine), auf Google Cloud-Dienste zuzugreifen. Eine Übersicht über Workload Identity finden Sie unter:
- Einführung in Workload Identity: Bessere Authentifizierung für Ihre GKE-Anwendungen
- Workload Identity verwenden
Ein Google Cloud IAM-Dienstkonto ist eine Identität, die eine Anwendung zum Senden von Anfragen an Google APIs verwenden kann. Diese Dienstkonten werden im Dokument als GSA (Google Service Accounts, Google-Dienstkonten) bezeichnet. Weitere Informationen zu GSAs finden Sie unter Dienstkonten.
Unabhängig davon verfügt Kubernetes auch über das Konzept von Dienstkonten. Ein Dienstkonto bietet eine Identität für Prozesse, die in einem Pod ausgeführt werden. Kubernetes-Dienstkonten sind Kubernetes-Ressourcen, während Google-Dienstkonten für Google Cloud spezifisch sind. Informationen zu Kubernetes-Dienstkonten finden Sie in der Kubernetes-Dokumentation unter Dienstkonten für Pods konfigurieren.
Mit Apigee Hybrid 1.4 und höher erstellt und verwendet Apigee ein Kubernetes-Dienstkonto für jeden Komponententyp. Wenn Sie Workload Identity aktivieren, können die Hybrid-Komponenten mit den Kubernetes-Dienstkonten interagieren.
Google-Dienstkonten in Apigee Hybrid ohne Workload Identity
Ohne Verwendung von Workload Identity müssen Sie die Google-Dienstkonten mit jeder Komponente in Ihrer overrides.yaml-Datei entweder mit einem Verweis auf eine Zertifikatsdatei oder mit einem Kubernetes-Secret verknüpfen. Beispiel:
- Zertifikatsdateien:
watcher: serviceAccountPath: ./apigee-org/my-hybrid-project-apigee-watcher.json
Weitere Informationen:
- Kubernetes-Secret:
watcher: serviceAccountRef: my-watcher-k8s-secret
Weitere Informationen:
Bei diesen Verfahren verwendete Umgebungsvariablen
Bei diesen Verfahren werden die folgenden Umgebungsvariablen verwendet. Legen Sie diese entweder in der Befehls-Shell fest oder ersetzen Sie sie in den Codebeispielen durch die tatsächlichen Werte:
APIGEECTL_HOME
: Das Verzeichnis, in dem Sieapigeectl
installiert haben.CLUSTER_LOCATION
: Die Region oder Zone des Clusters, z. B.:us-west1
.ENV_NAME
: Der Name der Apigee-Umgebung.NAMESPACE
: Der Kubernetes-Namespace, den Sie für Apigee Hybrid verwenden. Normalerweiseapigee
.HYBRID_FILES
: Ihr Hybriddateiverzeichnis, z. B.hybrid-base-directory/hybrid-files
.ORG_NAME
: Der Name Ihrer Apigee-Organisation.PROJECT_ID
: Die ID Ihres Google Cloud-Projekts.
Überprüfen Sie die Umgebungsvariablen:
echo $PROJECT_IDecho $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_LOCATION
echo $APIGEECTL_HOME
echo $HYBRID_FILES
Initialisieren Sie alle erforderlichen Variablen:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_LOCATION=my-cluster-location
export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export HYBRID_FILES=hybrid-base-directory/hybrid-files
Workload Identity und Dienstkontoschlüsseldateien
Wenn Sie Apigee Hybrid in GKE ausführen, werden standardmäßig private Schlüssel (.json
-Dateien) für jedes Dienstkonto erstellt und heruntergeladen. Wenn Sie Workload Identity verwenden, müssen Sie keine privaten Schlüssel für Dienstkonten herunterladen und zu den GKE-Clustern hinzufügen.
Wenn Sie Dienstkontoschlüsseldateien im Rahmen Ihrer Apigee Hybrid-Installation heruntergeladen haben, können Sie sie nach dem Aktivieren von Workload Identity löschen. In den meisten Installationen befinden sie sich im Verzeichnis hybrid-base-directory/hybrid-files/service-accounts/
.
Workload Identity für Apigee Hybrid aktivieren
Folgen Sie der Anleitung unter Aktivieren von Workload Identity vorbereiten, um Knotenpools zu aktualisieren und Variablen zu initialisieren, bevor Sie Workload Identity aktivieren.
Folgen Sie dann je nach ausgeführten Schritten einem dieser Abschnitte:- Workload Identity für eine Neuinstallation aktivieren. Folgen Sie dieser Anleitung, um Apigee Hybrid neu zu installieren, oder wenn Sie ASM noch nicht in Ihre Hybrid-Installation eingebunden haben.
- Upgrade einer Installation, sodass Workload Identity verwendet werden kann. Folgen Sie dieser Anleitung, um Workload Identity in Ihrer vorhandenen Apigee Hybrid-Installation zu aktivieren.
Aktivieren von Workload Identity vorbereiten
Führen Sie die Schritte in diesem Abschnitt aus, bevor Sie den Installationsvorgang starten.
- Legen Sie das Projekt auf das Projekt fest, das Sie ändern möchten:
gcloud config set project $PROJECT_ID
-
Rufen Sie mit dem folgenden Befehl die
gcloud
-Anmeldedaten des Clusters ab, auf dem Sie Workload Identity aktivieren:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --region ${CLUSTER_LOCATION} \ --project ${PROJECT_ID}
- Prüfen Sie mit dem folgenden Befehl, ob Workload Identity für den GKE-Cluster aktiviert ist, auf dem Apigee ausgeführt wird:
gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID
Die Ausgabe sollte in etwa so aussehen:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
Aktivieren Sie bei Bedarf Workload Identity im Cluster. Dieser Vorgang kann bis zu 30 Minuten dauern:
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Weitere Informationen finden Sie unter Workload Identity aktivieren.
- Workload Identity muss in jedem Knotenpool aktiviert sein.
- Listen Sie die Knotenpools mit dem folgenden Befehl auf:
gcloud container node-pools list \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
Die Ausgabe sollte in etwa so aussehen:
NAME MACHINE_TYPE DISK_SIZE_GB NODE_VERSION apigee-runtime e2-standard-4 100 1.23.12-gke.100 apigee-data e2-standard-4 100 1.23.12-gke.100
- Prüfen Sie mit dem folgenden Befehl, ob Workload Identity pro Knotenpool aktiviert ist:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
Dabei ist NODE_POOL_NAME der Name jedes Knotenpools.
- Listen Sie die Knotenpools mit dem folgenden Befehl auf:
Google-Dienstkonten bestätigen oder erstellen
Google-Dienstkonten werden für viele Apigee Hybrid-Komponenten während der Installation erstellt. Mit diesem Verfahren können Sie die Google-Dienstkonten prüfen und gegebenenfalls erstellen.
- Prüfen Sie die Namen der Google-Dienstkonten für Ihr Projekt mit dem folgenden Befehl:
gcloud iam service-accounts list --project $PROJECT_ID
Die Ausgabe sollte in etwa so aussehen:
Prod
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
Non-prod
Für Nicht-Produktionsumgebungen:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
Wenn Sie die Google-Dienstkonten für Ihr Projekt erstellen müssen, können Sie eine der folgenden Methoden verwenden:
- Verwenden Sie das mit Apigee verfügbare
create-service-account
-Tool im Verzeichnisapigeectl/tools/
. Mit diesem Tool können Sie alle Dienstkonten mit einem einzigen Befehl oder einzeln erstellen. - Verwenden Sie den Befehl
gcloud iam service-accounts create
, um die Dienstkonten einzeln zu erstellen und den Befehlgcloud projects add-iam-policy-binding
, um jedem Dienstkonto die entsprechenden Rollen zuzuweisen. Bei dieser Methode müssen Sie zwar jedes Dienstkonto einzeln erstellen, Sie vermeiden aber das Herunterladen von Schlüsseldateien.
Verwenden Sie den folgenden Befehl, um ein Google-Dienstkonto pro Komponente zu erstellen:create-service-account
Prod
Für Nicht-Produktionsumgebungen:
$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Mit diesem Befehl werden die folgenden Dienstkonten erstellt:
apigee-cassandra
apigee-logger
apigee-mart
apigee-metrics
apigee-runtime
apigee-synchronizer
apigee-udca
apigee-watcher
Non-prod
Für Nicht-Produktionsumgebungen:
$APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts
Dieser Befehl erstellt das einzelne Dienstkonto
apigee-non-prod
mit allen zugewiesenen Rollen, die zum Verwalten aller Apigee-Komponenten erforderlich sind.gcloud
Erstellen Sie die folgenden Dienstkonten und weisen Sie ihnen Rollen zu.
- Dienstkonto:
apigee-cassandra
, Rolle:roles/storage.objectAdmin
Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-cassandra \ --display-name="apigee-cassandra" \ --project $PROJECT_ID
Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin"
- Dienstkonto:
apigee-logger
, Rolle:roles/logging.logWriter
Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-logger \ --display-name="apigee-logger" \ --project $PROJECT_ID
Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter"
- Dienstkonto:
apigee-mart
, Rolle:roles/apigeeconnect.Agent
Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-mart \ --display-name="apigee-mart" \ --project $PROJECT_ID
Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigeeconnect.Agent"
- Dienstkonto:
apigee-metrics
, Rolle:roles/monitoring.metricWriter
Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-metrics \ --display-name="apigee-metrics" \ --project $PROJECT_ID
Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter"
- Dienstkonto:
apigee-runtime
, Rolle: Keine Rolle zugewiesen.Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-runtime \ --display-name="apigee-runtime" \ --project $PROJECT_ID
- Dienstkonto:
apigee-synchronizer
, Rolle:roles/apigee.synchronizerManager
Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-synchronizer \ --display-name="apigee-synchronizer" \ --project $PROJECT_ID
Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.synchronizerManager"
- Dienstkonto:
apigee-udca
, Rolle:roles/apigee.analyticsAgent
Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-udca \ --display-name="apigee-udca" \ --project $PROJECT_ID
Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.analyticsAgent"
- Dienstkonto:
apigee-watcher
, Rolle:roles/apigee.runtimeAgent
Erstellen Sie das Konto:
gcloud iam service-accounts create apigee-watcher \ --display-name="apigee-watcher" \ --project $PROJECT_ID
Weisen Sie die Rolle zu:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.runtimeAgent"
- Verwenden Sie das mit Apigee verfügbare
FestlegenworkloadIdentityEnabled: true
und Dienstkonten erstellen
apigeectl
erstellt Kubernetes-Dienstkonten für jede Apigee Hybrid-Komponente, wenn Sie workloadIdentityEnabled: true
in Ihrer Überschreibungsdatei festlegen und die Änderungen übernehmen.
- Fügen Sie der Datei
overrides.yaml
unter der Stanzagcp
die unten angezeigte fett formatierte Zeile hinzu. Dadurch wird Workload Identity für Ihre Installation aktiviert undapigeectl
ausgelöst, um die Kubernetes-Dienstkonten zu erstellen, wenn Sie die Konfiguration anwenden:gcp: projectID: "my-project-id" name: "my-project-id" region: "analytics-region" workloadIdentityEnabled: true
- Fügen Sie der Datei
overrides.yaml
unter der Stanzacassandra
die unten angezeigten fett formatierten Zeilen hinzu: Dadurch wird das Erstellen des Kubernetes-Dienstkontosapigee-cassandra-backup
ausgelöst:cassandra: ... backup: enabled: true
- Übernehmen Sie die Änderungen mit
apigeectl
mit dem Flag--restore
:$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
- Prüfen Sie die Dienstkonten mit folgendem 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 annotieren 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
Kubernetes-Dienstkonten mit den Google-Dienstkonten annotieren
Annotieren Sie für jede Apigee-Komponente die entsprechenden Kubernetes-Dienstkonten mit dem Google-Dienstkonto für die Komponente.
Komponenten auf Organisationsebene
Sie haben jeweils nur eine Instanz jedes Kubernetes-Dienstkontos für Ihre Apigee-Organisation.
Komponente | Kubernetes-Dienstkonto | Google-Dienstkonto |
---|---|---|
Cassandra | apigee-cassandra-backup |
apigee-cassandra |
apigee-cassandra-restore |
apigee-cassandra |
|
apigee-cassandra-schema-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-cassandra-schema-val-my-project-id-num-id1 |
apigee-cassandra |
|
apigee-cassandra-user-setup-my-project-id-num-id1-sa |
apigee-cassandra |
|
apigee-datastore-default-sa |
apigee-cassandra |
|
Apigee Connect | apigee-connect-agent-my-project-id-num-id1-sa |
apigee-mart |
MART | apigee-mart-my-project-id-num-id1-sa |
apigee-mart |
Messwerte | apigee-metrics-sa |
apigee-metrics |
UDCA (Organisationsebene) | apigee-udca-my-project-id-num-id1-sa |
apigee-udca |
Watcher | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
Komponenten auf Umgebungsebene
Sie haben jeweils eine Instanz jedes Kubernetes-Dienstkontos für jede Apigee-Umgebung.
Komponente | Kubernetes-Dienstkonto | Google-Dienstkonto |
---|---|---|
Apigee-Laufzeit | apigee-runtime-my-project-id-env-name-num-id2-sa |
apigee-runtime |
Synchronizer | apigee-synchronizer-my-project-id-env-name-num-id2-sa |
apigee-synchronizer |
UDCA (Umgebungsebene) | apigee-udca-my-project-id-env-name-num-id2-sa |
apigee-udca |
In den folgenden Befehlen werden die vom Befehl kubectl get sa -n $NAMESPACE
zurückgegebenen Kubernetes-Dienstkontonamen verwendet. Beispiel: apigee-cassandra-schema-val-hybrid-example-project-123abcd
.
Bei diesem Verfahren führen Sie für jedes Kubernetes-Dienstkonto die folgenden Schritte aus:
-
Binden Sie das Kubernetes-Dienstkonto und das primäre Google-Dienstkonto an die IAM-Rolle
roles/iam.workloadIdentityUser
. - Annotieren Sie das Kubernetes-Dienstkonto mit dem Google-Dienstkonto.
- Binden Sie die Rollen und annotieren Sie die Dienstkonten.
Komponenten auf Organisationsebene
Annotieren Sie Kubernetes-Dienstkonten für die Komponenten auf Organisationsebene. Sie müssen dies für jede Komponente in Ihrer Apigee-Organisation einmal tun.
- Cassandra
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
Prod
apigee-cassandra-backup
- 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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- 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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-schema-setup-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-schema-val-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-user-setup-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- 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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
apigee-cassandra-backup
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-connect-agent-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore
- 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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-setup-service-account-name
- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-schema-setup-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-schema-val-service-account-name
- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-schema-val-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-user-setup-service-account-name
- Definieren Sie die Umgebungsvariable
KSA_NAME
neu:KSA_NAME="apigee-cassandra-user-setup-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa
- 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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
Prod
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
:KSA_NAME="apigee-connect-agent-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
- MART
Prod
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
:KSA_NAME="apigee-mart-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
- Apigee-Messwerte
Prod
- 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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
: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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
- UDCA (Organisationsebene)
Prod
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-org-level-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die
KSA_NAME
-Umgebungsvariablen:KSA_NAME="apigee-udca-org-level-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
- Apigee Watcher
Prod
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
:KSA_NAME="apigee-watcher-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
Pro Umgebung:
- Laufzeit
Prod
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
:KSA_NAME="apigee-runtime-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
- Synchronizer
Prod
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
:KSA_NAME="apigee-synchronizer-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
- UDCA (Umgebungsebene)
Prod
- Definieren Sie die Umgebungsvariablen
KSA_NAME
undGSA_NAME
:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non-prod
- Definieren Sie die Umgebungsvariable
KSA_NAME
:KSA_NAME="apigee-udca-env-level-service-account-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
- Annotieren Sie das Dienstkonto:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definieren Sie die Umgebungsvariablen
- Cassandra
- Prüfen Sie, ob die Schritte funktioniert haben:
gcloud config set project $PROJECT_ID
Wählen Sie ein Kubernetes-Dienstkonto zum Testen aus, z. B.
apigee-cassandra-backup
.KSA_NAME="kubernetes-service-account-name"
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Wenn Sie keine Eingabeaufforderung sehen, drücken Sie die Eingabetaste.
Wenn die Schritte korrekt ausgeführt wurden, wird eine Antwort wie diese angezeigt:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Wenn Sie ein Upgrade von einer früheren Installation durchführen, bereinigen Sie die Secrets, die die privaten Schlüssel des Dienstkontos enthielten:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Prüfen Sie die Logs:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
Upgrade einer Installation zur Verwendung von Workload Identity
Folgen Sie dieser Anleitung, um Workload Identity zu einer vorhandenen Hybrid-Installation hinzuzufügen.
Hier sehen Sie ein Beispiel für Google-Dienstkonten (GSA), die für Apigee erstellt wurden:
gcloud iam service-accounts list --filter "apigee"
DISPLAY NAME EMAIL DISABLED apigee-cassandra apigee-cassandra@PROJECT_ID.iam.gserviceaccount.com False apigee-connect apigee-connect@PROJECT_ID.iam.gserviceaccount.com False apigee-runtime apigee-runtime@PROJECT_ID.iam.gserviceaccount.com False apigee-metrics apigee-metrics@PROJECT_ID.iam.gserviceaccount.com False apigee-mart apigee-mart@PROJECT_ID.iam.gserviceaccount.com False apigee-watcher apigee-watcher@PROJECT_ID.iam.gserviceaccount.com False apigee-sync apigee-sync@PROJECT_ID.iam.gserviceaccount.com False apigee-udca apigee-udca@$PROJECT_ID.iam.gserviceaccount.com False
Hier ist ein Beispiel für Kubernetes-Dienstkonten (Kubernetes), die für Apigee erstellt wurden:
kubectl get sa -n $NAMESPACE
apigee-cassandra-schema-setup-ORG_NAME-cb84b88-sa 1 xxd apigee-cassandra-user-setup-ORG_NAME-cb84b88-sa 1 xxd apigee-connect-agent-ORG_NAME-cb84b88-sa 1 xxd apigee-init 1 xxd apigee-mart-ORG_NAME-cb84b88-sa 1 xxd apigee-metrics-apigee-telemetry 1 xxd apigee-runtime-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-synchronizer-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-udca-ORG_NAME-ENV_NAME-1d0dc5e-sa 1 xxd apigee-watcher-ORG_NAME-cb84b88 1 xxd
- Fügen Sie jedem Dienstkonto die Rolle "Workload Identity" hinzu:
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
Wenn Sie beispielsweise die Berechtigungen für Apigee Synchronizer festlegen, führen Sie folgenden Befehl aus:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
gcloud iam service-accounts add-iam-policy-binding --role roles/iam.workloadIdentityUser --member "serviceAccount:$PROJECT_ID.svc.id.goog[apigee/$KSA_NAME]" apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Annotieren Sie jedes KSA mit den GSA-Details:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Wenn Sie beispielsweise die Berechtigungen für Apigee Synchronizer festlegen, führen Sie folgenden Befehl aus:
export KSA_NAME=$(kubectl get sa -n apigee -l app=apigee-synchronizer,env=$ENV_NAME,org=$ORG_NAME --output=jsonpath={.items..metadata.name})
kubectl annotate serviceaccount --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-sync@$PROJECT_ID.iam.gserviceaccount.com
- Prüfen Sie, ob die Schritte funktioniert haben:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth list
Wenn Sie keine Eingabeaufforderung sehen, drücken Sie die Eingabetaste.
Wenn die Schritte korrekt ausgeführt wurden, wird eine Antwort wie diese angezeigt:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com
- Wenn Sie ein Upgrade von einer früheren Installation durchführen, bereinigen Sie die Secrets, die die privaten Schlüssel des Dienstkontos enthielten:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
- Prüfen Sie die Logs:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer