Attivazione di Workload Identity con Apigee hybrid

Questo argomento spiega come attivare Workload Identity per Apigee hybrid.

Panoramica

Workload Identity è un modo per consentire alle applicazioni in esecuzione all'interno di GKE (Google Kubernetes Engine) di per accedere ai servizi Google Cloud. Per panoramiche di Workload Identity, consulta:

Un account di servizio Google Cloud IAM è un'identità che un'applicazione può utilizzare per effettuare richieste API di Google. Nel documento, questi account di servizio sono indicati come GSA (Google Service Account). Per saperne di più sui gruppi di account di servizio, consulta Account di servizio.

A parte, Kubernetes ha anche il concetto di account di servizio. Un account di servizio fornisce un'identità per i processi in esecuzione in un pod. Gli account di servizio Kubernetes sono risorse Kubernetes, mentre gli account di servizio Google sono specifici di Google Cloud. Per informazioni sul servizio Kubernetes gli account, vedi Configura gli account di servizio 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 strumento di authoring. L'abilitazione di Workload Identity consente ai componenti ibridi di interagire con Kubernetes account di servizio.

Account di servizio Google in Apigee hybrid senza Workload Identity

Se non utilizzi Workload Identity, devi collegare gli account di servizio Google a ogni componente nel file overrides.yaml con un riferimento a un file di certificato o a un segreto Kubernetes. Ad esempio:

Variabili di ambiente utilizzate in queste procedure

Queste procedure utilizzano le seguenti variabili di ambiente. Imposta queste opzioni nella shell dei comandi, oppure 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 dello spazio dei nomi Apigee. Di solito è apigee.
  • CLUSTER_NAME: il nome del cluster.
  • CLUSTER_LOCATION: la regione o la zona del cluster, ad esempio: us-west1.
  • APIGEECTL_HOME: la directory in cui hai installato apigeectl.
  • HYBRID_FILES: la directory dei file ibridi, ad esempio hybrid-base-directory/hybrid-files.

Verifica le variabili di ambiente:

echo $PROJECT_ID
echo $ORG_NAME
echo $ENV_NAME
echo $NAMESPACE
echo $CLUSTER_NAME
echo $CLUSTER_LOCATION
echo $APIGEECTL_HOME
echo $HYBRID_FILES

Inizializza le variabili necessarie:

export PROJECT_ID=my-project-id
export ORG_NAME=$PROJECT_ID
export ENV_NAME=my-environment-name
export NAMESPACE=apigee
export CLUSTER_NAME=my-cluster-name
export CLUSTER_LOCATION=my-cluster-location
export APIGEECTL_HOME=hybrid-base-directory/apigeectl
export HYBRID_FILES=hybrid-base-directory/hybrid-files

File delle chiavi di Workload Identity e dell'account di servizio

Quando esegui Apigee Hybrid su GKE, la prassi standard è creare e scaricare le chiavi private (file .json) per ciascuno degli account di servizio. Quando utilizzi Workload Identity, non devi scaricare le chiavi private dell'account di servizio e aggiungerle ai cluster GKE.

Se hai scaricato i file delle chiavi dell'account di servizio nell'ambito dell'installazione di Apigee hybrid, puoi eliminarli dopo aver attivato Workload Identity. Nella maggior parte delle installazioni, si trovano nella directory hybrid-base-directory/hybrid-files/service-accounts/.

Attivare Workload Identity per Apigee hybrid

Per iniziare, segui le istruzioni riportate in Prepararsi ad abilitare Workload Identity per aggiornare i pool di nodi e inizializzare le variabili prima di abilitare Workload Identity.

Poi, segui le istruzioni riportate in ImpostaworkloadIdentityEnabled: true e crea account di servizio per attivare Workload Identity nell'installazione di Apigee hybrid.

Preparati ad abilitare Workload Identity

Prima di avviare il processo di installazione, segui la procedura descritta in questa sezione.

  1. Imposta il progetto da modificare:
    gcloud config set project $PROJECT_ID
  2. Recupera le credenziali gcloud del cluster su cui stai attivando Workload Identity con il seguente comando:
    gcloud container clusters get-credentials ${CLUSTER_NAME} \
      --region ${CLUSTER_LOCATION} \
      --project ${PROJECT_ID}
  3. 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 qualcosa di simile al seguente:

    
      
      status: RUNNING
      subnetwork: default
      workloadIdentityConfig:
        workloadPool: my-project-id.svc.id.goog

    Se necessario, abilita l'identità del carico di lavoro 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 ulteriori informazioni, vedi Abilita Workload Identity.

  4. Assicurati che Workload Identity sia abilitato su ogni pool di nodi.
    1. Elenca i tuoi pool di nodi con il comando seguente:
      gcloud container node-pools list \
        --cluster $CLUSTER_NAME \
        --region $CLUSTER_LOCATION \
        --project $PROJECT_ID

      L'output dovrebbe essere simile al seguente:

        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
    2. Assicurati che Workload Identity sia abilitato 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.

Verificare o creare account di servizio Google

Durante l'installazione vengono creati account di servizio Google per molti componenti di Apigee hybrid. Utilizza questa procedura per verificare gli account di servizio Google e crearne eventuali altri.

  1. Controlla i nomi degli account di servizio Google per il tuo progetto con il seguente comando:
    gcloud iam service-accounts list --project $PROJECT_ID

    L'output dovrebbe essere simile al seguente:

    Produzione

    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 prod

    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 gli account di servizio Google per il tuo progetto, hai a disposizione due metodi:

    • Utilizza la create-service-account strumento incluso con apigee nella directory apigeectl/tools/. Questo strumento può creare tutti gli account di servizio con un unico comando o consentirti di crearli singolarmente.
    • Utilizza il comando gcloud iam service-accounts create per creare il servizio gli account uno alla volta e il comando gcloud projects add-iam-policy-binding per assegnare i ruoli appropriati a ciascun account di servizio. Questo metodo richiede la creazione ogni account di servizio singolarmente, ma consente di evitare di scaricare i file delle chiavi.

    create-service-account

    Utilizza questo comando per creare un account di servizio Google per ogni componente:

    Produzione

    Per gli ambienti non di produzione:

    $APIGEECTL_HOME/tools/create-service-account --env prod --dir $APIGEECTL_HOME/../service-accounts

    Questo comando creerà i seguenti account di servizio:

    • apigee-cassandra
    • apigee-logger
    • apigee-mart
    • apigee-metrics
    • apigee-runtime
    • apigee-synchronizer
    • apigee-udca
    • apigee-watcher

    Non prod

    Per gli ambienti non di produzione:

    $APIGEECTL_HOME/tools/create-service-account --env non-prod --dir $APIGEECTL_HOME/../service-accounts

    Questo comando crea un singolo account di servizio, apigee-non-prod, con tutti i ruoli assegnati necessari per gestire tutti i componenti Apigee.

    gcloud

    Crea i seguenti account di servizio e assegna loro i ruoli.

    1. Account di servizio: apigee-cassandra, ruolo: roles/storage.objectAdmin

      Crea l'account:

      gcloud iam service-accounts create apigee-cassandra \
        --display-name="apigee-cassandra" \
        --project $PROJECT_ID
                  

      Assegna il ruolo:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-cassandra@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/storage.objectAdmin"
                  
    2. Account di servizio: apigee-logger, ruolo: roles/logging.logWriter

      Crea l'account:

      gcloud iam service-accounts create apigee-logger \
        --display-name="apigee-logger" \
        --project $PROJECT_ID
                  

      Assegna il ruolo:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-logger@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/logging.logWriter"
                  
    3. Account di servizio: apigee-mart, ruolo: roles/apigeeconnect.Agent

      Crea l'account:

      gcloud iam service-accounts create apigee-mart \
        --display-name="apigee-mart" \
        --project $PROJECT_ID
                  

      Assegna il ruolo:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-mart@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigeeconnect.Agent"
                  
    4. Account di servizio: apigee-metrics, ruolo: roles/monitoring.metricWriter

      Crea l'account:

      gcloud iam service-accounts create apigee-metrics \
        --display-name="apigee-metrics" \
        --project $PROJECT_ID
                  

      Assegna il ruolo:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-metrics@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/monitoring.metricWriter"
                  
    5. Account di servizio: apigee-runtime, ruolo: nessun ruolo assegnato.

      Crea l'account:

      gcloud iam service-accounts create apigee-runtime \
        --display-name="apigee-runtime" \
        --project $PROJECT_ID
                  
    6. Account di servizio: apigee-synchronizer, ruolo: roles/apigee.synchronizerManager

      Crea l'account:

      gcloud iam service-accounts create apigee-synchronizer \
        --display-name="apigee-synchronizer" \
        --project $PROJECT_ID
                  

      Assegna il ruolo:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-synchronizer@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigee.synchronizerManager"
                  
    7. Account di servizio: apigee-udca, ruolo: roles/apigee.analyticsAgent

      Crea l'account:

      gcloud iam service-accounts create apigee-udca \
        --display-name="apigee-udca" \
        --project $PROJECT_ID
                  

      Assegna il ruolo:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-udca@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigee.analyticsAgent"
                  
    8. Account di servizio: apigee-watcher, ruolo: roles/apigee.runtimeAgent

      Crea l'account:

      gcloud iam service-accounts create apigee-watcher \
        --display-name="apigee-watcher" \
        --project $PROJECT_ID
                  

      Assegna il ruolo:

      gcloud projects add-iam-policy-binding $PROJECT_ID \
        --member="serviceAccount:apigee-watcher@$PROJECT_ID.iam.gserviceaccount.com" \
        --role="roles/apigee.runtimeAgent"
                  

Imposta workloadIdentityEnabled: true e crea account di servizio

apigeectl crea account di servizio Kubernetes per ogni componente Apigee ibrido quando imposti workloadIdentityEnabled: true nel file delle sostituzioni e applichi le modifiche.

  1. Aggiungi la riga in grassetto sottostante al tuo file overrides.yaml sotto la gcp stanza. In questo modo, attivi Workload Identity per l'installazione e attivi apigeectl per creare gli account di servizio Kubernetes quando applichi la configurazione:
    gcp:
      projectID: "my-project-id"
      name: "my-project-id"
      region: "analytics-region"
      workloadIdentityEnabled: true
  2. Aggiungi le righe in grassetto sottostanti al tuo file overrides.yaml sotto la cassandra stanza. Questo attiva la creazione apigee-cassandra-backup Account di servizio Kubernetes:
    cassandra:
      ...
      backup:
        enabled: true
  3. Applica le modifiche con apigeectl con il flag --restore:
    $APIGEECTL_HOME/apigeectl apply -f overrides/overrides.yaml --restore
  4. Verifica gli account di servizio con il comando seguente:
    kubectl get sa -n $NAMESPACE

    L'output dovrebbe essere simile al seguente. Gli account di servizio Kubernetes grassetto è quello che dovrai aggiungere ai tuoi account di servizio 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 gli account di servizio Kubernetes con gli account di servizio Google

Per ogni componente Apigee, annota gli account di servizio Kubernetes corrispondenti con l'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 Account di servizio 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
Guardatore 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 comandi seguenti, utilizza i nomi degli account di servizio Kubernetes restituiti dal 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 l'account di servizio Kubernetes e l'account di servizio Google dell'entità al Ruolo IAM roles/iam.workloadIdentityUser.
  • Annota l'account di servizio Kubernetes con l'account di servizio Google.
  1. Associa i ruoli e annota gli account di servizio.

    Componenti a livello di organizzazione

    Annotare gli account di servizio Kubernetes per i componenti a livello di organizzazione. Dovrai eseguire questa operazione una volta per ogni componente della tua organizzazione Apigee.

    • Cassandra

      Il componente Cassandra ha sei account di servizio Kubernetes associati:

      • apigee-cassandra-backup
      • apigee-cassandra-restore
      • apigee-cassandra-schema-setup
      • apigee-cassandra-schema-val (val = convalida)
      • apigee-cassandra-user-setup
      • apigee-datastore-default

      Produzione

      apigee-cassandra-backup

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. Collega 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
      3. Annota l'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

      1. 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
      2. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. 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
      3. Annota l'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

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-connect-agent-service-account-name"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-restore"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name"
      2. 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
      3. Annota l'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

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-datastore-default-sa"
      2. 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
      3. Aggiungi un'annotazione all'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

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-connect-agent-service-account-name"
      2. Collega 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
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • MART

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-mart-service-account-name"
      2. Collega 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
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • Metriche Apigee

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-metrics-sa"
      2. Collega 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • UDCA (a livello di organizzazione)

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-org-level-service-account-name"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci le variabili di ambiente KSA_NAME:

        KSA_NAME="apigee-udca-org-level-service-account-name"
      2. 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
      3. Aggiungi un'annotazione all'account di servizio:
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • Watcher Apigee

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-watcher-service-account-name"
      2. Collega 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com

    Per ogni ambiente:

    • Runtime

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-service-account-name"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-runtime-service-account-name"
      2. Collega 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • Synchronizer

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-service-account-name"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-synchronizer-service-account-name"
      2. Collega 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
    • UDCA (a livello di ambiente)

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name"
      2. 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Non prod

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-udca-env-level-service-account-name"
      2. Collega 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
      3. Annota l'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=apigee-non-prod@$PROJECT_ID.iam.gserviceaccount.com
  2. Verifica che i passaggi abbiano 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 vedere una risposta simile alla seguente:

                       Credentialed Accounts
    ACTIVE  ACCOUNT
    *       GSA@PROJECT_ID.iam.gserviceaccount.com
  3. Se esegui l'upgrade da un'installazione precedente, pulisci i secret che contenevano chiavi private dell'account di servizio:
    kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
    
  4. Controlla i log:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer
    

Esegui 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 gli account di servizio 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 account di servizio 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
  1. 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 imposti le autorizzazioni per Apigee Synchronizer, devi eseguire:

    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
    
  2. Annota ogni Arabia Saudita con i dettagli di Gboard:
    kubectl annotate serviceaccount \
      --namespace $NAMESPACE \
      $KSA_NAME \
      iam.gke.io/gcp-service-account=GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
    

    Ad esempio, se imposti le autorizzazioni per Apigee Synchronizer, devi eseguire:

    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
    
  3. Verifica che i passaggi abbiano funzionato:
    gcloud config set project $PROJECT_ID
    
      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 vedere una risposta simile alla seguente:

                       Credentialed Accounts
    ACTIVE  ACCOUNT
    *       GSA@PROJECT_ID.iam.gserviceaccount.com
  4. Se esegui l'upgrade da un'installazione precedente, pulisci i secret che contenevano chiavi private dell'account di servizio:
    kubectl delete secrets -n $NAMESPACE $(k get secrets -n $NAMESPACE | grep svc-account | awk '{print $1}')
    
  5. Controlla i log:
    kubectl logs -n $NAMESPACE -l app=apigee=synchronizer,env=$ENV_NAME,org=$ORG_NAME apigee-synchronizer