Afficher des rôles pouvant être attribués sur des ressources

Avant d'accorder un rôle de gestion de l'authentification et des accès (IAM) à un utilisateur pour une ressource, il est préférable de connaître les rôles disponibles pour une ressource particulière.

Comprendre quels rôles sont attribuables

Un rôle peut être octroyé au niveau d'une ressource ou au niveau supérieur s'il possède des autorisations pour ce type de ressource. Par exemple, le rôle storage.admin accorde des autorisations aux API storage.buckets.get et storage.objects.get. Il peut donc être attribué aux types de ressources buckets de stockage et objets de stockage.

Les rôles peuvent également être octroyés "au-dessus" des types de ressources pour lesquels leurs autorisations sont définies. Autrement dit, vous pouvez attribuer des rôles pour des ressources de niveau inférieur sur une ressource située plus haut dans la hiérarchie des ressources Google Cloud. Par exemple, le rôle storage.admin peut également être attribué au niveau du projet ou de l'organisation, en plus des buckets de stockage.

Les autorisations accordées par un rôle n'affectent que les ressources du niveau spécifié ou de niveau inférieur. Elles n'affectent pas les ressources de niveau supérieur ou homologue. De plus, quand un rôle est accordé sur une ressource, seules les autorisations applicables à la ressource en question sont accordées, indépendamment du nom, de la description et des autres autorisations du rôle. Par exemple, l'attribution du rôle resourcemanager.organizationAdmin (qui accorde l'autorisation resourcemanager.projects.list) à un utilisateur au niveau du projet n'accorde les autorisations que pour ce projet. Cela ne permet pas d'afficher, ni de gérer tous les projets de l'organisation. De la même manière, lorsque vous attribuez le rôle compute.admin sur une instance Compute Engine spécifique, vous n'accordez des autorisations que pour cette instance et pas pour les autres instances du projet.

Afficher les rôles attribuables

Avant de répertorier les rôles que vous pouvez attribuer, assurez-vous que le service est activé dans le projet. Si le service n'est pas activé, ses rôles ne sont pas renvoyés.

Console

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

    Accéder à la page IAM

  2. Cliquez sur le menu déroulant "Sélectionner un projet" en haut de la page.

  3. Sélectionnez le projet ou l'entreprise pour lequel vous souhaitez afficher les rôles.

  4. Cliquez sur Ajouter.

  5. Sous Membres, saisissez l'e-mail ou le nom de domaine du membre.

Le menu déroulant Sélectionner un rôle affiche tous les rôles (y compris tous les rôles personnalisés) que vous pouvez accorder au membre de cette ressource.

gcloud

Exécutez la commande gcloud iam list-grantable-roles pour renvoyer la liste de tous les rôles pouvant être appliqués à une ressource donnée.

gcloud iam list-grantable-roles full-resource-name

En fonction de la ressource de votre choix, un grand nombre de rôles peut être renvoyé. Pour limiter les résultats, vous pouvez spécifier une expression de filtre.

La sortie sera semblable à ce qui suit :

description: Full control of all Compute Engine resources.
name: roles/compute.admin
title: Compute Admin
---
description: Full control of Compute Engine instance resources.
name: roles/compute.instanceAdmin
title: Compute Instance Admin

# Additional results here...

REST

La méthode roles.queryGrantableRoles renvoie une liste de tous les rôles pouvant être attribués à une ressource donnée.

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.

Méthode HTTP et URL :

POST https://iam.googleapis.com/v1/roles:queryGrantableRoles

Corps JSON de la requête :

{
  "fullResourceName": "full-resource-name"
}

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

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

{
  "roles": [
    {
      "name": "roles/compute.admin",
      "title": "Compute Admin",
      "description": "Full control of all Compute Engine resources."
    },
    {
      "name": "roles/compute.instanceAdmin",
      "title": "Compute Instance Admin (beta)",
      "description": "Full control of Compute Engine instance resources."
    }
  ]
}

C#

Avant d'essayer cet exemple, suivez les instructions de configuration pour C# décrites dans le Guide de démarrage rapide de Cloud IAM – Utiliser les bibliothèques clientes. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM 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> ViewGrantableRoles(string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryGrantableRolesRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Roles.QueryGrantableRoles(request).Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine("Title: " + role.Title);
            Console.WriteLine("Name: " + role.Name);
            Console.WriteLine("Description: " + role.Description);
            Console.WriteLine();
        }
        return response.Roles;
    }
}

Go

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

import (
	"context"
	"fmt"
	"io"

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

// viewGrantableRoles lists roles grantable on a resource.
func viewGrantableRoles(w io.Writer, fullResourceName 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.QueryGrantableRolesRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Roles.QueryGrantableRoles(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.QueryGrantableRoles: %v", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Found grantable role: %v\n", role.Name)
	}
	return response.Roles, err
}

Java

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

QueryGrantableRolesRequest request = new QueryGrantableRolesRequest();
request.setFullResourceName(fullResourceName);

QueryGrantableRolesResponse response = service.roles().queryGrantableRoles(request).execute();

for (Role role : response.getRoles()) {
  System.out.println("Title: " + role.getTitle());
  System.out.println("Name: " + role.getName());
  System.out.println("Description: " + role.getDescription());
  System.out.println();
}

Python

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

def view_grantable_roles(full_resource_name):
    roles = service.roles().queryGrantableRoles(body={
        'fullResourceName': full_resource_name
    }).execute()

    for role in roles['roles']:
        if 'title' in role:
            print('Title: ' + role['title'])
        print('Name: ' + role['name'])
        if 'description' in role:
            print('Description: ' + role['description'])
        print(' ')

Dans les exemples ci-dessus, le nom complet de la ressource est un URI sans schéma comprenant un nom de service d'API et un chemin d'accès à la ressource compatibles avec DNS.

Par exemple, pour renvoyer tous les rôles pouvant être attribués à un projet, utilisez :

//cloudresourcemanager.googleapis.com/projects/project-id

Les ressources de niveau inférieur ont un nom complet plus détaillé. Par exemple, utilisez la commande suivante pour renvoyer tous les rôles attribuables sur une instance Compute Engine :

//compute.googleapis.com/projects/project-id/zones/zone-name/instances/instance-id

Étape suivante