Ce document explique comment configurer et utiliser l'authentification du cluster d'identité de charge de travail pour Google Distributed Cloud (logiciel uniquement) sur Bare Metal. Au lieu de clés de compte de service, l'authentification de cluster Workload Identity utilise des jetons de courte durée et la fédération d'identité de charge de travail pour créer et sécuriser vos clusters. Les identifiants éphémères du compte de service sont sous la forme de jetons d'accès OAuth 2.0. Par défaut, les jetons d'accès expirent au bout d'une heure. De même, les jetons de récupération d'images expirent également au bout d'une heure par défaut.
En revanche, le mode avec clé, qui est la méthode standard pour créer et sécuriser des clusters, utilise les clés de compte de service téléchargées. Lorsque vous créez un cluster autogéré (administrateur, hybride ou autonome), vous spécifiez le chemin d'accès aux clés téléchargées. Les clés sont ensuite stockées en tant que secrets dans le cluster et dans tous les clusters utilisateur gérés. Par défaut, les clés de compte de service ne sont pas soumises à une date d'expiration et constituent un risque pour la sécurité si elles ne sont pas gérées correctement. Pour savoir comment définir un délai d'expiration pour vos clés de compte de service, consultez Délais d'expiration des clés gérées par l'utilisateur.
L'authentification de cluster Workload Identity présente deux avantages principaux par rapport à l'utilisation de clés de compte de service :
Sécurité améliorée: les clés de compte de service constituent un risque pour la sécurité si elles ne sont pas gérées correctement. Les jetons OAuth 2.0 et la fédération d'identité de charge de travail sont considérés comme des bonnes alternatives aux clés de compte de service. Pour en savoir plus sur les jetons de compte de service, consultez Identifiants de compte de service à court terme. Pour en savoir plus sur la fédération d'identité de charge de travail, consultez Fédération d'identité de charge de travail.
Maintenance réduite: les clés de compte de service nécessitent plus de maintenance. La rotation et la sécurisation régulières de ces clés peuvent représenter un fardeau administratif important.
L'authentification de cluster Workload Identity a été introduite en version preview avec la version 1.30 et est disponible en disponibilité générale pour la version 1.33 et ultérieure. L'authentification du cluster Workload Identity ne peut être activée que lors de la création de clusters. Vous ne pouvez pas configurer un cluster existant pour qu'il utilise l'authentification du cluster Workload Identity lors d'une mise à jour ou d'une mise à niveau. Pour connaître les autres restrictions, consultez la section Limites.
Cette page s'adresse aux administrateurs, aux architectes et aux opérateurs qui configurent, surveillent et gèrent le cycle de vie de l'infrastructure technologique sous-jacente. Pour en savoir plus sur les rôles courants et les exemples de tâches que nous citons dans le contenuGoogle Cloud , consultez Rôles utilisateur et tâches courantes de GKE.
Avant de commencer
Dans les sections suivantes, vous allez créer des comptes de service et accorder les rôles nécessaires pour l'authentification du cluster avec l'identité de charge de travail. Les instructions de configuration de ce document ne remplacent pas celles de la section Configurer des ressources Google Cloud. Elles sont requises en plus des conditions préalables standards d'installation logicielle uniquement de Google Distributed Cloud. Les comptes de service requis pour l'authentification du cluster Workload Identity sont semblables à ceux décrits dans Configurer des ressourcesGoogle Cloud , mais ils ont un nom unique. Ils n'interfèrent donc pas avec les clusters qui utilisent les clés de compte de service par défaut.
Les comptes de service requis pour l'authentification du cluster Workload Identity diffèrent pour les offres en version bêta et en disponibilité générale, comme décrit dans le tableau suivant :
1.33 et versions ultérieures
Compte de service | Objectif | Rôles |
---|---|---|
admin-sa |
Vous utiliserez ce compte de service pour générer des jetons. Chaque jeton dispose des droits associés aux rôles du compte de service. |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin roles/resourcemanager.projectIamAdmin
|
baremetal-gcr |
Google Distributed Cloud utilise ce compte de service pour télécharger des images de conteneurs à partir d'Artifact Registry. | Aucun |
1.30-1.32
Compte de service | Objectif | Rôles |
---|---|---|
admin-sa |
Vous utiliserez ce compte de service pour générer des jetons. Chaque jeton dispose des droits associés aux rôles du compte de service. |
roles/gkehub.admin roles/iam.serviceAccountAdmin roles/iam.serviceAccountTokenCreator roles/logging.admin roles/monitoring.admin
|
baremetal-controller |
L'agent Connect utilise ce compte de service pour maintenir une connexion entre votre cluster et Google Cloud , et pour enregistrer vos clusters auprès d' un parc.
Ce compte de service actualise également les jetons pour le compte de service baremetal-gcr .
|
roles/gkehub.admin roles/monitoring.dashboardEditor roles/serviceusage.serviceUsageViewer
|
baremetal-cloud-ops |
L'agent Stackdriver utilise ce compte de service pour exporter les journaux et les métriques des clusters vers Cloud Logging et Cloud Monitoring. |
roles/kubernetesmetadata.publisher roles/logging.logWriter roles/monitoring.dashboardEditor roles/monitoring.metricWriter roles/monitoring.viewer roles/opsconfigmonitoring.resourceMetadata.writer roles/serviceusage.serviceUsageViewer roles/stackdriver.resourceMetadata.writer
|
baremetal-gcr |
Google Distributed Cloud utilise ce compte de service pour télécharger des images de conteneurs à partir d'Artifact Registry. | Aucun |
Configurer des comptes de service
Les sections suivantes contiennent des instructions pour créer les comptes de service requis et leur attribuer les rôles nécessaires pour l'authentification du cluster Workload Identity. Pour obtenir la liste des comptes de service et des rôles requis, consultez le tableau de la section précédente.
Créer des comptes de service
Pour créer les comptes de service pour l'authentification du cluster Workload Identity, procédez comme suit :
Sur votre poste de travail administrateur, connectez-vous à Google Cloud CLI:
gcloud auth login
Créez les comptes de service requis pour l'authentification du cluster Workload Identity :
Le nom du compte de service
admin-sa
est arbitraire. Vous pouvez modifier le nom s'il est source de conflit dans votre projet. Les autres comptes de service pour l'authentification du cluster Workload Identity ont des noms prédéterminés qui peuvent être personnalisés, si vous le souhaitez.1.33 et versions ultérieures
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
Remplacez
PROJECT_ID
par l'ID de votre projetGoogle Cloud .1.30-1.32
gcloud iam service-accounts create admin-sa \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-controller \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-cloud-ops \ --project=PROJECT_ID gcloud iam service-accounts create baremetal-gcr \ --project=PROJECT_ID
Remplacez
PROJECT_ID
par l'ID de votre projetGoogle Cloud .
Ajouter des liaisons de stratégie Identity and Access Management pour les comptes de service
Pour appliquer les liaisons de stratégie Identity and Access Management requises aux nouveaux comptes de service :
1.33 et versions ultérieures
Ajoutez des liaisons de stratégie IAM pour les rôles requis pour le compte de service
admin-sa
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/resourcemanager.projectIamAdmin
1.30-1.32
Ajoutez des liaisons de stratégie IAM pour les rôles requis pour le compte de service
admin-sa
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountAdmin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.admin
Ajoutez des liaisons de stratégie IAM pour les rôles requis pour le compte de service
baremetal-controller
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/gkehub.admin gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer
Ajoutez des liaisons de stratégie IAM pour les rôles requis pour le compte de service
baremetal-cloud-ops
:gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/kubernetesmetadata.publisher gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.logWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.dashboardEditor gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.viewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/opsconfigmonitoring.resourceMetadata.writer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/serviceusage.serviceUsageViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/stackdriver.resourceMetadata.writer
Autorisez le compte de service
baremetal-controller
à générer des jetons d'accès au nom du compte de servicebaremetal-gcr
:gcloud iam service-accounts add-iam-policy-binding \ baremetal-gcr@PROJECT_ID.iam.gserviceaccount.com \ --member=serviceAccount:baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.serviceAccountTokenCreator
Configurer l'authentification
Les étapes suivantes permettent de configurer le flux d'authentification qui utilise un jeton de courte durée pour authentifier les opérations de cluster :
Sur votre poste de travail administrateur, connectez-vous à Google Cloud CLI:
gcloud auth login
Sur votre poste de travail administrateur, créez et téléchargez une clé pour le compte de service
admin-sa
:Cette clé est nécessaire pour autoriser l'accès au compte de service
admin-sa
.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Remplacez
TMP_KEY_FILE_PATH
par le chemin d'accès, y compris le nom de fichier de clé téléchargé.Sur votre poste de travail administrateur, créez une variable d'environnement
GOOGLE_APPLICATION_CREDENTIALS
avec la valeur de la clé de compte de service téléchargée :export GOOGLE_APPLICATION_CREDENTIALS=TMP_KEY_FILE_PATH
Sur votre poste de travail administrateur, créez une variable d'environnement
GCP_ACCESS_TOKEN
avec la valeur d'un jeton d'accès créé par le compte de serviceadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
Par défaut, le jeton d'accès a une durée de vie d'une heure.
Vérifiez que le jeton est généré par le compte de service
admin-sa
avec la date d'expiration correcte :curl "https://oauth2.googleapis.com/tokeninfo?access_token=$GCP_ACCESS_TOKEN"
La réponse doit inclure des lignes semblables à celles-ci:
... "exp": "1759512810", "expires_in": "3589", ...
La valeur d'expiration est exprimée en secondes et doit être inférieure à
3600
, ce qui indique que le jeton expirera dans moins d'une heure.
Configurer la fédération d'identité de charge de travail pour vos clusters
Pour fournir un accès Google Cloud avec la fédération d'identité de charge de travail pour GKE, vous devez créer une stratégie d'autorisation IAM qui accorde l'accès à une ressourceGoogle Cloud spécifique à un compte principal correspondant à l'identité de votre application. Dans ce cas, Workload Identity Federation accorde l'accès à des opérateurs spécifiques du cluster. Pour en savoir plus sur la fédération d'identité de charge de travail pour GKE, consultez la section Fédération d'identité de charge de travail dans la documentation IAM.
1.33 et versions ultérieures
Pour les versions de cluster dans lesquelles l'authentification du cluster Workload Identity est en disponibilité générale, vous utilisez la commande bmctl configure
projects
pour configurer la fédération d'identité de charge de travail pour vos clusters. Cette commande est intégrée aux étapes de création d'un cluster d'administrateur et de création d'un cluster d'utilisateur.
1.30-1.32
Pour les versions de cluster dans lesquelles l'authentification du cluster Workload Identity est en version Preview, vous devez configurer manuellement la fédération d'identité de charge de travail pour vos clusters, comme décrit dans les sections suivantes.
Ajouter des liaisons de stratégie IAM pour l'opérateur de cluster
Les commandes suivantes permettent au compte de service Kubernetes anthos-cluster-operator
d'emprunter l'identité du compte de service baremetal-controller
et d'interagir avec les ressources Google Cloud au nom du cluster :
Pour chaque cluster configuré pour l'authentification de cluster Workload Identity (ou prévu pour utiliser l'authentification de cluster Workload Identity), y compris le cluster d'amorçage, accordez à
anthos-cluster-operator
dans le cluster la possibilité d'emprunter l'identité du compte de servicebaremetal-controller
:Dans la commande suivante,
principalSet
se compose du pool d'identité de la charge de travail et d'un compte de service Kubernetes,anthos-cluster-operator
, dans l'espace de nomskube-system
.gcloud iam service-accounts add-iam-policy-binding \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/anthos-cluster-operator \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
Remplacez les éléments suivants :
PROJECT_NUM
: identifiant unique généré automatiquement pour votre projet.REGION
: emplacement de l'appartenance au parc pour votre cluster, qui estglobal
par défaut. Pour en savoir plus, consultez Emplacement des appartenances à un parc.CLUSTER_NAME
: nom du cluster. Par défaut, le nom du cluster d'amorçage estbmctl-MACHINE_NAME
.
Vérifiez les liaisons de stratégie pour le compte de service
baremetal-controller
:gcloud iam service-accounts get-iam-policy \ baremetal-controller@PROJECT_ID.iam.gserviceaccount.com
La réponse devrait ressembler à ceci :
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/anthos-cluster-operator - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/anthos-cluster-operator role: roles/iam.workloadIdentityUser etag: BwYoN3QLig0= version: 1
Ajouter des liaisons de stratégie IAM pour les opérateurs Google Cloud Observability
Les commandes suivantes permettent aux comptes de service Kubernetes Google Cloud Observability suivants de se faire passer pour le compte de service baremetal-cloud-ops
et d'interagir avec les ressources Google Cloud au nom du cluster :
cloud-audit-logging
gke-metrics-agent
kubestore-collector
metadata-agent
stackdriver-log-forwarder
Pour chaque cluster configuré pour l'authentification de cluster Workload Identity (ou prévu pour utiliser l'authentification de cluster Workload Identity), y compris le cluster d'amorçage, autorisez les opérateurs Google Cloud Observability du cluster à emprunter l'identité du compte de service
baremetal-cloud-ops
:Dans chacune des commandes suivantes,
principalSet
se compose du pool d'identités de la charge de travail et d'un compte de service Kubernetes, tel quecloud-audit-logging
, dans l'espace de nomskube-system
.gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/cloud-audit-logging \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/gke-metrics-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/kubestore-collector \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/metadata-agent \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID gcloud iam service-accounts add-iam-policy-binding \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com \ --member=principalSet://iam.googleapis.com/projects/PROJECT_NUM/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/attribute.fleetclusteridentity/projects/PROJECT_ID/locations/REGION/memberships/CLUSTER_NAME/ns/kube-system/sa/stackdriver-log-forwarder \ --role=roles/iam.workloadIdentityUser \ --project=PROJECT_ID
Vérifiez les liaisons de stratégie pour le compte de service
baremetal-cloud-ops
:gcloud iam service-accounts get-iam-policy \ baremetal-cloud-ops@PROJECT_ID.iam.gserviceaccount.com
La réponse devrait ressembler à ceci :
bindings: - members: - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/bmctl-admin-ws/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/admin-cluster/kube-system/stackdriver-log-forwarder - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/cloud-audit-logging - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/gke-metrics-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/kubestore-collector - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/metadata-agent - principalSet://iam.googleapis.com/projects/112233445566/locations/global/workloadIdentityPools/my-project.svc.id.goog/attribute.fleetclusteridentity/user-cluster/kube-system/stackdriver-log-forwarder role: roles/iam.workloadIdentityUser etag: BwYhT4gL-dY= version: 1
Créer un cluster d'administrateur
La procédure de création d'un cluster d'administrateur diffère légèrement pour les offres Preview (versions 1.30 à 1.32) et GA (versions 1.33 et ultérieures). Les étapes de disponibilité générale utilisent la commande bmctl configure
projects
pour configurer la fédération d'identité de charge de travail pour vos clusters.
1.33 et versions ultérieures
La différence la plus évidente entre la configuration des clusters qui utilisent l'authentification de cluster Workload Identity et celle des clusters qui utilisent le mode avec clé est que vous ne spécifiez pas les chemins d'accès aux clés de compte de service téléchargées.
Lorsque vous renseignez les paramètres de votre cluster dans le fichier de configuration, laissez les chemins d'accès aux clés de compte de service dans la section des identifiants vides, comme illustré dans l'exemple suivant :
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Ajoutez l'annotation
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
au fichier de configuration du cluster :gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Sur votre poste de travail administrateur, mettez à jour la variable d'environnement
GCP_ACCESS_TOKEN
avec un jeton d'accès nouvellement récupéré :export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
Par défaut, le jeton d'accès a une durée de vie de 3 600 secondes (une heure). Lorsque vous utilisez l'authentification du cluster Workload Identity,
bmctl
vérifie le délai d'expiration du jeton. Si le jeton expire dans les 1 800 secondes (30 minutes),bmctl
signale une erreur et quitte le programme.Configurez la fédération d'identité de charge de travail pour le cluster que vous créez :
bmctl configure projects --project-id=PROJECT_ID \ --admin-cluster=ADMIN_CLUSTER_NAME
Exécutez la commande
bmctl create cluster
pour créer votre cluster d'administrateur.
1.30-1.32
La différence la plus évidente entre la configuration des clusters qui utilisent l'authentification de cluster Workload Identity et celle des clusters qui utilisent le mode avec clé est que vous ne spécifiez pas les chemins d'accès aux clés de compte de service téléchargées.
Lorsque vous renseignez les paramètres de votre cluster dans le fichier de configuration, laissez les chemins d'accès aux clés de compte de service dans la section des identifiants vides, comme illustré dans l'exemple suivant :
gcrKeyPath: sshPrivateKeyPath: /home/USERNAME/.ssh/id_rsa gkeConnectAgentServiceAccountKeyPath: gkeConnectRegisterServiceAccountKeyPath: cloudOperationsServiceAccountKeyPath: --- apiVersion: v1 kind: Namespace metadata: name: cluster-ADMIN_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: ADMIN_CLUSTER_NAME namespace: cluster-ADMIN_CLUSTER_NAME spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Sur votre poste de travail administrateur, créez et téléchargez une clé pour le compte de service
admin-sa
:Cette clé est nécessaire pour autoriser l'accès au compte de service
admin-sa
. Vous devez la supprimer immédiatement après l'autorisation du compte de service.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Remplacez
TMP_KEY_FILE_PATH
par le chemin d'accès, y compris le nom de fichier de clé téléchargé.Autorisez l'accès à Google Cloud avec le compte de service
admin-sa
:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
Supprimez le fichier de clé JSON téléchargé:
rm TMP_KEY_FILE_PATH
Le jeton d'accès a une durée de vie courte. Vous devez donc généralement le régénérer avant d'exécuter des commandes
bmctl
pour les opérations de cluster, telles que la création, la mise à niveau ou la réinitialisation d'un cluster.Sur votre poste de travail administrateur, créez une variable d'environnement
GCP_ACCESS_TOKEN
avec la valeur d'un jeton d'accès créé par le compte de serviceadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
Par défaut, le jeton d'accès a une durée de vie de 3 600 secondes (une heure).
Exécutez la commande
bmctl create cluster
pour créer votre cluster d'administrateur.
Créer un cluster d'utilisateur
La procédure de création d'un cluster d'administrateur diffère légèrement pour les offres Preview (versions 1.30 à 1.32) et GA (versions 1.33 et ultérieures). Les étapes de disponibilité générale utilisent la commande bmctl configure
projects
pour configurer la fédération d'identité de charge de travail pour vos clusters.
1.33 et versions ultérieures
Ajoutez l'annotation
baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true"
au fichier de configuration du cluster :apiVersion: v1 kind: Namespace metadata: name: cluster-USER_CLUSTER_NAME --- apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: USER_CLUSTER_NAME namespace: cluster-USER_CLUSTER_NAME annotations: baremetal.cluster.gke.io/enable-workload-identity-cluster-authentication: "true" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Le jeton d'accès a une durée de vie courte. Vous devez donc généralement le régénérer avant d'exécuter des commandes
bmctl
pour les opérations de cluster, telles que la création, la mise à niveau ou la réinitialisation d'un cluster.Sur votre poste de travail administrateur, mettez à jour la variable d'environnement
GCP_ACCESS_TOKEN
avec un jeton d'accès nouvellement récupéré :export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
Par défaut, le jeton d'accès a une durée de vie de 3 600 secondes (une heure).
Configurez la fédération d'identité de charge de travail pour le cluster que vous créez :
bmctl configure projects --project-id=PROJECT_ID \ --user-clusters=USER_CLUSTER_NAME
Utilisez
kubectl
pour déployer le fichier manifeste du cluster d'utilisateur :kubectl apply -f USER_CLUSTER_CONFIG \ --kubeconfig ADMIN_KUBECONFIG
Remplacez les éléments suivants :
USER_CLUSTER_CONFIG
: chemin d'accès au fichier de configuration du cluster d'utilisateurADMIN_KUBECONFIG
: chemin d'accès au fichier kubeconfig du cluster d'administrateur.
1.30-1.32
Sur votre poste de travail administrateur, créez et téléchargez une clé pour le compte de service
admin-sa
:Cette clé est nécessaire pour autoriser l'accès au compte de service
admin-sa
. Vous devez la supprimer immédiatement après l'autorisation du compte de service.gcloud iam service-accounts keys create TMP_KEY_FILE_PATH \ --iam-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com
Remplacez
TMP_KEY_FILE_PATH
par le chemin d'accès, y compris le nom de fichier de clé téléchargé.Autorisez l'accès à Google Cloud avec le compte de service
admin-sa
:gcloud auth activate-service-account admin-sa@PROJECT_ID.iam.gserviceaccount.com \ --key-file=TMP_KEY_FILE_PATH
Supprimez le fichier de clé JSON téléchargé:
rm TMP_KEY_FILE_PATH
Le jeton d'accès a une durée de vie courte. Vous devez donc généralement le régénérer avant d'exécuter des commandes
bmctl
pour les opérations de cluster, telles que la création, la mise à niveau ou la réinitialisation d'un cluster.Sur votre poste de travail administrateur, créez une variable d'environnement
GCP_ACCESS_TOKEN
avec la valeur d'un jeton d'accès créé par le compte de serviceadmin-sa
:export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
Par défaut, le jeton d'accès a une durée de vie de 3 600 secondes (une heure).
Exécutez la commande
bmctl create cluster
pour créer votre cluster d'utilisateur.
Autres opérations sur les clusters
Pour les clusters qui utilisent l'authentification de cluster Workload Identity, les commandes bmctl
suivantes nécessitent que la variable d'environnement GCP_ACCESS_TOKEN
soit définie sur un jeton d'accès valide et actif :
bmctl configure projects
bmctl create cluster
bmctl reset cluster
bmctl upgrade cluster
Si bmctl
détecte que la variable d'environnement GCP_ACCESS_TOKEN
a été définie, il effectue la validation du jeton :
Si le jeton est valide,
bmctl
l'utilise pour les opérations de cluster.Si le jeton n'est pas valide, récupérez-en un nouveau :
Le jeton d'accès a une durée de vie courte. Vous devez donc généralement le régénérer avant d'exécuter des commandes
bmctl
pour les opérations de cluster, telles que la création, la mise à niveau ou la réinitialisation d'un cluster. Sur votre poste de travail administrateur, mettez à jour la variable d'environnementGCP_ACCESS_TOKEN
avec un jeton d'accès nouvellement récupéré :1.33 et versions ultérieures
export GCP_ACCESS_TOKEN=$(gcloud auth application-default print-access-token)
1.30-1.32
export GCP_ACCESS_TOKEN=$(gcloud auth print-access-token \ --impersonate-service-account=admin-sa@PROJECT_ID.iam.gserviceaccount.com)
Par défaut, le jeton d'accès a une durée de vie de 3 600 secondes (une heure). Lorsque vous utilisez l'authentification du cluster Workload Identity,
bmctl
vérifie le délai d'expiration du jeton. Si le jeton expire dans les 1 800 secondes (30 minutes),bmctl
signale une erreur et quitte le programme.
Personnalisation
Vous pouvez utiliser des comptes de service avec des noms uniques pour l'authentification du cluster Workload Identity, à condition qu'ils disposent de liaisons pour les rôles requis.
1.33 et versions ultérieures
Par défaut, l'authentification du cluster Workload Identity pour les clusters de version 1.33 et ultérieure n'utilise que le compte de service baremetal-gcr
. Il s'agit donc du seul compte de service pouvant être personnalisé.
Assurez-vous que le compte de service que vous souhaitez utiliser dispose des rôles identifiés dans le tableau de la section Avant de commencer.
Annotez le fichier de configuration du cluster pour spécifier le nom personnalisé du compte de service d'authentification du cluster Workload Identity :
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.33.0-gke.799 ...
Remplacez CUSTOM_AR_GSA
par le nom de l'adresse e-mail du compte de service utilisé par Google Distributed Cloud pour télécharger des images de conteneurs à partir d'Artifact Registry.
1.30-1.32
Assurez-vous que les comptes de service que vous souhaitez utiliser disposent des rôles identifiés dans le tableau de la section Avant de commencer.
Ajoutez une annotation au fichier de configuration du cluster pour spécifier les noms personnalisés des comptes de service du service d'authentification du cluster Workload Identity :
La spécification de noms personnalisés vous permet d'utiliser des comptes de service existants. Assurez-vous que les noms de comptes de service personnalisés que vous spécifiez sont différents les uns des autres. Nous n'autorisons pas l'utilisation d'un seul compte de service pour remplacer deux comptes de service par défaut ou plus.
apiVersion: baremetal.cluster.gke.io/v1 kind: Cluster metadata: name: my-cluster namespace: cluster-my-cluster annotations: ... baremetal.cluster.gke.io/controller-service-account: "CUSTOM_CONTROLLER_GSA" baremetal.cluster.gke.io/cloud-ops-service-account: "CUSTOM_CLOUD_OPS_GSA" baremetal.cluster.gke.io/gcr-service-account: "CUSTOM_AR_GSA" spec: type: admin profile: default anthosBareMetalVersion: 1.30.0-gke.1930 ...
Remplacez les éléments suivants :
CUSTOM_CONTROLLER_GSA
: nom de l'adresse e-mail du compte de service utilisé par l'agent Connect pour maintenir une connexion entre votre cluster et Google Cloud, et pour enregistrer vos clusters.CUSTOM_CLOUD_OPS_GSA
: nom de l'adresse e-mail du compte de service utilisé par l'agent Stackdriver pour exporter les journaux et les métriques des clusters vers Cloud Logging et Cloud Monitoring.CUSTOM_AR_GSA
: nom de l'adresse e-mail du compte de service utilisé par Google Distributed Cloud pour télécharger les images de conteneurs depuis Artifact Registry.
Limites
Les fonctionnalités suivantes ne sont pas compatibles lorsque vous utilisez l'authentification du cluster Workload Identity pour Google Distributed Cloud (logiciel uniquement) sur Bare Metal :
- Utiliser un serveur proxy
- VPC Service Controls
- Mettre à jour les clusters en mode clé existants pour utiliser l'authentification de cluster Workload Identity
- Gestion du cycle de vie des clusters à l'aide de clients de l'API GKE On-Prem, tels que Google Cloud CLI, Terraform ou la console Google Cloud