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

Cette page explique comment créer et gérer un rôle personnalisé.

Avant de commencer

  • Consultez la page Comprendre les rôles personnalisés IAM qui fournit des informations sur les autorisations nécessaires pour créer des rôles personnalisés et sur les bonnes pratiques.
  • Si vous faites appel à l'utilitaire de ligne de commande gcloud, veillez à utiliser la version 188.0.0 ou une version ultérieure. Pour mettre à jour gcloud vers la version 188.0.0, exécutez la commande suivante : gcloud components update --version 188.0.0

Afficher des autorisations disponibles pour une ressource

Avant de créer un rôle personnalisé, vous souhaiterez peut-être savoir quelles autorisations peuvent être appliquées à une ressource. Vous pouvez obtenir toutes les autorisations pouvant être appliquées à une ressource, ainsi qu'à celles situées au-dessous dans la hiérarchie, à l'aide de l'outil de ligne de commande gcloud, de Cloud Console ou de l'API IAM. Par exemple, vous pouvez obtenir toutes les autorisations que vous pouvez appliquer à une organisation et aux projets de cette organisation.

Console

  1. Accédez à la page "Rôles" de Cloud Console.

    Ouvrir la page "Rôles"

  2. Sélectionnez votre projet dans le menu déroulant en haut de la page.
  3. Cochez la case correspondant au rôle d'administrateur d'une ressource pour afficher toutes les autorisations que vous pouvez appliquer à cette ressource. Par exemple, lorsque vous sélectionnez le rôle "Administrateur d'instances de Compute", le panneau latéral de droite affiche toutes les autorisations que vous pouvez appliquer à une instance Compute Engine.

Commande gcloud

Exécutez la commande gcloud iam list-testable-permissions pour obtenir la liste des autorisations pouvant être appliquées à une ressource cible. Les autorisations affichées sont des autorisations pouvant être utilisées pour créer un rôle personnalisé sur cette ressource, ainsi que toutes celles situées au-dessous dans la hiérarchie.

L'exemple suivant montre comment obtenir la liste des autorisations pouvant être testées pour une ressource de projet :

gcloud iam list-testable-permissions [PROJECT-ID]

[PROJECT-ID] est l'ID du projet sous la forme d'un nom de ressource complet : //cloudresourcemanager.googleapis.com/projects/PROJECT-ID, par exemple //cloudresourcemanager.googleapis.com/projects/my-project-id.

La commande list-testable-permissions peut afficher des centaines de résultats. Pour limiter les résultats, vous pouvez également spécifier une expression de filtre. Un extrait de résultats possibles est présenté ci-dessous à titre d'exemple :

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

Notez que chaque autorisation indique si elle est compatible avec un rôle personnalisé. Pour obtenir la liste complète des autorisations compatibles et non compatibles, consultez la page [Compatibilité des autorisations de rôles personnalisés](/iam/docs/custom-roles-permissions-support).

API REST

QueryTestablePermissions affiche toutes les autorisations pouvant être appliquées à une ressource. Les autorisations affichées sont des autorisations pouvant être utilisées pour créer un rôle personnalisé sur cette ressource, ainsi que toutes celles situées au-dessous dans la hiérarchie. La seule entrée obligatoire pour cette requête est le nom complet de la ressource, par exemple //cloudresourcemanager.googleapis.com/projects/my-project`.

Si vous le souhaitez, l'appelant peut prendre en charge la pagination si la ressource dispose d'une longue liste d'autorisations.

Exemple

full_resource_name: '//cloudresourcemanager.googleapis.com/projects/my-project'

Codes d'erreur

Code d'erreur Message de statut
INVALID_ARGUMENT doit être compris entre 0 et 100
INVALID_ARGUMENT Encodage de jeton de pagination non valide
INVALID_ARGUMENT Jeton de pagination non valide
INVALID_ARGUMENT Le jeton de pagination ne concerne pas le conteneur spécifié.
INVALID_ARGUMENT Point de départ non valide dans le jeton de pagination
INVALID_ARGUMENT Cookie de jeton de pagination non valide
INVALID_ARGUMENT Jeton de pagination expiré
INVALID_ARGUMENT {full_resource_name} doit être spécifié
INVALID_ARGUMENT {full_resource_name} ne correspond pas à //[a-z0-9.-]/.a-z0-9.-]/

C#

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


using System;
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

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

import (
	"context"
	"fmt"
	"io"

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

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

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

Python

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

def query_testable_permissions(resource):
    """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'])

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 Platform ou de l'API IAM.

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

Console

  1. Accédez à la page "Rôles" de Cloud Console.

    Ouvrir la page Rôles

  2. Sélectionnez votre organisation ou votre projet dans le menu déroulant en haut de la page.
  3. Cochez la case d'un ou plusieurs rôles pour afficher les autorisations de rôle. Le panneau latéral de droite affiche les autorisations incluses dans les rôles, le cas échéant.

Les icônes situées à côté du rôle indiquent s'il s'agit d'un rôle personnalisé (icône "usine") ou prédéfini (icône hexagone).

Icônes de rôle

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.

Commande gcloud

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 gcloud suivante :

gcloud iam roles describe [ROLE-NAME]

[ROLE-NAME] est le nom du rôle, par exemple roles/viewer.

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é, commencez par déterminer si ce rôle a été créé au niveau de l'organisation ou du projet. Si le rôle personnalisé a été créé au niveau de l'organisation, exécutez la commande gcloud suivante :

gcloud iam roles describe --organization [ORGANIZATION-ID] [ROLE-NAME]

[ORGANIZATION-ID] est l'ID de l'organisation au format suivant : 1234567. [ROLE-NAME] est le nom du rôle personnalisé, par exemple myCustomRole.

Pour afficher les métadonnées d'un rôle personnalisé au niveau du projet, exécutez la commande gcloud suivante :

gcloud iam roles describe --project [PROJECT-ID] [ROLE-NAME]

[PROJECT-ID] est l'ID du projet, par exemple my-project-id. [ROLE-NAME] est le nom du rôle personnalisé, par exemple myCustomRole.

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

API REST

Si vous connaissez le nom du rôle que vous souhaitez afficher, utilisez la méthode roles.get pour obtenir un rôle personnalisé. Si vous ne le connaissez pas, utilisez la méthode roles.list pour répertorier tous les rôles personnalisés dans une organisation ou un projet.

Pour appeler GetRole(),, définissez le champ suivant dans GetRoleRequest :

  • Nom du rôle, par exemple roles/{ROLE-NAME} ou organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME}

Pour appeler ListRoles(), définissez le champ suivant dans ListRolesRequest :

  • Parent pour lequel vous souhaitez obtenir tous les rôles personnalisés, par exemple organizations/{ORGANIZATION-ID} ou projects/{PROJECT-ID}

Codes d'erreur

Error code (Code d'erreur) Message de statut
PERMISSION_DENIED Vous n'êtes pas autorisé à obtenir le rôle sur {path}.
NOT_FOUND Le rôle nommé {role} est introuvable.
INVALID_ARGUMENT Le nom du rôle doit être au format roles/{role} ou organizations/{organization-id}/roles/{role}.
PERMISSION_DENIED Vous n'êtes pas autorisé à afficher les rôles dans {path}.
INVALID_ARGUMENT Le parent {path} n'est pas valide. Le parent doit être au format organizations/{organization-id} ou être vide.
INVALID_ARGUMENT La vue de rôle n'est pas valide.

C#

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


using System;
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

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

import (
	"context"
	"fmt"
	"io"

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

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

	role, err := service.Roles.Get(name).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.Get: %v", 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
}

Python

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

def get_role(name):
    """Gets a role."""

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

Créer un rôle personnalisé

Pour créer un rôle personnalisé, un appelant doit posséder l'autorisation iam.roles.create. Par défaut, le propriétaire d'un projet ou d'une organisation dispose de cette autorisation, et peut créer et gérer des rôles personnalisés.

Les utilisateurs qui ne sont pas propriétaires, y compris les administrateurs d'organisation, doivent se voir attribuer le rôle Administrateur des rôles de l'organisation ou le rôle Administrateur de rôle IAM.

Console

Pour créer un nouveau rôle personnalisé à partir de zéro, procédez comme suit :

  1. Accédez à la page "Rôles" de Cloud Console.

    Ouvrir la page Rôles

  2. Sélectionnez votre organisation dans la liste déroulante Organisation.
  3. Cliquez sur Créer un rôle.
  4. Saisissez un nom, un titre et une description pour le rôle.
  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. Accédez à la page "Rôles" de Cloud Console.

    Ouvrir la page Rôles

  2. Sélectionnez votre organisation dans la liste déroulante Organisation.
  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. Entrez un nom, un titre et une description pour le rôle.
  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.

Commande gcloud

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

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]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-TITLE] est un titre convivial pour le rôle, par exemple "Role Viewer".
  • [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.
  • includedPermissions spécifie la liste des autorisations à inclure dans le rôle personnalisé, par exemple - iam.roles.get.

Enregistrez le fichier YAML, puis exécutez la commande gcloud suivante :

gcloud iam roles create [ROLE-ID] --project [PROJECT-ID] \
--file [YAML_FILE-PATH]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle, par exemple viewer.
  • [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 du rôle personnalisé.

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

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

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

gcloud iam roles create viewer --project my-project-id \
--file my-role-definition.yaml

Si le rôle a bien été créé, la réponse suivante s'affiche :

Created role [viewer].
description: My custom role description.
etag: BwVkBX0sQD0=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

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

Exécutez la commande gcloud suivante :

cloud iam roles create [ROLE-ID] --project [PROJECT-ID] \
--title [ROLE-TITLE] --description [ROLE-DESCRIPTION] \
--permissions [PERMISSIONS-LIST] --stage [LAUNCH-STAGE]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle, par exemple viewer.
  • [PROJECT-ID] est le nom du projet, par exemple my-project-id.
  • [ROLE-TITLE] est un titre convivial pour le rôle, par exemple "Role Viewer".
  • [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. Par exemple : iam.roles.get,iam.roles.list.
  • [LAUNCH-STAGE] indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.

L'exemple suivant montre comment créer un rôle à l'aide d'indicateurs :

gcloud iam roles create viewer --project my-project-id \
--title "Role Viewer" --description "My custom role description." \
--permissions iam.roles.get,iam.roles.list --stage ALPHA

Si le rôle a bien été créé, la réponse suivante s'affiche :

Created role [viewer].
description: My custom role description.
etag: BwVkBX0sQD0=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

API REST

Utilisez la méthode create pour créer un rôle personnalisé.

Définissez les paramètres obligatoires suivants dans la requête :

  • Élément role_id que vous souhaitez utiliser pour le nouveau rôle personnalisé, par exemple appengine.myCustomStorageAuditor
  • Description du rôle personnalisé, par exemple "Ce rôle accorde l'accès à la liste des ressources de stockage, à leur capacité et aux stratégies d'accès".
  • Liste des autorisations que vous souhaitez associer à ce rôle.
  • Notez que la définition du champ de nom dans le rôle entraînera une erreur.

Nous vous recommandons de définir également les paramètres facultatifs suivants :

  • Titre du rôle personnalisé, par exemple "Exemple d'éditeur de rôle personnalisé".
  • Définissez une valeur pour stage, par exemple GA.

stage peut avoir les valeurs suivantes : ALPHA, BETA, GA, DEPRECATED ou DISABLED.

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. La création d'un rôle personnalisé basé sur un rôle prédéfini contenant des autorisations obsolètes ou restreintes échouera.

Exemple

parent: '[PARENT-NAME]'
role_id: '[ROLE-ID]'
role {
    name: ''
    title: '[ROLE-TITLE]'
    description: '[ROLE-DESCRIPTION]'
    included_permissions: '[PERMISSION]'
    included_permissions: '[PERMISSION]'
})",

Où :

  • [PARENT-NAME] est le nom de l'organisation dans laquelle vous créez le rôle personnalisé (par exemple, organizations/0000000000000001) ou l'ID du projet pour lequel vous créez le rôle personnalisé (par exemple, projects/my-project).
  • [ROLE-ID] est l'ID du rôle personnalisé. Par exemple, appengine.myCustomStorageAuditor..
  • [ROLE-TITLE] est le titre du rôle. Par exemple, Storage Auditor.
  • [ROLE-DESCRIPTION] est la description de ce que fait le rôle.
  • [PERMISSION] est l'autorisation que vous souhaitez inclure dans le rôle personnalisé.

Codes d'erreur

Code d'erreur Message de statut
PERMISSION_DENIED Vous n'êtes pas autorisé à créer un rôle dans {parent}.
ALREADY_EXISTS Un rôle nommé {role-id} existe déjà dans {parent}.
INVALID_ARGUMENT Le parent {parent} n'est pas valide. Le parent doit être au format organizations/{organization-id}.
INVALID_ARGUMENT L'élément role_id {role-id} n'est pas valide. Il ne correspond pas au schéma {pattern}.
INVALID_ARGUMENT Le nombre d'autorisations dans le rôle est supérieur à la valeur maximale ({max}).
INVALID_ARGUMENT Le {stage} role.stage n'est pas valide.

C#

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


using System;
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

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

import (
	"context"
	"fmt"
	"io"

	"golang.org/x/oauth2/google"
	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) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Created role: %v", role.Name)
	return role, nil
}

Python

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

def create_role(name, project, title, description, permissions, stage):
    """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

Modifier un rôle personnalisé existant

Lecture, modification et écriture

Un modèle courant de mise à jour des métadonnées d'une ressource, comme un rôle personnalisé, consiste à lire son état actuel, à mettre à jour les données localement, puis à envoyer les données modifiées en écriture. Ce modèle peut provoquer un conflit si deux processus indépendants ou plus tentent de réaliser la séquence 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 des 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. Quand vous envoyez une requête spécifiant une valeur etag à Cloud IAM, le service compare la valeur etag de la requête à 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 mis à jour à 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. Accédez à la page "Rôles" de Cloud Console.

    Ouvrir la page Rôles

  2. Sélectionnez votre organisation dans la liste déroulante Organisation.
  3. Cliquez sur un rôle personnalisé.
  4. Cliquez sur Modifier le rôle.
  5. Cliquez sur Ajouter des autorisations pour ajouter de nouvelles autorisations au rôle.
  6. Décochez les autorisations pour supprimer les autorisations du rôle.
  7. Cliquez sur Mettre à jour pour enregistrer le rôle modifié.

Commande gcloud

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 :

Exécutez la commande gcloud suivante pour obtenir la définition actuelle du rôle :

gcloud iam roles describe [ROLE-ID] --project [PROJECT-ID]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle à mettre à jour, par exemple viewer.
  • [PROJECT-ID] est le nom du projet, par exemple my-project-id.

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 mise à jour 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-VALUE]
includedPermissions:
- [PERMISSION-1]
- [PERMISSION-2]
name: [ROLE-ID]
stage: [LAUNCH-STAGE]
title: [ROLE-TITLE]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-DESCRIPTION] est une brève description du rôle, par exemple "My custom role description".
  • [ETAG-VALUE] est l'identifiant unique de la version actuelle du rôle, par exemple BwVkBkbfr70=.
  • includedPermissions spécifie la liste des autorisations à inclure dans le rôle personnalisé, par exemple - iam.roles.get.
  • [ROLE-ID] est l'ID hiérarchique du rôle, qui varie selon que celui-ci a été créé au niveau du projet ou au niveau de l'organisation. Par exemple : projects/my-project-id/roles/viewer.
  • [LAUNCH-STAGE] indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.
  • [ROLE-TITLE] est un titre convivial pour le rôle, par exemple "Role Viewer".

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 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-id/roles/viewer
stage: ALPHA
title: Role Viewer

Enregistrez le fichier YAML, puis exécutez la commande gcloud suivante :

gcloud iam roles update [ROLE-ID] --project [PROJECT-ID] \
--file [YAML_FILE-PATH]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle à mettre à jour, par exemple viewer.
  • [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é.

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

gcloud iam roles update viewer --project my-project-id \
--file my-role-definition.yaml

Si le rôle a bien été mis à jour, la réponse suivante s'affiche :

description: My custom role description.
etag: BwVkBwDN0lg=
includedPermissions:
- iam.roles.get
- iam.roles.list
- storage.buckets.get
- storage.buckets.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

Pour mettre à jour un rôle personnalisé à l'aide d'indicateurs :

Chaque partie d'une définition de rôle peut être mise à jour à l'aide d'un indicateur correspondant. Une liste de tous les indicateurs possibles est disponible dans l'article Mise à jour des rôles de gcloud iam.

Vous pouvez utiliser les indicateurs suivants pour ajouter ou supprimer des autorisations :

  • --add-permissions [PERMISSIONS] : ajoute au rôle une ou plusieurs autorisations séparées par une virgule.
  • --remove-permissions [PERMISSIONS] : supprime du rôle une ou plusieurs autorisations séparées par une virgule.

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 aspects de la définition du rôle, exécutez la commande gcloud suivante :

gcloud iam roles update [ROLE-ID] --project [PROJECT-ID] \
--title [ROLE-TITLE] --description [ROLE-DESCRIPTION] \
--stage [LAUNCH-STAGE]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle, par exemple viewer.
  • [PROJECT-ID] est le nom du projet, par exemple my-project-id.
  • [ROLE-TITLE] est un titre convivial pour le rôle, par exemple "Role Viewer".
  • [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.

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

gcloud iam roles update viewer --project my-project-id \
--add-permissions storage.buckets.get,storage.buckets.list

Si le rôle a bien été mis à jour, la réponse suivante s'affiche :

description: My custom role description.
etag: BwVkBwDN0lg=
includedPermissions:
- iam.roles.get
- iam.roles.list
- storage.buckets.get
- storage.buckets.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

API REST

Utilisez la méthode Role UpdateRole(UpdateRoleRequest) pour modifier un rôle personnalisé existant.

Si vous connaissez l'ID du rôle personnalisé que vous souhaitez modifier, récupérez le rôle à l'aide de la méthode roles.get(), puis mettez-le à jour à l'aide de roles.patch().

Si vous ne le connaissez pas, répertoriez tous les rôles à l'aide de ListRoles() pour identifier le rôle. roles.list() affiche la liste de tous les rôles référençant la ressource. Ensuite, mettez à jour le rôle à l'aide de roles.patch().

Définissez le paramètre obligatoire suivant dans roles.patch() :

  • Nom du rôle, par exemple organizations/{ORGANIZATION-ID}/roles/{ROLE-ID}

Vous pouvez également définir le champ update_mask pour indiquer les champs pouvant être mis à jour ultérieurement.

Exemple

name: '[ROLE-NAME]'
role {
    name: '[ROLE-NAME]'
    title: '[ROLE-TITLE]'
    description: '[ROLE-DESCRIPTION]'
    included_permissions: '[PERMISSION]'
    included_permissions: '[PERMISSION]'
})"

Où :

  • [ROLE-NAME] est le nom du rôle, par exemple organizations/123456/roles/appengine.customRoleEditor.. Il peut avoir le format roles/{ROLE-NAME}, organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME} ou projects/{PROJECT-ID}/roles/{ROLE-NAME}.

  • [ROLE-TITLE] est le titre du rôle. Par exemple, New custom editor..

  • [ROLE-DESCRIPTION] est la description du rôle. Par exemple, "Ma nouvelle description longue de l'éditeur".
  • [PERMISSION] est l'autorisation que vous souhaitez inclure dans le rôle. Exemple :storage.objects.update

Codes d'erreur

Code d'erreur Message de statut
PERMISSION_DENIED Vous n'êtes pas autorisé à mettre à jour le rôle.
INVALID_ARGUMENT Les rôles prédéfinis ne peuvent pas être mis à jour.
INVALID_ARGUMENT Le nom figurant dans la requête ([ROLE-NAME]) et celui contenu dans le rôle () doivent correspondre.
INVALID_ARGUMENT L'autorisation [PERMISSION] n'est pas valide.
ABORTED Il y a eu des changements de stratégie simultanés, car les valeurs etag ne correspondaient pas. Veuillez réessayer l'intégralité de la procédure de lecture-modification-écriture avec intervalle exponentiel entre les tentatives.

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. La création d'un rôle personnalisé basé sur un rôle prédéfini contenant des autorisations obsolètes ou restreintes échouera.

C#

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


using System;
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

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

import (
	"context"
	"fmt"
	"io"

	"golang.org/x/oauth2/google"
	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) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	role, err := service.Projects.Roles.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Get: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Updated role: %v", role.Name)
	return role, nil
}

Python

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

def edit_role(name, project, title, description, permissions, stage):
    """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

Désactiver un rôle personnalisé

Vous pouvez désactiver un rôle personnalisé. Lorsqu'un rôle est désactivé, toutes les liaisons de stratégie associées à ce rôle sont désactivées, ce qui signifie que les autorisations du rôle ne seront pas accordées, même si vous accordez le rôle à un utilisateur.

Console

  1. Accédez à la page "Rôles" de Cloud Console.

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

Commande gcloud

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 la commande gcloud suivante :

gcloud iam roles update [ROLE-ID] --project [PROJECT-ID] \
--stage DISABLED

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle, par exemple viewer.
  • [PROJECT-ID] est le nom du projet, par exemple my-project-id. Vous pouvez également utiliser l'option --organization [ORGANIZATION-ID] si le rôle a été créé au niveau de l'organisation, par exemple 1234567.

L'exemple suivant montre comment désactiver un rôle :

gcloud iam roles update viewer --project my-project-id \
--stage DISABLED

Si le rôle a bien été mis à jour, la réponse suivante s'affiche :

description: My custom role description.
etag: BwVkB5NLIQw=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: DISABLED
title: Role Viewer

API REST

Utilisez la méthode roles.patch() pour désactiver un rôle personnalisé.

Si vous connaissez l'ID du rôle personnalisé que vous souhaitez désactiver, obtenez le rôle à l'aide de la méthode roles.get(). Définissez la propriété stage du rôle sur DISABLED, puis appelez la méthode roles.patch() pour mettre à jour le rôle.

Si vous ne connaissez pas l'ID du rôle personnalisé que vous souhaitez désactiver, répertoriez tous les rôles à l'aide de roles.list() pour identifier le rôle. roles.list() affiche la liste de tous les rôles référençant la ressource. Identifiez le rôle que vous souhaitez désactiver, définissez sa propriété rolelaunchstage sur DISABLED,, puis appelez la méthode roles.patch() pour mettre à jour le rôle.

Pour désactiver un rôle, définissez les champs suivants :

  • Définissez "name" sur le nom complet du rôle, organizations/{organization-id}/roles/{role}..
  • Dans Role,, définissez stage sur DISABLED..
  • Définissez update_mask sur "paths: stage".

Pour réactiver le rôle, suivez la même procédure que celle décrite ci-dessus pour désactiver le rôle, mais définissez la propriété stage du rôle sur ALPHA, BETA ou GA.

Exemple

name: 'organizations/123456/roles/appengine.customRoleEditor'
role {
    name: 'organizations/123456/roles/appengine.customRoleEditor'`
    stage: 'DISABLED'
}
update_mask {
    paths:  stage
}

Codes d'erreur

Code d'erreur Message de statut
PERMISSION_DENIED Vous n'êtes pas autorisé à mettre à jour le rôle
INVALID_ARGUMENT Les rôles sélectionnés ne peuvent pas être mis à jour.
INVALID_ARGUMENT Le nom figurant dans la requête ([ROLE-NAME]) et celui contenu dans le rôle () doivent correspondre.
INVALID_ARGUMENT L'autorisation [PERMISSION] n'est pas valide.
ABORTED Il y a eu des changements de politique simultanés. Veuillez réessayer l'intégralité de la procédure de lecture-modification-écriture avec intervalle exponentiel entre les tentatives.

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.

Python

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

Faire la liste des rôles

Console

  1. Accédez à la page "Rôles" de Cloud Console.

    Ouvrir la page Rôles


    Tous les rôles personnalisés du projet sont répertoriés sur la page.

Commande gcloud

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

Exécutez la commande gcloud suivante pour répertorier des rôles personnalisés, en spécifiant des rôles personnalisés au niveau du projet ou au niveau de l'organisation :

gcloud iam roles list --project [PROJECT-ID]

[PROJECT-ID] est le nom du projet, par exemple my-project-id. Vous pouvez également utiliser l'option --organization [ORGANIZATION-ID] si le rôle a été créé au niveau de l'organisation, par exemple 1234567.

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

Exécutez la commande gcloud suivante pour répertorier des rôles prédéfinis :

gcloud iam roles list

API REST

La méthode roles.list() permet de répertorier tous les rôles personnalisés définis dans une organisation ou un projet. Vous pouvez également l'utiliser pour répertorier des rôles prédéfinis en définissant le champ "parent" de la requête sur "".

Pour appeler roles.list(), définissez le champ suivant dans la requête :

  • Le parent que vous souhaitez utiliser pour obtenir tous les rôles personnalisés, par exemple :
    • projects/{PROJECT-ID}
    • organizations/{ORGANIZATION-ID}

Si vous souhaitez que le résultat contienne les autorisations de chaque rôle, définissez le champ view sur RoleView::FULL.

Si vous souhaitez que le résultat contienne les rôles qui ont été récemment supprimés, définissez le champ showDeleted sur true.

Si vous souhaitez répertorier tous les rôles prédéfinis, définissez le parent sur "" (chaîne vide).

Codes d'erreur

Code d'erreur Message de statut
PERMISSION_DENIED Vous n'êtes pas autorisé à afficher les rôles dans {path}.
INVALID_ARGUMENT Le parent {path} n'est pas valide. Le parent doit être au format organizations/{organization-id} ou projects/{project-id}, ou être vide.
INVALID_ARGUMENT La vue de rôle n'est pas valide.

C#

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


using System;
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

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

import (
	"context"
	"fmt"
	"io"

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

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

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

Python

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

def list_roles(project_id):
    """Lists roles."""

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

Supprimer un rôle personnalisé

Console

  1. Accédez à la page "Rôles" de Cloud Console.

    Ouvrir la page Rôles

  2. Sélectionnez le rôle que vous souhaitez supprimer, puis cliquez sur l'icône de la corbeille en haut de la page.

Commande gcloud

Exécutez la commande gcloud iam roles delete pour supprimer un rôle personnalisé. Le rôle est suspendu et ne peut pas être utilisé pour créer des liaisons de stratégie IAM.

Exécutez la commande gcloud suivante pour supprimer un rôle personnalisé :

gcloud iam roles delete [ROLE-ID] --project [PROJECT-ID]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle, par exemple viewer.
  • [PROJECT-ID] est le nom du projet, par exemple my-project-id. Vous pouvez également utiliser l'option --organization [ORGANIZATION-ID] si le rôle a été créé au niveau de l'organisation, par exemple 1234567.

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-id/roles/viewer
title: Role Viewer
---

API REST

roles.delete permet de supprimer un rôle. Le rôle est suspendu et ne peut pas être utilisé pour créer des liaisons de stratégie IAM.

Le champ name peut avoir les formats suivants :

  • organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME}
  • projects/{PROJECT-ID}/roles/{ROLE-NAME}

Codes d'erreur

Code d'erreur Message de statut
PERMISSION_DENIED Vous n'êtes pas autorisé à supprimer le rôle sur {path}.
FAILED_PRECONDITION Vous ne pouvez pas supprimer le rôle {ROLE-NAME}, car il a déjà été supprimé.
FAILED_PRECONDITION Vous ne pouvez pas supprimer un rôle {ROLE-NAME} réservé.
INVALID_ARGUMENT Les rôles sélectionnés ne peuvent pas être dans un état supprimé.

C#

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


using System;
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

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

import (
	"context"
	"fmt"
	"io"

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

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

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

Python

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

def delete_role(name, project):
    """Deletes a role."""

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

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

Lorsqu'un rôle est supprimé, ses liaisons restent, mais sont inactives. Vous pouvez annuler la suppression d'un rôle dans les sept jours. Pendant cette période de sept jours, le rôle apparaîtra comme Supprimé dans Cloud Console. Il n'apparaîtra pas dans les commandes de programme de type list (sauf si le champ showDeleted est défini dans la requête).

Au-delà des sept jours, la suppression permanente du rôle est planifiée. Ce processus dure 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é, 37 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é

Console

  1. Accédez à la page "Rôles" de Cloud Console.

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

Le rôle ne peut être restauré que dans les sept jours suivant sa suppression. Après sept jours, il est définitivement supprimé, et toutes les liaisons associées au rôle sont également supprimées.

Commande gcloud

Exécutez la commande gcloud iam roles undelete pour annuler la suppression d'un rôle personnalisé. Lorsque vous annulez la suppression d'un rôle, il revient à son état précédent.

Le rôle ne peut être restauré que dans les sept jours suivant sa suppression. Après sept jours, il est définitivement supprimé, et toutes les liaisons associées au rôle sont également supprimées.

Exécutez la commande gcloud suivante pour annuler la suppression d'un rôle personnalisé :

gcloud iam roles undelete [ROLE-ID] --project [PROJECT-ID]

Les valeurs de chacun des espaces réservés sont décrites ci-dessous :

  • [ROLE-ID] est le nom du rôle, par exemple viewer.
  • [PROJECT-ID] est le nom du projet, par exemple my-project-id. Vous pouvez également utiliser l'indicateur --organization [ORGANIZATION-ID] si le rôle a été créé au niveau de l'organisation, par exemple 1234567.

L'exemple suivant montre comment annuler la suppression d'un rôle personnalisé :

gcloud iam roles undelete viewer --project my-project-id

Si le rôle a été correctement restauré, la réponse suivante s'affiche :

description: My custom role description.
etag: BwVkCAx9W6w=
includedPermissions:
- iam.roles.get
- iam.roles.list
name: projects/my-project-id/roles/viewer
stage: ALPHA
title: Role Viewer

API REST

roles.undelete rétablit l'état précédent d'un rôle.

Le champ name peut avoir les formats suivants :

  • organizations/{ORGANIZATION-ID}/roles/{ROLE-NAME}
  • projects/{PROJECT-ID}/roles/{ROLE-NAME}

Le rôle ne peut être restauré que dans les sept jours suivant sa suppression. Après sept jours, il est définitivement supprimé, et toutes les liaisons associées au rôle sont également supprimées.

Codes d'erreur

Code d'erreur Message de statut
PERMISSION_DENIED Vous n'êtes pas autorisé à annuler la suppression du rôle sur {path}.
FAILED_PRECONDITION Un rôle qui n'est pas supprimé ne peut pas être restauré.
FAILED_PRECONDITION Vous ne pouvez pas annuler la suppression d'un rôle {ROLE-NAME} réservé.
INVALID_ARGUMENT La suppression de rôles prédéfinis ne peut pas être annulée.

C#

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


using System;
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

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

import (
	"context"
	"fmt"
	"io"

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

// undeleteRole restores a deleted custom role.
func undeleteRole(w io.Writer, projectID, name string) (*iam.Role, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %v", 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: %v", err)
	}
	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
	return role, nil
}

Python

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

def undelete_role(name, project):
    """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