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'aux ressources situées au-dessous dans la hiérarchie, à l'aide de l'outil de ligne de commande gcloud, de la console Cloud ou de l'API IAM. Par exemple, vous pouvez obtenir toutes les autorisations que vous pouvez appliquer à une organisation et à des projets de cette organisation.

Console

  1. Accédez à la page "Rôles" dans la console GCP.

    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 dernière. Par exemple, lorsque vous sélectionnez le rôle Administrateur d'instances de Compute, le panneau de droite affiche toutes les autorisations que vous pouvez appliquer à une instance Compute Engine.

COMMANDE GCLOUD

Utilisez 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 et sur toute ressource située 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 relative à la compatibilité des autorisations de rôles personnalisés.

API REST

QueryTestablePermissions affiche toutes les autorisations pouvant être appliquées à une ressource. Les autorisations affichées sont les autorisations pouvant être utilisées pour créer un rôle personnalisé sur cette ressource et sur toute ressource située au-dessous dans la hiérarchie. La seule entrée obligatoire pour cette demande est le nom complet de la ressource sous la forme //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 C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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 Storage en langage 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 avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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" dans la console GCP.

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

Utilisez 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, comme dans roles/viewer.

L'exemple suivant illustre la sortie 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 le rôle personnalisé 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 1234567. [ROLE-NAME] est le nom du rôle personnalisé, tel que 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é, tel que myCustomRole.

Pour plus d'informations, consultez la documentation de référence relative à 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 connaissez pas le nom du rôle, 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

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 vide.
INVALID_ARGUMENT La vue de rôle n'est pas valide.

C#

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

    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. Entrez 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 organisé existant, procédez comme suit :

  1. Accédez à la page "Rôles" dans la console GCP.

    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

Utilisez 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

Lors de la création d'un rôle personnalisé, vous devez spécifier s'il s'applique au niveau de l'organisation ou au niveau du projet en utilisant les indicateurs --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 le stade d'un rôle dans le cycle de lancement (par exemple, ALPHA, BETA ou GA).
  • includedPermissions spécifie une liste d'une ou de plusieurs 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 du 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 :

gcloud 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é. Ces dernières sont séparées par une virgule (par exemple : iam.roles.get,iam.roles.list).
  • [LAUNCH-STAGE] indique le stade 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 de 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 l'activité du 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 Le 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 au maximum de {max}.
INVALID_ARGUMENT Le {stage} role.stage n'est pas valide.

C#

Avant de tester cet exemple, suivez les instructions de configuration C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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 Storage en langage 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 avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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é est utilisée pour vérifier si le rôle personnalisé a changé depuis la dernière demande. Lorsque vous faites une demande à Cloud IAM avec une valeur etag, Cloud IAM compare la valeur etag de la demande à 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 lorsque vous définissez le rôle uniquement si le rôle correspondant dans roles.get() contient une valeur etag.

Console

  1. Accédez à la page "Rôles" dans la console GCP.

    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

Utilisez 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 de rôle mise à jour

Lors de la mise à jour d'un rôle personnalisé, vous devez spécifier s'il s'applique au niveau de l'organisation ou au niveau du projet en utilisant les indicateurs --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 de rôle mise à jour 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 une liste d'une ou de plusieurs 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 ce dernier a été créé au niveau du projet ou de l'organisation (par exemple, projects/my-project-id/roles/viewer).
  • [LAUNCH-STAGE] indique le stade 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.

Prenez l'exemple du 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 du fichier YAML qui contient 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 sur la page du rôle gcloud iam roles update.

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'indicateur --permissions [PERMISSIONS] et en fournissant une liste d'autorisations séparées par des virgules pour remplacer la liste des autorisations existantes.

Pour mettre à jour d'autres aspects de la définition de 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 le stade 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'indicateurs :

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 Role UpdateRole(UpdateRoleRequest) pour modifier un rôle personnalisé existant.

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

Si vous ne connaissez pas l'ID du rôle personnalisé que vous souhaitez modifier, affichez la liste de 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. Puis 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 paramétrer le champ update_mask pour spécifier le ou 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. Ce paramètre peut être défini sous la forme 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 une 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. Par 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 dans la demande ([ROLE-NAME]) et le nom dans le rôle ([ROLE-NAME]) doivent être identiques.
INVALID_ARGUMENT L'autorisation [PERMISSION] n'est pas valide.
ABORTED Il y a eu des changements de stratégie simultanés, car les etag ne correspondaient pas. Veuillez réessayer l'intégralité de la procédure de lecture-modification-écriture avec retrait exponentiel.

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 C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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 Storage en langage 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 avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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" dans la console GCP.

    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

Utilisez la commande gcloud iam roles update pour désactiver un rôle personnalisé en définissant sa phase 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é 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 de rôle mise à jour

Le moyen le plus simple de désactiver un rôle personnalisé existant consiste à utiliser l'indicateur --stage et à le 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'indicateur --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 à 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, affichez la liste de tous les rôles à l'aide de roles.list() pour identifier le rôle concerné. roles.list() renvoie 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 le Role, définissez stage sur DISABLED.
  • Définissez update_mask sur paths: stage.

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

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 dans la demande ([ROLE-NAME]) et le nom dans le rôle ([ROLE-NAME]) doivent être identiques.
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é du processus de la lecture, modification, écriture avec un recul exponentiel.

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.

Afficher la liste des rôles

Console

  1. Accédez à la page "Rôles" dans la console GCP.

    Ouvrir la page "Rôles"


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

COMMANDE GCLOUD

Utilisez la commande gcloud iam roles list pour afficher la liste des rôles personnalisés et des rôles prédéfinis correspondant à un projet ou une organisation.

Exécutez la commande gcloud suivante pour obtenir la liste des rôles personnalisés, en spécifiant des rôles personnalisés au niveau du projet ou 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'indicateur --organization [ORGANIZATION-ID] si le rôle a été créé au niveau de l'organisation, par exemple 1234567.

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

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

gcloud iam roles list

API REST

La méthode roles.list() permet d'afficher tous les rôles personnalisés définis dans une organisation ou un projet. Vous pouvez également l'utiliser pour afficher la liste 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 voulez 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 des rôles récemment supprimés, définissez le champ showDeleted sur true.

Si vous souhaitez afficher tous les rôles organisés, 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 sous la forme organizations/{organization-id}, projects/{project-id} ou vide.
INVALID_ARGUMENT La vue de rôle n'est pas valide.

C#

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

    Ouvrir la page "Rôles"

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

COMMANDE GCLOUD

Utilisez 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 de nouvelles 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'indicateur --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 la liste gcloud iam roles list, à moins que l'indicateur --show-deleted ne soit inclus. Les rôles supprimés sont indiqués par le bloc deleted: true dans une réponse à une 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 de nouvelles liaisons de stratégie IAM.

Le name peut être dans 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 C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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 Storage en langage 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 avec les bibliothèques clientes de Cloud IAM. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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 la console GCP. 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" dans la console GCP.

    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

Utilisez 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 name peut être dans 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} qui est 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 C# dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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 Storage en langage 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 plus d'informations, consultez la documentation de référence de l'API Cloud IAM 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

Cette page vous a-t-elle été utile ? Évaluez-la :

Envoyer des commentaires concernant…

Documentation Cloud IAM