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_HOMEecho $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 exempleus-central1
.ENV_NAME
est le nom de votre environnement.HYBRID_FILES
correspond au répertoire dans lequel vous avez créé les répertoiresoverrides
etcerts
.NAMESPACE
est votre espace de noms Apigee.PROJECT_ID
correspond à votre projet Google Cloud.ORG_NAME
est le nom de votre organisation Apigee.
- 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
- 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écutezapigeectl apply
avec l'option--restore
:$APIGEECTL_HOME/apigeectl apply -f $HYBRID_FILES/overrides/overrides.yaml --restore
- 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
-
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
Où 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
etapigee-runtime
. - 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
- 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
- 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
Si nécessaire, définissez la configuration gcloud
actuelle :
gcloud config set project $PROJECT_ID
Configurer Workload Identity
Procédez comme suit pour activer Workload Identity pour votre installation hybride :
-
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
).
- GSA_NAME : nom d'un compte de service Google. Il s'agit des comptes de service que vous avez créés avec l'outil
- 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
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
:GSA_NAME="apigee-non-prod"
KSA_NAME="apigee-cassandra-backup"
- 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
- 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
- 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
- Redéfinissez la variable d'environnement
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurer le compte de service Kubernetes
apigee-cassandra-schema-setup
- Redéfinissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurer le compte de service Kubernetes
apigee-cassandra-schema-val
- Redéfinissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurer le compte de service Kubernetes
apigee-cassandra-user-setup
- Redéfinissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurer le compte de service Kubernetes
apigee-datastore-default-sa
- Redéfinissez la variable d'environnement
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
Configurer le compte de service Kubernetes
apigee-cassandra-backup
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
:GSA_NAME="apigee-cassandra"
KSA_NAME="apigee-cassandra-backup"
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- 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-cassandra@my-project-id.iam.gserviceaccount.com
Configurer le compte de service Kubernetes
apigee-cassandra-restore
- Redéfinissez la variable d'environnement
KSA_NAME
:KSA_NAME="apigee-cassandra-restore"
- 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
- 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
- Redéfinissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-cassandra-schema-setup-service-account-name-sa"
apigee-cassandra-schema-setup-hybrid-example-project-123abcd-sa
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
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
Configurer le compte de service Kubernetes
apigee-cassandra-schema-val
- Redéfinissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-cassandra-schema-val-service-account-name"
apigee-cassandra-schema-val-hybrid-example-project-123abcd
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurer le compte de service Kubernetes
apigee-cassandra-user-setup
- Redéfinissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-cassandra-user-setup-service-account-name-sa"
apigee-cassandra-user-setup-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Configurer le compte de service Kubernetes
apigee-datastore-default-sa
- Redéfinissez la variable d'environnement
KSA_NAME
:KSA_NAME="apigee-datastore-default-sa"
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Apigee Connect
Configurer Workload Identity pour le composant Apigee Connect.
Hors production
- Définissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
: Exemple :GSA_NAME="apigee-mart"
KSA_NAME="apigee-connect-agent-service-account-name-sa"
apigee-connect-agent-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Définissez la variable d'environnement
- MART
Configurez Workload Identity pour le composant MART.
Hors production
- Définissez la variable d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
: Exemple :GSA_NAME="apigee-mart"
KSA_NAME="apigee-mart-service-account-name-sa"
apigee-mart-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Définissez la variable d'environnement
- Métriques Apigee
Configurer Workload Identity pour le composant de métriques Apigee.
Hors production
- Définissez les variables d'environnement
KSA_NAME
:KSA_NAME="apigee-metrics-sa"
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
:GSA_NAME="apigee-metrics"
KSA_NAME="apigee-metrics-sa"
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Définissez les variables d'environnement
- 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
- Définissez les variables d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
: Exemple :GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-service-account-name-sa"
apigee-udca-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Au niveau de l'organisation :
- Apigee Watcher
Configurer Workload Identity pour le composant Apigee Watcher.
Hors production
- Définissez les variables d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
: Exemple :GSA_NAME="apigee-watcher"
KSA_NAME="apigee-watcher-service-account-name-sa"
apigee-watcher-hybrid-example-project-123abcd-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Définissez les variables d'environnement
- Environnement d'exécution
Configurer Workload Identity pour le composant d'environnement d'exécution Apigee.
Hors production
- Définissez les variables d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
: Exemple :GSA_NAME="apigee-runtime"
KSA_NAME="apigee-runtime-env-level-service-account-name-sa"
apigee-runtime-hybrid-example-project-example-env-234bcde-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Définissez les variables d'environnement
- Synchronisateur
Configurez Workload Identity pour le composant Synchronisateur.
Hors production
- Définissez les variables d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
: Exemple :GSA_NAME="apigee-synchronizer"
KSA_NAME="apigee-synchronizer-env-level-service-account-name-sa"
apigee-synchronizer-hybrid-example-project-example-env-234bcde-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Définissez les variables d'environnement
- UDCA (au niveau de l'environnement)
Configurez Workload Identity pour le composant UDCA au niveau de l'environnement.
Hors production
- Définissez les variables d'environnement
KSA_NAME
: Exemple :KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
Production
- Définissez les variables d'environnement
KSA_NAME
etGSA_NAME
: Exemple :GSA_NAME="apigee-udca"
KSA_NAME="apigee-udca-env-level-service-account-name-sa"
apigee-udca-hybrid-example-project-example-env-234bcde-sa
- 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
- 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
- Vérifiez l'annotation :
kubectl describe serviceaccount \ --namespace $NAMESPACE $KSA_NAME
- Définissez les variables d'environnement
- 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
- (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.
- 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