Como ver os papéis atribuíveis a recursos

Antes de atribuir um papel do IAM a um usuário de um recurso, conheça os papéis disponíveis para essa tarefa.

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

Um papel é 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 Intervalos 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 é maior na hierarquia de recursos do GCP. Por exemplo, o papel storage.admin também pode ser concedido nos níveis do projeto ou da organização, além dos Intervalos 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, se você atribuir o papel resourcemanager.organizationAdmin (que concede a permissão resourcemanager.projects.list) a um usuário envolvido no projeto, serão concedidas permissões somente 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 forma, se você atribuir o papel compute.admin a uma instância específica do Google Compute Engine, serão concedidas permissões somente 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. Abra a página "IAM" no Console do GCP.

    Abrir 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 Adicionar.
  5. Insira o e-mail ou domínio do membro em Membros.

O menu suspenso Selecionar um papel exibe todos os papéis que você pode conceder ao membro neste recurso, inclusive os personalizados.

COMANDO GCLOUD

Use o comando gcloud iam list-grantable-roles para retornar uma lista de todos os papéis que podem ser aplicados a um 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.

O resultado será similar a este:

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 API

Use QueryGrantableRoles para retornar uma lista de todos os papéis que podem ser atribuídos em um recurso.

Solicitação:

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

Corpo:

{
    "fullResourceName": [FULL-RESOURCE-NAME]
}

Resposta:

{
    "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."
        }
        // Additional results here...
    ]
}

C#

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para 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

Antes de testar este exemplo, siga as instruções de configuração do Go no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para Go.

import (
	"context"
	"fmt"
	"io"

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

// viewGrantableRoles lists roles grantable on a resource.
func viewGrantableRoles(w io.Writer, fullResourceName string) ([]*iam.Role, error) {
	client, err := google.DefaultClient(context.Background(), iam.CloudPlatformScope)
	if err != nil {
		return nil, fmt.Errorf("google.DefaultClient: %v", err)
	}
	service, err := iam.New(client)
	if err != nil {
		return nil, fmt.Errorf("iam.New: %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

Antes de testar este exemplo, siga as instruções de configuração do C# no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API Cloud IAM 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

Antes de testar este exemplo, siga as instruções de configuração do Python no Guia de início rápido do Cloud IAM: como usar as bibliotecas de cliente. Para mais informações, consulte a documentação de referência da API do Cloud IAM para 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'])
        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]

Para saber mais sobre como nomes de recursos completos são construídos, consulte o artigo Nomes de recursos e a documentação de referência do serviço de API para que você quer receber papéis para concessão.

A seguir

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud IAM