Cette page explique comment autoriser les membres et les ressources à emprunter l'identité d'un compte de service Cloud IAM (Cloud Identity and Access Management), ou à agir en tant que ce compte. Elle explique également comment identifier les membres autorisés à emprunter l'identité d'un compte de service Cloud IAM donné.
Avant de commencer
Assurez-vous de bien comprendre le fonctionnement des comptes de service dans Cloud IAM.
Autoriser les membres à emprunter l'identité des comptes de service
Il existe plusieurs rôles prédéfinis qui permettent à un membre d'emprunter l'identité d'un compte de service :
Utilisateur du compte de service (
roles/iam.serviceAccountUser
) : permet aux membres d'accéder indirectement à toutes les ressources auxquelles le compte de service a accès. Par exemple, si un membre dispose du rôle Utilisateur de compte de service sur un compte de service et du rôle Administrateur Cloud SQL (roles/cloudsql.admin
) sur le projet, il peut emprunter l'identité du compte de service pour créer une instance Cloud SQL.Ce rôle permet également aux membres de lier un compte de service à une ressource, comme expliqué sur cette page.
Créateur de jetons de compte de service (
roles/iam.serviceAccountTokenCreator
) : permet aux membres d'emprunter l'identité des comptes de service pour créer des jetons d'accès OAuth 2.0, signer des jetons Web JSON (JWT) et signer des blobs binaires pour l'authentification. Pour en savoir plus, consultez la page Créer des identifiants de compte de service éphémères.Utilisateur de Workload Identity (
roles/iam.workloadIdentityUser
) : permet aux membres d'emprunter l'identité des comptes de service associés aux charges de travail GKE. Ce rôle ne peut pas être accordé sur des comptes de service individuels, mais il peut l'être sur un projet, un dossier ou une organisation.
Vous pouvez également attribuer un rôle prédéfini différent ou un rôle personnalisé, qui inclut les mêmes autorisations que ces rôles.
Dans les sections suivantes, nous allons voir comment attribuer ces rôles sur des projets, des dossiers et des organisations, et comment les attribuer à des comptes de service individuels. Choisissez le niveau en fonction du niveau d'accès que vous souhaitez accorder :
- Pour autoriser un membre à emprunter l'identité de tous les comptes de service créés dans un projet, un dossier ou une organisation, accordez le rôle sur le projet, le dossier ou l'organisation.
- Pour autoriser un membre à emprunter l'identité d'un seul compte de service, accordez le rôle sur le compte de service.
Autoriser un membre à emprunter l'identité de plusieurs comptes de service
Pour autoriser un membre à emprunter l'identité de tous les comptes de service créés dans un projet, un dossier ou une organisation, accordez un rôle sur le projet, le dossier ou l'organisation.
Console
Dans Cloud Console, accédez à la page IAM.
Dans le sélecteur de projet en haut de la page, sélectionnez le projet, le dossier ou l'organisation pour lequel vous souhaitez attribuer le rôle.
Cliquez sur Ajouter.
Saisissez l'adresse e-mail du membre.
Sélectionnez un rôle permettant au membre d'emprunter l'identité des comptes de service. Consultez la liste des rôles permettant d'emprunter l'identité des comptes de service.
Cliquez sur Enregistrer.
gcloud
Pour accorder à un membre un rôle l'autorisant à emprunter l'identité d'un compte de service, modifiez la stratégie IAM de votre projet, dossier ou organisation.
Lisez la stratégie Cloud AM de la ressource :
gcloud resource get-iam-policy resource-id \ --format=json > policy.json
Remplacez les valeurs suivantes :
-
resource
: type de la ressource sur laquelle vous souhaitez définir la stratégie. Cette valeur doit correspondre à l'une des valeurs suivantes :projects
,resource-manager folders
ouorganizations
. resource-id
: ID de la ressource sur laquelle vous souhaitez définir la stratégie.
La commande stocke la stratégie de la ressource dans un fichier
policy.json
.Si une stratégie est déjà définie sur la ressource, le fichier
policy.json
se présente comme suit :{ "bindings": [ { "members": [ "user:hollis@example.com" ], "role": "roles/owner" } ], "etag": "BwUqLaVeua8=", "version": 1 }
S'il n'existe aucune règle sur la ressource, le fichier
policy.json
ne contient que la valeuretag
par défaut.En l'absence de stratégie existante, créez-la manuellement en utilisant le code JSON des étapes suivantes comme modèle.
-
Modifiez la stratégie pour attribuer les rôles appropriés à vos membres. Pour accorder un rôle, effectuez l'une des opérations suivantes :
- Si aucune liaison pour le rôle n'existe, ajoutez un objet au tableau
bindings
qui indique le rôle que vous souhaitez attribuer et le membre auquel vous souhaitez l'accorder. - Si une liaison existe déjà pour le rôle, ajoutez le nouveau membre à la liste des membres existants. Si votre stratégie inclut des liaisons de rôle conditionnelles, assurez-vous également que la liaison contient les conditions appropriées avant d'ajouter le membre.
Si le tableau
bindings
n'existe pas déjà, vous pouvez le créer.Exemple
Pour accorder le rôle Utilisateur de compte de service (
roles/iam.serviceAccountUser
) àrobin@example.com
, modifiez l'exemple présenté à l'étape précédente comme suit :{ "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "user:robin@example.com" ] }, { "role": "roles/owner", "members": [ "user:hollis@example.com" ] } ], "etag": "BwUqLaVeua8=", "version": 1 }
- Si aucune liaison pour le rôle n'existe, ajoutez un objet au tableau
Écrivez la stratégie mise à jour :
gcloud resource set-iam-policy resource-id \ policy-file
Remplacez les valeurs suivantes :
-
resource
: type de la ressource sur laquelle vous souhaitez définir la stratégie. Cette valeur doit correspondre à l'une des valeurs suivantes :projects
,resource-manager folders
ouorganizations
. resource-id
: ID de la ressource sur laquelle vous souhaitez définir la stratégie.policy-file
: chemin d'accès au fichier contenant la stratégie mise à jour.
La commande imprime la stratégie mise à jour avec une valeur
etag
mise à jour.-
REST
Pour attribuer un rôle à l'aide de l'API REST Resource Manager, vous devez lire la stratégie IAM actuelle de votre projet, dossier ou organisation, la modifier pour attribuer les rôles souhaités, puis écrire la stratégie mise à jour.
Consultez la stratégie Cloud IAM associée à la ressource.
La méthode getIamPolicy
de l'API Resource Manager permet d'obtenir la stratégie IAM d'un projet, d'un dossier ou d'une organisation.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
api-version
: version de l'API à utiliser. Pour les projets et les organisations, utilisezv1
. Pour les dossiers, utilisezv2
.resource-type
: type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeurprojects
,folders
ouorganizations
.resource-id
: ID du projet, de l'organisation ou du dossier Google Cloud.policy-version
: version de la stratégie à renvoyer. Les requêtes doivent spécifier la version de stratégie la plus récente, qui est la version 3. Pour plus d'informations, consultez la section Spécifier une version de stratégie lors de l'obtention d'une stratégie.
Méthode HTTP et URL :
POST https://cloudresourcemanager.googleapis.com/api-version/resource-type/resource-id:getIamPolicy
Corps JSON de la requête :
{ "options": { "requestedPolicyVersion": policy-version } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/owner", "members": [ "user:owner@example.com" ] } ] }
En l'absence de stratégie existante, la réponse ne contient que la valeur etag
par défaut.
Si vous recevez cette réponse, ajoutez un champ version
défini sur 3 et un champ bindings
défini sur un tableau vide.
Modifiez la stratégie pour attribuer les rôles appropriés à vos membres.
Pour accorder un rôle, effectuez l'une des opérations suivantes :
- Si aucune liaison pour le rôle n'existe, ajoutez un objet au tableau
bindings
qui indique le rôle que vous souhaitez attribuer et le membre auquel vous souhaitez l'accorder. - Si une liaison existe déjà pour le rôle, ajoutez le nouveau membre à la liste des membres existants.
Exemple :
Pour accorder le rôle Utilisateur de compte de service (roles/iam.serviceAccountUser
) à robin@example.com
, modifiez l'exemple présenté à l'étape précédente comme suit :
{ "version": 1, "etag": "BwUqLaVeua8=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "user:robin@example.com" ] }, { "role": "roles/owner", "members": [ "user:owner@example.com" ] } ] }
Écrivez la stratégie mise à jour.
La méthode setIamPolicy
de l'API Resource Manager définit la stratégie de la requête comme nouvelle stratégie IAM pour le projet, le dossier ou l'organisation.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
api-version
: version de l'API à utiliser. Pour les projets et les organisations, utilisezv1
. Pour les dossiers, utilisezv2
.resource-type
: type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeurprojects
,folders
ouorganizations
.resource-id
: ID du projet, de l'organisation ou du dossier Google Cloud.-
policy
: représentation JSON de la stratégie que vous souhaitez définir. Pour en savoir plus sur le format d'une stratégie, consultez la documentation de référence sur les stratégies.Par exemple, pour définir la stratégie présentée à l'étape précédente, remplacez
policy
par ce qui suit :{ "version": 1, "etag": "BwUqLaVeua8=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "user:robin@example.com" ] }, { "role": "roles/owner", "members": [ "user:owner@example.com" ] } ] }
Méthode HTTP et URL :
POST https://iam.googleapis.com/api-version/resource-type/resource-id:setIamPolicy
Corps JSON de la requête :
{ "policy": policy }
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse contient la stratégie mise à jour.
Autoriser un membre à emprunter l'identité d'un seul compte de service
Pour permettre à un membre d'emprunter l'identité d'un seul compte de service, attribuez un rôle sur le compte de service :
Console
Dans Cloud Console, accédez à la page Comptes de service.
Cliquez sur Sélectionner un projet, choisissez un projet et cliquez sur Ouvrir.
Cliquez sur le nom du compte de service dont vous souhaitez que le membre puisse usurper l'identité.
Cliquez sur l'onglet Autorisations.
Sous Membres avec accès à ce compte de service, cliquez sur
Accorder l'accès.Saisissez l'adresse e-mail du membre.
Sélectionnez un rôle autorisant le membre à emprunter l'identité des comptes de service. Consultez la liste des rôles permettant d'emprunter l'identité des comptes de service.
Cliquez sur Enregistrer pour appliquer le rôle au membre du projet.
Pour attribuer des rôles sur plusieurs comptes de service, répétez ces étapes pour chaque compte de service.
gcloud
Pour accorder à un membre un rôle l'autorisant à emprunter l'identité d'un compte de service, modifiez la stratégie IAM de votre compte de service.
Utilisez la commande
service-accounts get-iam-policy
pour lire la stratégie actuelle :gcloud iam service-accounts get-iam-policy sa-id \ --format=json > policy.json
Remplacez les valeurs suivantes :
sa-id
: ID de votre compte de service. Il peut s'agir de l'adresse e-mail du compte de service au format sa-name@project-id.iam.gserviceaccount.com ou de l'ID numérique unique du compte de service.
La commande stocke la stratégie du compte de service dans un fichier
policy.json
.Si une stratégie est déjà définie sur le compte de service, le fichier
policy.json
se présente comme suit :{ "bindings": [ { "members": [ "user:hollis@example.com" ], "role": "roles/iam.serviceAccountAdmin" } ], "etag": "BwUqLaVeua8=", "version": 1 }
Si aucune stratégie n'est définie sur le compte de service, le fichier
policy.json
ne contient que leetag
par défaut.En l'absence de stratégie existante, créez-la manuellement en utilisant le code JSON des étapes suivantes comme modèle.
Dans un éditeur de texte, modifiez le tableau de liaisons dans le fichier policy.json afin d'attribuer les rôles appropriés aux membres. Pour accorder un rôle, effectuez l'une des opérations suivantes :
- Si aucune liaison pour le rôle n'existe, ajoutez un objet au tableau
bindings
qui indique le rôle que vous souhaitez attribuer et le membre auquel vous souhaitez l'accorder. - Si une liaison existe déjà pour le rôle, ajoutez le nouveau membre à la liste des membres existants. Si votre stratégie inclut des liaisons de rôle conditionnelles, assurez-vous également que la liaison contient les conditions appropriées avant d'ajouter le membre.
Si le tableau
bindings
n'existe pas déjà, vous pouvez le créer.Exemple
Pour accorder le rôle Utilisateur de compte de service (
roles/iam.serviceAccountUser
) àrobin@example.com
, modifiez l'exemple présenté à l'étape précédente comme suit :{ "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "user:robin@example.com" ] }, { "role": "roles/iam.serviceAccountAdmin", "members": [ "user:hollis@example.com" ] } ], "etag": "BwUqLaVeua8=", "version": 1 }
- Si aucune liaison pour le rôle n'existe, ajoutez un objet au tableau
Exécutez la commande
service-accounts set-iam-policy
pour écrire la stratégie mise à jour :gcloud iam service-accounts set-iam-policy sa-id \ policy-file
Remplacez les valeurs suivantes :
sa-id
: ID de votre compte de service. Il peut s'agir de l'adresse e-mail du compte de service au format sa-name@project-id.iam.gserviceaccount.com ou de l'ID numérique unique du compte de service.policy-file
: chemin d'accès au fichier contenant la stratégie mise à jour.
La commande imprime la stratégie mise à jour avec une valeur
etag
mise à jour.
REST
Pour attribuer un rôle à l'aide de l'API REST IAM, vous devez lire la stratégie IAM actuelle du compte de service, la modifier pour attribuer les rôles souhaités, puis écrire la stratégie mise à jour.
Lisez la stratégie Cloud IAM du compte de service.
La méthode serviceAccounts.getIamPolicy
permet d'obtenir la stratégie IAM d'un compte de service.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
project-id
: ID de votre projet Google Cloud.sa-id
: ID de votre compte de service. Il peut s'agir de l'adresse e-mail du compte de service au formatsa-name@project-id.iam.gserviceaccount.com
ou de l'ID numérique unique du compte de service.policy-version
: version de la stratégie à renvoyer. Les requêtes doivent spécifier la version de stratégie la plus récente, qui est la version 3. Pour plus d'informations, consultez la section Spécifier une version de stratégie lors de l'obtention d'une stratégie.
Méthode HTTP et URL :
POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-id:getIamPolicy
Corps JSON de la requête :
{ "options": { "requestedPolicyVersion": policy-version } }
Pour envoyer votre requête, développez l'une des options suivantes :
Vous devriez recevoir une réponse JSON de ce type :
{ "version": 1, "etag": "BwWKmjvelug=", "bindings": [ { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
En l'absence de stratégie existante, la réponse ne contient que la valeur etag
par défaut.
Si vous recevez cette réponse, ajoutez un champ version
défini sur 3 et un champ bindings
défini sur un tableau vide.
Modifiez la stratégie pour attribuer les rôles appropriés à vos membres.
Dans un éditeur de texte, modifiez le tableau de liaisons du corps de la réponse pour attribuer les rôles appropriés aux membres. Pour accorder un rôle, effectuez l'une des opérations suivantes :
- Si aucune liaison pour le rôle n'existe, ajoutez un objet au tableau
bindings
qui indique le rôle que vous souhaitez attribuer et le membre auquel vous souhaitez l'accorder. - Si une liaison existe déjà pour le rôle, ajoutez le nouveau membre à la liste des membres existants.
Exemple :
Pour accorder le rôle Utilisateur de compte de service (roles/iam.serviceAccountUser
) à robin@example.com
, modifiez l'exemple présenté à l'étape précédente comme suit :
{ "version": 1, "etag": "BwUqLaVeua8=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "user:robin@example.com" ] }, { "role": "roles/iam.serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Écrivez la stratégie mise à jour.
La méthode serviceAccounts.setIamPolicy
définit une stratégie IAM mise à jour pour le compte de service.
Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :
project-id
: ID de votre projet Google Cloud.sa-id
: ID de votre compte de service. Il peut s'agir de l'adresse e-mail du compte de service au formatsa-name@project-id.iam.gserviceaccount.com
ou de l'ID numérique unique du compte de service.-
policy
: représentation JSON de la stratégie que vous souhaitez définir. Pour en savoir plus sur le format d'une stratégie, consultez la documentation de référence sur les stratégies.Par exemple, pour définir la stratégie présentée à l'étape précédente, remplacez
policy
par ce qui suit :{ "version": 1, "etag": "BwUqLaVeua8=", "bindings": [ { "role": "roles/iam.serviceAccountUser", "members": [ "user:robin@example.com" ] }, { "role": "roles/serviceAccountAdmin", "members": [ "user:admin@example.com" ] } ] }
Méthode HTTP et URL :
POST https://iam.googleapis.com/v1/projects/project-id/serviceAccounts/sa-id:setIamPolicy
Corps JSON de la requête :
{ "policy": policy }
Pour envoyer votre requête, développez l'une des options suivantes :
La réponse contient la stratégie mise à jour.
Répertorier les membres pouvant accéder à un compte de service
Utilisez Cloud Console pour afficher tous les membres ayant accès à un compte de service, soit en raison des rôles attribués à celui-ci, soit en raison des rôles attribués au projet, au dossier ou à l'organisation :
Dans Cloud Console, accédez à la page Comptes de service.
Cliquez sur Sélectionner un projet, choisissez un projet et cliquez sur Ouvrir.
Cochez la case à côté du compte de service souhaité.
Si le panneau d'informations n'est pas déjà visible, cliquez sur Afficher le panneau d'informations. La liste des rôles accordés sur le compte de service s'affiche.
Développez chaque rôle pour voir les membres à qui a été accordé ce rôle sur le compte de service.
Associer un compte de service à une ressource
Pour certaines ressources Google Cloud, vous pouvez spécifier un compte de service géré par l'utilisateur que la ressource utilise comme identité par défaut. Ce processus est appelé liaison du compte de service à la ressource, ou association du compte de service à la ressource.
Lorsque la ressource doit accéder à d'autres services et ressources Google Cloud, elle emprunte l'identité du compte de service qui lui est associé. Par exemple, si vous associez un compte de service à une instance Compute Engine, les applications de l'instance utilisent automatiquement ce compte de service lorsqu'elles appellent les API Google Cloud.
Dans la plupart des cas, vous devez associer un compte de service à une ressource lorsque vous créez cette ressource. Une fois la ressource créée, vous ne pouvez pas modifier le compte de service qui lui est associé. Les instances Compute Engine font exception à cette règle : si nécessaire, vous pouvez modifier le compte de service associé à une instance.
Consultez les instructions concernant le type de ressource que vous souhaitez créer :
Associer un compte de service lors de la création d'une ressource | |
---|---|
AI Platform Notebooks | Instances de notebook |
AI Platform Prediction | Versions de modèle |
AI Platform Training | Tâches |
Cloud Composer | Environnements |
Cloud Functions | Fonction Cloud |
Cloud Life Sciences | Pipelines |
Cloud Run | Services |
Cloud Scheduler | Tâches |
Cloud Source Repositories |
|
Compute Engine | |
Dataflow | Tâches |
Datalab | Instances |
Dataproc | Clusters |
Google Kubernetes Engine | |
Pub/Sub | Abonnements |
Après avoir créé la ressource et associé le compte de service à celle-ci, vous pouvez attribuer des rôles au compte de service afin qu'il puisse accéder aux ressources appropriées. Ce processus revient à attribuer un rôle à un autre membre.
Pour savoir comment attribuer des rôles, consultez la section Accorder, modifier et révoquer les accès aux ressources.
Étapes suivantes
- Découvrez comment lier un compte de service à une instance Compute Engine.
- Découvrez comment rendre l'accès d'un membre conditionnel avec des liaisons de rôle conditionnelles.
- Découvrez comment utiliser l'outil de recommandation Cloud IAM pour réduire le champ d'application des autorisations pour tous les membres, et en particulier pour les comptes de service.