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.

Les exemples de cette page montrent comment modifier l'accès à un projet. Cependant, vous pouvez adapter ces étapes pour modifier l'accès à toute ressource Google Cloud compatible avec la stratégie Cloud IAM. Pour en savoir plus sur la manière de modifier l'accès à une ressource spécifique, consultez la documentation de référence de la ressource.

Vous pouvez gérer les rôles utilisateur à l'aide de Cloud Console, de l'outil de ligne de commande gcloud, de l'API REST ou des bibliothèques clientes. L'utilisation de Cloud Console constitue la méthode la plus simple, décrite en première partie de cet article, tout comme les mises à jour rapides effectuées à l'aide de l'outil de ligne de commande gcloud. La programmation, utile dans des scénarios plus complexes, est abordée ensuite.

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

Avant de commencer

Utiliser Cloud Console

Cloud Console permet de gérer les rôles utilisateur de manière simple et rapide.

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. Dans Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

  2. Cliquez sur Ajouter.

  3. 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.

  4. Choisissez un rôle. Les rôles donnent aux membres le niveau d'autorisation approprié. Pour respecter les bonnes pratiques en matière de sécurité, nous vous recommandons vivement 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.

  5. Cliquez sur Enregistrer.

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

  1. Dans Cloud Console, accédez à la page Gérer les ressources :

    Accéder à la page "Gérer les ressources"

  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 Nouveaux membres, puis sélectionnez le rôle souhaité dans le menu déroulant.

  5. Cliquez sur Enregistrer. Le rôle sélectionné est attribué au membre dans chacun des projets sélectionnés.

Révoquer l'accès

  1. Dans Cloud Console, accédez à la page IAM.

    Accéder à la page IAM

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

  3. Cliquez sur le bouton Supprimer () pour chaque rôle que vous souhaitez révoquer, puis cliquez sur Enregistrer.

Modifier l'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.

Effectuer des mises à jour rapides à l'aide de gcloud

Vous pouvez ajouter ou révoquer un rôle unique à l'aide des commandes add-iam-policy-binding et remove-iam-policy-binding de l'outil de ligne de commande gcloud.

Accorder l'accès

Pour accorder rapidement un rôle à un membre, exécutez la commande gcloud de l'outil add-iam-policy-binding :

gcloud group add-iam-policy-binding resource \
    --member=member --role=role-id

Indiquez les valeurs suivantes :

  • group : le groupe d'outils gcloud de la ressource que vous souhaitez mettre à jour. Par exemple, vous pouvez utiliser projects ou organizations.
  • resource : nom de la ressource.
  • member : l'identifiant du membre, qui se présente généralement sous la forme suivante : member-type:id. Par exemple, user:my-user@example.com. Pour obtenir la liste complète des valeurs possibles pour member, consultez la documentation de référence sur les liaisons de stratégie.

  • role-id : le nom du rôle.

Par exemple, pour accorder le rôle Lecteur à l'utilisateur my-user@example.com pour le projet my-project, procédez comme suit :

gcloud projects add-iam-policy-binding my-project \
    --member=user:my-user@example.com --role=roles/viewer

Révoquer l'accès

Pour révoquer rapidement le rôle d'un utilisateur, exécutez la commande gcloud de l'outil remove-iam-policy-binding :

gcloud group remove-iam-policy-binding resource \
    --member=member --role=role-id

Indiquez les valeurs suivantes :

  • group : le groupe d'outils gcloud de la ressource que vous souhaitez mettre à jour. Par exemple, vous pouvez utiliser projects ou organizations.
  • resource : nom de la ressource.
  • member : l'identifiant du membre, qui se présente généralement sous la forme suivante : member-type:id. Par exemple, user:my-user@example.com. Pour obtenir la liste complète des valeurs possibles pour member, consultez la documentation de référence sur les liaisons de stratégie.

  • role-id : le nom du rôle.

Par exemple, pour révoquer le rôle Lecteur de l'utilisateur my-user@example.com pour le projet my-project, procédez comme suit :

gcloud projects remove-iam-policy-binding my-project \
    --member=user:my-user@example.com --role=roles/viewer

Contrôler les accès de manière automatisée

Dans certains cas, il est plus facile de gérer le contrôle des accès de manière automatisée. Vous pouvez contrôler les accès de manière automatisée à l'aide de l'outil de ligne de commande gcloud, de l'API REST ou des bibliothèques clientes. La programmation s'avère particulièrement utile pour effectuer des mises à jour automatiques ou à grande échelle, qui se révéleraient fastidieuses dans Cloud Console, ou pour exécuter des commandes gcloud pour chaque membre.

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.

L'exemple suivant illustre une stratégie dans laquelle fatima@example.com a obtenu le rôle Propriétaire, et wei@example.com et service-account-13@appspot.gserviceaccount.com ont obtenu le rôle Éditeur :

{
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:fatima@example.com"
      ]
    },
    {
      "role": "roles/editor",
      "members": [
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:wei@example.com"
      ]
    }
  ],
  "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 Google Cloud, 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 suivantes expliquent comment obtenir, modifier et définir des stratégies pour les projets. Toutefois, vous pouvez adapter ces instructions pour obtenir, modifier et définir la stratégie de toute ressource pouvant posséder sa propre stratégie Cloud IAM. Pour modifier la stratégie d'une ressource autre qu'un projet, recherchez les commandes gcloud get-iam-policy et set-iam-policy, ou les méthodes API REST getIamPolicy() et setIamPolicy() de la ressource. Ensuite, utilisez ces commandes ou méthodes en appliquant les sections Obtenir la stratégie actuelle et Définir une stratégie de cette page.

Obtenir la stratégie actuelle

Commande gcloud

Exécutez la commande get-iam-policy pour la ressource. L'exemple suivant montre la commande get-iam-policy pour les projets :

gcloud projects get-iam-policy project-id --format=format > filepath

Indiquez les valeurs suivantes :

  • project-id : le projet en cours de mise à jour (par exemple, my-project).
  • format : la valeur json ou yaml.
  • filepath : le chemin d'accès à un nouveau fichier de sortie pour la stratégie.

Par exemple, la commande suivante récupère la stratégie du projet my-project au format JSON et l'enregistre dans le répertoire d'accueil de l'utilisateur :

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

API REST

La méthode projects.getIamPolicy de l'API Resource Manager obtient la stratégie Cloud IAM d'un projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-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:project-owner@example.com"
      ]
    },
    {
      "role": "roles/iam.securityReviewer",
      "members": [
        "user:fatima@example.com"
      ]
    }
  ]
}

C#

Avant de tester cet exemple, suivez les instructions de configuration de C# dans le Guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage 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;
    }
}

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.cloudresourcemanager.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.model.Policy;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class GetPolicy {

  // Gets a project's policy.
  public static Policy getPolicy(String projectId) {
    // projectId = "my-project-id"

    Policy policy = null;

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return policy;
    }

    try {
      GetIamPolicyRequest request = new GetIamPolicyRequest();
      policy = service.projects().getIamPolicy(projectId, request).execute();
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    } catch (IOException e) {
      System.out.println("Unable to get policy: \n" + e.toString());
      return policy;
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                JacksonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Python.

def get_policy(project_id, version=1):
    """Gets IAM policy for a project."""

    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={"options": {"requestedPolicyVersion": version}},
        )
        .execute()
    )
    print(policy)
    return policy

Modifier une stratégie

De façon automatisée ou à l'aide d'un éditeur de texte, modifiez la copie locale de la stratégie de votre projet afin de refléter les rôles que vous souhaitez accorder ou révoquer aux utilisateurs donnés.

Accorder un rôle

Pour attribuer des rôles à vos membres, modifiez les liaisons de rôles dans la stratégie. Pour savoir quels rôles vous pouvez attribuer, consultez la section Comprendre les rôles.

Pour accorder un rôle qui est déjà inclus dans la stratégie, procédez comme suit :

Commande gcloud

Accordez un rôle en modifiant la stratégie JSON ou YAML renvoyée par la commande get-iam-policy. Notez que cette modification de stratégie ne prendra effet que lorsque vous aurez défini la stratégie mise à jour.

L'exemple suivant accorde le rôle Examinateur de sécurité (roles/iam.securityReviewer) à wei@example.com. Pour accorder ce rôle, ajoutez l'utilisateur au tableau members pour la liaison :

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:fatima@example.com",
    "user:wei@example.com"
  ]
}

API REST

Accordez un rôle en modifiant la stratégie JSON ou YAML renvoyée par la commande get-iam-policy. Notez que cette modification de stratégie ne prendra effet que lorsque vous aurez défini la stratégie mise à jour.

L'exemple suivant accorde le rôle Examinateur de sécurité (roles/iam.securityReviewer) à wei@example.com. Pour accorder ce rôle, ajoutez l'utilisateur au tableau members pour la liaison :

{
  "role": "roles/iam.securityReviewer",
  "members": [
    "user:fatima@example.com",
    "user:wei@example.com"
  ]
}

C#

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


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

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

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.

import com.google.api.services.cloudresourcemanager.model.Binding;
import com.google.api.services.cloudresourcemanager.model.Policy;
import java.util.List;

public class AddMember {

  // Adds a member to a preexisting role.
  public static void addMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-add@example.com";

    List<Binding> bindings = policy.getBindings();

    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        b.getMembers().add(member);
        System.out.println("Member " + member + " added to role " + role);
        return;
      }
    }

    System.out.println("Role not found in policy; member not added");
  }
}

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage 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 accorder un rôle qui n'est pas encore inclus dans la stratégie, ajoutez une liaison (binding).

Commande gcloud

Ajoutez une liaison en modifiant la stratégie JSON ou YAML renvoyée par la commande get-iam-policy. Notez que cette modification de stratégie ne prendra effet que lorsque vous aurez défini la stratégie mise à jour.

L'exemple suivant attribue le rôle Lecteur à fatima@example.com. Pour accorder ce rôle, ajoutez une liaison au tableau bindings de la stratégie :

{
  "role": "roles/reader",
  "members": [
    "user:fatima@example.com"
  ]
}

API REST

Ajoutez une liaison en modifiant la stratégie JSON ou YAML renvoyée par la commande get-iam-policy. Notez que cette modification de stratégie ne prendra effet que lorsque vous aurez défini la stratégie mise à jour.

L'exemple suivant attribue le rôle Lecteur à fatima@example.com. Pour accorder ce rôle, ajoutez une liaison au tableau bindings de la stratégie :

{
  "role": "roles/reader",
  "members": [
    "user:fatima@example.com"
  ]
}

C#

Avant de tester cet exemple, suivez les instructions de configuration de C# dans le Guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage 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;
    }
}

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.

import com.google.api.services.cloudresourcemanager.model.Binding;
import com.google.api.services.cloudresourcemanager.model.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddBinding {

  // Adds a member to a role with no previous members.
  public static void addBinding(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/role-to-add";
    List<String> members = new ArrayList<String>();
    members.add("user:member-to-add@example.com");

    Binding binding = new Binding();
    binding.setRole(role);
    binding.setMembers(members);

    policy.getBindings().add(binding);
    System.out.println("Added binding: " + binding.toString());
  }
}

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage 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

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 de projects.setIamPolicy().

Révoquer un rôle

Pour révoquer un rôle :

Commande gcloud

Révoquez un rôle en modifiant la stratégie JSON ou YAML renvoyée par la commande get-iam-policy. Cette modification de stratégie ne prendra effet que lorsque vous aurez défini la stratégie mise à jour.

Pour révoquer le rôle d'un membre, supprimez les membres ou les liaisons concernés du tableau bindings de la stratégie.

API REST

Révoquez un rôle en modifiant la stratégie JSON ou YAML renvoyée par la commande get-iam-policy. Cette modification de stratégie ne prendra effet que lorsque vous aurez défini la stratégie mise à jour.

Pour révoquer le rôle d'un membre, supprimez les membres ou les liaisons concernés du tableau bindings de la stratégie.

C#

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


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

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            return policy;
        }
    }
}

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.

import com.google.api.services.cloudresourcemanager.model.Binding;
import com.google.api.services.cloudresourcemanager.model.Policy;
import java.util.List;

public class RemoveMember {

  // Removes member from a role; removes binding if binding contains 0 members.
  public static void removeMember(Policy policy) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();

    String role = "roles/existing-role";
    String member = "user:member-to-remove@example.com";

    List<Binding> bindings = policy.getBindings();
    Binding binding = null;
    for (Binding b : bindings) {
      if (b.getRole().equals(role)) {
        binding = b;
      }
    }
    if (binding.getMembers().contains(member)) {
      binding.getMembers().remove(member);
      System.out.println("Member " + member + " removed from " + role);
      if (binding.getMembers().isEmpty()) {
        policy.getBindings().remove(binding);
      }
      return;
    }

    System.out.println("Role not found in policy; member not removed");
    return;
  }
}

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Python.

def modify_policy_remove_member(policy, role, member):
    """Removes a  member from a role binding."""
    binding = next(b for b in policy["bindings"] if b["role"] == role)
    if "members" in binding and member in binding["members"]:
        binding["members"].remove(member)
    print(binding)
    return policy

Définir une stratégie

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

Commande gcloud

Utilisez la commande set-iam-policy et indiquez le chemin d'accès au fichier JSON contenant la stratégie mise à jour : L'exemple suivant montre la commande set-iam-policy pour les projets :

gcloud projects set-iam-policy project-id filepath

Indiquez les valeurs suivantes :

  • project-id : le projet en cours de mise à jour (par exemple, my-project).
  • filepath : le chemin d'accès à un fichier contenant la nouvelle stratégie.

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

API REST

La méthode projects.setIamPolicy de l'API Resource Manager définit la stratégie dans la requête en tant que nouvelle stratégie Cloud IAM du projet.

Avant d'utiliser les données de requête ci-dessous, effectuez les remplacements suivants :

  • project-id : ID de votre projet 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.

Méthode HTTP et URL :

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-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.


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();
    }
}

Java

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Java décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Java.

import com.google.api.client.googleapis.javanet.GoogleNetHttpTransport;
import com.google.api.client.json.jackson2.JacksonFactory;
import com.google.api.services.cloudresourcemanager.CloudResourceManager;
import com.google.api.services.cloudresourcemanager.model.Policy;
import com.google.api.services.cloudresourcemanager.model.SetIamPolicyRequest;
import com.google.api.services.iam.v1.IamScopes;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.security.GeneralSecurityException;
import java.util.Collections;

public class SetPolicy {

  // Sets a project's policy.
  public static void setPolicy(Policy policy, String projectId) {
    // policy = service.Projects.GetIAmPolicy(new GetIamPolicyRequest(), your-project-id).Execute();
    // projectId = "my-project-id"

    CloudResourceManager service = null;
    try {
      service = createCloudResourceManagerService();
    } catch (IOException | GeneralSecurityException e) {
      System.out.println("Unable to initialize service: \n" + e.toString());
      return;
    }

    try {
      SetIamPolicyRequest request = new SetIamPolicyRequest();
      request.setPolicy(policy);
      Policy response = service.projects().setIamPolicy(projectId, request).execute();
      System.out.println("Policy set: " + response.toString());
    } catch (IOException e) {
      System.out.println("Unable to set policy: \n" + e.toString());
    }
  }

  public static CloudResourceManager createCloudResourceManagerService()
      throws IOException, GeneralSecurityException {
    // Use the Application Default Credentials strategy for authentication. For more info, see:
    // https://cloud.google.com/docs/authentication/production#finding_credentials_automatically
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(IamScopes.CLOUD_PLATFORM));

    CloudResourceManager service =
        new CloudResourceManager.Builder(
                GoogleNetHttpTransport.newTrustedTransport(),
                JacksonFactory.getDefaultInstance(),
                new HttpCredentialsAdapter(credential))
            .setApplicationName("service-accounts")
            .build();
    return service;
  }
}

Python

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite dans le guide de démarrage rapide de Cloud IAM : Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM en langage Python.

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

    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 n'écrit la stratégie que si les valeurs correspondent.

Étapes suivantes