Visualiza las funciones otorgables en los recursos

Antes de otorgar una función de administración de identidades y accesos (IAM) a un usuario para un recurso, es posible que quieras saber qué funciones se pueden otorgar a un recurso en particular.

Antes de comenzar

  • 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 muestras de .NET de esta página en un entorno de desarrollo local, instala e inicializa gcloud CLI y, luego, configura las credenciales predeterminadas de la aplicación con tus credenciales de usuario.

    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.

    Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    C++

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

    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.

    Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    Go

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

    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.

    Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    Java

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

    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.

    Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    Python

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

    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.

    Si deseas obtener más información, consulta Configura ADC para un entorno de desarrollo local en la documentación de autenticación de Google Cloud.

    REST

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

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

      gcloud init

    Si deseas obtener más información, consulta Autentica para usar REST en la documentación de autenticación de Google Cloud.

Roles obligatorios

Para obtener los permisos que necesitas a fin de generar una lista de los roles que se pueden otorgar, pídele a tu administrador que te otorgue el rol de IAM de revisor de seguridad (roles/iam.securityReviewer) en el recurso para el que deseas generar una lista de los roles que se pueden otorgar. Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

Este rol contiene los permisos getIamPolicy para todos los tipos de recursos. Para generar una lista de los roles que se pueden otorgar, necesitas el permiso getIamPolicy del recurso para el que deseas generar una lista de los roles que se pueden otorgar (por ejemplo, para generar una lista de los roles otorgables de un proyecto, necesitas el permiso resourcemanager.projects.getIamPolicy).

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

Comprende qué funciones se pueden otorgar

Una función es otorgable en un recurso, o por encima de él, si contiene algún permiso para ese tipo de recurso. Por ejemplo, la función storage.admin otorga permisos a las API de storage.buckets.get y storage.objects.get, de modo que se puede otorgar en los tipos de recursos de Depósito de almacenamiento y Objetos de almacenamiento.

Las funciones también se pueden otorgar “por encima” de los tipos de recursos para los que se definen sus permisos. En otras palabras, se pueden otorgar funciones para recursos de nivel inferior en un recurso que es superior en la jerarquía de recursos de Google Cloud. Por ejemplo, la función storage.admin también se puede otorgar a nivel del proyecto o de la organización, además de los Depósitos de almacenamiento.

Los permisos otorgados por una función solo afectan a los recursos en el nivel especificado o inferior; no afectan a los recursos de un nivel superior o de pares. Además, cuando se otorga una función en un recurso, solo se otorgan los permisos aplicables al recurso dado, independientemente del nombre de la función, la descripción o de otros permisos que contenga. Por ejemplo, si asignas la función resourcemanager.organizationAdmin (que otorga el permiso resourcemanager.projects.list) a un usuario en el nivel del proyecto, solo le otorgas permisos para ese proyecto específico. No podrán enumerar o administrar todos los proyectos de la organización. Del mismo modo, si asignas la función compute.admin a una instancia de Compute Engine específica, solo otorgas permisos para esa instancia, no para otras en el proyecto.

Enumera las funciones que se pueden otorgar

Puedes enumerar los roles que se pueden otorgar mediante la consola de Google Cloud, Google Cloud CLI, la API de IAM o las bibliotecas cliente de IAM.

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

Consola

Para ver las funciones otorgables de un proyecto, una organización o una carpeta, haz lo siguiente:

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

    Ir a la página IAM

  2. Haz clic en Seleccionar un proyecto en la parte superior de la página.

  3. Selecciona el proyecto, la carpeta o la organización para la que deseas ver los roles otorgables.

  4. Haz clic en Grant access.

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

Para ver los roles que se pueden otorgar para otros tipos de recursos, haz lo siguiente:

  1. En la consola de Google Cloud, ve a la página en la que se enumera el recurso para el que deseas ver los roles que se pueden otorgar.

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

    Ir a Instancias de VM

  2. Selecciona la casilla de verificación junto al recurso para el que deseas ver los roles que se pueden otorgar.

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

  4. Haz clic en Agregar principal.

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

gcloud

Usa el comando gcloud iam list-grantable-roles para mostrar una lista de todas las funciones que se pueden aplicar a un recurso determinado.

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

Según el recurso deseado, se puede mostrar una gran cantidad de funciones. Para limitar los resultados, puedes especificar una expresión de filtro.

El resultado se verá similar a lo 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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C++.

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

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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM C#.

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


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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Go.

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

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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Java.

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

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 obtener más obtener información sobre cómo instalar y usar la biblioteca cliente de IAM, consulta Bibliotecas cliente de IAM. Para obtener más información, consulta la documentación de referencia de la API de IAM Python.

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

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

Mediante el método roles.queryGrantableRoles, se muestra una lista de todas las funciones que se pueden otorgar en un recurso.

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • FULL_RESOURCE_NAME: Un URI que consiste en el nombre del servicio y la ruta al recurso. Para ver ejemplos, consulta Nombres completos de recursos.

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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

{
  "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 completo del recurso es una URI sin esquema que consiste en un nombre de servicio de API compatible con DNS y una ruta de acceso a recursos.

Por ejemplo, para mostrar todas las funciones que se pueden conceder en un proyecto, usa lo siguiente:

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

Los recursos de nivel inferior tienen un nombre calificado completo más detallado. Por ejemplo, usa lo siguiente para mostrar todas las funciones que se pueden conceder en una instancia de Compute Engine:

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

Próximos pasos