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 d'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 les 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 Google Cloud Console ou de l'API Cloud IAM. Par exemple, vous pouvez obtenir toutes les autorisations que vous pouvez appliquer à une organisation et aux projets de cette organisation.

Console

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

    Accéder à 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

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 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 Niveaux de compatibilité des autorisations dans les rôles personnalisés.

API REST

La méthode permissions.queryTestablePermissions répertorie toutes les autorisations que vous pouvez appliquer à une ressource.

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

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

Méthode HTTP et URL :

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

Corps JSON de la requête :

{
  "fullResourceName": "full-resource-name"
  "pageSize": page-size,
  "pageToken": "next-page-token"
}

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

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

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

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# décrite 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 en langage 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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite 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 en langage Go.

import (
	"context"
	"fmt"
	"io"

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

// queryTestablePermissions lists testable permissions on a resource.
func queryTestablePermissions(w io.Writer, fullResourceName string) ([]*iam.Permission, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite 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 en langage 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 Cloud Console ou de l'API Cloud IAM.

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

Console

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

    Accéder à la page Rôles

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

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

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

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

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

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

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

gcloud iam roles describe roles/iam.roleViewer

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

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

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

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

    gcloud iam roles describe --project=project-id role-id
    

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

  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.
  • role-id est l'ID du rôle, à l'exclusion des préfixes tels que projects/, organizations/ ou roles/. Par exemple, myCompanyAdmin.

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

API REST

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

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

  • full-role-id est l'ID de rôle complet, en incluant les préfixes organizations/, projects/ ou roles/. Exemple : organizations/123456789012/roles/myCompanyAdmin.

Méthode HTTP et URL :

GET https://iam.googleapis.com/v1/full-role-id

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

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

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

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# décrite 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 en langage 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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite 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 en langage Go.

import (
	"context"
	"fmt"
	"io"

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

// getRole gets role metadata.
func getRole(w io.Writer, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite 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 en langage 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é

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

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.

La taille totale de l'intitulé, de la description et des noms d'autorisation pour un rôle personnalisé est limitée à 64 Ko. Si vous devez créer un rôle personnalisé plus important, vous pouvez répartir les autorisations entre plusieurs rôles personnalisés. Choisissez des intitulés de rôle indiquant la relation entre les rôles personnalisés tels que Custom Admin (1 of 2) et Custom Admin (2 of 2).

Console

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

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

    Accéder à la page Rôles

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

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

  4. Entrez un nom, un intitulé 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. Dans Cloud Console, accédez à la page Rôles.

    Accéder à la page Rôles

  2. Sélectionnez l'organisation ou le projet dans lequel vous souhaitez créer un rôle.
  3. Sélectionnez les rôles sur lesquels vous souhaitez baser le nouveau rôle personnalisé.
  4. Cliquez sur Créer un rôle à partir de la sélection.
  5. Entrez un nom, un intitulé 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 options pour spécifier la définition de rôle

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

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

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

title: role-title
description: role-description
stage: launch-stage
includedPermissions:
- permission-1
- permission-2

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

  • role-title est un intitulé convivial pour le rôle, par exemple "My Company Admin".
  • role-description est une brève description du rôle, par exemple "My custom role description".
  • launch-stage indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.
  • permission-1 et permission-2 sont des autorisations à inclure dans le rôle personnalisé, telles que iam.roles.get.

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

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

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

    gcloud iam roles create role-id --project=project-id \
      --file=yaml-file-path
    

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

  • role-id est le nom du rôle, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.
  • yaml-file-path est le chemin d'accès à l'emplacement de votre fichier YAML contenant la définition du rôle personnalisé.

Exemples

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

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

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

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

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

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

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

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

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

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

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

Exécutez l'une des commandes suivantes :

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

    gcloud iam roles create role-id --organization=organization-id \
      --title=role-title --description=role-description \
      --permissions=permissions-list --stage=launch-stage
    
  • Pour créer un rôle personnalisé au niveau du projet, exécutez la commande suivante :

    gcloud iam roles create role-id --project=project-id \
      --title=role-title --description=role-description \
      --permissions=permissions-list --stage=launch-stage
    

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

  • role-id est le nom du rôle, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.
  • role-title est un intitulé convivial pour le rôle, par exemple "My Company Admin".
  • role-description est une brève description du rôle, par exemple "My custom role description.".
  • permissions-list contient la liste des autorisations que vous souhaitez inclure dans le rôle personnalisé, séparées par une virgule. Exemple : iam.roles.get,iam.roles.list.
  • launch-stage indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.

Exemples

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

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

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

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

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

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

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

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

API REST

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

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

  • resource-type : type de ressource dont vous souhaitez répertorier les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • resource-id : ID du projet ou de l'organisation dont vous souhaitez répertorier les rôles personnalisés.
  • role-id : nom du rôle, tel que myCompanyAdmin.
  • role-title : titre lisible du rôle. Exemple :My Company Admin
  • role-description : description du rôle. Exemple :"The company admin role allows company admins to access important resources"
  • permission-1 et permission-2 : autorisations que vous souhaitez inclure dans le rôle. Par exemple, storage.objects.update.
  • launch-stage : étape de lancement actuelle du rôle. Ce champ peut contenir l'une des valeurs suivantes : EAP, ALPHA, BETA, GA, DEPRECATED ou DISABLED.

Méthode HTTP et URL :

POST https://iam.googleapis.com/v1/resource-type/resource-id/roles

Corps JSON de la requête :

{
  "roleId": "role-id",
  "role": {
    "title": "role-title",
    "description": "role-description",
    "includedPermissions": [
      "permission-1",
      "permission-2"
    ],
    "stage": launch-stage
  }
}

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

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

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

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# décrite 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 en langage 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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite 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 en langage Go.

import (
	"context"
	"fmt"
	"io"

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

// createRole creates a custom role.
func createRole(w io.Writer, projectID, name, title, description, stage string, permissions []string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite 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 en langage 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-écriture

Pour actualiser les métadonnées d'une ressource, comme un rôle personnalisé, une approche classique consiste à lire leur état actuel, à mettre à jour les données localement, puis à envoyer les données modifiées en écriture. Cette approche peut provoquer un conflit si deux processus indépendants ou plus tentent de réaliser ces opérations simultanément. Par exemple, si deux propriétaires d'un projet tentent d'apporter des modifications conflictuelles à un rôle en même temps, certaines modifications peuvent échouer. Cloud IAM résout ce problème en utilisant une propriété etag dans les rôles personnalisés. Cette propriété permet de vérifier si le rôle personnalisé a été modifié depuis la dernière requête. Lorsque vous envoyez une requête à Cloud IAM avec une valeur etag, Cloud IAM compare la valeur etag de la requête avec la valeur etag existante associée au rôle personnalisé. Il écrit la modification uniquement si les valeurs etag correspondent.

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

Console

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

    Accéder à la page Rôles

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

  3. Cliquez sur un rôle personnalisé.

  4. Cliquez sur Modifier le rôle.

  5. 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 options pour spécifier la définition actualisée du rôle

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

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

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

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

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

    gcloud iam roles describe role-id --project=project-id
    

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

  • role-id est le nom du rôle à mettre à jour, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-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 actualisée du rôle pour garantir que les modifications de rôle simultanées ne sont pas écrasées.

La commande describe affiche le résultat suivant :

description: role-description
etag: etag-value
includedPermissions:
- permission-1
- permission-2
name: full-role-id
stage: launch-stage
title: role-title

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

  • role-description est une brève description du rôle, par exemple "My custom role description".
  • etag-value est l'identifiant unique de la version actuelle du rôle, par exemple BwVkBkbfr70=.
  • permission-1 et permission-2 sont des autorisations à inclure dans le rôle personnalisé, telles que iam.roles.get.
  • full-role-id est l'ID de rôle complet, y compris les préfixes organizations/, projects/ ou roles/. Par exemple, organizations/123456789012/roles/myCompanyAdmin..
  • launch-stage indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.
  • role-title est un intitulé convivial pour le rôle, par exemple "My Company Admin".

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

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

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

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

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

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

    gcloud iam roles update role-id --project=project-id \
      --file=yaml-file-path
    

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

  • role-id est le nom du rôle à mettre à jour, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.
  • yaml-file-path est le chemin d'accès à l'emplacement de votre fichier YAML contenant la définition actualisée du rôle personnalisé.

Exemples

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

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

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

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

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

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

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

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

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

Chaque partie d'une définition de rôle peut être mise à jour à l'aide d'un indicateur correspondant. Consultez la section gcloud iam roles update pour obtenir la liste de toutes les options possibles.

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 parties de la définition de rôle, exécutez l'une des commandes suivantes :

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

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

    gcloud iam roles update role-id --project=project-id \
      --title=role-title --description=role-description \
      --stage=launch-stage
    

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

  • role-id est le nom du rôle, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.
  • role-title est un intitulé convivial pour le rôle, par exemple "My Company Admin".
  • role-description est une brève description du rôle, par exemple "My custom role description.".
  • launch-stage indique l'étape d'un rôle dans le cycle de lancement, par exemple ALPHA, BETA ou GA.

Exemples

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

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

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

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

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

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

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

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

API REST

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

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

Obligatoire :

  • resource-type : type de ressource dont vous souhaitez répertorier les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • resource-id : ID du projet ou de l'organisation dont vous souhaitez répertorier les rôles personnalisés.
  • full-role-id est l'ID de rôle complet, en incluant les préfixes organizations/, projects/ ou roles/. Exemple : organizations/123456789012/roles/myCompanyAdmin.

Recommandations :

  • etag : identifiant de la version du rôle. Incluez ce champ pour éviter que des modifications simultanées ne soient apportées au rôle.

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

  • role-title : titre lisible du rôle. Exemple :My Company Admin
  • role-description : description du rôle. Exemple :"The company admin role allows company admins to access important resources"
  • permission-1 et permission-2 : autorisations que vous souhaitez inclure dans le rôle. Par exemple, storage.objects.update.
  • launch-stage : étape de lancement actuelle du rôle. Ce champ peut contenir l'une des valeurs suivantes : EAP, ALPHA, BETA, GA, DEPRECATED ou DISABLED.

Méthode HTTP et URL :

PATCH https://iam.googleapis.com/v1/resource-type/resource-id/roles

Corps JSON de la requête :

{
  "roleId": "full-role-id",
  "title": "role-title",
  "description": "role-description",
  "includedPermissions": [
    "permission-1",
    "permission-2"
  ],
  "stage": launch-stage,
  "etag": "etag"
}

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

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

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

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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# décrite 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 en langage 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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite 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 en langage Go.

import (
	"context"
	"fmt"
	"io"

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

// editRole modifies a custom role.
func editRole(w io.Writer, projectID, name, newTitle, newDescription, newStage string, newPermissions []string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite 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 en langage 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. Dans Cloud Console, accédez à la page Rôles.

    Accéder à la page Rôles

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

  3. Sélectionnez votre organisation ou votre projet.

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

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 options pour spécifier la définition actualisée du rôle

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

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

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

    gcloud iam roles update role-id --project=project-id \
      --stage=DISABLED
    

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

  • role-id est le nom du rôle, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.

Exemples

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

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

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

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

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

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

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

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

API REST

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

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

  • resource-type : type de ressource dont vous souhaitez répertorier les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • resource-id : ID du projet ou de l'organisation dont vous souhaitez répertorier les rôles personnalisés.
  • full-role-id est l'ID de rôle complet, en incluant les préfixes organizations/, projects/ ou roles/. Exemple : organizations/123456789012/roles/myCompanyAdmin.

  • etag : identifiant de la version du rôle. Incluez ce champ pour éviter que des modifications simultanées ne soient apportées au rôle.

Méthode HTTP et URL :

PATCH https://iam.googleapis.com/v1/resource/resource-id/roles

Corps JSON de la requête :

{
  "roleId": "full-role-id",
  "stage": DISABLED,
  "etag": "etag"
}

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

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

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

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.

Répertorier les rôles

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

Console

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

Accéder à la page Rôles

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

Commande gcloud

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

Pour obtenir la liste des rôles personnalisés, exécutez l'une des commandes suivantes :

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

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

    gcloud iam roles list --project=project-id
    

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

  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.

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

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

gcloud iam roles list

API REST

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

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

  • resource-type : type de ressource dont vous souhaitez répertorier les rôles personnalisés. Utilisez la valeur projects ou organizations.
  • resource-id : ID du projet ou de l'organisation dont vous souhaitez répertorier les rôles personnalisés.
  • role-view : facultatif. Informations à inclure pour les rôles renvoyés. Pour inclure les autorisations associées aux rôles, définissez ce champ sur FULL. Pour exclure les autorisations associées aux rôles, définissez ce champ sur BASIC. La valeur par défaut est BASIC.
  • page-size : facultatif. Nombre de rôles à inclure dans la réponse. La valeur par défaut est 300 et la valeur maximale est 1 000. Si le nombre d'autorisations est supérieur à la taille de la page, la réponse contient un jeton de pagination qui vous permet de récupérer la page de résultats suivante.
  • next-page-token : facultatif. Jeton de pagination renvoyé dans une réponse précédente de cette méthode. Si spécifié, la liste des rôles commence à la fin de la réponse précédente.

Méthode HTTP et URL :

GET https://iam.googleapis.com/v1/resource-type/resource-id/roles?view=role-view&pageSize=page-size&pageToken=next-page-token

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

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

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

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# décrite 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 en langage 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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite 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 en langage Go.

import (
	"context"
	"fmt"
	"io"

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

// listRoles lists a project's roles.
func listRoles(w io.Writer, projectID string) ([]*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite 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 en langage 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é

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

Console

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

    Accéder à la page Rôles

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

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 de nouvelles liaisons de stratégie IAM.

Pour supprimer un rôle personnalisé, exécutez l'une des commandes suivantes :

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

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

    gcloud iam roles delete role-id --project=project-id
    

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

  • role-id est le nom du rôle, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.

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/myCompanyAdmin
title: My Company Admin
---

API REST

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

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

  • full-role-id est l'ID de rôle complet, en incluant les préfixes organizations/, projects/ ou roles/. Exemple : organizations/123456789012/roles/myCompanyAdmin.

Méthode HTTP et URL :

DELETE https://iam.googleapis.com/v1/full-role-id

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

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

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

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# décrite 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 en langage 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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite 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 en langage Go.

import (
	"context"
	"fmt"
	"io"

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

// deleteRole deletes a custom role.
func deleteRole(w io.Writer, projectID, name string) error {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return fmt.Errorf("iam.NewService: %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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite 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 en langage 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).

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

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

Une fois le rôle définitivement supprimé, 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é

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

Un rôle ne peut être supprimé que pendant sept jours. Après sept jours, il est définitivement supprimé, et toutes les liaisons qui y sont associées le sont également.

Console

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

    Accéder à la page Rôles

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

Commande gcloud

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

Pour annuler la suppression d'un rôle personnalisé, exécutez l'une des commandes suivantes :

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

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

    gcloud iam roles undelete role-id --project=project-id
    

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

  • role-id est le nom du rôle, par exemple myCompanyAdmin.
  • organization-id est l'ID numérique de l'organisation, tel que 123456789012.
  • project-id est le nom du projet, par exemple my-project-id.

Exemples

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

gcloud iam roles undelete myCompanyAdmin --organization=123456789012

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

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

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

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

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

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

API REST

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

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

  • full-role-id est l'ID de rôle complet, en incluant les préfixes organizations/, projects/ ou roles/. Exemple : organizations/123456789012/roles/myCompanyAdmin.

  • etag : identifiant de la version du rôle. Incluez ce champ pour éviter que des modifications simultanées ne soient apportées au rôle.

Méthode HTTP et URL :

POST https://iam.googleapis.com/v1/full-role-id:undelete

Corps JSON de la requête :

{
  "etag": "etag"
}

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

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

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

C#

Avant d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour C# décrite 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 en langage 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 d'essayer l'exemple ci-dessous, suivez la procédure de configuration pour Go décrite 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 en langage Go.

import (
	"context"
	"fmt"
	"io"

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

// undeleteRole restores a deleted custom role.
func undeleteRole(w io.Writer, projectID, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %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 l'exemple ci-dessous, suivez la procédure de configuration pour Python décrite 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 en langage 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

Étapes suivantes