Attribuer des rôles aux comptes de service

Lorsque vous attribuez des rôles IAM, vous pouvez traiter un compte de service soit comme une ressource, soit comme une identité.

Votre application utilise un compte de service en tant qu'identité afin de s'authentifier auprès des services Google Cloud Platform. Par exemple, si vous disposez d'une machine virtuelle (VM) exécutée en tant que compte de service, vous pouvez attribuer le rôle de collaborateur à ce compte de service (l'identité) pour un projet donné (la ressource).

Dans le même temps, vous pouvez également avoir besoin de déterminer qui peut démarrer la VM. Pour cela, il vous suffit d'accorder à un utilisateur (l'identité) le rôle serviceAccountUser pour le compte de service (la ressource).

La page Comptes de service fournit plus d'informations sur les comptes de service et contient d'autres exemples de leur utilisation en tant que ressource ou en tant qu'identité.

Prérequis pour ce guide

Attribuer des rôles à un compte de service pour des ressources spécifiques

En attribuant des rôles à un compte de service, vous l'autorisez à effectuer des actions spécifiques sur les ressources de votre projet Cloud Platform. Par exemple, vous pouvez attribuer le rôle storage.admin à un compte de service pour lui permettre de contrôler les objets et les buckets dans Google Cloud Storage.

Pour attribuer des rôles à un compte de service, suivez l'une des méthodes ci-dessous :

Console

Vous pouvez gérer les rôles attribués aux comptes de service de la même manière que les rôles accordés aux utilisateurs de votre projet.

  1. Accédez à la page IAM et administration dans la console GCP.

    Ouvrir la page "IAM et Administration"

  2. Sélectionnez votre projet, puis cliquez sur Continuer.

  3. Identifiez le compte de service auquel vous souhaitez ajouter un rôle.

    • Si ce compte de service ne figure pas déjà sur la liste des membres, cela signifie qu'aucun rôle ne lui a encore été attribué. Cliquez sur Ajouter, puis saisissez l'adresse e-mail du compte de service.
    • Si le compte de service figure déjà sur la liste des membres, il possède des rôles. Cliquez sur le compte de service que vous souhaitez modifier dans la liste déroulante Rôle(s).
  4. Sélectionnez le ou les rôles à attribuer au compte de service.

  5. Cliquez sur Ajouter ou sur Enregistrer pour appliquer le ou les rôles sélectionnés au compte de service.

gcloud

Ajoutez un rôle à un seul compte de service en exécutant cette commande :

gcloud projects add-iam-policy-binding my-project-123 \
  --member serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com \
  --role roles/editor

La commande génère la stratégie mise à jour :

bindings:
- members:
  - user:email1@gmail.com
  role: roles/owner
- members:
  - serviceAccount:our-project-123@appspot.gserviceaccount.com
  - serviceAccount:123456789012-compute@developer.gserviceaccount.com
  - serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com
  - user:email3@gmail.com
  role: roles/editor
- members:
  - user:email2@gmail.com
  role: roles/viewer
etag: BwUm38GGAQk=
version: 1

Pour savoir comment accorder un accès à un compte de service traité en tant qu'identité pour un projet donné, consultez la page Accorder, modifier ou révoquer les accès des membres d'un projet.

API

La requête POST suivante se sert de la méthode projects.setIamPolicy() afin d'accorder un accès de collaborateur au compte de service my-sa-123 pour le projet my-project-123. Le corps de la requête doit contenir la nouvelle stratégie accordant des autorisations au compte de service. Chaque rôle peut compter plusieurs membres.

POST https://cloudresourcemanager.googleapis.com/v1beta1/projects/my-project-123:setIamPolicy

{
    "policy":
    {
        "version": 1,
        "etag": "BwUqMvZQGfo=",
        "bindings": [
        {
            "role": "roles/editor",
            "members": [
                "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
                "user:alice@gmail.com"
            ]
        },
        {
            "role":"roles/owner",
            "members":
            [
                "user:bob@gmail.com",
            ]
        },
        {
            "role":"roles/viewer",
            "members":
            [
                "user:john@gmail.com",
            ]
        },
        {
            "role":"roles/iam.serviceAccountUser",
            "members":
            [
                "user:alice@gmail.com"
            ]
        },
        ]
    },
}

La réponse contient la nouvelle stratégie :

{
    "version": 1,
    "etag": "BwUqMvZQGfo=",
    "bindings": [
    {
        "role": "roles/editor",
        "members": [
            "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
            "user:alice@gmail.com"
        ]
    },
    {
        "role":"roles/owner",
        "members":
        [
            "user:bob@gmail.com",
        ]
    },
    {
        "role":"roles/viewer",
        "members":
        [
            "user:john@gmail.com",
        ]
    },
    {
        "role":"roles/iam.serviceAccountUser",
        "members":
        [
            "user:alice@gmail.com"
        ]
    },
    ]
}

Configurer des autorisations de propriétaire et d'accès sur un compte de service

Vous pouvez accorder à certains utilisateurs des autorisations de propriétaire et d'accès sur un compte de service en traitant ce dernier comme une ressource plutôt que comme une identité. Dans les étapes de cette section, les comptes de service sont traités comme des ressources. Pour en savoir plus sur les différences entre ces deux types d'utilisation, consultez la page Comptes de service.

Les utilisateurs bénéficiant d'un rôle primitif de propriétaire de projet ou de collaborateur de projet ont déjà la possibilité de modifier les comptes de service, mais vous pouvez avoir besoin de limiter l'accès de certains utilisateurs de sorte qu'ils ne puissent effectuer que des actions spécifiques sur les ressources d'un compte de service.

Afin d'accorder des autorisations à un utilisateur pour un compte de service, appliquez l'une des méthodes ci-dessous :

Console

  1. Accédez à la page IAM et administration dans la console GCP.

    Accéder à la page "IAM et administration"

  2. Sélectionnez votre projet, puis cliquez sur Continuer.

  3. Dans le volet de navigation de gauche, cliquez sur Comptes de service.

  4. Sélectionnez un compte de service, puis ouvrez le panneau d'informations. Tous les utilisateurs qui peuvent accéder à ce compte de service sont affichés.

  5. Ajoutez l'adresse e-mail d'un membre du projet.

  6. Sélectionnez un rôle pour ce membre afin de définir les actions qu'il peut effectuer sur le compte de service.

  7. Cliquez sur Ajouter pour appliquer le rôle au membre du projet.

gcloud

Mettre à jour l'ensemble de la stratégie

Commencez par récupérer la stratégie que vous souhaitez modifier et écrivez-la dans un fichier de type JSON. Vous pouvez vous servir de l'indicateur --format pour choisir l'un des formats de sortie disponibles (JSON, YAML et texte). Les autres exemples de cette page utilisent le format de sortie texte (option par défaut), mais le présent exemple écrit la sortie dans un fichier JSON (policy.json), qui permet de modifier la stratégie existante avant de la définir.

gcloud iam service-accounts get-iam-policy \
  my-sa-123@my-project-123.iam.gserviceaccount.com \
  --format json > policy.json

Notez que cette commande ne peut renvoyer qu'une stratégie qui a été définie sur le compte de service lui-même. Si aucune stratégie existante n'est définie sur le compte de service, le contenu du fichier JSON se présente comme suit :

{
  "etag": "ACAB"
}

En l'absence de stratégie existante, vous pouvez soit définir une nouvelle stratégie via une liaison unique en suivant les étapes ci-dessous, soit créer manuellement la stratégie en prenant comme modèle le code JSON utilisé dans les étapes suivantes.

Si une stratégie est déjà appliquée, le contenu du fichier policy.json généré se présente comme suit :

{
  "bindings": [
    {
      "members": [
        "user:bob@gmail.com"
      ],
      "role": "roles/owner"
    }
  ],
  "etag": "BwUqLaVeua8="
}

Dans un éditeur de texte, modifiez ensuite le fichier policy.json en ajoutant un nouvel objet au tableau bindings, qui définit les membres du groupe et leurs rôles respectifs. Créez le tableau bindings s'il n'existe pas encore. Pour attribuer le rôle serviceAccountUser à alice@gmail.com, vous devez modifier l'exemple présenté ci-dessus comme suit :

{
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    },
    {
        "role": "roles/owner",
        "members": [
            "user:bob@gmail.com"
        ]
    }
    ],
    "etag": "BwUqLaVeua8=",
}

Puis, mettez à jour la stratégie en exécutant la commande suivante :

gcloud iam service-accounts set-iam-policy \
  my-sa-123@my-project-123.iam.gserviceaccount.com policy.json

La commande génère la règle mise à jour :

bindings:
- members:
  - user:alice1@gmail.com
  role: roles/iam.serviceAccountUser
- members:
  - bob@gmail.com
  role: roles/owner
etag: BwUjMhXbSPU=
version: 1

Ajouter une liaison unique

Vous pouvez ajouter une liaison unique à une stratégie nouvelle ou existante en exécutant la commande suivante :

gcloud iam service-accounts add-iam-policy-binding \
  my-sa-123@my-project-123.iam.gserviceaccount.com \
  --member='user:jane@gmail.com' --role='roles/editor'

La commande génère la stratégie mise à jour :

bindings:
- members:
  - user:alice@gmail.com
  role: roles/iam.serviceAccountUser
- members:
  - user:bob@gmail.com
  role: roles/owner
- members:
  - user:jane@gmail.com
  role: roles/editor
etag: BwUqKjVeua8=
version: 1

Supprimer une liaison unique

Vous pouvez supprimer une liaison unique d'une stratégie existante en exécutant la commande suivante :

gcloud iam service-accounts remove-iam-policy-binding \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --member='user:jane@gmail.com' --role='roles/editor'

La commande génère la stratégie mise à jour :

bindings:
- members:
  - user:alice@gmail.com
  role: roles/iam.serviceAccountUser
- members:
  - user:bob@gmail.com
  role: roles/owner
etag: BwUqNkVeua8=
version: 1

API

Requête :

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:setIamPolicy

Le corps de la requête doit contenir la stratégie à attribuer :

{
    "policy":
    {
        "etag": "BwUqLaVeua8=",
        "bindings": [
        {
            "role": "roles/iam.serviceAccountUser",
            "members": [
                "user:alice@gmail.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@gmail.com"
            ]
        },
        ]
    },
}

La réponse contient la stratégie mise à jour :

{
    "etag": "BwUqMqbViM8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    },
    {
        "role": "roles/owner",
        "members": [
        "user:bob@gmail.com"
        ]
    }
    ]
}

Afficher les rôles existants pour un compte de service

Les comptes de service pouvant être traités comme des ressources, ils contiennent des stratégies Cloud IAM comme toute autre ressource GCP. Ainsi, pour afficher les membres qui se sont vu accorder un rôle sur un compte de service donné, obtenez la stratégie Cloud IAM d'un service de compte à l'aide de la méthode serviceAccounts.getIamPolicy(), de la console GCP Console ou de l'outil gcloud.

Console

  1. Ouvrez la page IAM et Administration dans la console GCP.

    Ouvrir la page "IAM et Administration"

  2. Sélectionnez le projet et cliquez sur Continuer. Vous trouverez sur cette page la liste de tous les utilisateurs ainsi que leurs rôles respectifs pour ce projet.

  3. Dans le menu de gauche, cliquez sur Comptes de service.

  4. Cochez la case à côté du compte de service souhaité, puis cliquez sur Afficher le panneau d'informations dans l'angle supérieur droit de la page. La liste des rôles ayant été accordés sur le compte de service s'affiche. Développez chaque rôle pour voir les membres à qui ce rôle a été accordé sur le compte de service.

gcloud

Pour obtenir la stratégie associée à un compte de service, exécutez la commande suivante :

gcloud iam service-accounts get-iam-policy \
    my-sa-123@my-project-123.iam.gserviceaccount.com

Le résultat obtenu correspond à la stratégie, qui se présente comme suit :

bindings:
- members:
  - user:bob@gmail.com
  role: roles/owner
- members:
  - user:alice@gmail.com
  role: roles/iam.serviceAccountUser
etag: BwUqLaVeua8=
version: 1

Si vous n'avez pas attribué de rôle au compte de service, le résultat ne contient qu'une valeur "etag" :

etag: ACAB

API

Les extraits de code suivants permettent d'obtenir la stratégie IAM du compte de service my-sa-123@my-project-123.iam.gserviceaccount.com.

Requête :

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:getIamPolicy
Response:

{
    "etag": "BwUqLaVeua8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    }
    ]
}

Si vous n'avez pas attribué de rôle au compte de service, la réponse ne contient qu'une valeur "etag" :

{
  "etag": "ACAB"
}

Pour en savoir plus sur les stratégies IAM, consultez la page Stratégie.

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Cloud IAM