Ver los roles que se pueden conceder en los recursos

Antes de asignar un rol de Gestión de Identidades y Accesos (IAM) a un usuario para un recurso, puede que quieras saber qué roles se pueden asignar a un recurso concreto.

Antes de empezar

  • Enable the IAM API.

    Enable the API

  • Configura la autenticación.

    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#

    Para usar las .NET muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación. Google Cloud

    C++

    Para usar las C++ muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación. Google Cloud

    Go

    Para usar las Go muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación. Google Cloud

    Java

    Para usar las Java muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación. Google Cloud

    Python

    Para usar las Python muestras de esta página en un entorno de desarrollo local, instala e inicializa la CLI de gcloud y, a continuación, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

      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.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    Para obtener más información, consulta Configurar ADC en un entorno de desarrollo local en la documentación de autenticación. Google Cloud

    REST

    Para usar las muestras de la API REST de esta página en un entorno de desarrollo local, debes usar las credenciales que proporciones a la CLI de gcloud.

      Instala Google Cloud CLI.

      Si utilizas un proveedor de identidades (IdP) externo, primero debes iniciar sesión en la CLI de gcloud con tu identidad federada.

    Para obtener más información, consulta el artículo Autenticación para usar REST de la documentación sobre autenticación de Google Cloud .

Roles obligatorios

Para obtener los permisos que necesitas para enumerar los roles que se pueden conceder, pide a tu administrador que te conceda el rol de gestión de identidades y accesos Revisor de seguridad (roles/iam.securityReviewer) en el recurso para el que quieras enumerar los roles que se pueden conceder. Para obtener más información sobre cómo conceder roles, consulta el artículo Gestionar el acceso a proyectos, carpetas y organizaciones.

Este rol contiene los permisos getIamPolicy de todos los tipos de recursos. Para enumerar los roles que se pueden conceder, necesitas el permiso getIamPolicy para el recurso del que quieras enumerar los roles que se pueden conceder. Por ejemplo, para enumerar los roles que se pueden conceder de un proyecto, necesitas el permiso resourcemanager.projects.getIamPolicy.

También puedes obtener estos permisos con roles personalizados u otros roles predefinidos.

Información sobre los roles que se pueden conceder

Un rol se puede conceder en un recurso o en un nivel superior si contiene algún permiso para ese tipo de recurso. Por ejemplo, el rol storage.admin concede permisos a las APIs storage.buckets.get y storage.objects.get, por lo que se puede asignar a los tipos de recursos Segmentos de almacenamiento y Objetos de almacenamiento.

Los roles también se pueden conceder "por encima" de los tipos de recursos para los que se definen sus permisos. Es decir, los roles de los recursos de nivel inferior se pueden asignar a un recurso que esté en un nivel superior de la Google Cloud jerarquía de recursos. Por ejemplo, el rol storage.admin también se puede asignar a nivel de proyecto o de organización, además de a segmentos de almacenamiento.

Los permisos concedidos por un rol solo afectan a los recursos del nivel especificado o inferior. No afectan a los recursos de nivel superior ni a los recursos del mismo nivel. Además, cuando se concede un rol en un recurso, solo se conceden los permisos aplicables al recurso en cuestión, independientemente del nombre, la descripción u otros permisos que contenga el rol. Por ejemplo, si asignas el rol resourcemanager.organizationAdmin (que concede el permiso resourcemanager.projects.list) a un usuario a nivel de proyecto, solo tendrá permisos para ese proyecto concreto. No les permitirá enumerar ni administrar todos los proyectos de la organización. Del mismo modo, si asignas el rol compute.admin a una instancia de Compute Engine específica, solo se concederán permisos para esa instancia, no para otras del proyecto.

Listar roles que se pueden conceder

Puedes consultar la lista de roles que se pueden asignar mediante la Google Cloud consola, la CLI de Google Cloud, la API de gestión de identidades y accesos o las bibliotecas de cliente de gestión de identidades y accesos.

La consola siempre muestra todos los roles que se pueden conceder para el recurso que estás viendo. Google Cloud La CLI de Google Cloud, la API IAM y las bibliotecas de cliente solo muestran los roles que se pueden conceder a las APIs habilitadas.

Consola

Para ver los roles que se pueden asignar a un proyecto, una carpeta o una organización, haz lo siguiente:

  1. En la consola, ve a la página IAM. Google Cloud

    Ir a la página de gestión de identidades y accesos

  2. En la parte superior de la página, haz clic en Selecciona un proyecto.

  3. Selecciona el proyecto, la carpeta o la organización para los que quieras ver los roles que se pueden asignar.

  4. Haz clic en Conceder acceso.

  5. Haz clic en Selecciona un rol. En este menú se muestran todos los roles, incluidos los personalizados, que puedes asignar en este recurso.

Para ver los roles que se pueden conceder a otros tipos de recursos, sigue estos pasos:

  1. En la consola de Google Cloud , ve a la página que muestra el recurso del que quieres ver los roles que se pueden conceder.

    Por ejemplo, para gestionar el acceso a una instancia de Compute Engine, ve a la página Instancias de VM.

    Ir a instancias de VM

  2. Seleccione la casilla situada junto al recurso para el que quiera ver los roles que se pueden conceder.

  3. Asegúrate de que el panel de información esté visible. Si no aparece, haz clic en Mostrar panel de información.

  4. Haz clic en Añadir principal.

  5. Haz clic en Selecciona un rol. En este menú se muestran todos los roles, incluidos los personalizados, que puedes asignar en este recurso.

gcloud

Usa el comando gcloud iam list-grantable-roles para obtener una lista de todos los roles que se pueden aplicar a un recurso determinado.

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

En función del recurso deseado, se puede devolver un gran número de roles. Para limitar los resultados, puedes especificar una expresión de filtro.

La salida será similar a la siguiente:

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

Para saber cómo instalar y usar la biblioteca de cliente de IAM, consulta Bibliotecas de cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API C++ de gestión de identidades y accesos.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

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#

Para saber cómo instalar y usar la biblioteca de cliente de IAM, consulta Bibliotecas de cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API C# de gestión de identidades y accesos.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.


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

Para saber cómo instalar y usar la biblioteca de cliente de IAM, consulta Bibliotecas de cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API Go de gestión de identidades y accesos.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

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

Para saber cómo instalar y usar la biblioteca de cliente de IAM, consulta Bibliotecas de cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API Java de gestión de identidades y accesos.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

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

Para saber cómo instalar y usar la biblioteca de cliente de IAM, consulta Bibliotecas de cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API Python de gestión de identidades y accesos.

Para autenticarte en IAM, configura las credenciales predeterminadas de la aplicación. Para obtener más información, consulta la sección Antes de empezar.

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

El método roles.queryGrantableRoles devuelve una lista de todos los roles que se pueden conceder en un recurso.

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

Método HTTP y URL:

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

Cuerpo JSON de la solicitud:

{
  "fullResourceName": "FULL_RESOURCE_NAME"
}

Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

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

En los ejemplos anteriores, el nombre de recurso completo es un URI sin esquema que consta de un nombre de servicio de API compatible con DNS y una ruta de recurso.

Por ejemplo, para devolver todos los roles que se pueden conceder en un proyecto, usa lo siguiente:

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

Los recursos de nivel inferior tienen un nombre completo más detallado. Por ejemplo, usa lo siguiente para devolver todos los roles que se pueden conceder en una instancia de Compute Engine:

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

Siguientes pasos