Passaggio 10 (facoltativo): configura Workload Identity su GKE

GKE solo con Workload Identity: configura Workload Identity

Segui questi passaggi se hai configurato il file delle sostituzioni per Workload Identity su GKE nel passaggio 6: configura il cluster.

Se non utilizzi Workload Identity su GKE, vai a Parte 3, Passaggio 1: esponi il gateway Apigee in entrata.

Account di servizio Google Cloud e account di servizio Kubernetes

Un account di servizio Google Cloud è un tipo speciale di account che può essere utilizzato per effettuare chiamate API autorizzate autenticandosi come l'account di servizio stesso. Gli account di servizio Google Cloud possono ruoli e autorizzazioni assegnati sono simili a quelli di un singolo utente. Quando un'applicazione si autentica come account di servizio, può accedere a tutte le risorse alle quali l'account di servizio è autorizzato ad accedere. Per saperne di più sugli account di servizio Google Cloud, consulta Panoramica degli account di servizio.

Hai creato account di servizio Google Cloud per la tua installazione ibrida di Apigee nel passaggio 4: crea gli account di servizio. Apigee utilizza questi account di servizio per autenticare i componenti ibride.

Gli account di servizio Kubernetes sono simili agli account di servizio Google Cloud. Un account di servizio Kubernetes fornisce un'identità per i processi in esecuzione in un pod e consente di autenticarsi al server API in modo simile a un utente. Per scoprire di più sugli account di servizio Kubernetes, consulta Configurare gli account di servizio per i pod.

Lo strumento apigeectl ha creato la maggior parte degli account di servizio Kubernetes necessari Apigee hybrid quando hai eseguito apigeectl apply nella procedura precedente.

Quando configuri Workload Identity su GKE, associ gli account di servizio Google Cloud agli account di servizio Kubernetes nel cluster Kubernetes. In questo modo, gli account di servizio Kubernetes possono rubare l'identità degli account di servizio Google Cloud e utilizzare i relativi ruoli e le autorizzazioni assegnate per autenticarsi con i componenti ibride.

Segui queste istruzioni per configurare Workload Identity per il tuo progetto.

Preparativi per la configurazione di Workload Identity

Queste procedure utilizzano le seguenti variabili di ambiente. Controlla che siano definiti definire quelle che non sono:

echo $APIGEECTL_HOME
echo $CLUSTER_LOCATION
echo $ENV_NAME
echo $HYBRID_FILES
echo $NAMESPACE
echo $PROJECT_ID
echo $ORG_NAME
  1. Verifica che la configurazione gcloud corrente sia impostata sull'ID progetto Google Cloud con il seguente comando:
    gcloud config get project
  2. Se necessario, imposta l'attuale configurazione di gcloud:

    gcloud config set project $PROJECT_ID
  3. Crea l'account di servizio Kubernetes apigee-cassandra-restore.

    Quando hai applicato la configurazione eseguendo apigeectl apply, il comando ha creato la maggior parte degli account di servizio Kubernetes necessari per Workload Identity.

    Per creare l'account di servizio Kubernetes apigee-cassandra-restore, esegui apigeectl apply con il flag --restore:

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. Verifica che Workload Identity sia abilitato per il tuo cluster GKE. Quando hai creato il cluster nel passaggio 1: creazione di un cluster, il passaggio 6 era Abilita Workload Identity. Puoi verificare se Workload Identity è abilitato eseguendo questo comando :

    Cluster a livello di regione

    gcloud container clusters describe $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    Cluster di zona

    gcloud container clusters describe $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten 'workloadIdentityConfig'

    L'output dovrebbe avere l'aspetto seguente:

      ---
      workloadPool: PROJECT_ID.svc.id.goog

    Se nei risultati viene visualizzato null, esegui il seguente comando per abilitare Workload Identity per il cluster:

    Cluster a livello di regione

    gcloud container clusters update $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --project $PROJECT_ID \
      --region $CLUSTER_LOCATION

    Cluster zonali

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Abilita Workload Identity per ogni pool di nodi con i seguenti comandi. Questa operazione può richiedere fino a 30 minuti per ogni nodo:

    Cluster a livello di regione

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Cluster zonali

    gcloud container node-pools update NODE_POOL_NAME \
      --cluster=$CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --workload-metadata=GKE_METADATA

    Dove NODE_POOL_NAME è il nome di ogni pool di nodi. Nella maggior parte dei casi, di Compute Engine, i due pool di nodi predefiniti sono denominati apigee-data e apigee-runtime.

  6. Verifica che Workload Identity sia abilitato sui tuoi pool di nodi con i seguenti comandi:

    Cluster a livello di regione

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --region $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    Cluster zonali

    gcloud container node-pools describe apigee-data \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"
    gcloud container node-pools describe apigee-runtime \
      --cluster $CLUSTER_NAME \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID \
      --flatten "config:"

    L'output dovrebbe essere simile al seguente:

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. Recupera un elenco dei nomi degli account di servizio Google Cloud per il tuo progetto. Ti serviranno questi nomi per associare gli account di servizio Kubernetes per configurare Workload Identity. Per non di produzione, deve esserci un solo account di servizio Google. Per la produzione ne dovrebbero essere in otto.

    Utilizza il seguente comando per ottenere l'elenco dei nomi:

    gcloud iam service-accounts list --project $PROJECT_ID

    L'output dovrebbe essere simile al seguente:

    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
    

    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
    
  8. Visualizza un elenco dei nomi degli account di servizio Kubernetes. Questo elenco di nomi ti servirà associarlo agli account di servizio Google Cloud più avanti in questa procedura. Utilizza questo comando:
    kubectl get sa -n $NAMESPACE

    L'output dovrebbe essere simile al seguente. Gli account di servizio Kubernetes grassetto sono quelli che dovrai associare ai tuoi account di servizio Google Cloud:

    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
        

Configurazione di Workload Identity

Per attivare Workload Identity per l'installazione ibrida, segui questa procedura:

  1. Per ogni componente Apigee, annota gli account di servizio Kubernetes corrispondenti con Account di servizio Google per il componente.

    I passaggi seguenti utilizzano due variabili di ambiente. I valori di questi elementi verranno reimpostati prima di ogni insieme di comandi:

    • GSA_NAME: il nome di un account di servizio Google. Si tratta degli account di servizio che hai creato con lo strumento create-service-account nel passaggio 4: crea gli account di servizio.
    • KSA_NAME: il nome di un account di servizio Kubernetes. Si tratta degli account elencati sopra con il comando kubectl get sa -n $NAMESPACE, ad esempio:apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa.
    • Cassandra

      Configura Workload Identity per il componente 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

      Non di produzione

      Configura l'account di servizio Kubernetes apigee-cassandra-backup

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-non-prod"
        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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        L'output dovrebbe avere una riga che descrive l'annotazione, simile a:

        Annotations:         iam.gke.io/gcp-service-account: apigee-non-prod@my-project-id.iam.gserviceaccount.com

      Configura l'account di servizio Kubernetes apigee-cassandra-restore

      1. Ridefinisci la KSA_NAMEvariabile di ambiente:

        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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes apigee-cassandra-schema-setup

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        ad esempio: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes apigee-cassandra-schema-val

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Ad esempio: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes apigee-cassandra-user-setup

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        Ad esempio: apigee-cassandra-user-setup-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes apigee-datastore-default-sa

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-datastore-default-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      Configura l'account di servizio Kubernetes 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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. L'output dovrebbe avere una riga che descrive l'annotazione, simile a:

        Annotations:         iam.gke.io/gcp-service-account: apigee-cassandra@my-project-id.iam.gserviceaccount.com
      6. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes 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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Configura l'account di servizio Kubernetes apigee-cassandra-schema-setup

      1. Ridefinisci la KSA_NAMEvariabile di ambiente:

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        ad esempio: apigee-cassandra-schema-setup-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes apigee-cassandra-schema-val

      1. Ridefinisci la KSA_NAMEvariabile di ambiente:

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Ad esempio: apigee-cassandra-schema-val-hybrid-example-project-123abcd.
      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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes apigee-cassandra-user-setup

      1. Ridefinisci la KSA_NAMEvariabile di ambiente:

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        ad esempio: apigee-cassandra-user-setup-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configura l'account di servizio Kubernetes apigee-datastore-default-sa

      1. Ridefinisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-datastore-default-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Configura Workload Identity per il componente Apigee Connect.

      Non di produzione

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        Ad esempio: apigee-connect-agent-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        ad esempio: apigee-connect-agent-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      Configura Workload Identity per il componente MART.

      Non di produzione

      1. Definisci la variabile di ambiente KSA_NAME:

        KSA_NAME="apigee-mart-service-account-name-sa"
        Ad esempio: apigee-mart-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        Ad esempio: apigee-mart-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Metriche Apigee

      Configura Workload Identity per il componente delle metriche di Apigee.

      Non di produzione

      1. Definisci le variabili di ambiente KSA_NAME:

        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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-metrics"
        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 \
        --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (a livello di organizzazione)

      Configura Workload Identity per il componente UDCA a livello di organizzazione.

      L'accesso a più dati aziendali è implementato sia a livello di organizzazione che di ambiente. Pertanto, esistono due account di servizio Kubernetes separati per UDCA, uno per ogni ambito. Puoi puoi distinguerli dal nome dell'account. L'account con ambito env include l'ambiente nel nome dell'account di servizio. Ad esempio:

      • A livello di organizzazione: apigee-udca-my-project-id-123abcd-sa dove my-project-id è l'ID progetto del nome.
      • A livello di ambiente: apigee-udca-my-project-id-my-env-234bcde-sa dove my-env è il nome dell'ambiente.

      Non di produzione

      1. Definisci le variabili di ambiente KSA_NAME:

        KSA_NAME="apigee-udca-service-account-name-sa"
        ad esempio: apigee-udca-hybrid-example-project-123abcd-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 \
            --project $PROJECT_ID
      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
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        ad esempio: apigee-udca-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Configura Workload Identity per il componente Apigee Watcher.

      Non di produzione

      1. Definisci le KSA_NAMEvariabili di ambiente:

        KSA_NAME="apigee-watcher-service-account-name-sa"
        ad esempio: apigee-watcher-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        Ad esempio: apigee-watcher-hybrid-example-project-123abcd-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Runtime

      Configura Workload Identity per il componente Apigee Runtime.

      Non di produzione

      1. Definisci le variabili di ambiente KSA_NAME:

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        ad esempio: apigee-runtime-hybrid-example-project-example-env-234bcde-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        ad esempio: apigee-runtime-hybrid-example-project-example-env-234bcde-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Synchronizer

      Configura Workload Identity per il componente Synchronizer.

      Non di produzione

      1. Definisci le variabili di ambiente KSA_NAME:

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Ad esempio: apigee-synchronizer-hybrid-example-project-example-env-234bcde-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Produzione

      1. Definisci le variabili di ambiente KSA_NAME e GSA_NAME:

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        ad esempio: apigee-synchronizer-hybrid-example-project-example-env-234bcde-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (a livello di ambiente)

      Configura Workload Identity per il componente UDCA a livello di ambiente.

      Non di produzione

      1. Definisci le variabili di ambiente KSA_NAME:

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Ad esempio: apigee-udca-hybrid-example-project-example-env-234bcde-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      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-sa"
        ad esempio: apigee-udca-hybrid-example-project-example-env-234bcde-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 \
          --project $PROJECT_ID
      3. Aggiungi un'annotazione all'account di servizio:
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Verifica l'annotazione:
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. Facoltativo:elimina tutti i file delle chiavi degli account di servizio scaricati.

    Se hai creato gli account di servizio Google con lo strumento create-service-account, è possibile che siano state create chiavi degli account di servizio e scaricati i file delle chiavi .json. Quando utilizzando Workload Identity su GKE, non hai bisogno di questi file chiave.

    Puoi eliminare i file delle chiavi con il seguente comando:

    rm $HYBRID_FILES/service-accounts/*.json

Verificare Workload Identity

  1. (Facoltativo) Puoi visualizzare lo stato dei tuoi account di servizio Kubernetes nella pagina Kubernetes: Panoramica dei carichi di lavoro della console Google Cloud.

    Vai a Carichi di lavoro

  2. Per controllare nuovamente lo stato del deployment con apigeectl check-ready:
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(SUCCESSIVO) Passaggio 1: esponi Apigee Ingress 2