Créer et gérer des rôles personnalisés

Cette page explique comment créer et gérer des rôles personnalisés IAM (Identity and Access Management). La gestion des rôles comprend la modification, la désactivation, l'établissement de la liste, la suppression et l'annulation de la suppression des rôles.

Avant de commencer

  • Activez IAM API.

    Activer l'API

  • Configurez l'authentification.

    Sélectionnez l'onglet correspondant à la façon dont vous prévoyez d'utiliser les exemples de cette page :

    Console

    Lorsque vous utilisez la console Google Cloud pour accéder aux services et aux API Google Cloud, vous n'avez pas besoin de configurer l'authentification.

    gcloud

    Vous pouvez utiliser les exemples gcloud CLI de cette page dans l'un des environnements de développement suivants :

    • Cloud Shell : pour utiliser un terminal en ligne avec gcloud CLI déjà configuré, activez Cloud Shell.

      En bas de cette page, une session Cloud Shell démarre et affiche une invite de ligne de commande. L'initialisation de la session peut prendre quelques secondes.

    • Shell local : pour utiliser gcloud CLI dans un environnement de développement local, installez et initialisez gcloud CLI.

    C++

    Pour utiliser les exemples C++ 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. Installez Google Cloud CLI.
    2. Pour initialiser gcloudCLI, exécutez la commande suivante :

      gcloud init
    3. Créez des identifiants d'authentification locaux pour votre compte Google :

      gcloud auth application-default login

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

    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. Installez Google Cloud CLI.
    2. Pour initialiser gcloudCLI, exécutez la commande suivante :

      gcloud init
    3. Créez des identifiants d'authentification locaux pour votre compte Google :

      gcloud auth application-default login

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

    Go

    Pour utiliser les exemples Go 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. Installez Google Cloud CLI.
    2. Pour initialiser gcloudCLI, exécutez la commande suivante :

      gcloud init
    3. Créez des identifiants d'authentification locaux pour votre compte Google :

      gcloud auth application-default login

    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. Installez Google Cloud CLI.
    2. Pour initialiser gcloudCLI, exécutez la commande suivante :

      gcloud init
    3. Créez des identifiants d'authentification locaux pour votre compte Google :

      gcloud auth application-default login

    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. Installez Google Cloud CLI.
    2. Pour initialiser gcloudCLI, exécutez la commande suivante :

      gcloud init
    3. Créez des identifiants d'authentification locaux pour votre compte Google :

      gcloud auth application-default login

    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.

      Installez Google Cloud CLI, puis initialisez-la en exécutant la commande suivante :

      gcloud init

  • Découvrez la hiérarchie des ressources Google Cloud.

  • Consultez la section Comprendre les rôles personnalisés IAM.

Rôles requis

Pour obtenir les autorisations nécessaires pour créer et gérer des rôles personnalisés, demandez à votre administrateur de vous accorder les rôles IAM suivants :

Pour en savoir plus sur l'attribution de rôles, consultez la section Gérer les accès.

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

Afficher les autorisations disponibles pour les projets, les dossiers et les organisations

Vous pouvez créer des rôles personnalisés pour l'ensemble d'une organisation ou pour un projet spécifique de cette organisation. Les autorisations disponibles pour les rôles personnalisés dépendent de l'emplacement où vous créez le rôle. Par exemple, si une autorisation ne peut être utilisée qu'au niveau de l'organisation, vous ne pouvez pas l'inclure dans un rôle personnalisé au niveau du projet.

Pour vérifier les autorisations disponibles pour les rôles personnalisés au niveau de l'organisation et du projet, vous pouvez utiliser gcloud CLI ou l'API Identity and Access Management pour répertorier les autorisations disponibles dans une organisation ou un projet spécifique. Par exemple, vous pouvez obtenir toutes les autorisations disponibles pour les rôles personnalisés créés dans votre projet.

Certaines autorisations peuvent ne pas s'afficher ou être utilisées dans un rôle personnalisé, même si elles sont compatibles avec les rôles personnalisés. Par exemple, une autorisation peut ne pas être disponible pour des rôles personnalisés si vous n'avez pas activé l'API pour le service.

Pour en savoir plus sur les autorisations que vous pouvez ajouter aux rôles personnalisés, consultez la section Autorisations compatibles.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam list-testable-permissions pour obtenir la liste des autorisations disponibles pour les rôles personnalisés d'un projet ou d'une organisation spécifique. La réponse répertorie les autorisations que vous pouvez utiliser dans les rôles personnalisés de ce projet ou de cette organisation.

    Pour lister les autorisations disponibles dans des rôles personnalisés pour un projet ou une organisation, exécutez la commande suivante :

    gcloud iam list-testable-permissions FULL_RESOURCE_NAME \
        --filter="customRolesSupportLevel!=NOT_SUPPORTED"

    Remplacez par l'une des valeurs suivantes :FULL_RESOURCE_NAME

    • Projet : //cloudresourcemanager.googleapis.com/projects/PROJECT_ID (par exemple, //cloudresourcemanager.googleapis.com/projects/my-project)

    • Organisation : //cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID (par exemple, //cloudresourcemanager.googleapis.com/organizations/123456789012)

    Les résultats indiquent si chaque autorisation est compatible avec les rôles personnalisés. Les autorisations qui ne comportent pas de champ customRolesSupportLevel sont entièrement compatibles.

    La commande list-testable-permissions peut afficher des centaines de résultats. Cet exemple partiel affiche le format de chaque résultat :

    ---
    name: appengine.applications.create
    stage: GA
    ---
    customRolesSupportLevel: TESTING
    name: appengine.applications.disable
    stage: GA
    ---
    name: appengine.applications.get
    stage: GA
    ---
    name: appengine.applications.update
    stage: GA
    ---
    name: appengine.instances.delete
    stage: GA
    ---
    name: appengine.instances.get
    stage: GA
    ---
    

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.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& resource) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::QueryTestablePermissionsRequest request;
  request.set_full_resource_name(resource);
  int count = 0;
  for (auto& permission : client.QueryTestablePermissions(request)) {
    if (!permission) throw std::move(permission).status();
    std::cout << "Permission successfully retrieved: " << permission->name()
              << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No testable permissions found in resource: " << resource
              << "\n";
  }
}

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.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static IList<Permission> QueryTestablePermissions(
        string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryTestablePermissionsRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Permissions.QueryTestablePermissions(request)
            .Execute();
        foreach (var p in response.Permissions)
        {
            Console.WriteLine(p.Name);
        }
        return response.Permissions;
    }
}

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.

import (
	"context"
	"fmt"
	"io"

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

// queryTestablePermissions lists testable permissions on a resource.
func queryTestablePermissions(w io.Writer, fullResourceName string) ([]*iam.Permission, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	request := &iam.QueryTestablePermissionsRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Permissions.QueryTestablePermissions(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Permissions.QueryTestablePermissions: %w", err)
	}
	for _, p := range response.Permissions {
		fmt.Fprintf(w, "Found permissions: %v", p.Name)
	}
	return response.Permissions, nil
}

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.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.cloud.iam.admin.v1.IAMClient.QueryTestablePermissionsPagedResponse;
import com.google.iam.admin.v1.QueryTestablePermissionsRequest;
import java.io.IOException;

/** View available permissions in a project. */
public class QueryTestablePermissions {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    // Full resource names can take one of the following forms:
    // cloudresourcemanager.googleapis.com/projects/PROJECT_ID
    // cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID
    String fullResourceName = "your-full-resource-name";

    queryTestablePermissions(fullResourceName);
  }

  public static void queryTestablePermissions(String fullResourceName) throws IOException {
    QueryTestablePermissionsRequest queryTestablePermissionsRequest =
        QueryTestablePermissionsRequest.newBuilder().setFullResourceName(fullResourceName).build();

    try (IAMClient iamClient = IAMClient.create()) {
      QueryTestablePermissionsPagedResponse queryTestablePermissionsPagedResponse =
          iamClient.queryTestablePermissions(queryTestablePermissionsRequest);
      queryTestablePermissionsPagedResponse
          .iterateAll()
          .forEach(permission -> System.out.println(permission.getName()));
    }
  }
}

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.

def query_testable_permissions(resource: str) -> None:
    """Lists valid permissions for a resource."""

    # pylint: disable=no-member
    permissions = (
        service.permissions()
        .queryTestablePermissions(body={"fullResourceName": resource})
        .execute()["permissions"]
    )
    for p in permissions:
        print(p["name"])

REST

La méthode permissions.queryTestablePermissions répertorie les autorisations disponibles dans une organisation ou un projet.

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

  • FULL_RESOURCE_NAME : URI composé du nom du service et du chemin d'accès à la ressource. Pour obtenir des exemples, consultez la page Noms de ressources complets.
  • PAGE_SIZE : facultatif. Nombre d'autorisations à inclure dans la réponse. La valeur par défaut est 100 et la valeur maximale 1 000. Si le nombre d'autorisations est supérieur à la taille de la page, la réponse contient un jeton de pagination qui vous permet de récupérer la page de résultats suivante.
  • NEXT_PAGE_TOKEN : facultatif. Jeton de pagination renvoyé dans une réponse précédente de cette méthode. Si spécifié, la liste des autorisations pouvant être appliquées commence à la fin de la réponse précédente.

Méthode HTTP et URL :

POST https://iam.googleapis.com/v1/permissions:queryTestablePermissions

Corps JSON de la requête :

{
  "fullResourceName": "FULL_RESOURCE_NAME"
  "pageSize": PAGE_SIZE,
  "pageToken": "NEXT_PAGE_TOKEN"
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la liste des autorisations.

{
  "permissions": [
    {
      "name": "iam.serviceAccountKeys.create",
      "stage": "GA"
    },
    {
      "name": "iam.serviceAccountKeys.delete",
      "stage": "GA"
    },
    {
      "name": "iam.serviceAccountKeys.get",
      "stage": "GA"
    }
  ],
  "nextPageToken": "CgoHBajEfjUDQyABEPaIv5vIiMDTVhgDIhtpYW0uc2VydmljZUFjY291bnRLZXlzLmxpc3Q"
}

Obtenir les métadonnées du rôle

Avant de créer un rôle personnalisé, vous souhaiterez peut-être obtenir les métadonnées des rôles prédéfinis et personnalisés. Les métadonnées de rôle incluent l'ID de rôle et les autorisations contenues dans le rôle. Vous pouvez afficher les métadonnées à l'aide de la console Google Cloud ou de l'API IAM.

Pour afficher les métadonnées de rôle, utilisez l'une des méthodes ci-dessous :

Console

  1. Dans la console Google Cloud, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Sélectionnez votre organisation ou votre projet dans la liste déroulante en haut de la page.

  3. Cochez la case d'un ou plusieurs rôles pour afficher les autorisations de rôle. Le panneau de droite affiche les autorisations incluses dans les rôles, le cas échéant.

Les icônes dans la colonne Type indiquent s'il s'agit d'un rôle personnalisé ou d'un rôle prédéfini

Si vous souhaitez rechercher tous les rôles qui incluent une autorisation spécifique, saisissez le nom de l'autorisation dans la zone Filtre en haut de la liste des rôles.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam roles describe pour afficher les métadonnées des rôles prédéfinis et des rôles personnalisés.

    Pour afficher les métadonnées d'un rôle prédéfini, exécutez la commande suivante :

    gcloud iam roles describe ROLE_ID

    ROLE_ID est l'ID du rôle. Les rôles prédéfinis incluent le préfixe role dans leurs ID, par exemple, roles/iam.roleViewer.

    L'exemple suivant illustre le résultat de la commande describe lorsqu'elle est exécutée sur le rôle prédéfini roles/iam.roleViewer :

    gcloud iam roles describe roles/iam.roleViewer

    description: Read access to all custom roles in the project.
    etag: AA==
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - resourcemanager.projects.get
    - resourcemanager.projects.getIamPolicy
    name: roles/iam.roleViewer
    stage: GA
    title: Role Viewer
    

    Pour afficher les métadonnées d'un rôle personnalisé, exécutez l'une des commandes suivantes :

    • Pour afficher les métadonnées d'un rôle personnalisé créé au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles describe --organization=ORGANIZATION_ID ROLE_ID
    • Pour afficher les métadonnées d'un rôle personnalisé créé au niveau du projet, exécutez la commande suivante :

      gcloud iam roles describe --project=PROJECT_ID ROLE_ID

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    • ROLE_ID est l'ID du rôle, à l'exclusion des préfixes tels que projects/, organizations/ ou roles/. Exemple : myCompanyAdmin

    Pour en savoir plus, consultez la documentation de référence sur gcloud iam roles describe.

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.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::GetRoleRequest request;
  request.set_name(name);
  auto response = client.GetRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully retrieved: " << response->DebugString()
            << "\n";
}

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.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role GetRole(string name)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = service.Roles.Get(name).Execute();
        Console.WriteLine(role.Name);
        Console.WriteLine(String.Join(", ", role.IncludedPermissions));
        return role;
    }
}

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.

import (
	"context"
	"fmt"
	"io"

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

// getRole gets role metadata.
func getRole(w io.Writer, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	role, err := service.Roles.Get(name).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.Get: %w", err)
	}
	fmt.Fprintf(w, "Got role: %v\n", role.Name)
	for _, permission := range role.IncludedPermissions {
		fmt.Fprintf(w, "Got permission: %v\n", permission)
	}
	return role, nil
}

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.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.GetRoleRequest;
import com.google.iam.admin.v1.Role;
import java.io.IOException;

/** Get role metadata. Specifically, printing out role permissions. */
public class GetRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    String roleId = "a unique identifier (e.g. testViewer)";

    getRole(roleId);
  }

  public static void getRole(String roleId) throws IOException {
    GetRoleRequest getRoleRequest = GetRoleRequest.newBuilder().setName(roleId).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role role = iamClient.getRole(getRoleRequest);
      role.getIncludedPermissionsList().forEach(permission -> System.out.println(permission));
    }
  }
}

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.

def get_role(name: str) -> None:
    """Gets a role."""

    # pylint: disable=no-member
    role = service.roles().get(name=name).execute()
    print(role["name"])
    for permission in role["includedPermissions"]:
        print(permission)

REST

La méthode roles.get obtient la définition d'un rôle.

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

  • ROLE_NAME : nom complet du rôle, y compris les préfixes organizations/, projects/ ou roles/. Par exemple, organizations/123456789012/roles/myCompanyAdmin.

Méthode HTTP et URL :

GET https://iam.googleapis.com/v1/ROLE_NAME

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la définition du rôle.

{
  "name": "projects/my-project/roles/customRole",
  "title": "My Custom Role",
  "description": "My custom role description.",
  "includedPermissions": [
    "storage.buckets.get",
    "storage.buckets.list"
  ],
  "etag": "BwWiPg2fmDE="
}

Créer un rôle personnalisé

Vous pouvez créer un rôle personnalisé au niveau du projet ou de l'organisation.

Un rôle personnalisé au niveau de l'organisation peut inclure l'une des autorisations IAM compatibles avec les rôles personnalisés. Un rôle personnalisé au niveau du projet peut contenir toute autorisation compatible, à l'exception des autorisations qui ne peuvent être utilisées qu'au niveau de l'organisation ou du dossier, telles que resourcemanager.organizations.get. Si vous essayez d'ajouter ces autorisations à un rôle personnalisé au niveau du projet, un message d'erreur s'affiche :

Console

Le message d'avertissement suivant s'affiche : "Non applicable aux rôles personnalisés au niveau du projet". L'autorisation est automatiquement désélectionnée de la liste des autorisations incluses et vous pouvez continuer à créer le rôle.

gcloud

Le message d'erreur suivant est renvoyé : INVALID_ARGUMENT: Permission PERMISSION is not valid. Le rôle personnalisé ne sera créé qu'une fois l'autorisation supprimée de la définition du rôle et qu'une fois que vous aurez réitéré l'opération.

API REST

Le message d'erreur suivant est renvoyé : Permission PERMISSION is not valid, avec un code d'erreur HTTP 400 et l'état INVALID_ARGUMENT. Le rôle personnalisé ne sera créé qu'une fois l'autorisation supprimée de la définition du rôle et qu'une fois que vous aurez réitéré l'opération.

Chaque rôle personnalisé peut contenir jusqu'à 3 000 autorisations. En outre, la taille totale maximale du titre, de la description et des noms d'autorisations pour un rôle personnalisé est de 64 ko. Si vous devez créer un rôle personnalisé plus important, vous pouvez répartir les autorisations entre plusieurs rôles personnalisés. Choisissez des intitulés de rôle indiquant la relation entre les rôles personnalisés, tels que Custom Admin (1 of 2) et Custom Admin (2 of 2).

Chaque rôle personnalisé peut comporter une étape de lancement. La plupart des étapes de lancement sont fournies à titre informatif. Elles vous permettent de savoir si chaque rôle est prêt à être utilisé à grande échelle. En outre, l'étape de lancement DISABLED vous permet de désactiver un rôle personnalisé. Pour en savoir plus sur les étapes de lancement, consultez la section Tester et déployer.

Console

Certains rôles prédéfinis contiennent des autorisations obsolètes ou des autorisations qui ne sont par ailleurs pas autorisées dans les rôles personnalisés. Si vous tentez de créer un rôle personnalisé basé sur l'un de ces rôles prédéfinis, le rôle personnalisé omet les autorisations obsolètes et restreintes.

Pour créer un rôle personnalisé de toutes pièces, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Dans la liste déroulante située en haut de la page, sélectionnez l'organisation ou le projet dans lequel vous souhaitez créer un rôle.

  3. Cliquez sur Créer un rôle.

  4. Saisissez un nom, un titre, une description et une étape de lancement pour le rôle. Une fois le rôle créé, vous ne pouvez plus modifier son nom.

  5. Cliquez sur Ajouter des autorisations.

  6. Sélectionnez les autorisations que vous souhaitez inclure dans le rôle, puis cliquez sur Ajouter des autorisations. Utilisez les listes déroulantes Tous les services et Tous les types pour filtrer et sélectionner les autorisations par service et par type.

Pour créer un rôle personnalisé basé sur un rôle prédéfini existant, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Sélectionnez l'organisation ou le projet dans lequel vous souhaitez créer un rôle.
  3. Sélectionnez les rôles sur lesquels vous souhaitez baser le nouveau rôle personnalisé.
  4. Cliquez sur Créer un rôle à partir de la sélection.
  5. Saisissez un nom, un titre, une description et une étape de lancement pour le rôle. Une fois le rôle créé, vous ne pouvez plus modifier son nom.
  6. Décochez les autorisations que vous souhaitez exclure du rôle.
  7. Cliquez sur Ajouter des autorisations pour inclure des autorisations.
  8. Cliquez sur Créer.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam roles create pour créer des rôles personnalisés. Vous pouvez utiliser cette commande de deux manières :

    • En fournissant un fichier YAML contenant la définition du rôle

    • En utilisant des options pour spécifier la définition de rôle

    Lorsque vous créez un rôle personnalisé, vous devez spécifier s'il s'applique au niveau de l'organisation ou au niveau du projet à l'aide des options --organization=ORGANIZATION_ID ou --project=PROJECT_ID. Chaque exemple ci-dessous crée un rôle personnalisé au niveau du projet.

    Un rôle personnalisé ne peut contenir que des autorisations compatibles avec les rôles personnalisés. Si le rôle personnalisé contient d'autres autorisations, la commande échoue.

    Pour créer un rôle personnalisé à l'aide d'un fichier YAML, procédez comme suit :

    Créez un fichier YAML contenant la définition de votre rôle personnalisé. Le fichier doit être structuré de la manière suivante :

    title: ROLE_TITLE
    description: ROLE_DESCRIPTION
    stage: LAUNCH_STAGE
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2
    

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_TITLE est un intitulé convivial pour le rôle, par exemple "My Company Admin".

    • ROLE_DESCRIPTION est une brève description du rôle, par exemple "My custom role description".

    • LAUNCH_STAGE indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.

    • PERMISSION_1 et PERMISSION_2 sont des autorisations à inclure dans le rôle personnalisé, telles que iam.roles.get. Vous ne pouvez pas utiliser de caractères génériques (*) dans les noms d'autorisations.

    Enregistrez le fichier YAML, puis exécutez l'une des commandes suivantes :

    • Pour créer un rôle personnalisé au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • Pour créer un rôle personnalisé au niveau du projet, exécutez la commande suivante :

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    • YAML_FILE_PATH est le chemin d'accès à l'emplacement de votre fichier YAML contenant la définition du rôle personnalisé.

    Exemples

    L'exemple de fichier YAML suivant montre comment créer une définition de rôle :

    title: "My Company Admin"
    description: "My custom role description."
    stage: "ALPHA"
    includedPermissions:
    - iam.roles.get
    - iam.roles.list

    L'exemple suivant montre comment créer un rôle au niveau de l'organisation à l'aide du fichier YAML :

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

    Si le rôle a bien été créé, le résultat de la commande est semblable à celui-ci :

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'exemple suivant montre comment créer un rôle au niveau du projet à l'aide du fichier YAML :

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

    Si le rôle a bien été créé, le résultat de la commande est semblable à celui-ci :

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin
    

    Pour créer un rôle personnalisé à l'aide d'options, procédez comme suit :

    Exécutez l'une des commandes suivantes :

    • Pour créer un rôle personnalisé au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE
    • Pour créer un rôle personnalisé au niveau du projet, exécutez la commande suivante :

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    • ROLE_TITLE est un intitulé convivial pour le rôle, par exemple "My Company Admin".

    • ROLE_DESCRIPTION est une brève description du rôle, par exemple "My custom role description.".

    • PERMISSIONS_LIST contient la liste des autorisations que vous souhaitez inclure dans le rôle personnalisé, séparées par une virgule. Exemple : iam.roles.get,iam.roles.list Vous ne pouvez pas utiliser de caractères génériques (*) dans les noms d'autorisations.

    • LAUNCH_STAGE indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.

    Exemples

    L'exemple suivant montre comment créer un rôle au niveau de l'organisation à l'aide d'options :

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

    Si le rôle a bien été créé, le résultat de la commande est semblable à celui-ci :

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'exemple suivant montre comment créer un rôle au niveau du projet à l'aide d'options :

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

    Si le rôle a bien été créé, le résultat de la commande est semblable à celui-ci :

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin
    

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.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& parent, std::string const& role_id,
   std::vector<std::string> const& included_permissions) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::CreateRoleRequest request;
  request.set_parent("projects/" + parent);
  request.set_role_id(role_id);
  google::iam::admin::v1::Role role;
  role.set_stage(google::iam::admin::v1::Role::GA);
  for (auto const& permission : included_permissions) {
    *role.add_included_permissions() = permission;
  }
  *request.mutable_role() = role;
  auto response = client.CreateRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully created: " << response->DebugString()
            << "\n";
}

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.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role CreateRole(string name, string projectId, string title,
        string description, IList<string> permissions, string stage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = new Role
        {
            Title = title,
            Description = description,
            IncludedPermissions = permissions,
            Stage = stage
        };
        var request = new CreateRoleRequest
        {
            Role = role,
            RoleId = name
        };
        role = service.Projects.Roles.Create(request,
            "projects/" + projectId).Execute();
        Console.WriteLine("Created role: " + role.Name);
        return role;
    }
}

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.

import (
	"context"
	"fmt"
	"io"

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

// createRole creates a custom role.
func createRole(w io.Writer, projectID, name, title, description, stage string, permissions []string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	request := &iam.CreateRoleRequest{
		Role: &iam.Role{
			Title:               title,
			Description:         description,
			IncludedPermissions: permissions,
			Stage:               stage,
		},
		RoleId: name,
	}
	role, err := service.Projects.Roles.Create("projects/"+projectID, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Create: %w", err)
	}
	fmt.Fprintf(w, "Created role: %v", role.Name)
	return role, nil
}

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.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.CreateRoleRequest;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.Role.RoleLaunchStage;
import java.io.IOException;
import java.util.Arrays;

/** Create role. */
public class CreateRole {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";
    String title = "a title for your role (e.g. IAM Role Viewer)";
    String description = "a description of the role";
    Iterable<String> includedPermissions =
        Arrays.asList("roles/iam.roleViewer", "roles/logging.viewer");

    createRole(projectId, title, description, includedPermissions, roleId);
  }

  public static void createRole(
      String projectId,
      String title,
      String description,
      Iterable<String> includedPermissions,
      String roleId)
      throws IOException {
    Role.Builder roleBuilder =
        Role.newBuilder()
            .setTitle(title)
            .setDescription(description)
            .addAllIncludedPermissions(includedPermissions)
            // See launch stage enums at
            // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
            .setStage(RoleLaunchStage.BETA);
    CreateRoleRequest createRoleRequest =
        CreateRoleRequest.newBuilder()
            .setParent("projects/" + projectId)
            .setRoleId(roleId)
            .setRole(roleBuilder)
            .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.createRole(createRoleRequest);
      System.out.println("Created role: " + result.getName());
    }
  }
}

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.

def create_role(
    name: str, project: str, title: str, description: str, permissions: str, stage: str
) -> dict:
    """Creates a role."""

    # pylint: disable=no-member
    role = (
        service.projects()
        .roles()
        .create(
            parent="projects/" + project,
            body={
                "roleId": name,
                "role": {
                    "title": title,
                    "description": description,
                    "includedPermissions": permissions,
                    "stage": stage,
                },
            },
        )
        .execute()
    )

    print("Created role: " + role["name"])
    return role

REST

La méthode roles.create crée un rôle personnalisé dans un projet ou une organisation.

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

  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • RESOURCE_ID : ID de projet ou d'organisation dont vous souhaitez gérer les rôles personnalisés. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les identifiants des organisations sont numériques, comme 123456789012.
  • ROLE_ID : nom du rôle, tel que myCompanyAdmin.
  • ROLE_TITLE : titre lisible du rôle. Exemple :My Company Admin
  • ROLE_DESCRIPTION : description du rôle. Exemple :"The company admin role allows company admins to access important resources"
  • PERMISSION_1 et PERMISSION_2 : autorisations que vous souhaitez inclure dans le rôle. Exemple : storage.objects.update. Vous ne pouvez pas utiliser de caractères génériques (*) dans les noms d'autorisations.

    Un rôle personnalisé ne peut contenir que des autorisations compatibles avec les rôles personnalisés. Si le rôle personnalisé contient d'autres autorisations, la requête échoue.

  • LAUNCH_STAGE : étape de lancement actuelle du rôle. Ce champ peut contenir l'une des valeurs suivantes : EAP, ALPHA, BETA, GA, DEPRECATED ou DISABLED.

Méthode HTTP et URL :

POST https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corps JSON de la requête :

{
  "roleId": "ROLE_ID",
  "role": {
    "title": "ROLE_TITLE",
    "description": "ROLE_DESCRIPTION",
    "includedPermissions": [
      "PERMISSION_1",
      "PERMISSION_2"
    ],
    "stage": "LAUNCH_STAGE"
  }
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient le rôle que vous avez créé.

{
  "name": "projects/myProject/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWox/JbaZw="
}

Modifier un rôle personnalisé existant

Le modèle lecture-modification-écriture est un modèle courant de mise à jour des métadonnées d'une ressource, comme un rôle personnalisé. Avec ce modèle, vous lisez l'état actuel du rôle, vous mettez à jour les données localement, puis vous envoyez les données modifiées en écriture.

Le modèle lecture-modification-écriture peut provoquer un conflit si deux processus indépendants ou plus tentent de réaliser ces opérations simultanément. Par exemple, si deux propriétaires d'un projet tentent d'apporter des modifications conflictuelles à un rôle en même temps, certaines modifications peuvent échouer. Cloud IAM résout ce problème en utilisant une propriété etag dans les rôles personnalisés. Cette propriété permet de vérifier si le rôle personnalisé a été modifié depuis la dernière requête. Lorsque vous envoyez une requête à Cloud IAM avec une valeur etag, Cloud IAM compare la valeur etag de la requête avec la valeur etag existante associée au rôle personnalisé. Il écrit la modification uniquement si les valeurs etag correspondent.

Lorsque vous mettez à jour un rôle, commencez par obtenir le rôle à l'aide de roles.get(), mettez-le à jour, puis écrivez le rôle actualisé à l'aide de roles.patch(). Utilisez la valeur etag lors de la définition du rôle seulement si le rôle correspondant dans roles.get() contient une valeur etag.

Console

  1. Dans la console Google Cloud, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Dans la liste déroulante située en haut de la page, sélectionnez le projet ou l'organisation qui contient le rôle que vous souhaitez modifier.

  3. Cliquez sur un rôle personnalisé.

  4. Cliquez sur Modifier le rôle.

  5. Pour mettre à jour les métadonnées du rôle, modifiez le titre, la description ou l'étape de lancement du rôle.

  6. Pour mettre à jour les autorisations du rôle, procédez comme suit :

    1. Cliquez sur Ajouter des autorisations pour ajouter de nouvelles autorisations au rôle.
    2. Décochez les autorisations pour supprimer les autorisations du rôle.
  7. Cliquez sur Mettre à jour pour enregistrer le rôle modifié.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam roles update pour mettre à jour les rôles personnalisés. Vous pouvez utiliser cette commande de deux manières :

    • En fournissant un fichier YAML contenant la définition actualisée du rôle

    • En utilisant des indicateurs pour spécifier la définition actualisée du rôle

    Lors de la mise à jour d'un rôle personnalisé, vous devez indiquer s'il s'applique au niveau de l'organisation ou au niveau du projet à l'aide des options --organization=ORGANIZATION_ID ou --project=PROJECT_ID. Chaque exemple ci-dessous crée un rôle personnalisé au niveau du projet.

    Pour mettre à jour un rôle personnalisé à l'aide d'un fichier YAML, procédez comme suit :

    Obtenez la définition actuelle du rôle en exécutant l'une des commandes suivantes :

    • Pour obtenir la définition d'un rôle personnalisé au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles describe ROLE_ID --organization=ORGANIZATION_ID
    • Pour obtenir la définition d'un rôle personnalisé au niveau du projet, exécutez la commande suivante :

      gcloud iam roles describe ROLE_ID --project=PROJECT_ID

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle à mettre à jour, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    La commande describe affiche la définition du rôle et inclut une valeur etag qui identifie de manière unique la version actuelle du rôle. La valeur etag doit être fournie dans la définition actualisée du rôle pour garantir que les modifications de rôle simultanées ne sont pas écrasées.

    La commande describe affiche le résultat suivant :

    description: ROLE_DESCRIPTION
    etag: ETAG
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2
    name: ROLE_NAME
    stage: LAUNCH_STAGE
    title: ROLE_TITLE

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_DESCRIPTION est une brève description du rôle, par exemple "My custom role description".

    • ETAG est l'identifiant unique de la version actuelle du rôle, par exemple BwVkBkbfr70=.

    • PERMISSION_1 et PERMISSION_2 sont des autorisations à inclure dans le rôle personnalisé, telles que iam.roles.get. Vous ne pouvez pas utiliser de caractères génériques (*) dans les noms d'autorisations.

    • ROLE_NAME est le nom complet du rôle, y compris les préfixes organizations/, projects/ ou roles/. Exemple : organizations/123456789012/roles/myCompanyAdmin.

    • LAUNCH_STAGE indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.

    • ROLE_TITLE est un intitulé convivial pour le rôle, par exemple "My Company Admin".

    Pour mettre à jour le rôle, incluez la définition de rôle en sortie dans un fichier YAML ou mettez à jour le fichier YAML d'origine avec la valeur etag obtenue.

    Prenons l'exemple de fichier YAML suivant, qui contient le résultat de la commande describe pour un rôle au niveau du projet et ajoute deux autorisations Cloud Storage :

    description: My custom role description.
    etag: BwVkBkbfr70=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Enregistrez le fichier YAML, puis exécutez l'une des commandes suivantes :

    • Pour mettre à jour un rôle au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • Pour mettre à jour un rôle au niveau du projet, exécutez la commande suivante :

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle à mettre à jour, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project-id.

    • YAML_FILE_PATH est le chemin d'accès à l'emplacement de votre fichier YAML contenant la définition mise à jour du rôle personnalisé.

    Exemples

    L'exemple suivant montre comment mettre à jour un rôle au niveau de l'organisation à l'aide d'un fichier YAML :

    gcloud iam roles update ROLE_ID --organization=ORGANIZATION_ID \
        --file=YAML_FILE_PATH
    • Pour mettre à jour un rôle au niveau du projet, exécutez la commande suivante :

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle à mettre à jour, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    • YAML_FILE_PATH est le chemin d'accès à l'emplacement de votre fichier YAML contenant la définition mise à jour du rôle personnalisé.

    Exemples

    L'exemple suivant montre comment mettre à jour un rôle au niveau de l'organisation à l'aide d'un fichier YAML :

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

    Si le rôle a bien été actualisé, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'exemple suivant montre comment mettre à jour un rôle au niveau du projet à l'aide d'un fichier YAML :

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

    Si le rôle a bien été actualisé, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Pour mettre à jour un rôle personnalisé à l'aide d'options, procédez comme suit :

    Chaque partie d'une définition de rôle peut être actualisée à l'aide d'une option correspondante. Consultez la section gcloud iam roles update pour obtenir la liste de toutes les options possibles.

    Vous pouvez utiliser les options suivantes pour ajouter ou supprimer des autorisations :

    • --add-permissions=PERMISSIONS : ajoute au rôle une ou plusieurs autorisations séparées par une virgule. Vous ne pouvez pas utiliser de caractères génériques (*) dans les noms d'autorisations.

    • --remove-permissions=PERMISSIONS : supprime du rôle une ou plusieurs autorisations séparées par une virgule. Vous ne pouvez pas utiliser de caractères génériques (*) dans les noms d'autorisations.

    Il est également possible de spécifier les nouvelles autorisations à l'aide de l'option --permissions=PERMISSIONS et en fournissant une liste d'autorisations séparées par une virgule pour remplacer la liste des autorisations existantes.

    Pour mettre à jour d'autres parties de la définition de rôle, exécutez l'une des commandes suivantes :

    • Pour mettre à jour un rôle au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE
    • Pour mettre à jour un rôle au niveau du projet, exécutez la commande suivante :

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    • ROLE_TITLE est un intitulé convivial pour le rôle, par exemple "My Company Admin".

    • ROLE_DESCRIPTION est une brève description du rôle, par exemple "My custom role description.".

    • LAUNCH_STAGE indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.

    Exemples

    L'exemple suivant montre comment ajouter des autorisations à un rôle au niveau de l'organisation à l'aide d'options :

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --add-permissions="storage.buckets.get,storage.buckets.list"

    Si le rôle a bien été actualisé, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organization/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'exemple suivant montre comment ajouter des autorisations à un rôle au niveau du projet à l'aide d'options :

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --add-permissions="storage.buckets.get,storage.buckets.list"

    Si le rôle a bien été actualisé, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

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.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name, std::string const& title) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::UpdateRoleRequest request;
  request.set_name(name);
  google::iam::admin::v1::Role role;
  role.set_title(title);
  google::protobuf::FieldMask update_mask;
  *update_mask.add_paths() = "title";
  *request.mutable_role() = role;
  *request.mutable_update_mask() = update_mask;
  auto response = client.UpdateRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully updated: " << response->DebugString()
            << "\n";
}

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.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role EditRole(string name, string projectId, string newTitle,
        string newDescription, IList<string> newPermissions, string newStage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });
        // First, get a Role using List() or Get().
        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Get(resource).Execute();
        // Then you can update its fields.
        role.Title = newTitle;
        role.Description = newDescription;
        role.IncludedPermissions = newPermissions;
        role.Stage = newStage;
        role = service.Projects.Roles.Patch(role, resource).Execute();
        Console.WriteLine("Updated role: " + role.Name);
        return role;
    }
}

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.

import (
	"context"
	"fmt"
	"io"

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

// editRole modifies a custom role.
func editRole(w io.Writer, projectID, name, newTitle, newDescription, newStage string, newPermissions []string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	role, err := service.Projects.Roles.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Get: %w", err)
	}
	role.Title = newTitle
	role.Description = newDescription
	role.IncludedPermissions = newPermissions
	role.Stage = newStage
	role, err = service.Projects.Roles.Patch(resource, role).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Patch: %w", err)
	}
	fmt.Fprintf(w, "Updated role: %v", role.Name)
	return role, nil
}

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.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.Role.RoleLaunchStage;
import com.google.iam.admin.v1.UpdateRoleRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

/** Edit role metadata. Specifically, update description and launch stage. */
public class EditRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";
    String description = "a new description of the role";

    editRole(projectId, roleId, description);
  }

  public static void editRole(String projectId, String roleId, String description)
      throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    Role.Builder roleBuilder =
        Role.newBuilder()
            .setName(roleName)
            .setDescription(description)
            // See launch stage enums at
            // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
            .setStage(RoleLaunchStage.GA);
    FieldMask fieldMask = FieldMask.newBuilder().addPaths("description").addPaths("stage").build();
    UpdateRoleRequest updateRoleRequest =
        UpdateRoleRequest.newBuilder()
            .setName(roleName)
            .setRole(roleBuilder)
            .setUpdateMask(fieldMask)
            .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.updateRole(updateRoleRequest);
      System.out.println("Edited role:\n" + result);
    }
  }
}

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.

def edit_role(
    name: str, project: str, title: str, description: str, permissions: str, stage: str
) -> dict:
    """Creates a role."""

    # pylint: disable=no-member
    role = (
        service.projects()
        .roles()
        .patch(
            name="projects/" + project + "/roles/" + name,
            body={
                "title": title,
                "description": description,
                "includedPermissions": permissions,
                "stage": stage,
            },
        )
        .execute()
    )

    print("Updated role: " + role["name"])
    return role

REST

La méthode roles.patch met à jour un rôle personnalisé dans un projet ou une organisation.

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

Obligatoire :

  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • RESOURCE_ID : ID de projet ou d'organisation dont vous souhaitez gérer les rôles personnalisés. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les identifiants des organisations sont numériques, comme 123456789012.
  • ROLE_NAME : nom complet du rôle, y compris les préfixes organizations/, projects/ ou roles/. Par exemple, organizations/123456789012/roles/myCompanyAdmin.

Recommandations :

  • ETAG : identifiant de la version du rôle. Incluez ce champ pour éviter que d'autres modifications de rôle soient écrasées.

Facultatif (définissez une ou plusieurs des valeurs suivantes) :

  • ROLE_TITLE : titre lisible du rôle. Exemple :My Company Admin
  • ROLE_DESCRIPTION : description du rôle. Exemple :"The company admin role allows company admins to access important resources"
  • PERMISSION_1 et PERMISSION_2 : autorisations que vous souhaitez inclure dans le rôle. Exemple : storage.objects.update. Vous ne pouvez pas utiliser de caractères génériques (*) dans les noms d'autorisations.
  • LAUNCH_STAGE : étape de lancement actuelle du rôle. Ce champ peut contenir l'une des valeurs suivantes : EAP, ALPHA, BETA, GA, DEPRECATED ou DISABLED.

Méthode HTTP et URL :

PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corps JSON de la requête :

{
  "roleId": "ROLE_NAME",
  "title": "ROLE_TITLE",
  "description": "ROLE_DESCRIPTION",
  "includedPermissions": [
    "PERMISSION_1",
    "PERMISSION_2"
  ],
  "stage": "LAUNCH-STAGE",
  "etag": "ETAG"
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient une définition de rôle abrégée qui inclut le nom du rôle, les champs que vous avez mis à jour et un etag qui identifie la version actuelle du rôle.

{
  "name": "projects/test-project-1000092/roles/myCompanyAdmin",
  "title": "My Updated Company Admin",
  "includedPermissions": [
    "storage.buckets.get",
    "storage.buckets.list"
  ],
  "stage": "BETA",
  "etag": "BwWoyDpAxBc="
}

Désactiver un rôle personnalisé

Vous pouvez désactiver un rôle personnalisé en remplaçant son étape de lancement par DISABLED. Lorsqu'un rôle est désactivé, toutes les liaisons de rôles associées à ce rôle sont désactivées, ce qui signifie que l'attribution du rôle à un utilisateur n'a aucun effet.

Console

  1. Dans la console Google Cloud, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Cliquez sur la liste déroulante "Sélectionner un projet" en haut de la page.

  3. Sélectionnez votre organisation ou votre projet.

  4. Sélectionnez un rôle personnalisé et cliquez sur Désactiver.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam roles update pour désactiver un rôle personnalisé en définissant son étape de lancement sur DISABLED.

    Comme indiqué dans l'onglet gcloud de la section Modifier un rôle personnalisé existant, vous pouvez mettre à jour un rôle personnalisé existant de deux manières :

    • En fournissant un fichier YAML contenant la définition actualisée du rôle

    • En utilisant des indicateurs pour spécifier la définition actualisée du rôle

    Le moyen le plus simple de désactiver un rôle personnalisé existant consiste à utiliser l'option --stage et à la définir sur DISABLED. Exécutez l'une des commandes suivantes :

    • Pour désactiver un rôle au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --stage=DISABLED
    • Pour désactiver un rôle au niveau du projet, exécutez la commande suivante :

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --stage=DISABLED

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    Exemples

    L'exemple suivant montre comment désactiver un rôle au niveau de l'organisation :

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --stage=DISABLED

    Si le rôle a bien été actualisé, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organization/123456789012/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin

    L'exemple suivant montre comment désactiver un rôle au niveau du projet :

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --stage=DISABLED

    Si le rôle a bien été actualisé, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin
    

C++

Mettez à jour le champ stage du rôle en le définissant sur DISABLED.

C#

Mettez à jour le champ stage du rôle en le définissant sur DISABLED.

Go

Mettez à jour le champ stage du rôle en le définissant sur DISABLED.

Java

Mettez à jour le champ stage du rôle en le définissant sur DISABLED.

Python

Mettez à jour le champ stage du rôle en le définissant sur DISABLED.

REST

La méthode roles.patch vous permet de remplacer l'étape de lancement d'un rôle personnalisé par DISABLED, ce qui désactive le rôle.

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

  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • RESOURCE_ID : ID de projet ou d'organisation dont vous souhaitez gérer les rôles personnalisés. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les identifiants des organisations sont numériques, comme 123456789012.
  • ROLE_NAME : nom complet du rôle, y compris les préfixes organizations/, projects/ ou roles/. Par exemple, organizations/123456789012/roles/myCompanyAdmin.
  • ETAG : identifiant de la version du rôle. Incluez ce champ pour éviter que d'autres modifications de rôle soient écrasées.

Méthode HTTP et URL :

PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corps JSON de la requête :

{
  "roleId": "ROLE_NAME",
  "stage": DISABLED,
  "etag": "ETAG"
}

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "name": "projects/test-project-1000092/roles/myCompanyAdmin",
  "stage": "DISABLED",
  "etag": "BwWoyDpAxBc="
}

Répertorier des rôles

Vous pouvez répertorier tous les rôles personnalisés créés dans votre projet ou votre organisation.

Console

Dans la console Google Cloud, accédez à la page Rôles.

Accéder à la page Rôles

Tous les rôles personnalisés de l'organisation ou du projet que vous avez sélectionnés sont répertoriés sur la page.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam roles list pour obtenir la liste des rôles personnalisés et des rôles prédéfinis correspondant à un projet ou à une organisation :

    • Pour obtenir la liste des rôles personnalisés au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles list --organization=ORGANIZATION_ID
    • Pour obtenir la liste des rôles personnalisés au niveau du projet, exécutez la commande suivante :

      gcloud iam roles list --project=PROJECT_ID

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    Pour obtenir la liste des rôles supprimés, vous pouvez également spécifier l'option --show-deleted.

    Exécutez la commande suivante pour obtenir la liste des rôles prédéfinis :

    gcloud iam roles list

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.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& project) {
  iam::IAMClient client(iam::MakeIAMConnection());
  int count = 0;
  google::iam::admin::v1::ListRolesRequest request;
  request.set_parent(project);
  for (auto& role : client.ListRoles(request)) {
    if (!role) throw std::move(role).status();
    std::cout << "Roles successfully retrieved: " << role->name() << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No roles found in project: " << project << "\n";
  }
}

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.


using System;
using System.Collections.Generic;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static IList<Role> ListRoles(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var response = service.Projects.Roles.List("projects/" + projectId)
            .Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine(role.Name);
        }
        return response.Roles;
    }
}

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.

import (
	"context"
	"fmt"
	"io"

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

// listRoles lists a project's roles.
func listRoles(w io.Writer, projectID string) ([]*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	response, err := service.Projects.Roles.List("projects/" + projectID).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.List: %w", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Listing role: %v\n", role.Name)
	}
	return response.Roles, nil
}

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.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.cloud.iam.admin.v1.IAMClient.ListRolesPagedResponse;
import com.google.iam.admin.v1.ListRolesRequest;
import java.io.IOException;

/** List roles in a project. */
public class ListRoles {

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

    listRoles(projectId);
  }

  public static void listRoles(String projectId) throws IOException {
    ListRolesRequest listRolesRequest =
        ListRolesRequest.newBuilder().setParent("projects/" + projectId).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      ListRolesPagedResponse listRolesResponse = iamClient.listRoles(listRolesRequest);
      listRolesResponse.iterateAll().forEach(role -> System.out.println(role));
    }
  }
}

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.

def list_roles(project_id: str) -> None:
    """Lists roles."""

    # pylint: disable=no-member
    roles = service.roles().list(parent="projects/" + project_id).execute()["roles"]
    for role in roles:
        print(role["name"])

REST

La méthode roles.list répertorie tous les rôles personnalisés d'un projet ou d'une organisation.

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

  • RESOURCE_TYPE : type de ressource dont vous souhaitez gérer les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • RESOURCE_ID : ID de projet ou d'organisation dont vous souhaitez gérer les rôles personnalisés. Les ID de projet sont des chaînes alphanumériques, telles que my-project. Les identifiants des organisations sont numériques, comme 123456789012.
  • ROLE_VIEW : facultatif. Informations à inclure pour les rôles renvoyés. Pour inclure les autorisations associées aux rôles, définissez ce champ sur FULL. Pour exclure les autorisations associées aux rôles, définissez ce champ sur BASIC. La valeur par défaut est BASIC.
  • PAGE_SIZE : facultatif. Nombre de rôles à inclure dans la réponse. La valeur par défaut est 300 et la valeur maximale est 1 000. Si le nombre d'autorisations est supérieur à la taille de la page, la réponse contient un jeton de pagination qui vous permet de récupérer la page de résultats suivante.
  • NEXT_PAGE_TOKEN : facultatif. Jeton de pagination renvoyé dans une réponse précédente de cette méthode. Si spécifié, la liste des rôles commence à la fin de la réponse précédente.

Méthode HTTP et URL :

GET https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles?view=ROLE_VIEW&pageSize=PAGE_SIZE&pageToken=NEXT_PAGE_TOKEN

Pour envoyer votre requête, développez l'une des options suivantes :

Vous devriez recevoir une réponse JSON de ce type :

{
  "roles": [
    {
      "name": "projects/my-project/roles/customRole1",
      "title": "First Custom Role",
      "description": "Created on: 2020-06-01",
      "etag": "BwWiPg2fmDE="
    },
    {
      "name": "projects/my-project/roles/customRole2",
      "title": "Second Custom Role",
      "description": "Created on: 2020-06-07",
      "etag": "BwWiuX53Wi0="
    }
  ]
}

Supprimer un rôle personnalisé

Vous pouvez supprimer n'importe quel rôle personnalisé dans votre projet ou votre organisation.

Console

  1. Dans la console Google Cloud, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Sélectionnez le rôle que vous souhaitez supprimer et cliquez sur Supprimer en haut de la page.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam roles delete pour supprimer un rôle personnalisé :

    • Pour supprimer un rôle personnalisé au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles delete ROLE_ID --organization=ORGANIZATION_ID
    • Pour supprimer un rôle personnalisé au niveau du projet, exécutez la commande suivante :

      gcloud iam roles delete ROLE_ID --project=PROJECT_ID

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    Le rôle ne sera pas inclus dans gcloud iam roles list, à moins que l'option --show-deleted ne soit incluse. Les rôles supprimés sont indiqués par le bloc deleted: true dans une réponse list, par exemple :

    ---
    deleted: true
    description: My custom role description.
    etag: BwVkB5NLIQw=
    name: projects/my-project/roles/myCompanyAdmin
    title: My Company Admin
    ---
    

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.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::DeleteRoleRequest request;
  request.set_name(name);
  auto response = client.DeleteRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully deleted: " << response->DebugString()
            << "\n";
}

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.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static void DeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        service.Projects.Roles.Delete(
            $"projects/{projectId}/roles/{name}").Execute();
        Console.WriteLine("Deleted role: " + name);
    }
}

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.

import (
	"context"
	"fmt"
	"io"

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

// deleteRole deletes a custom role.
func deleteRole(w io.Writer, projectID, name string) error {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return fmt.Errorf("iam.NewService: %w", err)
	}

	_, err = service.Projects.Roles.Delete("projects/" + projectID + "/roles/" + name).Do()
	if err != nil {
		return fmt.Errorf("Projects.Roles.Delete: %w", err)
	}
	fmt.Fprintf(w, "Deleted role: %v", name)
	return nil
}

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.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.DeleteRoleRequest;
import java.io.IOException;

/** Delete role. */
public class DeleteRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";

    deleteRole(projectId, roleId);
  }

  public static void deleteRole(String projectId, String roleId) throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    DeleteRoleRequest deleteRoleRequest = DeleteRoleRequest.newBuilder().setName(roleName).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      iamClient.deleteRole(deleteRoleRequest);
      System.out.println("Role deleted.");
    }
  }
}

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.

def delete_role(name: str, project: str) -> dict:
    """Deletes a role."""

    # pylint: disable=no-member
    role = (
        service.projects()
        .roles()
        .delete(name="projects/" + project + "/roles/" + name)
        .execute()
    )

    print("Deleted role: " + name)
    return role

REST

La méthode roles.delete supprime un rôle personnalisé dans un projet ou une organisation.

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

  • ROLE_NAME : nom complet du rôle, y compris les préfixes organizations/, projects/ ou roles/. Par exemple, organizations/123456789012/roles/myCompanyAdmin.

Méthode HTTP et URL :

DELETE https://iam.googleapis.com/v1/ROLE_NAME

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la définition du rôle qui a été supprimé.

{
  "name": "projects/my-project/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWiPg2fmDE=",
  "deleted": true
}

Lorsqu'un rôle est supprimé, toutes les liaisons de rôle qui font référence à ce rôle sont conservées dans vos stratégies d'autorisation, mais elles n'ont aucun effet. Vous pouvez annuler la suppression d'un rôle dans les sept jours. Pendant cette période de sept jours, la console Google Cloud indique que le rôle a été supprimé. Vous pouvez également répertorier les rôles supprimés par programmation, mais ils sont omis par défaut.

À l'issue des sept à 14 jours, le rôle est programmé pour être définitivement supprimé. À ce stade, le rôle n'est plus comptabilisé dans la limite de 300 rôles personnalisés par organisation ou 300 rôles personnalisés par projet.

Le processus de suppression définitive prend 30 jours. Au cours de la fenêtre de 30 jours, le rôle et toutes les liaisons associées sont définitivement supprimés et vous ne pouvez pas créer de nouveau rôle avec le même ID de rôle.

Une fois le rôle définitivement supprimé, 44 jours après la demande de suppression initiale, vous pouvez créer un nouveau rôle avec le même ID de rôle.

Annuler la suppression d'un rôle personnalisé

Lorsque vous annulez la suppression d'un rôle, il revient à son état précédent.

La suppression des rôles ne peut être annulée que dans un délai de sept jours. À l'issue des sept jours, le rôle peut être définitivement supprimé, et toutes les liaisons de rôle qui y font référence sont supprimées.

Console

  1. Dans la console Google Cloud, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Localisez le rôle dont vous souhaitez annuler la suppression. Ensuite, cliquez sur l'icône Plus à la fin de la ligne, puis sur Annuler la suppression.

gcloud

  1. Dans la console Google Cloud, activez Cloud Shell.

    Activer Cloud Shell

    En bas de la fenêtre de la console Google Cloud, une session Cloud Shell démarre et affiche une invite de ligne de commande. Cloud Shell est un environnement shell dans lequel Google Cloud CLI est déjà installé, et dans lequel des valeurs sont déjà définies pour votre projet actuel. L'initialisation de la session peut prendre quelques secondes.

  2. Exécutez la commande gcloud iam roles undelete pour annuler la suppression d'un rôle personnalisé :

    • Pour annuler la suppression d'un rôle personnalisé au niveau de l'organisation, exécutez la commande suivante :

      gcloud iam roles undelete ROLE_ID --organization=ORGANIZATION_ID
    • Pour annuler la suppression d'un rôle personnalisé au niveau du projet, exécutez la commande suivante :

      gcloud iam roles undelete ROLE_ID --project=PROJECT_ID

    Chaque valeur d'espace réservé est décrite ci-dessous :

    • ROLE_ID est le nom du rôle, par exemple myCompanyAdmin.

    • ORGANIZATION_ID est l'ID numérique de l'organisation, tel que 123456789012.

    • PROJECT_ID est le nom du projet, par exemple my-project.

    Exemples

    L'exemple suivant montre comment annuler la suppression d'un rôle personnalisé au niveau de l'organisation :

    gcloud iam roles undelete myCompanyAdmin --organization=123456789012

    Si la suppression du rôle a bien été annulée, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organization/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    L'exemple suivant montre comment annuler la suppression d'un rôle au niveau du projet :

    gcloud iam roles undelete myCompanyAdmin --project=my-project

    Si la suppression du rôle a bien été annulée, le résultat de la commande est semblable à celui-ci :

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin
    

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.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::UndeleteRoleRequest request;
  request.set_name(name);
  auto response = client.UndeleteRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully undeleted: " << response->DebugString()
            << "\n";
}

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.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role UndeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Undelete(
            new UndeleteRoleRequest(), resource).Execute();
        Console.WriteLine("Undeleted role: " + role.Name);
        return role;
    }
}

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.

import (
	"context"
	"fmt"
	"io"

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

// undeleteRole restores a deleted custom role.
func undeleteRole(w io.Writer, projectID, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	request := &iam.UndeleteRoleRequest{}
	role, err := service.Projects.Roles.Undelete(resource, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Undelete: %w", err)
	}
	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
	return role, nil
}

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.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.UndeleteRoleRequest;
import java.io.IOException;

/**
 * Undelete a role to return it to its previous state. Undeleting only works on roles that were
 * deleted in the past 7 days.
 */
public class UndeleteRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to a role that was deleted in the past 7 days.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";

    undeleteRole(projectId, roleId);
  }

  public static void undeleteRole(String projectId, String roleId) throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    UndeleteRoleRequest undeleteRoleRequest =
        UndeleteRoleRequest.newBuilder().setName(roleName).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.undeleteRole(undeleteRoleRequest);
      System.out.println("Undeleted role:\n" + result);
    }
  }
}

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.

def undelete_role(name: str, project: str) -> dict:
    """Undeletes a role."""

    # pylint: disable=no-member
    role = (
        service.projects()
        .roles()
        .patch(
            name="projects/" + project + "/roles/" + name, body={"stage": "DISABLED"}
        )
        .execute()
    )

    print("Disabled role: " + role["name"])
    return role

REST

La méthode roles.undelete annule la suppression d'un rôle personnalisé dans un projet ou une organisation.

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

  • ROLE_NAME : nom complet du rôle, y compris les préfixes organizations/, projects/ ou roles/. Par exemple, organizations/123456789012/roles/myCompanyAdmin.
  • ETAG : identifiant de la version du rôle. Incluez ce champ pour éviter que d'autres modifications de rôle soient écrasées.

Méthode HTTP et URL :

POST https://iam.googleapis.com/v1/ROLE_NAME:undelete

Corps JSON de la requête :

{
  "etag": "ETAG"
}

Pour envoyer votre requête, développez l'une des options suivantes :

La réponse contient la définition du rôle dont la suppression a été annulée.

{
  "name": "projects/my-project/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWiPg2fmDE="
}

Étapes suivantes