Ce document explique comment configurer et utiliser l'authentification de cluster Workload Identity pour Google Distributed Cloud Connected, version 1.12.0. Au lieu des clés de compte de service, l'authentification de cluster Workload Identity utilise des jetons éphémères et la fédération d'identité de charge de travail pour permettre à vos charges de travail d'accéder aux ressources de manière sécurisée. Google Cloud Les identifiants éphémères sont des jetons d'accès OAuth 2.0. Par défaut, les jetons d'accès expirent au bout d'une heure.
Avec l'authentification de cluster Workload Identity, vos charges de travail peuvent utiliser leur propre identité Kubernetes pour accéder Google Cloud directement auxressources ou emprunter l'identité d'un compte de service Google.
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 credentials. 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.
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 Google Cloud le contenu, consultez Rôles utilisateur et tâches courantes de GKE.
Gestion des clusters
Ce guide couvre la fédération d'identité de charge de travail pour vos applications. La fédération d'identité de charge de travail au niveau du cluster est gérée automatiquement pour les clusters Distributed Cloud Connected.
Les clusters Distributed Cloud Connected sont créés et gérés par Google via l'
API Distributed Cloud Edge Container,
à l'aide de la commande
gcloud edge-cloud container clusters create
ou dans la Google Cloud console.
Les clusters Distributed Cloud Connected sont automatiquement enregistrés dans un parc du projet dans lequel ils sont créés. Vous n'avez pas besoin d'effectuer d'enregistrement manuel du parc. Le pool de fédération d'identité de charge de travail est automatiquement disponible et
suit le format PROJECT_ID.svc.id.goog.
Avant de commencer
Avant de pouvoir configurer la fédération d'identité de charge de travail, vérifiez que les API suivantes sont activées dans votre Google Cloud projet. Pour en savoir plus sur l' activation des API, consultez la page Activer des services :
iam.googleapis.comsts.googleapis.comiamcredentials.googleapis.comgkehub.googleapis.com
Assurez-vous que les outils de ligne de commande suivants sont installés :
- La dernière version de la Google Cloud CLI qui
inclut
gcloud, l'outil de ligne de commande qui permet d'interagir avec Google Cloud. kubectl
Si vous utilisez Cloud Shell comme environnement shell pour interagir avec Google Cloud, ces outils sont installés pour vous.
- La dernière version de la Google Cloud CLI qui
inclut
Assurez-vous d'avoir initialisé le gcloud CLI à utiliser avec votre projet.
Assurez-vous de disposer des rôles IAM suivants sur le projet. Ces rôles sont requis pour effectuer la configuration :
- Propriétaire (
roles/owner) ou - Administrateur de sécurité IAM (
roles/iam.securityAdmin) et administrateur de compte de service (roles/iam.serviceAccountAdmin)
- Propriétaire (
Dans les sections suivantes, vous allez créer des comptes de service et accorder les rôles nécessaires pour l'authentification de cluster Workload Identity.
Recommandé : accès direct aux ressources de la fédération d'identité de charge de travail
Avec l'accès direct aux ressources de la fédération d'identité de charge de travail, vous utilisez la fédération d'identité de charge de travail pour accorder un rôle IAM à un compte de service Kubernetes afin qu'il puisse accéder directement aux Google Cloud ressources.
| Identité | Objectif | Rôles |
|---|---|---|
| Compte de service Kubernetes |
Identité Kubernetes utilisée par votre charge de travail. Accordez à cette identité les
rôles nécessaires pour accéder aux ressources requises. Google Cloud Cet exemple
accorde le rôle roles/storage.objectViewer et le
rôle roles/logging.admin.
|
roles/storage.objectViewerroles/logging.admin |
Autre solution : emprunt d'identité d'un compte de service IAM
Vous pouvez également configurer votre compte de service Kubernetes pour qu'il utilise l'emprunt d'identité d'un compte de service IAM.
| Compte de service | Objectif | Rôles |
|---|---|---|
| Compte de service Google | Compte de service Google que votre charge de travail dans le cluster emprunte. Accordez à ce compte de service les rôles nécessaires pour accéder aux ressources requises Google Cloud. | Dépend des ressources auxquelles vous accédez. |
| Compte de service Kubernetes |
Accordez à cette identité la possibilité d'emprunter l'identité du compte de service Google.
Cette autorisation utilise le rôle roles/iam.workloadIdentityUser.
|
roles/iam.workloadIdentityUser
|
Configurer des comptes de service
Les sections suivantes contiennent des instructions pour créer le compte de service Kubernetes requis et lui accorder les rôles nécessaires pour l'authentification de cluster Workload Identity à l'aide de l'accès direct aux ressources de la fédération d'identité de charge de travail ou de l'emprunt d'identité d'un compte de service Google.
Créer un compte de service Kubernetes
Dans votre cluster, utilisez la
commande kubectl create
pour créer un compte de service Kubernetes pour vos pods. Vous pouvez également utiliser n'importe quel compte de service existant, y compris le ServiceAccount par défaut dans l'espace de noms.
kubectl create serviceaccount KSA_NAME --namespace NAMESPACE
Remplacez les valeurs suivantes :
KSA_NAME: nom de votre compte de service KubernetesNAMESPACE: espace de noms de votre cluster
Utiliser la fédération d'identité de charge de travail pour accorder un accès direct aux ressources
Pour accorder directement des rôles Identity and Access Management à votre identité de compte de service Kubernetes, procédez comme suit.
Utilisez la commande gcloud projects describe pour trouver votre numéro de projet numérique :
gcloud projects describe PROJECT_ID --format="value(projectNumber)"Remplacez
PROJECT_IDpar l'ID de votre projet.Utilisez la commande gcloud projects add-iam-policy-binding pour accorder les rôles requis au compte de service Kubernetes principal :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member="principal://iam.gserviceaccount.com/projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/subject/ns/NAMESPACE/sa/KSA_NAME" \ --role=roles/logging.adminRemplacez les valeurs suivantes :
PROJECT_NUMBER: identifiant numérique de votre projetNAMESPACE: espace de noms de votre clusterKSA_NAME: nom de votre compte de service Kubernetes
Autre solution : utiliser l'emprunt d'identité d'un compte de service IAM pour accorder l'accès
Si vous préférez que vos charges de travail empruntent l'identité d'un compte de service Google, procédez comme suit.
Utilisez la commande gcloud iam service-accounts create pour créer un compte de service Google :
gcloud iam service-accounts create my-app-sa \ --project=PROJECT_IDRemplacez
PROJECT_IDpar l'ID de votre projet.Utilisez la commande gcloud projects add-iam-policy-binding pour accorder au compte de service Google les rôles requis :
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/storage.objectViewer gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/logging.adminUtilisez la commande gcloud iam service-accounts add-iam-policy-binding pour accorder au compte de service Kubernetes la possibilité d'emprunter l'identité du compte de service Google :
gcloud iam service-accounts add-iam-policy-binding my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/iam.workloadIdentityUser \ --member="serviceAccount:PROJECT_ID.svc.id.goog[NAMESPACE/KSA_NAME]"Remplacez les valeurs suivantes :
NAMESPACE: espace de noms de votre clusterKSA_NAME: nom de votre compte de service Kubernetes
Utilisez la commande kubectl annotate pour annoter le compte de service Kubernetes afin de l'associer au compte de service Google :
kubectl annotate serviceaccount \ --namespace NAMESPACE KSA_NAME \ iam.gke.io/gcp-service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com
Configurer la charge de travail
Mettez à jour la spécification de pod pour utiliser le compte de service Kubernetes et monter le volume de jeton projeté. Étant donné que les clusters Distributed Cloud Connected se trouvent en dehors de
Google Cloud, vous devez également fournir un fichier de configuration des identifiants et définir la
GOOGLE_APPLICATION_CREDENTIALS variable d'environnement pour qu'elle pointe vers ce fichier.
Google Cloud Les bibliothèques clientes du pod les utilisent pour échanger le
jeton Kubernetes contre un Google Cloud jeton d'accès via l'API Security Token Service.
Générez le fichier
credential-configuration.json. Choisissez la commande en fonction de l'utilisation de l'accès direct aux ressources de la fédération d'identité de charge de travail ou de l'emprunt d'identité d'un compte de service IAM.Accès direct aux ressources de la fédération d'identité de charge de travail
Utilisez la commande gcloud iam workload-identity-pools create-cred-config :
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonUtiliser l'emprunt d'identité d'un compte de service IAM pour accorder l'accès
Utilisez la commande gcloud iam workload-identity-pools create-cred-config :
gcloud iam workload-identity-pools create-cred-config \ projects/PROJECT_NUMBER/locations/global/workloadIdentityPools/PROJECT_ID.svc.id.goog/providers/attestor \ --service-account=my-app-sa@PROJECT_ID.iam.gserviceaccount.com \ --credential-source-file=/var/run/secrets/tokens/gcp-ksa/token \ --credential-source-type=text \ --output-file=credential-configuration.jsonRemplacez
PROJECT_NUMBERpar votre Google Cloud identifiant de projet. Vous pouvez trouver l'identifiant de projet en exécutantgcloud projects describe PROJECT_ID --format="value(projectNumber)".Utilisez la
kubectl create configmapcommande pour créer unConfigMapKubernetes afin de stocker le fichier de configuration :kubectl create configmap CREDENTIAL_CONFIG_MAP \ --namespace NAMESPACE \ --from-file=credential-configuration.jsonRemplacez les valeurs suivantes :
CREDENTIAL_CONFIG_MAP: nom de votreConfigMap, qui contient votre fichier de configuration des identifiantsNAMESPACE: espace de noms de votre cluster
Mettez à jour la spécification de pod avec le contenu YAML suivant :
spec: serviceAccountName: KSA_NAME containers: - name: MY_CONTAINER image: MY_IMAGE env: - name: GOOGLE_APPLICATION_CREDENTIALS value: /var/run/secrets/tokens/gcp-creds/credential-configuration.json volumeMounts: - mountPath: /var/run/secrets/tokens/gcp-ksa name: gcp-ksa - mountPath: /var/run/secrets/tokens/gcp-creds name: gcp-creds readOnly: true volumes: - name: gcp-ksa projected: defaultMode: 0420 sources: - serviceAccountToken: path: token audience: PROJECT_ID.svc.id.goog expirationSeconds: 3600 - name: gcp-creds configMap: name: CREDENTIAL_CONFIG_MAPRemplacez les valeurs suivantes :
KSA_NAME: nom de votre compte de service KubernetesMY_CONTAINER: nom de votre conteneurMY_IMAGE: nom de votre image
Limites
Les fonctionnalités suivantes ne sont pas compatibles lorsque vous utilisez la fédération d'identité de charge de travail pour Distributed Cloud Connected :
- Utiliser un serveur proxy pour le processus d'échange de jetons
Pour en savoir plus sur l'utilisation de la fédération d'identité de charge de travail avec VPC Service Controls, consultez Configurer l'intégration de VPC Service Controls.
Étape suivante
- Déployer des charges de travail sur Distributed Cloud Connected
- Gérer les services
- Appliquer les bonnes pratiques en matière de sécurité