Gérer l'accès aux projets, aux dossiers et aux organisations

Cette page explique comment accorder, modifier et révoquer des accès à des projets, des dossiers et des organisations. Pour savoir comment gérer l'accès à d'autres ressources, consultez les guides suivants :

Dans la gestion de l'authentification et des accès (IAM), l'accès est accordé via des stratégies d'autorisation, également appelées stratégies IAM. Une stratégie d'autorisation est associée à une ressource Google Cloud. Chaque stratégie d'autorisation contient un ensemble de liaisons de rôles qui associent un ou plusieurs comptes principaux, tels que des utilisateurs ou des comptes de service, à un rôle IAM. Ces liaisons de rôles accordent les rôles spécifiés aux comptes principaux, à la fois sur la ressource associée à la stratégie d'autorisation et sur tous les descendants de cette ressource. Pour en savoir plus sur les stratégies d'autorisation, consultez la section Comprendre les stratégies d'autorisation.

Vous pouvez gérer l'accès aux projets, aux dossiers et aux organisations à l'aide de la console Google Cloud, de Google Cloud CLI, de l'API REST ou des bibliothèques clientes Resource Manager.

Avant de commencer

  • Enable the Resource Manager API.

    Enable the API

  • Configurez l'authentification.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    C#

    Pour utiliser les exemples .NET de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local dans la documentation sur l'authentification Google Cloud.

    Java

    Pour utiliser les exemples Java de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local dans la documentation sur l'authentification Google Cloud.

    Python

    Pour utiliser les exemples Python de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

    Pour en savoir plus, consultez Configurer l'authentification pour un environnement de développement local dans la documentation sur l'authentification Google Cloud.

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.

Rôles requis

Lorsque vous créez un projet, un dossier ou une organisation, un rôle vous permettant de gérer l'accès à cette ressource vous est automatiquement attribué. Pour en savoir plus, consultez la section Stratégies par défaut.

Si vous n'avez pas créé votre projet, dossier ou organisation, assurez-vous de disposer des rôles nécessaires pour gérer l'accès à cette ressource.

Pour obtenir les autorisations nécessaires pour gérer l'accès à un projet, un dossier ou une organisation, demandez à votre administrateur de vous accorder les rôles IAM suivants sur la ressource dont vous souhaitez gérer l'accès (projet, dossier ou organisation) :

Ces rôles prédéfinis contiennent les autorisations requises pour gérer l'accès à un projet, un dossier ou une organisation. Pour connaître les autorisations exactes requises, développez la section Autorisations requises :

Autorisations requises

Les autorisations suivantes sont requises pour gérer l'accès à un projet, un dossier ou une organisation :

  • Pour gérer l'accès aux projets :
    • resourcemanager.projects.getIamPolicy
    • resourcemanager.projects.setIamPolicy
  • Pour gérer l'accès aux dossiers :
    • resourcemanager.folders.getIamPolicy
    • resourcemanager.folders.setIamPolicy
  • Pour gérer l'accès aux organisations :
    • resourcemanager.organizations.getIamPolicy
    • resourcemanager.organizations.setIamPolicy

Vous pouvez également obtenir ces autorisations avec des rôles personnalisés ou d'autres rôles prédéfinis.

Afficher l'accès actuel

Vous pouvez voir qui a accès à votre projet, dossier ou organisation à l'aide de la console Google Cloud, de gcloud CLI, de l'API REST ou des bibliothèques clientes Resource Manager.

Console

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

    Accéder à IAM

  2. Sélectionnez un projet, un dossier ou une organisation.

    La console Google Cloud liste tous les comptes principaux auxquels des rôles ont été attribués sur votre projet, dossier ou organisation. Cette liste inclut les comptes principaux qui ont hérité de rôles sur la ressource à partir de ressources parentes. Pour en savoir plus sur l'héritage des stratégies, consultez la section Héritage des stratégies et hiérarchie des ressources.

  3. Facultatif : Pour afficher les attributions de rôles pour les agents de service, cochez la case Inclure les attributions de rôles fournies par Google.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour savoir qui a accès à votre projet, dossier ou organisation, obtenez la stratégie d'autorisation de la ressource. Pour apprendre à interpréter les stratégies d'autorisation, consultez la page Comprendre les stratégies d'autorisation.

    Pour obtenir la stratégie d'autorisation associée à la ressource, exécutez la commande get-iam-policy correspondante.

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Indiquez les valeurs suivantes :

    • RESOURCE_TYPE : type de la ressource dont vous souhaitez consulter l'accès. Utilisez l'une des valeurs suivantes : projects, resource-manager folders ou organizations.

    • RESOURCE_ID : votre projet, dossier ou ID Google Cloud Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossiers et d'organisations sont numériques, tels que 123456789012.

    • FORMAT : format souhaité pour la stratégie. Utilisez json ou yaml.

    • PATH : 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 et l'enregistre dans votre répertoire d'accueil au format JSON :

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

C#

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

Pour savoir qui a accès à votre projet, dossier ou organisation, obtenez la stratégie d'autorisation de la ressource. Pour apprendre à interpréter les stratégies d'autorisation, consultez la page Comprendre les stratégies d'autorisation.

L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation pour un dossier ou une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.


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

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

Pour savoir qui a accès à votre projet, dossier ou organisation, obtenez la stratégie d'autorisation de la ressource. Pour apprendre à interpréter les stratégies d'autorisation, consultez la page Comprendre les stratégies d'autorisation.

L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation pour un dossier ou une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetProjectPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";

    getProjectPolicy(projectId);
  }

  // Gets a project's policy.
  public static Policy getProjectPolicy(String projectId) throws IOException {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (ProjectsClient projectsClient = ProjectsClient.create()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .build();
      return projectsClient.getIamPolicy(request);
    }
  }
}

Python

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

Pour savoir qui a accès à votre projet, dossier ou organisation, obtenez la stratégie d'autorisation de la ressource. Pour apprendre à interpréter les stratégies d'autorisation, consultez la page Comprendre les stratégies d'autorisation.

L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation pour un dossier ou une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def get_project_policy(project_id: str) -> policy_pb2.Policy:
    """
    Get policy for project.

    project_id: ID or number of the Google Cloud project you want to use.
    """

    client = resourcemanager_v3.ProjectsClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    policy = client.get_iam_policy(request)
    return policy

REST

Pour savoir qui a accès à votre projet, dossier ou organisation, obtenez la stratégie d'autorisation de la ressource. Pour apprendre à interpréter les stratégies d'autorisation, consultez la page Comprendre les stratégies d'autorisation.

La méthode getIamPolicy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation 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, utilisez v1. Pour les dossiers, utilisez v2.
  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeur projects, folders ou organizations.
  • RESOURCE_ID : ID du projet, de l'organisation ou du dossier Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • 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 :

La réponse contient la stratégie d'autorisation de la ressource. Par exemple :

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

Attribuer ou révoquer un rôle unique

Vous pouvez utiliser la console Google Cloud et gcloud CLI pour accorder ou révoquer rapidement un rôle unique pour un seul compte principal, sans modifier directement la stratégie d'autorisation de la ressource. Les types de membres courants incluent les comptes principaux Google, les comptes de service, les Google Groupes et les domaines. Pour obtenir la liste de tous les types de comptes principaux, consultez la page Concepts liés à l'identité.

En règle générale, les modifications apportées aux stratégies prennent effet en moins de deux minutes. Toutefois, dans certains cas, la propagation des modifications dans le système peut prendre sept minutes ou plus.

Si vous avez besoin d'aide pour identifier le rôle prédéfini le plus approprié, consultez la section Choisir des rôles prédéfinis.

Attribuer un rôle unique

Pour attribuer un seul rôle à un compte principal, procédez comme suit :

Console

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

    Accéder à IAM

  2. Sélectionnez un projet, un dossier ou une organisation.

  3. Sélectionnez un compte principal auquel attribuer un rôle :

    • Pour attribuer un rôle à un compte principal qui dispose déjà d'autres rôles sur la ressource, recherchez la ligne contenant le compte principal, puis cliquez sur Modifier le compte principal sur cette ligne, puis cliquez sur Ajouter un autre rôle.

      Pour attribuer un rôle à un agent de service, cochez la case Inclure les attributions de rôles fournies par Google pour afficher son adresse e-mail.

    • Pour attribuer un rôle à un compte principal qui ne dispose d'aucun rôle sur la ressource, cliquez sur Accorder l'accès, puis saisissez l'adresse e-mail du compte principal ou un autre identifiant.

  4. Sélectionnez un rôle à attribuer dans la liste déroulante. Pour respecter les bonnes pratiques de sécurité, choisissez un rôle qui n'inclut que les autorisations dont votre compte principal a besoin.

  5. Facultatif : ajoutez une condition au rôle.

  6. Cliquez sur Enregistrer. Le rôle est attribué au compte principal sur la ressource.

Pour attribuer un rôle à un compte principal sur plusieurs projets, dossiers ou organisations, procédez comme suit :

  1. Dans la console Google Cloud, 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. Si le panneau d'informations n'est pas déjà visible, cliquez sur Afficher le panneau d'informations. Cliquez ensuite sur Autorisations.

  4. Sélectionnez un compte principal auquel attribuer un rôle :

    • Pour attribuer un rôle à un compte principal qui dispose déjà d'autres rôles, recherchez une ligne contenant le compte principal, cliquez sur Modifier le compte principal sur cette ligne, puis cliquez sur Ajoutez un autre rôle.

    • Pour attribuer un rôle à un compte principal qui ne dispose pas déjà d'autres rôles, cliquez sur Ajouter un compte principal, puis saisissez l'adresse e-mail ou un autre identifiant du compte principal.

  5. Sélectionnez un rôle à attribuer dans la liste déroulante.

  6. Facultatif : ajoutez une condition au rôle.

  7. Cliquez sur Enregistrer. Le rôle sélectionné est attribué au compte principal sur chacune des ressources sélectionnées.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. La commande add-iam-policy-binding vous permet d'attribuer rapidement un rôle à un compte principal.

    Avant d'utiliser les données de la commande ci-dessous, effectuez les remplacements suivants :

    • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer l'accès. Utilisez projects, resource-manager folders ou organizations.

    • RESOURCE_ID : ID de votre projet, dossier ou organisation Google Cloud. Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.

    • PRINCIPAL : identifiant du compte principal ou membre, se présentant généralement sous la forme suivante : PRINCIPAL_TYPE:ID. Exemple : user:my-user@example.com Pour obtenir la liste complète des valeurs possibles pour PRINCIPAL, consultez la documentation de référence sur les liaisons de stratégie.

      Pour le type de compte principal user, le nom de domaine indiqué dans l'identifiant doit être un domaine Google Workspace ou Cloud Identity. Pour savoir comment configurer un domaine Cloud Identity, consultez la présentation de Cloud Identity.

    • ROLE_NAME : nom du rôle que vous souhaitez révoquer. Utilisez l'un des formats suivants :

      • Rôles prédéfinis : roles/SERVICE.IDENTIFIER
      • Rôles personnalisés au niveau du projet : projects/PROJECT_ID/roles/IDENTIFIER
      • Rôles personnalisés au niveau de l'organisation : organizations/ORG_ID/roles/IDENTIFIER

      Pour obtenir la liste complète des rôles prédéfinis, consultez la page Comprendre les rôles.

    • CONDITION : condition à ajouter à la liaison de rôle. Si vous ne souhaitez pas ajouter de condition, utilisez la valeur None. Pour en savoir plus sur les conditions, consultez la présentation des conditions.

    Exécutez la commande suivante :

    Linux, macOS ou Cloud Shell

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID \
        --member=PRINCIPAL --role=ROLE_NAME \
        --condition=CONDITION

    Windows (PowerShell)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID `
        --member=PRINCIPAL --role=ROLE_NAME `
        --condition=CONDITION

    Windows (cmd.exe)

    gcloud RESOURCE_TYPE add-iam-policy-binding RESOURCE_ID ^
        --member=PRINCIPAL --role=ROLE_NAME ^
        --condition=CONDITION

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

Révoquer un rôle unique

Pour révoquer un seul rôle d'un compte principal, procédez comme suit :

Console

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

    Accéder à IAM

  2. Sélectionnez un projet, un dossier ou une organisation.

  3. Recherchez la ligne contenant le compte principal dont vous souhaitez révoquer l'accès. Cliquez ensuite sur Modifier le compte principal sur cette ligne.

  4. Cliquez sur le bouton Supprimer () correspondant au rôle que vous souhaitez révoquer, puis cliquez sur Enregistrer.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour révoquer rapidement un rôle d'un utilisateur, exécutez la commande remove-iam-policy-binding :

    gcloud RESOURCE_TYPE remove-iam-policy-binding RESOURCE_ID 
    --member=PRINCIPAL --role=ROLE_NAME

    Indiquez les valeurs suivantes :

    • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer l'accès. Utilisez projects, resource-manager folders ou organizations.

    • RESOURCE_ID : votre projet, dossier ou ID Google Cloud Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.

    • PRINCIPAL : l'identifiant du compte principal, ou du membre, qui se présente généralement sous la forme suivante : PRINCIPAL_TYPE:ID. Exemple : user:my-user@example.com Pour obtenir la liste complète des valeurs possibles pour PRINCIPAL, consultez la documentation de référence sur les liaisons de stratégie.

      Pour le type de membre user, le nom de domaine indiqué dans l'identifiant doit être un domaine Google Workspace ou Cloud Identity. Pour savoir comment configurer un domaine Cloud Identity, consultez la présentation de Cloud Identity.

    • ROLE_NAME : nom du rôle que vous souhaitez révoquer. Utilisez l'un des formats suivants :

      • Rôles prédéfinis : roles/SERVICE.IDENTIFIER
      • Rôles personnalisés au niveau du projet : projects/PROJECT_ID/roles/IDENTIFIER
      • Rôles personnalisés au niveau de l'organisation : organizations/ORG_ID/roles/IDENTIFIER

      Pour obtenir la liste complète des rôles prédéfinis, consultez la page Comprendre les rôles.

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

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

Pour vous assurer de ne pas révoquer les rôles nécessaires, vous pouvez activer les recommandations pour la modification des risques. Les recommandations de modification de risque génèrent des avertissements lorsque vous essayez de révoquer des rôles au niveau du projet que Google Cloud a identifiés comme importants.

Attribuer ou révoquer plusieurs rôles à l'aide de la console Google Cloud

Vous pouvez attribuer et révoquer plusieurs rôles pour un même compte principal à l'aide de la console Google Cloud :

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

    Accéder à IAM

  2. Sélectionnez un projet, un dossier ou une organisation.

  3. Sélectionnez le compte principal dont vous souhaitez modifier le rôle :

    • Pour modifier les rôles d'un compte principal disposant déjà de rôles sur la ressource, recherchez une ligne contenant le compte principal, puis cliquez sur Modifier le compte principal sur cette ligne, puis cliquez sur Ajouter un autre rôle.

      Pour modifier les rôles d'un agent de service, cochez la case Inclure les attributions de rôles fournies par Google pour afficher son adresse e-mail.

    • Pour attribuer des rôles à un compte principal qui ne dispose d'aucun rôle sur la ressource, cliquez sur Accorder l'accès, puis saisissez l'adresse e-mail du compte principal ou un autre identifiant.

  4. Modifiez les rôles du compte principal :

    • Pour attribuer un rôle à un compte principal qui ne dispose pas de rôles existants sur la ressource, cliquez sur Sélectionner un rôle, puis sélectionnez un rôle à attribuer dans la liste déroulante.
    • Pour attribuer un rôle supplémentaire au compte principal, cliquez sur Ajouter un autre rôle, puis sélectionnez un rôle à attribuer dans la liste déroulante.
    • Pour remplacer l'un des rôles du compte principal par un autre rôle, cliquez sur le rôle existant, puis choisissez un autre rôle à attribuer dans la liste déroulante.
    • Pour révoquer l'un des rôles du compte principal, cliquez sur le bouton Supprimer pour chaque rôle à révoquer.

    Vous pouvez également ajouter une condition à un rôle, modifier la condition d'un rôle ou supprimer la condition d'un rôle.

  5. Cliquez sur Enregistrer.

Attribuer ou révoquer plusieurs rôles de manière automatisée

Pour effectuer des modifications d'accès à grande échelle impliquant l'attribution et la révocation de plusieurs rôles pour plusieurs comptes principaux, utilisez le modèle lecture-modification-écriture pour mettre à jour la stratégie d'autorisation de la ressource :

  1. Lisez la stratégie d'autorisation actuelle en appelant getIamPolicy().
  2. Modifiez la stratégie d'autorisation, à l’aide d’un éditeur de texte ou de façon automatisée, afin d'ajouter ou de supprimer des comptes principaux ou des liaisons de rôles.
  3. Écrivez la stratégie d'autorisation mise à jour en appelant setIamPolicy().

Vous pouvez utiliser gcloud CLI, l'API REST ou les bibliothèques clientes Resource Manager pour mettre à jour la stratégie d'autorisation.

En règle générale, les modifications apportées aux stratégies prennent effet en moins de deux minutes. Toutefois, dans certains cas, la propagation des modifications dans le système peut prendre sept minutes ou plus.

Obtenir la stratégie d'autorisation actuelle

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour obtenir la stratégie d'autorisation associée à la ressource, exécutez la commande get-iam-policy correspondante.

    gcloud RESOURCE_TYPE get-iam-policy RESOURCE_ID --format=FORMAT > PATH

    Indiquez les valeurs suivantes :

    • RESOURCE_TYPE : type de la ressource pour laquelle vous souhaitez obtenir la stratégie d'autorisation. Utilisez l'une des valeurs suivantes : projects, resource-manager folders ou organizations.

    • RESOURCE_ID : votre projet, dossier ou ID Google Cloud Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossiers et d'organisations sont numériques, tels que 123456789012.

    • FORMAT : format souhaité pour la stratégie d'autorisation. Utilisez json ou yaml.

    • PATH : le chemin d'accès à un nouveau fichier de sortie pour la stratégie d'autorisation.

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

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

C#

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.


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

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetProjectPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";

    getProjectPolicy(projectId);
  }

  // Gets a project's policy.
  public static Policy getProjectPolicy(String projectId) throws IOException {
    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (ProjectsClient projectsClient = ProjectsClient.create()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .build();
      return projectsClient.getIamPolicy(request);
    }
  }
}

Python

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

L'exemple suivant montre comment obtenir la stratégie d'autorisation d'un projet. Pour savoir comment obtenir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def get_project_policy(project_id: str) -> policy_pb2.Policy:
    """
    Get policy for project.

    project_id: ID or number of the Google Cloud project you want to use.
    """

    client = resourcemanager_v3.ProjectsClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    policy = client.get_iam_policy(request)
    return policy

REST

La méthode getIamPolicy de l'API Resource Manager permet d'obtenir la stratégie d'autorisation 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, utilisez v1. Pour les dossiers, utilisez v2.
  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeur projects, folders ou organizations.
  • RESOURCE_ID : ID du projet, de l'organisation ou du dossier Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • 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 :

La réponse contient la stratégie d'autorisation de la ressource. Par exemple :

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/owner",
      "members": [
        "user:owner@example.com"
      ]
    }
  ]
}

Enregistrez la réponse dans un fichier du type approprié (json ou yaml).

Modifier la stratégie d'autorisation

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

Pour éviter d'écraser d'autres modifications, ne modifiez pas et ne supprimez pas le champ etag de la stratégie d'autorisation. Le champ etag identifie l'état actuel de la stratégie d'autorisation. Lorsque vous définissez la stratégie d'autorisation modifiée, Cloud IAM compare la valeur etag de la requête avec la valeur etag existante et n'écrit la stratégie d'autorisation que si les valeurs correspondent.

Pour modifier les rôles accordés par une stratégie d'autorisation, vous devez modifier les liaisons de rôle dans la stratégie d'autorisation. Les liaisons de rôle ont le format suivant :

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

Les espaces réservés prennent les valeurs suivantes :

  • ROLE_NAME : nom du rôle que vous souhaitez attribuer. Utilisez l'un des formats suivants :

    • Rôles prédéfinis : roles/SERVICE.IDENTIFIER
    • Rôles personnalisés au niveau du projet : projects/PROJECT_ID/roles/IDENTIFIER
    • Rôles personnalisés au niveau de l'organisation : organizations/ORG_ID/roles/IDENTIFIER

    Pour obtenir la liste complète des rôles prédéfinis, consultez la page Comprendre les rôles.

  • PRINCIPAL_1, PRINCIPAL_2, ...PRINCIPAL_N : identifiants des comptes principaux auxquels vous souhaitez accorder le rôle.

    Les identifiants des comptes principaux se présentent généralement sous la forme suivante : PRINCIPAL-TYPE:ID. Exemple : user:my-user@example.com. Pour obtenir la liste complète des valeurs possibles pour PRINCIPAL, consultez la documentation de référence sur les liaisons de stratégie.

    Pour le type de membre user, le nom de domaine indiqué dans l'identifiant doit être un domaine Google Workspace ou Cloud Identity. Pour savoir comment configurer un domaine Cloud Identity, consultez la présentation de Cloud Identity.

  • CONDITIONS : facultatif. Toutes les conditions spécifiant quand l'accès sera accordé.

Attribuer un rôle

Pour attribuer des rôles à vos comptes principaux, modifiez les liaisons de rôles dans la stratégie d'autorisation. Pour savoir quels rôles vous pouvez attribuer, consultez la section Comprendre les rôles ou Afficher les rôles pouvant être attribués sur la ressource. Si vous avez besoin d'identifier les rôles prédéfinis les plus appropriés, consultez la section Choisir des rôles prédéfinis.

Vous pouvez éventuellement utiliser des conditions pour n'accorder des rôles que lorsque certaines conditions sont remplies.

Pour accorder un rôle déjà inclus dans la stratégie d'autorisation, ajoutez le compte principal à une liaison de rôle existante :

gcloud

Modifiez la stratégie d'autorisation renvoyée en ajoutant le compte principal à une liaison de rôle existante. Cette modification ne prendra effet que lorsque vous aurez défini la stratégie d'autorisation mise à jour.

Par exemple, imaginons que la stratégie d'autorisation contienne la liaison de rôle suivante, qui attribue le rôle Examinateur de sécurité (roles/iam.securityReviewer) à kai@example.com :

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

Pour accorder ce même rôle à raha@example.com, ajoutez raha@example.com à la liaison de rôle existante :

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

C#

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.


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

Go

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// addMember adds a member to a role binding.
func addMember(w io.Writer, policy *iam.Policy, role, member string) {
	for _, binding := range policy.Bindings {
		if binding.Role != role {
			continue
		}
		for _, m := range binding.Members {
			if m != member {
				continue
			}
			fmt.Fprintf(w, "Role %q found. Member already exists.\n", role)
			return
		}
		binding.Members = append(binding.Members, member)
		fmt.Fprintf(w, "Role %q found. Member added.\n", role)
		return
	}
	fmt.Fprintf(w, "Role %q not found. Member not added.\n", role)
}

Java

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.util.ArrayList;
import java.util.List;

public class AddMember {
  public static void main(String[] args) {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/existing-role";
    // TODO: Replace with your member.
    String member = "user:member-to-add@example.com";

    addMember(policy, role, member);
  }

  // Adds a member to a pre-existing role.
  public static Policy addMember(Policy policy, String role, String member) {
    List<Binding> newBindingsList = new ArrayList<>();

    for (Binding b : policy.getBindingsList()) {
      if (b.getRole().equals(role)) {
        newBindingsList.add(b.toBuilder().addMembers(member).build());
      } else {
        newBindingsList.add(b);
      }
    }

    // Update the policy to add the member.
    Policy updatedPolicy = policy.toBuilder()
            .clearBindings()
            .addAllBindings(newBindingsList)
            .build();

    System.out.println("Added member: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

from google.iam.v1 import policy_pb2
from snippets.get_policy import get_project_policy
from snippets.set_policy import set_project_policy


def modify_policy_add_member(
    project_id: str, role: str, member: str
) -> policy_pb2.Policy:
    """
    Add a member to certain role in project policy.

    project_id: ID or number of the Google Cloud project you want to use.
    role: role to which member need to be added.
    member: The principals requesting access.

    Possible format for member:
        * user:{emailid}
        * serviceAccount:{emailid}
        * group:{emailid}
        * deleted:user:{emailid}?uid={uniqueid}
        * deleted:serviceAccount:{emailid}?uid={uniqueid}
        * deleted:group:{emailid}?uid={uniqueid}
        * domain:{domain}
    """
    policy = get_project_policy(project_id)

    for bind in policy.bindings:
        if bind.role == role:
            bind.members.append(member)
            break

    return set_project_policy(project_id, policy)

REST

Modifiez la stratégie d'autorisation renvoyée en ajoutant le compte principal à une liaison de rôle existante. Cette modification ne prendra effet que lorsque vous aurez défini la stratégie d'autorisation mise à jour.

Par exemple, imaginons que la stratégie d'autorisation contienne la liaison de rôle suivante, qui attribue le rôle Examinateur de sécurité (roles/iam.securityReviewer) à kai@example.com :

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

Pour accorder ce même rôle à raha@example.com, ajoutez raha@example.com à la liaison de rôle existante :

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

Pour accorder un rôle qui n'est pas encore inclus dans la stratégie, d'autorisation ajoutez une liaison de rôle :

gcloud

Modifiez la stratégie d'autorisation en ajoutant une nouvelle liaison de rôle qui accorde le rôle au compte principal. Cette modification ne prendra effet que lorsque vous aurez défini la stratégie d'autorisation mise à jour.

Par exemple, pour accorder le rôle Administrateur de Compute Storage (roles/compute.storageAdmin) à raha@example.com, ajoutez la liaison de rôle suivante au tableau bindings de la stratégie d'autorisation :

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

C#

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM C#.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.


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

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Java.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.


import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.util.Collections;
import java.util.List;

public class AddBinding {
  public static void main(String[] args) {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy: GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/role-to-add";
    // TODO: Replace with your members.
    List<String> members = Collections.singletonList("user:member-to-add@example.com");

    addBinding(policy, role, members);
  }

  // Adds a member to a role.
  public static Policy addBinding(Policy policy, String role, List<String> members) {
    Binding binding = Binding.newBuilder()
            .setRole(role)
            .addAllMembers(members)
            .build();

    // Update bindings for the policy.
    Policy updatedPolicy = policy.toBuilder().addBindings(binding).build();

    System.out.println("Added binding: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Python.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

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

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

REST

Modifiez la stratégie d'autorisation en ajoutant une nouvelle liaison de rôle qui accorde le rôle au compte principal. Cette modification ne prendra effet que lorsque vous aurez défini la stratégie d'autorisation mise à jour.

Par exemple, pour accorder le rôle Administrateur de Compute Storage (roles/compute.storageAdmin) à raha@example.com, ajoutez la liaison de rôle suivante au tableau bindings de la stratégie d'autorisation :

{
  "role": "roles/compute.storageAdmin",
  "members": [
    "user:raha@example.com"
  ]
}

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 (roles/owner). 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, supprimez le compte principal de la liaison de rôle. Si la liaison de rôle ne comporte aucun autre compte principal, supprimez toute la liaison de rôle.

gcloud

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

Pour révoquer un rôle d'un compte principal, supprimez le compte principal ou la liaison du tableau bindings de la règle d'autorisation.

C#

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM C#.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.


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

Go

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Go.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

import (
	"fmt"
	"io"

	"google.golang.org/api/iam/v1"
)

// removeMember removes a member from a role binding.
func removeMember(w io.Writer, policy *iam.Policy, role, member string) {
	bindings := policy.Bindings
	bindingIndex, memberIndex := -1, -1
	for bIdx := range bindings {
		if bindings[bIdx].Role != role {
			continue
		}
		bindingIndex = bIdx
		for mIdx := range bindings[bindingIndex].Members {
			if bindings[bindingIndex].Members[mIdx] != member {
				continue
			}
			memberIndex = mIdx
			break
		}
	}
	if bindingIndex == -1 {
		fmt.Fprintf(w, "Role %q not found. Member not removed.\n", role)
		return
	}
	if memberIndex == -1 {
		fmt.Fprintf(w, "Role %q found. Member not found.\n", role)
		return
	}

	members := removeIdx(bindings[bindingIndex].Members, memberIndex)
	bindings[bindingIndex].Members = members
	if len(members) == 0 {
		bindings = removeIdx(bindings, bindingIndex)
		policy.Bindings = bindings
	}
	fmt.Fprintf(w, "Role %q found. Member removed.\n", role)
}

// removeIdx removes arr[idx] from arr.
func removeIdx[T any](arr []T, idx int) []T {
	return append(arr[:idx], arr[idx+1:]...)
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Java.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

import com.google.iam.v1.Binding;
import com.google.iam.v1.Policy;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class RemoveMember {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();
    // TODO: Replace with your role.
    String role = "roles/existing-role";
    // TODO: Replace with your member.
    String member = "user:member-to-add@example.com";

    removeMember(policy, role, member);
  }

  // Removes member from a role; removes binding if binding contains no members.
  public static Policy removeMember(Policy policy, String role, String member) {
    // Creating new builder with all values copied from origin policy
    Policy.Builder policyBuilder = policy.toBuilder();

    // Getting binding with suitable role.
    Binding binding = null;
    for (Binding b : policy.getBindingsList()) {
      if (b.getRole().equals(role)) {
        binding = b;
        break;
      }
    }

    if (binding != null && binding.getMembersList().contains(member)) {
      List<String> newMemberList = new ArrayList<>(binding.getMembersList());
      // Removing member from a role
      newMemberList.remove(member);

      System.out.println("Member " + member + " removed from " + role);

      // Adding all remaining members to create new binding
      Binding newBinding = binding.toBuilder()
              .clearMembers()
              .addAllMembers(newMemberList)
              .build();

      List<Binding> newBindingList = new ArrayList<>(policyBuilder.getBindingsList());

      // Removing old binding to replace with new one
      newBindingList.remove(binding);

      // If binding has no more members, binding will not be added
      if (!newBinding.getMembersList().isEmpty()) {
        newBindingList.add(newBinding);
      }

      // Update the policy to remove the member.
      policyBuilder.clearBindings()
              .addAllBindings(newBindingList);
    }

    Policy updatedPolicy = policyBuilder.build();

    System.out.println("Exising members: " + updatedPolicy.getBindingsList());

    return updatedPolicy;
  }
}

Python

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Python.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

from google.iam.v1 import policy_pb2
from snippets.get_policy import get_project_policy
from snippets.set_policy import set_project_policy


def modify_policy_remove_member(
    project_id: str, role: str, member: str
) -> policy_pb2.Policy:
    """
    Remove a member from certain role in project policy.

    project_id: ID or number of the Google Cloud project you want to use.
    role: role to which member need to be added.
    member: The principals requesting access.

    Possible format for member:
        * user:{emailid}
        * serviceAccount:{emailid}
        * group:{emailid}
        * deleted:user:{emailid}?uid={uniqueid}
        * deleted:serviceAccount:{emailid}?uid={uniqueid}
        * deleted:group:{emailid}?uid={uniqueid}
        * domain:{domain}
    """
    policy = get_project_policy(project_id)

    for bind in policy.bindings:
        if bind.role == role:
            if member in bind.members:
                bind.members.remove(member)
            break

    return set_project_policy(project_id, policy, False)

REST

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

Pour révoquer un rôle d'un compte principal, supprimez le compte principal ou la liaison du tableau bindings de la règle d'autorisation.

Définir la stratégie d'autorisation

Après avoir modifié la stratégie d'autorisation pour accorder et révoquer des rôles, appelez setIamPolicy() pour mettre à jour la stratégie.

gcloud

  1. In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Pour définir la stratégie d'autorisation de la ressource, exécutez la commande set-iam-policy :

    gcloud RESOURCE_TYPE set-iam-policy RESOURCE_ID PATH

    Indiquez les valeurs suivantes :

    • RESOURCE_TYPE : type de la ressource sur laquelle vous souhaitez définir la stratégie d'autorisation. Utilisez l'une des valeurs suivantes : projects, resource-manager folders ou organizations.

    • RESOURCE_ID : votre projet, dossier ou ID Google Cloud Les ID de projets sont alphanumériques, par exemple my-project. Les ID de dossiers et d'organisations sont numériques, tels que 123456789012.

    • PATH : le chemin d'accès à un fichier contenant la nouvelle stratégie d'autorisation.

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

    Par exemple, la commande suivante définit la stratégie d'autorisation stockée dans policy.json en tant que stratégie d'autorisation pour le projet my-project :

    gcloud projects set-iam-policy my-project ~/policy.json

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

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

L'exemple suivant montre comment définir la stratégie d'autorisation pour un projet. Pour savoir comment définir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

import com.google.cloud.resourcemanager.v3.ProjectsClient;
import com.google.iam.admin.v1.ProjectName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetProjectPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setProjectPolicy(policy, projectId);
  }

  // Sets a project's policy.
  public static Policy setProjectPolicy(Policy policy, String projectId)
          throws IOException {

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (ProjectsClient projectsClient = ProjectsClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ProjectName.of(projectId).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return projectsClient.setIamPolicy(request);
    }
  }
}

Python

Pour vous authentifier auprès de Resource Manager, configurez les identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

Pour savoir comment installer et utiliser la bibliothèque cliente pour Resource Manager, consultez la page Bibliothèques clientes Resource Manager.

L'exemple suivant montre comment définir la stratégie d'autorisation pour un projet. Pour savoir comment définir la stratégie d'autorisation d'un dossier ou d'une organisation, consultez la documentation de la bibliothèque cliente Resource Manager pour votre langage de programmation.

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_project_policy(
    project_id: str, policy: policy_pb2.Policy, merge: bool = True
) -> policy_pb2.Policy:
    """
    Set policy for project. Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach read->modify->write.
    For more details about policies check out https://cloud.google.com/iam/docs/policies

    project_id: ID or number of the Google Cloud project you want to use.
    policy: Policy which has to be set.
    merge: The strategy to be used forming the request. CopyFrom is clearing both mutable and immutable fields,
    when MergeFrom is replacing only immutable fields and extending mutable.
    https://googleapis.dev/python/protobuf/latest/google/protobuf/message.html#google.protobuf.message.Message.CopyFrom
    """
    client = resourcemanager_v3.ProjectsClient()

    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}"
    current_policy = client.get_iam_policy(request)

    # Etag should as fresh as possible to lower chance of collisions
    policy.ClearField("etag")
    if merge:
        current_policy.MergeFrom(policy)
    else:
        current_policy.CopyFrom(policy)

    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}"

    # request.etag field also will be merged which means you are secured from collision,
    # but it means that request may fail and you need to leverage exponential retries approach
    # to be sure policy has been updated.
    request.policy.CopyFrom(current_policy)

    policy = client.set_iam_policy(request)
    return policy

REST

La méthode setIamPolicy de l'API Resource Manager définit la stratégie de la requête comme nouvelle stratégie d'autorisation 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, utilisez v1. Pour les dossiers, utilisez v2.
  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer la stratégie. Utilisez la valeur projects, folders ou organizations.
  • RESOURCE_ID : ID du projet, de l'organisation ou du dossier Google Cloud. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les ID de dossier et d'organisation sont numériques, tels que 123456789012.
  • 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/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 d'autorisation mise à jour.

Étapes suivantes

Faites l'essai

Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.

Essai gratuit