Étape 10 (facultatif) : Configurer Workload Identity sur GKE

GKE avec Workload Identity uniquement : configurer Workload Identity

Suivez ces étapes si vous configurez votre fichier de remplacement pour Workload Identity sur GKE à l'étape 6 : Configurer le cluster.

Si vous n'utilisez pas Workload Identity sur GKE, passez à la partie 3, étape 1 : Exposer la passerelle d'entrée Apigee.

Comptes de service Google Cloud et comptes de service Kubernetes

Un compte de service Google Cloud est un type particulier de compte qui peut être utilisé pour effectuer des appels d'API autorisés en s'authentifiant en tant que compte de service. Les comptes de service Google Cloud peuvent disposer de rôles et d'autorisations semblables à ceux d'un utilisateur individuel. Lorsqu'une application s'authentifie en tant que compte de service, elle a accès à toutes les ressources auxquelles le compte de service est autorisé à accéder. Pour en savoir plus sur les comptes de service Google Cloud, consultez la présentation des comptes de service.

Vous avez créé des comptes de service Google Cloud pour votre installation Apigee hybride à l'étape 4 : Créer des comptes de service. Apigee utilise ces comptes de service pour authentifier les composants hybrides.

Les comptes de service Kubernetes sont semblables aux comptes de service Google Cloud. Un compte de service Kubernetes fournit une identité pour les processus exécutés dans un pod et lui permet de s'authentifier auprès du serveur d'API de la même manière qu'un utilisateur. Si vous souhaitez en savoir plus sur les comptes de service Kubernetes, consultez la section Configurer les comptes de service pour les pods.

L'outil apigeectl a créé la plupart des comptes de service Kubernetes requis par Apigee hybrid lors de l'exécution de apigeectl apply à la procédure précédente.

Lorsque vous configurez Workload Identity sur GKE, vous associez les comptes de service Google Cloud aux comptes de service Kubernetes dans le cluster Kubernetes. De cette manière, les comptes de service Kubernetes peuvent emprunter l'identité des comptes de service Google Cloud et utiliser les rôles et autorisations qui leur ont été attribués pour s'authentifier auprès des composants hybrides.

Suivez ces instructions pour configurer Workload Identity pour votre projet.

Préparer la configuration de Workload Identity

Ces procédures utilisent les variables d'environnement suivantes. Vérifiez qu'elles sont définies et définissez celles qui ne le sont pas :

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

Où :

  • APIGEECTL_HOME correspond au répertoire dans lequel vous avez installé apigeectl.
  • CLUSTER_LOCATION est la région (ou la zone) de votre cluster, par exemple us-central1.
  • ENV_NAME est le nom de votre environnement.
  • HYBRID_FILES correspond au répertoire dans lequel vous avez créé les répertoires overrides et certs.
  • NAMESPACE est votre espace de noms Apigee.
  • PROJECT_ID correspond à votre projet Google Cloud.
  • ORG_NAME est le nom de votre organisation Apigee.

  1. Vérifiez que la configuration gcloud actuelle est définie sur l'ID de votre projet Google Cloud à l'aide de la commande suivante :
    gcloud config get project
  2. Si nécessaire, définissez la configuration gcloud actuelle :

    gcloud config set project $PROJECT_ID
  3. Créez le compte de service Kubernetes apigee-cassandra-restore.

    Lorsque vous avez appliqué votre configuration en exécutant apigeectl apply, la commande a créé la plupart des comptes de service Kubernetes nécessaires pour Workload Identity.

    Pour créer le compte de service Kubernetes apigee-cassandra-restore, exécutez apigeectl apply avec l'option --restore :

    $APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
  4. Vérifiez que Workload Identity est activé dans votre cluster GKE. Lorsque vous avez créé le cluster à l'étape 1 : Créer un cluster, l'étape 6 consistait à activer Workload Identity. Vous pouvez vérifier si Workload Identity est activé en exécutant la commande suivante :

    Clusters régionaux

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

    Cluster zonal

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

    Le résultat doit se présenter sous la forme suivante :

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

    Si null s'affiche dans vos résultats, exécutez la commande suivante pour activer Workload Identity dans votre cluster :

    Clusters régionaux

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

    Cluster zonal

    gcloud container clusters update  $CLUSTER_NAME \
      --workload-pool=$PROJECT_ID.svc.id.goog \
      --zone $CLUSTER_LOCATION \
      --project $PROJECT_ID
  5. Activez Workload Identity pour chaque pool de nœuds à l'aide des commandes suivantes. Cette opération peut prendre jusqu'à 30 minutes pour chaque nœud :

    Clusters régionaux

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

    Cluster zonal

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

    NODE_POOL_NAME est le nom de chaque pool de nœuds. Dans la plupart des installations Apigee hybrid, les deux pools de nœuds par défaut sont nommés apigee-data et apigee-runtime.

  6. Vérifiez que Workload Identity est activé sur vos pools de nœuds à l'aide des commandes suivantes :

    Clusters régionaux

    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 zonal

    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:"

    Le résultat doit se présenter sous la forme suivante :

    ---
    diskSizeGb: 100
    diskType: pd-standard
    ...
    workloadMetadataConfig:
      mode: GKE_METADATA
        
  7. Obtenez la liste des noms des comptes de service Google Cloud de votre projet. Vous aurez besoin de ces noms pour associer les comptes de service Kubernetes afin de configurer Workload Identity. Pour les installations hors production, il ne doit y avoir qu'un seul compte de service Google. Pour les installations en production, il doit y en avoir huit.

    Utilisez la commande suivante pour obtenir la liste des noms :

    gcloud iam service-accounts list --project $PROJECT_ID

    Le résultat doit se présenter sous la forme suivante :

    Hors production

    Pour les environnements hors production :

    DISPLAY NAME         EMAIL                                                      DISABLED
    apigee-non-prod      apigee-non-prod@my_project_id.iam.gserviceaccount.com      False
    

    Production

    Pour les environnements hors production :

    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. Obtenez la liste des noms des comptes de service Kubernetes. Vous aurez besoin de cette liste de noms pour associer vos comptes de service Google Cloud ultérieurement dans cette procédure. Exécutez la commande suivante :
    kubectl get sa -n $NAMESPACE

    La sortie doit se présenter sous la forme suivante. Les comptes de service Kubernetes en gras sont ceux que vous devrez associer avec vos comptes de service 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
        

Configurer Workload Identity

Procédez comme suit pour activer Workload Identity pour votre installation hybride :

  1. Pour chaque composant Apigee, annotez les comptes de service Kubernetes correspondants avec le compte de service Google du composant.

    Les étapes suivantes utilisent deux variables d'environnement. Vous allez réinitialiser les valeurs de ces variables avant chaque ensemble de commandes :

    • GSA_NAME : nom d'un compte de service Google. Il s'agit des comptes de service que vous avez créés avec l'outil create-service-account à l'étape 4 : Créer des comptes de service.
    • KSA_NAME : nom d'un compte de service Kubernetes. Il s'agit des comptes que vous avez répertoriés ci-dessus en exécutant la commande kubectl get sa -n $NAMESPACE (par exemple, apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa).
    • Cassandra

      Configurez Workload Identity pour le composant Cassandra.

      Le composant Cassandra est associé à six comptes de service Kubernetes :

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

      Hors production

      Configurer le compte de service Kubernetes apigee-cassandra-backup

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :
        GSA_NAME="apigee-non-prod"
        KSA_NAME="apigee-cassandra-backup"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

        La sortie doit comporter une ligne décrivant l'annotation, semblable à ceci :

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

      Configurer le compte de service Kubernetes apigee-cassandra-restore

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-restore"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurer le compte de service Kubernetes apigee-cassandra-schema-setup

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        Exemple : apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurer le compte de service Kubernetes apigee-cassandra-schema-val

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Exemple : apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurer le compte de service Kubernetes apigee-cassandra-user-setup

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        Exemple : apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurer le compte de service Kubernetes apigee-datastore-default-sa

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-datastore-default-sa"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      Configurer le compte de service Kubernetes apigee-cassandra-backup

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :
        GSA_NAME="apigee-cassandra"
        KSA_NAME="apigee-cassandra-backup"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
      5. La sortie doit comporter une ligne décrivant l'annotation, semblable à ceci :

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

      Configurer le compte de service Kubernetes apigee-cassandra-restore

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-restore"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com

      Configurer le compte de service Kubernetes apigee-cassandra-schema-setup

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
        Exemple : apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurer le compte de service Kubernetes apigee-cassandra-schema-val

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-schema-val-service-account-name"
        Exemple : apigee-cassandra-schema-val-hybrid-example-project-123abcd
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurer le compte de service Kubernetes apigee-cassandra-user-setup

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
        Exemple : apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Configurer le compte de service Kubernetes apigee-datastore-default-sa

      1. Redéfinissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-datastore-default-sa"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Connect

      Configurer Workload Identity pour le composant Apigee Connect.

      Hors production

      1. Définissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        Exemple : apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :
        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-connect-agent-service-account-name-sa"
        Exemple : apigee-connect-agent-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • MART

      Configurez Workload Identity pour le composant MART.

      Hors production

      1. Définissez la variable d'environnement KSA_NAME :

        KSA_NAME="apigee-mart-service-account-name-sa"
        Exemple : apigee-mart-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :

        GSA_NAME="apigee-mart"
        KSA_NAME="apigee-mart-service-account-name-sa"
        Exemple : apigee-mart-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Métriques Apigee

      Configurer Workload Identity pour le composant de métriques Apigee.

      Hors production

      1. Définissez les variables d'environnement KSA_NAME :

        KSA_NAME="apigee-metrics-sa"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :

        GSA_NAME="apigee-metrics"
        KSA_NAME="apigee-metrics-sa"
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
        --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (au niveau de l'organisation)

      Configurez Workload Identity pour le composant UDCA au niveau de l'organisation.

      L'UDCA est implémenté dans les champs d'application au niveau de l'organisation et de l'environnement. Par conséquent, il existe deux comptes de service Kubernetes distincts pour l'UDCA, un pour chaque champ d'application. Vous pouvez les distinguer grâce au nom du compte. Le compte de champ d'application de l'environnement inclut le nom de l'environnement dans le nom du compte de service. Exemple :

      • Au niveau de l'organisation : apigee-udca-my-project-id-123abcd-sa, où my-project-id est l'ID du projet.
      • Au niveau de l'environnement : apigee-udca-my-project-id-my-env-234bcde-sa, où my-env est le nom de l'environnement.

      Hors production

      1. Définissez les variables d'environnement KSA_NAME :

        KSA_NAME="apigee-udca-service-account-name-sa"
        Exemple : apigee-udca-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
          kubectl annotate serviceaccount \
            --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-service-account-name-sa"
        Exemple : apigee-udca-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Apigee Watcher

      Configurer Workload Identity pour le composant Apigee Watcher.

      Hors production

      1. Définissez les variables d'environnement KSA_NAME :

        KSA_NAME="apigee-watcher-service-account-name-sa"
        Exemple : apigee-watcher-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :

        GSA_NAME="apigee-watcher"
        KSA_NAME="apigee-watcher-service-account-name-sa"
        Exemple : apigee-watcher-hybrid-example-project-123abcd-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Environnement d'exécution

      Configurer Workload Identity pour le composant d'environnement d'exécution Apigee.

      Hors production

      1. Définissez les variables d'environnement KSA_NAME :

        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        Exemple : apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :

        GSA_NAME="apigee-runtime"
        KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
        Exemple : apigee-runtime-hybrid-example-project-example-env-234bcde-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • Synchronisateur

      Configurez Workload Identity pour le composant Synchronisateur.

      Hors production

      1. Définissez les variables d'environnement KSA_NAME :

        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Exemple : apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :

        GSA_NAME="apigee-synchronizer"
        KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
        Exemple : apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
    • UDCA (au niveau de l'environnement)

      Configurez Workload Identity pour le composant UDCA au niveau de l'environnement.

      Hors production

      1. Définissez les variables d'environnement KSA_NAME :

        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Exemple : apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME

      Production

      1. Définissez les variables d'environnement KSA_NAME et GSA_NAME :

        GSA_NAME="apigee-udca"
        KSA_NAME="apigee-udca-env-level-service-account-name-sa"
        Exemple : apigee-udca-hybrid-example-project-example-env-234bcde-sa
      2. Liez le rôle 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. Annotez le compte de service :
        kubectl annotate serviceaccount \
          --namespace $NAMESPACE $KSA_NAME iam.gke.io/gcp-service-account=$GSA_NAME@$PROJECT_ID.iam.gserviceaccount.com
      4. Vérifiez l'annotation :
        kubectl describe serviceaccount \
          --namespace $NAMESPACE $KSA_NAME
  2. Facultatif : Supprimez tous les fichiers de clé de compte de service téléchargés.

    Si vous avez créé les comptes de service Google avec l'outil create-service-account, celui-ci a peut-être créé des clés de compte de service et téléchargé les fichiers de clés .json. Lorsque vous utilisez Workload Identity sur GKE, vous n'avez pas besoin de ces fichiers de clés.

    Vous pouvez supprimer les fichiers de clé à l'aide de la commande suivante :

    rm $HYBRID_FILES/service-accounts/*.json

Vérifier Workload Identity

  1. (Facultatif) Vous pouvez consulter l'état de vos comptes de service Kubernetes sur la page Kubernetes : présentation des charges de travail de la console Google Cloud.

    Accéder à la page Charges de travail

  2. Pour vérifier à nouveau l'état du déploiement à l'aide de apigeectl check-ready, procédez comme suit :
    ${APIGEECTL_HOME}/apigeectl check-ready -f ${HYBRID_FILES}/overrides/overrides.yaml
(SUITE) Étape 1 : Exposer l'entrée Apigee 2