Afficher les 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.

Avant de commencer

  • Enable the IAM API.

    Enable the API

  • Configurez l'authentification.

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    In the Google Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Google Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

    C#

    Pour utiliser les exemples .NET de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

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

    C++

    Pour utiliser les exemples C++ de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

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

    Go

    Pour utiliser les exemples Go de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

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

    Java

    Pour utiliser les exemples Java de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

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

    Python

    Pour utiliser les exemples Python de cette page dans un environnement de développement local, installez et initialisez gcloud CLI, puis configurez le service Identifiants par défaut de l'application à l'aide de vos identifiants utilisateur.

    1. Install the Google Cloud CLI.
    2. To initialize the gcloud CLI, run the following command:

      gcloud init
    3. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

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

    REST

    Pour utiliser les exemples d'API REST de cette page dans un environnement de développement local, vous devez utiliser les identifiants que vous fournissez à gcloud CLI.

      Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init

    Pour en savoir plus, consultez la section S'authentifier pour utiliser REST dans la documentation sur l'authentification Google Cloud.

Rôles requis

Pour obtenir les autorisations dont vous avez besoin pour lister les rôles pouvant être attribués, demandez à votre administrateur de vous attribuer le rôle IAM Examinateur de sécurité (roles/iam.securityReviewer) sur la ressource pour laquelle vous souhaitez lister les rôles attribuables. Pour en savoir plus sur l'attribution de rôles, consultez la page Gérer l'accès aux projets, aux dossiers et aux organisations.

Ce rôle contient les autorisations getIamPolicy pour tous les types de ressources. Pour lister les rôles pouvant être attribués, vous devez disposer de l'autorisation getIamPolicy pour la ressource pour laquelle vous souhaitez lister les rôles attribuables. Par exemple, pour lister les rôles attribuables pour un projet, vous devez disposer de l'autorisation resourcemanager.projects.getIamPolicy.

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

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

Vous pouvez répertorier les rôles à attribuer à l'aide de la console Google Cloud, de Google Cloud CLI, de l'API IAM ou des bibliothèques clientes IAM.

La console Google Cloud répertorie toujours tous les rôles pouvant être attribués pour la ressource que vous consultez. Google Cloud CLI, l'API IAM et les bibliothèques clientes ne répertorient que les rôles pouvant être attribués pour les API activées.

Console

Pour afficher les rôles pouvant être attribués pour un projet, un dossier ou une organisation, procédez comme suit :

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

    Accéder à la page IAM

  2. Cliquez sur Sélectionnez un projet en haut de la page.

  3. Sélectionnez le projet, le dossier ou l'organisation dont vous souhaitez afficher les rôles pouvant être attribués.

  4. Cliquez sur Accorder l'accès.

  5. Cliquez sur Select a role (Sélectionner un rôle). Ce menu affiche tous les rôles, y compris tous les rôles personnalisés, que vous pouvez attribuer sur cette ressource.

Pour afficher les rôles pouvant être attribués pour d'autres types de ressources, procédez comme suit :

  1. Dans la console Google Cloud, accédez à la page répertoriant la ressource pour laquelle vous souhaitez afficher les rôles pouvant être attribués.

    Par exemple, pour gérer l'accès à une instance Compute Engine, accédez à la page Instances de VM.

    Accéder à la page Instances de VM

  2. Cochez la case située à côté de la ressource pour laquelle vous souhaitez afficher les rôles pouvant être attribués.

  3. Assurez-vous que le panneau d'informations est visible. S'il n'est pas visible, cliquez sur Afficher le panneau d'informations.

  4. Cliquez sur  Ajouter un compte principal.

  5. Cliquez sur Select a role (Sélectionner un rôle). Ce menu affiche tous les rôles, y compris tous les rôles personnalisés, que vous pouvez attribuer sur 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...

C++

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM C++.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

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

C#

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM C#.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.


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

public partial class CustomRoles
{
    public static IList<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

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Go.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

import (
	"context"
	"fmt"
	"io"

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

// 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: %w", err)
	}

	request := &iam.QueryGrantableRolesRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Roles.QueryGrantableRoles(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.QueryGrantableRoles: %w", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Found grantable role: %v\n", role.Name)
	}
	return response.Roles, err
}

Java

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Java.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

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

Pour savoir comment installer et utiliser la bibliothèque cliente pour IAM, consultez la page Bibliothèques clientes IAM. Pour en savoir plus, consultez la documentation de référence de l'API Cloud IAM Python.

Pour vous authentifier auprès d'IAM, configurez le service Identifiants par défaut de l'application. Pour plus d'informations, consultez la section Avant de commencer.

def view_grantable_roles(full_resource_name: str) -> None:
    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(" ")

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."
    }
  ]
}

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