Como ver os papéis atribuíveis a recursos

Mantenha tudo organizado com as coleções Salve e categorize o conteúdo com base nas suas preferências.

Antes de conceder um papel de gerenciamento de identidade e acesso (IAM, na sigla em inglês) a um usuário para um recurso, talvez você queira saber quais papéis estão disponíveis para um determinado recurso.

Antes de começar

  • Ative a IAM API.

    Ative a API

Papéis obrigatórios

Para conseguir a permissão necessária para listar papéis atribuíveis, peça ao administrador que conceda a você o papel de Revisor de segurança (roles/iam.securityReviewer) do IAM no recurso que você quer listar. Para mais informações sobre como conceder papéis, consulte Gerenciar o acesso.

Esse papel predefinido contém as permissões getIamPolicy para todos os tipos de recursos. Para listar os papéis atribuíveis, é preciso ter a permissão getIamPolicy para o recurso em que você quer listar os papéis atribuíveis. Por exemplo, para listar os papéis atribuíveis de um projeto, você precisa da permissão resourcemanager.projects.getIamPolicy. Também é possível conseguir essa permissão com papéis personalizados ou outros papéis predefinidos.

Como entender quais papéis são atribuíveis

Um papel será concedido em um recurso ou sobre ele se contiver permissões para esse tipo de recurso. Por exemplo, o papel storage.admin concede permissões às APIs storage.buckets.get e storage.objects.get. Por isso, pode ser concedido nos tipos de recursos buckets de armazenamento e Objetos de armazenamento.

Os papéis também podem ser concedidos "acima" dos tipos de recursos com permissões definidas. Em outras palavras, os papéis para recursos de nível inferior podem ser concedidos em um recurso que está mais acima na hierarquia de recursos do Google Cloud. Por exemplo, o papel storage.admin também pode ser concedido nos níveis do projeto ou da organização, além dos buckets do Storage.

As permissões concedidas por um papel afetam somente recursos no nível especificado ou abaixo, e não recursos de nível superior ou pares. Além disso, quando um papel é concedido em um recurso, somente as permissões aplicáveis ao recurso fornecido são concedidas, independentemente do nome, da descrição ou de outras permissões do papel. Por exemplo, atribuir o papel resourcemanager.organizationAdmin (que concede a permissão resourcemanager.projects.list) a um usuário no nível do projeto concede somente a ele permissões para esse projeto específico. O usuário não terá permissão para listar ou administrar todos os projetos na organização. Da mesma maneira, atribuir o papel compute.admin a uma instância específica do Compute Engine só concede permissões para essa instância, não para outras no projeto.

Como listar papéis atribuíveis

Antes de listar os papéis que você pode conceder, verifique se o serviço foi ativado no projeto. Se um serviço não foi ativado, os papéis dele não serão retornados.

Console

  1. No console do Google Cloud, abra a página IAM.

    Acessar a página do IAM

  2. Clique no menu suspenso "Selecionar um projeto" na parte superior da página.

  3. Selecione o projeto ou a organização dos papéis que você quer ver.

  4. Clique em CONCEDER ACESSO.

  5. Insira o endereço de e-mail, o domínio ou outro identificador do principal em Principais.

O menu suspenso Selecionar um papel exibe todos os papéis que é possível conceder ao principal neste recurso, inclusive os personalizados.

gcloud CLI

Use o comando gcloud iam list-grantable-roles para retornar uma lista de todos os papéis que podem ser aplicados a determinado recurso.

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

Dependendo do recurso escolhido, um grande número de papéis pode ser retornado. Para limitar os resultados, especifique uma expressão de filtro.

A resposta será similar a esta:

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

O método roles.queryGrantableRoles retorna uma lista de todos os papéis que podem ser concedidos em um recurso.

Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:

  • full-resource-name: um URI que consiste no nome do serviço e no caminho para o recurso. Veja exemplos em Nomes de recursos completos.

Método HTTP e URL:

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

Corpo JSON da solicitação:

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

Para enviar a solicitação, expanda uma destas opções:

Você receberá uma resposta JSON semelhante a esta:

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

Para saber como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API C++ do IAM.

namespace iam = ::google::cloud::iam;
[](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 como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API C# do IAM.


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 como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API Go do IAM.

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

Para saber como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API Java do IAM.

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 como instalar e usar a biblioteca de cliente do IAM, consulte Bibliotecas de cliente do IAM. Para mais informações, consulte a documentação de referência da API Python do IAM.

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(' ')

Nos exemplos acima, o nome completo do recurso é um URI sem esquema, consistindo em um nome de serviço de API compatível com DNS e um caminho de recurso.

Por exemplo, para retornar todos os papéis que possam ser atribuídos em um projeto, use:

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

Os recursos de nível inferior têm um nome totalmente qualificado mais detalhado. Por exemplo, use o seguinte comando para retornar todos os papéis que podem ser atribuídos em uma instância do Compute Engine:

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

A seguir