Cette page décrit les comptes de service dans Google Kubernetes Engine (GKE), qui fournissent des identités pour les applications.
Les comptes de service sont des identités destinées à être utilisées par des applications plutôt que par des personnes. Dans GKE, vous interagissez avec les comptes de service Kubernetes et avec les comptes de service IAM (Identity and Access Management).
Comptes de service Kubernetes et comptes de service IAM
Le tableau suivant décrit les principales différences entre les comptes de service Kubernetes et les comptes de service IAM :
Types de comptes de service dans GKE | |
---|---|
Compte de service Kubernetes |
|
Compte de service IAM |
|
Comptes de service Kubernetes
Les comptes de service Kubernetes sont gérés au niveau du cluster et existent sur le serveur d'API Kubernetes en tant qu'objets ServiceAccount
. La documentation Kubernetes et la documentation GKE utilisent souvent le terme ServiceAccount pour distinguer ces ressources Kubernetes des comptes de service d'autres environnements tels que IAM.
Vous créez un ServiceAccount Kubernetes dans un espace de noms, puis vous attribuez ce ServiceAccount à un pod à l'aide du champ serviceAccountName
du fichier manifeste du pod. Le processus kubelet sur le nœud obtient un jeton de support de courte durée pour le ServiceAccount attribué et installe le jeton en tant que volume projeté dans le pod.
Le jeton de support de courte durée est un jeton Web JSON (JWT) signé par le serveur d'API, qui est un fournisseur OpenID Connect (OIDC). Pour valider le jeton de support, obtenez la clé de validation publique du cluster en appelant la méthode projects.locations.clusters.getJwks
dans l'API GKE.
- Pour découvrir les principes de base des ServiceAccount Kubernetes, consultez la page Comptes de service dans la documentation de Kubernetes.
- Pour savoir comment créer des ServiceAccount, accorder des autorisations à l'aide du contrôle d'accès basé sur les rôles (RBAC) et attribuer des ServiceAccount aux pods, consultez la page Configurer des comptes de service pour les pods.
- Pour connaître les bonnes pratiques concernant la gestion des ServiceAccount Kubernetes, consultez la section Bonnes pratiques pour le RBAC.
- Pour lire la configuration OIDC du serveur d'API Kubernetes pour un cluster, appelez la méthode
projects.locations.clusters.well-known.getOpenid-configuration
dans l'API GKE.
Mettre en œuvre une rotation des ServiceAccount Kubernetes
Si les identifiants d'un compte de service Kubernetes sont compromis, utilisez l'une des options suivantes pour révoquer les identifiants :
- Recréez vos pods : le jeton de support est lié à chaque UID de pod unique. Par conséquent, la recréation des pods invalide les identifiants précédents.
- Recréer le compte de service Kubernetes : le jeton de support est lié à l'UID de l'objet ServiceAccount dans l'API Kubernetes. Supprimez le ServiceAccount et créez un ServiceAccount portant le même nom. Les jetons précédents ne sont plus valides, car l'UID du nouveau ServiceAccount est différent.
- Mettre en œuvre une rotation des identifiants : cette opération révoque tous les identifiants du compte de service Kubernetes de votre cluster. La rotation modifie également le certificat CA et l'adresse IP de votre cluster. Pour en savoir plus, consultez la section Rotation des identifiants.
Comptes de service IAM
Les comptes de service IAM sont gérés au niveau du projet à l'aide de l'API Cloud IAM. Vous pouvez utiliser ces comptes de service pour effectuer des actions telles que l'appel automatisé des API Google Cloud et la gestion des autorisations pour les applications exécutées dans les produits Google Cloud.
Pour en savoir plus, consultez la présentation des comptes de service IAM.
Agents de service GKE
Un agent de service IAM est un compte de service IAM géré par Google Cloud.
GKE utilise l'agent de service de Kubernetes Engine pour gérer le cycle de vie des ressources de cluster en votre nom, telles que les nœuds, les disques et les équilibreurs de charge. Cet agent de service dispose du domaine container-engine-robot.iam.gserviceaccount.com
et du rôle Agent de service Kubernetes Engine (roles/container.serviceAgent
) sur votre projet lorsque vous activez l'API GKE.
L'identifiant de cet agent de service est le suivant :
service-PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com
PROJECT_NUMBER
est votre numéro de projet (numérique).
Si vous désactivez l'agent de service GKE, vous pouvez le récupérer en suivant les instructions de la section Activer un compte de service.
Si vous supprimez les autorisations de l'agent de service dans votre projet, vous pouvez les récupérer en suivant les instructions de la section Erreur 400/403 : autorisations de modification manquantes sur le compte.
Si vous supprimez l'agent de service GKE, vous pouvez annuler sa suppression en suivant les instructions de la section Annuler la suppression d'un compte de service.
Compte de service de nœud GKE par défaut
Par défaut, les nœuds GKE utilisent le compte de service par défaut Compute Engine.
Par défaut, ce compte de service se voit attribuer le rôle Éditeur (roles/editor
) et dispose de plus d'autorisations que celles requises pour les nœuds GKE.
Envisagez d'utiliser un rôle qui utilise les autorisations minimales requises pour exécuter des nœuds dans le cluster.
Ne désactivez pas le compte de service Compute Engine par défaut, sauf si vous effectuez une migration vers des comptes de service gérés par l'utilisateur.
Autorisations minimales
GKE nécessite un ensemble minimal d'autorisations IAM pour exploiter votre cluster. Pour savoir comment créer un compte de service IAM doté de privilèges minimaux, consultez la section Utiliser le principe du moindre privilège pour les comptes de service Google.
Quand utiliser un compte de service spécifique
Le type de compte de service que vous utilisez dépend du type d'identité que vous souhaitez fournir à vos applications, comme suit :
- Fournissez une identité à vos pods à utiliser dans le cluster : utilisez un ServiceAccount Kubernetes. Chaque espace de noms Kubernetes possède un ServiceAccount
default
, mais nous vous recommandons de créer des ServiceAccount dotés de privilèges minimaux pour chaque charge de travail de chaque espace de noms. - Fournissez une identité que vos pods doivent utiliser en dehors du cluster : utilisez la fédération d'identité de charge de travail pour GKE. La fédération d'identité de charge de travail pour GKE vous permet de spécifier des ressources Kubernetes telles que des ServiceAccount en tant que comptes principaux dans les stratégies IAM. Par exemple, utilisez la fédération d'identité de charge de travail pour GKE lorsque vous appelez des API Google Cloud telles que Secret Manager ou Spanner à partir de vos pods.
- Fournissez une identité par défaut pour vos nœuds : utilisez un compte de service IAM personnalisé à droits minimaux lorsque vous créez vos clusters ou nœuds GKE. Si vous n'utilisez pas de compte de service IAM personnalisé, GKE utilise le compte de service Compute Engine par défaut, qui dispose d'autorisations étendues dans votre projet.
Étapes suivantes
- Découvrez comment utiliser les comptes de service Google dotés de privilèges minimaux.
- Découvrez comment attribuer un rôle à un compte principal.