Questo argomento spiega come attivare Workload Identity per Apigee hybrid.
Panoramica
Workload Identity è un modo per le applicazioni in esecuzione in GKE (Google Kubernetes Engine) di accedere ai servizi Google Cloud. Per le panoramiche di Workload Identity, consulta:
- Introduzione di Workload Identity: migliore autenticazione per le applicazioni GKE
- Utilizzo di Workload Identity
Un account di servizio Google Cloud IAM è un'identità che un'applicazione può utilizzare per effettuare richieste alle API di Google. Questi service account sono denominati GSA (Google Service Accounts) nel documento. Per saperne di più sui service account, consulta Service account.
Kubernetes ha anche il concetto di service account. Un account di servizio fornisce un'identità per i processi eseguiti in un pod. Gli account di servizio Kubernetes sono risorse Kubernetes, mentre gli account di servizio Google sono specifici di Google Cloud. Per informazioni sui service account Kubernetes, consulta Configurare i service account per i pod nella documentazione di Kubernetes.
Con Apigee hybrid 1.4 e versioni successive, Apigee crea e utilizza un account di servizio Kubernetes per ogni tipo di componente. L'attivazione di Workload Identity consente ai componenti ibridi di interagire con i service account Kubernetes.
Account di servizio Google in Apigee hybrid senza Workload Identity
Senza utilizzare Workload Identity, devi collegare i service account Google a ogni componente nel file overrides.yaml con un riferimento a un file di certificato o a un secret Kubernetes. Ad esempio:
- File di certificazione:
watcher: serviceAccountPath: ./apigee-org/my-hybrid-project-apigee-watcher.json
Vedi:
- Secret Kubernetes:
watcher: serviceAccountRef: my-watcher-k8s-secret
Vedi:
Variabili di ambiente utilizzate in queste procedure
Queste procedure utilizzano le seguenti variabili di ambiente. Imposta questi valori nella shell dei comandi o sostituiscili negli esempi di codice con i valori effettivi:
PROJECT_ID: l'ID del tuo progetto Google Cloud.ORG_NAME: il nome della tua organizzazione Apigee.ENV_NAME: il nome dell'ambiente Apigee.NAMESPACE: il nome del tuo spazio dei nomi Apigee. In genere si tratta diapigee.CLUSTER_NAME: il nome del cluster.CLUSTER_LOCATION: la regione o la zona del tuo cluster, ad esempio:us-west1.APIGEECTL_HOME: la directory in cui hai installatoapigeectl.HYBRID_FILES: la directory dei file ibridi, ad esempiohybrid-base-directory/hybrid-files.
Verifica le variabili di ambiente:
echo $PROJECT_IDecho $ORG_NAMEecho $ENV_NAMEecho $NAMESPACEecho $CLUSTER_NAMEecho $CLUSTER_LOCATIONecho $APIGEECTL_HOMEecho $HYBRID_FILES
Inizializza le variabili che ti servono:
export PROJECT_ID=my-project-idexport ORG_NAME=$PROJECT_IDexport ENV_NAME=my-environment-nameexport NAMESPACE=apigeeexport CLUSTER_NAME=my-cluster-nameexport CLUSTER_LOCATION=my-cluster-locationexport APIGEECTL_HOME=hybrid-base-directory/apigeectlexport HYBRID_FILES=hybrid-base-directory/hybrid-files
Workload Identity e file delle chiavi del account di servizio
Quando esegui Apigee Hybrid su GKE, la prassi standard è creare e scaricare chiavi private (file .json) per ciascuno dei service account. Quando utilizzi Workload Identity,
non devi scaricare le chiavi private del account di servizio e aggiungerle ai cluster GKE.
Se hai scaricato i file delle chiavi del account di servizio nell'ambito dell'installazione di Apigee hybrid,
puoi eliminarli dopo aver abilitato Workload Identity. Nella maggior parte delle installazioni, si trovano nella directory
hybrid-base-directory/hybrid-files/service-accounts/.
Abilita Workload Identity per Apigee hybrid
Per iniziare, segui le istruzioni riportate in Preparati ad attivare Workload Identity per aggiornare i pool di nodi e inizializzare le variabili prima di attivare Workload Identity.
Poi, segui le istruzioni riportate in Imposta
workloadIdentityEnabled: true e crea account di servizio per attivare Workload
Identity nell'installazione di Apigee hybrid.
Prepararsi ad attivare Workload Identity
Prima di iniziare la procedura di installazione, segui i passaggi descritti in questa sezione.
- Imposta il progetto su quello che stai modificando:
gcloud config set project $PROJECT_ID
-
Recupera le credenziali
gclouddel cluster su cui stai attivando Workload Identity con il seguente comando:gcloud container clusters get-credentials ${CLUSTER_NAME} \ --region ${CLUSTER_LOCATION} \ --project ${PROJECT_ID} - Verifica che Workload Identity sia abilitato per il cluster GKE che esegue Apigee con il seguente comando:
gcloud container clusters describe $CLUSTER_NAME --region $CLUSTER_LOCATION --project $PROJECT_ID
L'output dovrebbe includere quanto segue:
… … status: RUNNING subnetwork: default workloadIdentityConfig: workloadPool: my-project-id.svc.id.goog
Se necessario, abilita Workload Identity sul cluster. Questa operazione può richiedere fino a 30 minuti:
gcloud container clusters update $CLUSTER_NAME \ --workload-pool=$PROJECT_ID.svc.id.goog \ --project $PROJECT_ID \ --region $CLUSTER_LOCATION
Per maggiori informazioni, vedi Abilitare Workload Identity.
- Assicurati che Workload Identity sia abilitato in ogni pool di nodi.
- Elenca i tuoi pool di nodi con il seguente comando:
gcloud container node-pools list \ --cluster $CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID
L'output dovrebbe essere simile a questo:
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
- Assicurati che Workload Identity sia abilitata per ogni pool di nodi utilizzando il seguente comando per ciascun
pool di nodi:
gcloud container node-pools update NODE_POOL_NAME \ --cluster=$CLUSTER_NAME \ --region $CLUSTER_LOCATION \ --project $PROJECT_ID \ --workload-metadata=GKE_METADATA
dove NODE_POOL_NAME è il nome di ogni pool di nodi.
- Elenca i tuoi pool di nodi con il seguente comando:
Verificare o creare service account Google
Durante l'installazione vengono creati account di servizio Google per molti componenti di Apigee hybrid. Utilizza questa procedura per verificare i service account Google e crearne di nuovi, se necessario.
- Controlla i nomi dei service account Google per il tuo progetto con il seguente comando:
gcloud iam service-accounts list --project $PROJECT_ID
L'output dovrebbe essere simile a questo:
Prod
Per gli ambienti non di produzione:
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 di produzione
Per gli ambienti non di produzione:
DISPLAY NAME EMAIL DISABLED apigee-non-prod apigee-non-prod@my_project_id.iam.gserviceaccount.com False
Se devi creare i service account Google per il tuo progetto, puoi utilizzare due metodi:
- Utilizza lo strumento
create-service-accountincluso in Apigee nella directoryapigeectl/tools/. Questo strumento può creare tutti i service account con un unico comando o consentirti di crearli singolarmente. - Utilizza il comando
gcloud iam service-accounts createper creare i service account uno alla volta e il comandogcloud projects add-iam-policy-bindingper assegnare i ruoli appropriati a ogni account di servizio. Questo metodo richiede la creazione di ogni account di servizio singolarmente, ma ti consente di evitare di scaricare i file delle chiavi.
Utilizza il seguente comando per creare un account di servizio Google per componente:create-service-accountProd
Per gli ambienti non di produzione:
$APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts
Questo comando creerà i seguenti service account:
apigee-cassandraapigee-loggerapigee-martapigee-metricsapigee-runtimeapigee-synchronizerapigee-udcaapigee-watcher
Non di produzione
Per gli ambienti non di produzione:
$APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts
Questo comando creerà un singolo service account,
apigee-non-prod, con tutti i ruoli assegnati necessari per gestire tutti i componenti Apigee.gcloudCrea i seguenti service account e assegna loro i ruoli.
- Service account:
apigee-cassandra, ruolo:roles/storage.objectAdminCrea l'account:
gcloud iam service-accounts create apigee-cassandra \ --display-name="apigee-cassandra" \ --project $PROJECT_IDAssegna il ruolo:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/storage.objectAdmin" - Service account:
apigee-logger, ruolo:roles/logging.logWriterCrea l'account:
gcloud iam service-accounts create apigee-logger \ --display-name="apigee-logger" \ --project $PROJECT_IDAssegna il ruolo:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/logging.logWriter" - Service account:
apigee-mart, ruolo:roles/apigeeconnect.AgentCrea l'account:
gcloud iam service-accounts create apigee-mart \ --display-name="apigee-mart" \ --project $PROJECT_IDAssegna il ruolo:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigeeconnect.Agent" - Service account:
apigee-metrics, ruolo:roles/monitoring.metricWriterCrea l'account:
gcloud iam service-accounts create apigee-metrics \ --display-name="apigee-metrics" \ --project $PROJECT_IDAssegna il ruolo:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/monitoring.metricWriter" - Service account:
apigee-runtime, ruolo: nessun ruolo assegnato.Crea l'account:
gcloud iam service-accounts create apigee-runtime \ --display-name="apigee-runtime" \ --project $PROJECT_ID - Service account:
apigee-synchronizer, ruolo:roles/apigee.synchronizerManagerCrea l'account:
gcloud iam service-accounts create apigee-synchronizer \ --display-name="apigee-synchronizer" \ --project $PROJECT_IDAssegna il ruolo:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.synchronizerManager" - Service account:
apigee-udca, ruolo:roles/apigee.analyticsAgentCrea l'account:
gcloud iam service-accounts create apigee-udca \ --display-name="apigee-udca" \ --project $PROJECT_IDAssegna il ruolo:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.analyticsAgent" - Service account:
apigee-watcher, ruolo:roles/apigee.runtimeAgentCrea l'account:
gcloud iam service-accounts create apigee-watcher \ --display-name="apigee-watcher" \ --project $PROJECT_IDAssegna il ruolo:
gcloud projects add-iam-policy-binding $PROJECT_ID \ --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \ --role="roles/apigee.runtimeAgent"
- Utilizza lo strumento
Imposta workloadIdentityEnabled: true e crea service account
apigeectl crea service account Kubernetes per ogni componente di Apigee Hybrid
quando imposti workloadIdentityEnabled: true nel file di override e applichi le
modifiche.
- Aggiungi la riga in grassetto riportata di seguito al file
overrides.yamlnella sezionegcp. In questo modo viene abilitata Workload Identity per l'installazione e viene attivatoapigeectlper creare i service account Kubernetes quando applichi la configurazione:gcp: projectID: "my-project-id" name: "my-project-id" region: "analytics-region" workloadIdentityEnabled: true
- Aggiungi le righe in grassetto riportate di seguito al file
overrides.yamlnella sezionecassandra. Viene attivata la creazione del account di servizio Kubernetesapigee-cassandra-backup:cassandra: ... backup: enabled: true - Applica le modifiche con
apigeectlcon il flag--restore:$APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
- Verifica i service account con il seguente comando:
kubectl get sa -n $NAMESPACE
L'output dovrebbe essere simile al seguente. I service account Kubernetes in grassetto sono quelli che dovrai annotare con i tuoi service account Google:
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
Annota i service account Kubernetes con i service account Google
Per ogni componente Apigee, annota i service account Kubernetes corrispondenti con il account di servizio Google per il componente.
Componenti a livello di organizzazione
Avrai una sola istanza di ogni account di servizio Kubernetes per la tua organizzazione Apigee.
| Componente | Service account Kubernetes | Service account Google |
|---|---|---|
| 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 |
| Metriche | apigee-metrics-sa |
apigee-metrics |
| UDCA (a livello di organizzazione) | apigee-udca-my-project-id-num-id1-sa |
apigee-udca |
| Watcher | apigee-watcher-my-project-id-num-id1-sa |
apigee-watcher |
Componenti a livello di ambiente
Avrai un'istanza di ogni account di servizio Kubernetes per ogni ambiente Apigee.
| Componente | Service account Kubernetes | Service account Google |
|---|---|---|
| Apigee Runtime | 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 (a livello di ambiente) | apigee-udca-my-project-id-env-name-num-id2-sa |
apigee-udca |
Nei seguenti comandi utilizza i nomi dei account di servizio Kubernetes restituiti dal comando
kubectl get sa -n $NAMESPACE, ad esempio:
apigee-cassandra-schema-val-hybrid-example-project-123abcd.
In questa procedura, per ogni account di servizio Kubernetes:
-
Associa il account di servizio Kubernetes e il account di servizio Google principale al ruolo IAM
roles/iam.workloadIdentityUser. - Annota il account di servizio Kubernetes con il account di servizio Google.
- Associa i ruoli e annota i service account.
Componenti a livello di organizzazione
Aggiungi annotazioni agli account di servizio Kubernetes per i componenti a livello di organizzazione. Devi farlo una volta per ogni componente della tua organizzazione Apigee.
- Cassandra
Il componente Cassandra ha sei service account Kubernetes associati:
apigee-cassandra-backupapigee-cassandra-restoreapigee-cassandra-schema-setupapigee-cassandra-schema-val(val= convalida)apigee-cassandra-user-setupapigee-datastore-default
Prod
apigee-cassandra-backup- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-restore"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
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- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
Associa il ruolo IAM:
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
- Annota il account di servizio:
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- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
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- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
apigee-datastore-default-sa- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-datastore-default-sa"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
apigee-cassandra-backup- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-connect-agent-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
apigee-cassandra-restore- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-restore"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
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- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
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- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-schema-val-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
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- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-cassandra-user-setup-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
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- Ridefinisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-datastore-default-sa"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Apigee Connect
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-connect-agent-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
- MART
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-mart-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
- Metriche Apigee
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-metrics-sa"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
- UDCA (a livello di organizzazione)
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-org-level-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci le variabili di ambiente
KSA_NAME:KSA_NAME="apigee-udca-org-level-service-account-name"
- Associa il ruolo IAM:
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 - Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
- Apigee Watcher
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-watcher-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
Per ogni ambiente:
- Runtime
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-runtime-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
- Synchronizer
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-synchronizer-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
- UDCA (a livello di ambiente)
Prod
- Definisci le variabili di ambiente
KSA_NAMEeGSA_NAME:GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name" - Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Non di produzione
- Definisci la variabile di ambiente
KSA_NAME:KSA_NAME="apigee-udca-env-level-service-account-name"
- Associa il ruolo IAM:
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
- Annota il account di servizio:
kubectl annotate serviceaccount \ --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
- Definisci le variabili di ambiente
- Cassandra
- Verifica se i passaggi hanno funzionato:
gcloud config set project $PROJECT_ID
Seleziona un account di servizio Kubernetes da testare, ad esempio:
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
Se non vedi un prompt dei comandi, prova a premere Invio.
Se i passaggi sono stati eseguiti correttamente, dovresti visualizzare una risposta simile alla seguente:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com - Se esegui l'upgrade da un'installazione precedente, pulisci i secret che contenevano le chiavi private del account di servizio:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}') - Controlla i log:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
Eseguire l'upgrade di un'installazione per utilizzare Workload Identity
Segui queste istruzioni per aggiungere Workload Identity a un'installazione ibrida esistente.
Ecco un esempio che mostra i service account Google (GSA) creati per Apigee:
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
Di seguito è riportato un esempio di service account Kubernetes (KSA) creato per Apigee:
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
- Aggiungi il ruolo Workload Identity a ogni account di servizio:
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
Ad esempio, se stai impostando le autorizzazioni per Apigee Synchronizer, esegui:
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
- Annota ogni KSA con i dettagli della GSA:
kubectl annotate serviceaccount \ --namespace $NAMESPACE \ $KSA_NAME \ iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
Ad esempio, se stai impostando le autorizzazioni per Apigee Synchronizer, esegui:
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
- Verifica se i passaggi hanno funzionato:
gcloud config set project $PROJECT_ID
kubectl run --rm -it --image google/cloud-sdk:slim \ --namespace $NAMESPACE workload-identity-test\ -- gcloud auth listSe non vedi un prompt dei comandi, prova a premere Invio.
Se i passaggi sono stati eseguiti correttamente, dovresti visualizzare una risposta simile alla seguente:
Credentialed Accounts ACTIVE ACCOUNT * GSA@PROJECT_ID.iam.gserviceaccount.com - Se esegui l'upgrade da un'installazione precedente, pulisci i secret che contenevano le chiavi private del account di servizio:
kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}') - Controlla i log:
kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer