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 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 Cloud 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. 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 Cloud Console.

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

  6. Cliquez sur Enregistrer.

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

  1. Ouvrez la section "Projets" de la page "IAM et administration" dans Cloud Console.

    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 rôle sélectionné est attribué au membre dans chacun des projets sélectionnés.

Révoquer l'accès

  1. Ouvrez la page IAM dans Google Cloud Console.

    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 () situé sur la droite.

  5. 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 également accorder ou révoquer rapidement l'accès à l'aide de l'outil de ligne de commande gcloud.

Accorder l'accès

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

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 un rôle à 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 ci-dessous démontrent comment obtenir, modifier et définir une stratégie pour un projet.

Obtenir la stratégie actuelle

Commande gcloud

Exécutez la commande get-iam-policy :

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

Appelez getIamPolicy() :

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:getIamPolicy

Remplacez project-id par le projet que vous souhaitez interroger (par exemple, my-project).

La réponse contient 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 pour 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 cet exemple, suivez les instructions de configuration de Java décrites 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 pour 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 cet exemple, suivez les instructions de configuration de Python décrites 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 pour 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 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 Éditeur à eve@example.com. Pour accorder ce rôle, ajoutez l'utilisateur au tableau members pour la liaison :

{
  "role": "roles/editor",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:bob@example.com",
    "user:eve@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 Éditeur à eve@example.com. Pour accorder ce rôle, ajoutez l'utilisateur au tableau members pour la liaison :

{
  "role": "roles/editor",
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:bob@example.com",
    "user:eve@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 pour 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 cet exemple, suivez les instructions de configuration de Java décrites 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 pour 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 cet exemple, suivez les instructions de configuration de Python décrites 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 pour 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 à eve@example.com. Pour accorder ce rôle, ajoutez une liaison au tableau bindings de la stratégie :

{
  "role": "roles/reader",
  "members": [
    "user:eve@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 à eve@example.com. Pour accorder ce rôle, ajoutez une liaison au tableau bindings de la stratégie :

{
  "role": "roles/reader",
  "members": [
    "user:eve@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 pour 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 cet exemple, suivez les instructions de configuration de Java décrites 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 pour 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 cet exemple, suivez les instructions de configuration de Python décrites 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 pour 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 pour 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 cet exemple, suivez les instructions de configuration de Java décrites 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 pour 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 cet exemple, suivez les instructions de configuration de Python décrites 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 pour 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 :

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

Appelez setIamPolicy() :

POST https://cloudresourcemanager.googleapis.com/v1/projects/project-id:setIamPolicy

Remplacez project-id par le projet que vous mettez à jour (par exemple, 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();
    }
}

Java

Avant d'essayer cet exemple, suivez les instructions de configuration de Java décrites 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 pour 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 cet exemple, suivez les instructions de configuration de Python décrites 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 pour 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