Accorder, modifier et révoquer les accès à des ressources

Cette page explique comment accorder, modifier et révoquer des accès à une ressource. Vous pouvez attribuer à différents utilisateurs des niveaux d'accès variables à vos ressources, à l'aide de rôles Cloud IAM précis.

Vous pouvez gérer les rôles utilisateur à l'aide de la console GCP, de l'outil de ligne de commande gcloud, de l'API REST ou des bibliothèques clientes. La méthode la plus simple, décrite en première partie de cet article, consiste à utiliser la console GCP. La programmation, utile dans des scénarios plus complexes, est abordée ensuite.

Si vous souhaitez utiliser Cloud IAM avec Cloud Identity-Aware Proxy (Cloud IAP) pour sécuriser l'accès à vos applications, consultez la documentation relative à Cloud IAP.

Avant de commencer

Utiliser la console GCP

La console GCP permet de gérer les rôles utilisateur de manière simple et rapide. Lorsque vous attribuez un rôle à un utilisateur, il ne reçoit pas de notification par e-mail. Son accès est mis à jour directement.

Accorder l'accès

Pour ajouter un membre de l'équipe à un projet et lui attribuer un rôle Cloud IAM, procédez comme suit :

  1. Ouvrez la page "IAM" dans la console GCP.

    Ouvrir la page "IAM"

  2. Cliquez sur Sélectionner un projet, choisissez un projet et cliquez sur Ouvrir.

  3. Cliquez sur Ajouter.

  4. Saisissez une adresse e-mail. Vous pouvez ajouter des personnes, des comptes de service ou des groupes Google en tant que membres, mais chaque projet doit compter au moins une personne.

  5. Choisissez un rôle. Les rôles donnent aux membres le niveau d'autorisation approprié. Nous recommandons d'accorder le moins de privilèges possible aux membres. Les membres qui possèdent des autorisations de niveau propriétaire sont également propriétaires du projet et peuvent en gérer tous les aspects, y compris son arrêt.

  6. Cliquez sur Save.

Pour attribuer un rôle à un membre sur plusieurs projets :

  1. Ouvrez la section "Projets" de la page "IAM et administration" dans la console GCP.

    Ouvrir la section "Projets" de la page "IAM et administration"

  2. Sélectionnez tous les projets pour lesquels vous souhaitez accorder des autorisations.

  3. Cliquez sur Afficher le panneau d'informations, puis sur l'onglet Autorisations.

  4. Saisissez une adresse e-mail dans le champ Ajouter des membres, puis sélectionnez le rôle souhaité dans le menu déroulant.

  5. Cliquez sur le bouton Ajouter. Le membre se verra attribuer le rôle sélectionné dans chacun des projets sélectionnés.

Révoquer un accès

  1. Ouvrez la page IAM dans la console Google Cloud Platform.

    Ouvrir la page IAM

  2. Cliquez sur Sélectionner un projet.

  3. Sélectionnez un projet et cliquez sur Ouvrir.

  4. Recherchez le membre dont vous souhaitez révoquer l'accès, puis cliquez sur le bouton Modifier edit situé sur la droite.

  5. Cliquez sur le bouton Supprimer delete pour chaque rôle que vous souhaitez révoquer, puis cliquez sur Enregistrer.

Modifier un accès

Il n'existe pas de procédure particulière pour modifier un accès. Suivez simplement les étapes pour accorder et révoquer un accès jusqu'à ce que l'utilisateur dispose des rôles souhaités.

Utiliser gcloud, l'API REST ou les bibliothèques clientes

Dans certains cas d'utilisation, il est plus facile de recourir à la programmation pour gérer le contrôle des accès, plutôt que d'utiliser la console GCP. Vous pouvez utiliser l'outil de ligne de commande gcloud, l'API REST ou les bibliothèques clientes pour Cloud IAM. La programmation s'avère particulièrement utile pour effectuer des mises à jour automatiques ou à grande échelle, qui se révéleraient fastidieuses dans la console GCP.

Mises à jour rapides avec l'outil de ligne de commande gcloud

Si vous souhaitez attribuer ou révoquer rapidement un rôle à l'aide de la ligne de commande, exécutez les commandes add-iam-policy-binding et remove-iam-policy-binding. Transmettez un indicateur --role pour chaque rôle que vous souhaitez ajouter ou supprimer.

Pour attribuer un rôle :

gcloud [GROUP] add-iam-policy-binding [RESOURCE-NAME]
  --member user:[USER-EMAIL] --role [ROLE-ID]

Pour révoquer un rôle :

gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME]
  --member user:[EMAIL] --role [ROLE-ID]

[GROUP] est le groupe gcloud de la ressource pour laquelle vous souhaitez attribuer des autorisations, par exemple projects ou organizations. [RESOURCE] est le nom de la ressource. [EMAIL] est l'utilisateur auquel le rôle est attribué. [ROLE-ID] est l'ID du rôle à attribuer.

L'exemple ci-dessous attribue le rôle de lecteur à l'utilisateur user-1@gmail.com pour le projet my-project (notez que vous ne pouvez ajouter qu'un seul rôle de propriétaire à un projet via la console).

gcloud projects add-iam-policy-binding my-project
  --member user:user-1@gmail.com --role roles/viewer

Présentation de la stratégie Cloud IAM

L'accès à une ressource est géré par le biais d'une stratégie Cloud IAM. Une stratégie est un ensemble de liaisons associant un membre, tel qu'un compte utilisateur ou un compte de service, à un rôle. Les stratégies sont représentées par des valeurs JSON ou YAML.

Voici un exemple de stratégie où user-1@gmail.com s'est vu attribuer le rôle de propriétaire, et user-2@gmail.com et service-account-13@appspot.gserviceaccount.com se sont vu attribuer le rôle d'éditeur :

{
  "bindings":[
    {
      "members":[
        "user:user-1@gmail.com"
      ],
      "role":"roles/owner"
    },
    {
      "members":[
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:user-2@gmail.com"
      ],
      "role":"roles/editor"
    }
  ],
  "etag":"BwUjMhCsNvY=",
  "version":1
}

Vous pouvez mettre à jour une stratégie pour une ressource en suivant le modèle lecture-modification-écriture. Cela signifie qu'il n'existe pas de méthode distincte pour créer, modifier ou révoquer un accès utilisateur. Au lieu de cela, toutes les modifications sont réalisées selon la méthode suivante :

  1. Lire la stratégie actuelle en appelant getIamPolicy().
  2. Modifier la stratégie renvoyée, à l’aide d’un éditeur de texte ou par programmation, afin d'ajouter ou de supprimer les membres souhaités et leurs rôles.
  3. Écrire la stratégie mise à jour en appelant setIamPolicy().

Il est courant d'accorder des autorisations pour l'ensemble d'un projet ou d'une entreprise. Toutefois, vous pouvez également définir des stratégies de manière plus précise pour différentes ressources GCP, telles que des instances Compute Engine ou des buckets Cloud Storage. Pour obtenir la liste complète des rôles et le niveau de ressource le plus bas auquel vous pouvez les appliquer, consultez l'article Comprendre les rôles.

Les sections ci-dessous démontrent comment obtenir, modifier et définir une stratégie pour un projet.

Obtenir des règles

COMMANDE GCLOUD

Exécutez la commande get-iam-policy :

gcloud projects get-iam-policy [PROJECT] --format [FORMAT] > [FILE-PATH]

[PROJECT] est le nom du projet. [FORMAT] est une valeur JSON ou YAML. [FILE-PATH] est le chemin, sur le disque, où enregistrer la stratégie.

Par exemple, la commande suivante obtient la stratégie pour le projet my-project au format JSON et l'enregistre dans le répertoire de base de l'utilisateur.

gcloud projects get-iam-policy my-project --format json > ~/policy.json

La réponse contient une stratégie.

API REST

Appelez getIamPolicy() :

POST https://cloudresourcemanager.googleapis.com/v1/[PROJECT]:getIamPolicy

[PROJECT] est le nom de la ressource pour laquelle obtenir une stratégie, telle que projects/my-project.

La réponse contient une stratégie.

C#

Avant de tester cet exemple, suivez les instructions de configuration C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM C#.


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM Python.

def get_policy(project_id):
    """Gets IAM policy for a project."""

    # pylint: disable=no-member
    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])
    service = googleapiclient.discovery.build(
        'cloudresourcemanager', 'v1', credentials=credentials)
    policy = service.projects().getIamPolicy(
        resource=project_id, body={}).execute()
    print(policy)
    return policy

Modifier une stratégie

À l'aide d'un éditeur de texte ou par programmation, vous pouvez modifier une stratégie pour attribuer des rôles à des utilisateurs donnés ou les révoquer.

Pour attribuer un rôle existant à un utilisateur :

COMMANDE GCLOUD

L'exemple suivant accorde le rôle Éditeur à l'utilisateur user-3@gmail.com à l'aide d'un éditeur de texte, en ajoutant son adresse e-mail au tableau members sous cette liaison :

{
  "members":[
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@gmail.com",
    "user:user-3@gmail.com"
  ],
  "role":"roles/editor"
}

API REST

L'exemple suivant accorde le rôle Éditeur à l'utilisateur user-3@gmail.com à l'aide d'un éditeur de texte, en ajoutant son adresse e-mail au tableau members sous cette liaison :

{
  "members":[
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@gmail.com",
    "user:user-3@gmail.com"
  ],
  "role":"roles/editor"
}

C#

Avant de tester cet exemple, suivez les instructions de configuration C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM C#.


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM Python.

def modify_policy_add_member(policy, role, member):
    """Adds a new member to a role binding."""

    binding = next(b for b in policy['bindings'] if b['role'] == role)
    binding['members'].append(member)
    print(binding)
    return policy

Pour ajouter des utilisateurs à un nouveau rôle qui n'existe pas déjà, ajoutez une nouvelle liaison binding.

COMMANDE GCLOUD

À l'aide d'un éditeur de texte, ajoutez une nouvelle liaison binding au tableau bindings. La commande suivante attribue à user-3@gmail.com le rôle de lecteur :

{
  "members":[
    "user:user-3@gmail.com"
  ],
  "role":"roles/reader"
}

API REST

À l'aide d'un éditeur de texte, ajoutez une nouvelle liaison binding au tableau bindings. La commande suivante attribue à user-3@gmail.com le rôle de lecteur :

{
  "members":[
    "user:user-3@gmail.com"
  ],
  "role":"roles/reader"
}

C#

Avant de tester cet exemple, suivez les instructions de configuration C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM C#.


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM Python.

def modify_policy_add_role(policy, role, member):
    """Adds a new role binding to a policy."""

    binding = {
        'role': role,
        'members': [member]
    }
    policy['bindings'].append(binding)
    print(policy)
    return policy

Pour révoquer un accès, supprimez l'ensemble des membres ou des liaisons souhaités. Les liaisons vides sans membres ne sont pas autorisées.

Vous pouvez uniquement attribuer des rôles liés à des services d'API activés. Si un service, tel que Compute Engine, n'est pas actif, vous ne pouvez pas attribuer des rôles exclusivement liés à Compute Engine. Pour en savoir plus, consultez l'article Activer et désactiver des API.

L'octroi d'autorisations sur des projets présente certaines contraintes, en particulier lors de l'attribution du rôle Propriétaire. Pour en savoir plus, consultez la documentation de référence projects.setIamPolicy().

Définir des règles

Une fois la stratégie modifiée pour attribuer les rôles souhaités, appelez setIamPolicy() pour effectuer les mises à jour.

COMMANDE GCLOUD

Exécutez la commande set-iam-policy avec le chemin d'accès au fichier JSON contenant la stratégie mise à jour :

gcloud projects set-iam-policy [PROJECT] [FILE-PATH]

Comme avec get-iam-policy, [PROJECT] est le nom du projet pour lequel définir une stratégie. [FILE-PATH] est le chemin du fichier contenant la nouvelle stratégie.

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

API REST

Appelez setIamPolicy() :

POST https://cloudresourcemanager.googleapis.com/v1/[PROJECT]:setIamPolicy

[PROJECT] est le nom de la ressource pour laquelle définir une stratégie, telle que projects/my-project.

Le corps de la requête doit contenir la stratégie IAM mise à jour.

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

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Python

Avant d'essayer cet exemple, suivez les instructions de configuration de Python décrites dans le Guide de démarrage rapide avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM Python.

def set_policy(project_id, policy):
    """Sets IAM policy for a project."""

    # pylint: disable=no-member
    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])
    service = googleapiclient.discovery.build(
        'cloudresourcemanager', 'v1', credentials=credentials)

    policy = service.projects().setIamPolicy(
        resource=project_id, body={
            'policy': policy
        }).execute()
    print(policy)
    return policy

Pour éviter les conflits si plusieurs sources tentent de mettre à jour la stratégie simultanément, la stratégie contient une valeur etag. Lorsque vous appelez setIamPolicy(), Cloud IAM compare la valeur etag de la requête avec la valeur etag existante, et écrit la stratégie uniquement si les valeurs correspondent.

Étapes suivantes

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

Envoyer des commentaires concernant…

Documentation Cloud IAM