Visualizar as funções atribuíveis nos recursos

Antes de conceder uma função da gestão de identidade e de acesso (IAM) a um utilizador para um recurso, é recomendável saber que funções estão disponíveis para conceder num recurso específico.

Antes de começar

  • Enable the IAM API.

    Enable the API

  • Configurar autenticação.

    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 os .NET exemplos nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as Credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade 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 mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na Google Cloud documentação de autenticação.

    C++

    Para usar os C++ exemplos nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as Credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade 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 mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na Google Cloud documentação de autenticação.

    Ir

    Para usar os Go exemplos nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as Credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade 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 mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na Google Cloud documentação de autenticação.

    Java

    Para usar os Java exemplos nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as Credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade 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 mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na Google Cloud documentação de autenticação.

    Python

    Para usar os Python exemplos nesta página num ambiente de desenvolvimento local, instale e inicialize a CLI gcloud e, em seguida, configure as Credenciais predefinidas da aplicação com as suas credenciais de utilizador.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade 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 mais informações, consulte Configurar o ADC para um ambiente de desenvolvimento local na Google Cloud documentação de autenticação.

    REST

    Para usar os exemplos da API REST nesta página num ambiente de desenvolvimento local, usa as credenciais que fornece à CLI gcloud.

      Instale a CLI Google Cloud.

      Se estiver a usar um fornecedor de identidade (IdP) externo, primeiro tem de iniciar sessão na CLI gcloud com a sua identidade federada.

    Para mais informações, consulte o artigo Autenticar para usar REST na Google Cloud documentação de autenticação.

Funções necessárias

Para receber as autorizações de que precisa para listar as funções atribuíveis, peça ao seu administrador que lhe atribua a função de IAM Revisor de segurança (roles/iam.securityReviewer) no recurso para o qual quer listar as funções atribuíveis. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função contém as autorizações getIamPolicy para todos os tipos de recursos. Para listar funções atribuíveis, precisa da autorização getIamPolicy para o recurso para o qual quer listar funções atribuíveis. Por exemplo, para listar funções atribuíveis para um projeto, precisa da autorização resourcemanager.projects.getIamPolicy .

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Compreender que funções são atribuíveis

Uma função é atribuível num recurso ou acima deste se contiver autorizações para esse tipo de recurso. Por exemplo, a função storage.admin concede autorizações às APIs storage.buckets.get e storage.objects.get, pelo que é atribuível aos tipos de recursos Storage Buckets e Storage Objects.

As funções também podem ser concedidas "acima" dos tipos de recursos para os quais as respetivas autorizações estão definidas. Por outras palavras, as funções para recursos de nível inferior podem ser concedidas num recurso que esteja num nível superior da Google Cloud hierarquia de recursos. Por exemplo, a função storage.admin também pode ser concedida ao nível do projeto ou da organização, além de contentores do Storage.

As autorizações concedidas por uma função só afetam os recursos no nível especificado ou inferior; não afetam os recursos de nível superior ou de pares. Além disso, quando é concedido um papel num recurso, apenas são concedidas autorizações aplicáveis ao recurso em questão, independentemente do nome, da descrição ou de outras autorizações que contenha. Por exemplo, a atribuição da função resourcemanager.organizationAdmin (que concede a autorização resourcemanager.projects.list) a um utilizador ao nível do projeto só lhe concede autorizações para esse projeto específico. Não lhes permite listar nem administrar todos os projetos na organização. Da mesma forma, a atribuição da função compute.admin numa instância específica do Compute Engine só concede autorizações para essa instância e não para outras no projeto.

Funções atribuíveis da ficha

Pode listar as funções atribuíveis através da Google Cloud consola, da CLI do Google Cloud, da API IAM ou das bibliotecas de cliente IAM.

A Google Cloud consola apresenta sempre todas as funções atribuíveis para o recurso que está a ver. A CLI Google Cloud, a API IAM e as bibliotecas cliente apenas listam as funções atribuíveis para APIs ativadas.

Consola

Para ver as funções atribuíveis a um projeto, uma pasta ou uma organização, faça o seguinte:

  1. Na Google Cloud consola, aceda à página IAM.

    Aceda à página IAM

  2. Clique em Selecionar um projeto na parte superior da página.

  3. Selecione o projeto, a pasta ou a organização para os quais quer ver funções atribuíveis.

  4. Clique em Conceder acesso.

  5. Clique em Selecionar uma função. Este menu apresenta todas as funções, incluindo as funções personalizadas, que pode conceder neste recurso.

Para ver as funções atribuíveis para outros tipos de recursos, faça o seguinte:

  1. Na Google Cloud consola, aceda à página que apresenta o recurso para o qual quer ver as funções atribuíveis.

    Por exemplo, para gerir o acesso a uma instância do Compute Engine, aceda à página Instâncias de VM.

    Aceder às instâncias de VM

  2. Selecione a caixa de verificação junto ao recurso para o qual quer ver as funções atribuíveis.

  3. Certifique-se de que o painel de informações está visível. Se não estiver visível, clique em Mostrar painel de informações.

  4. Clique em Adicionar principal.

  5. Clique em Selecionar uma função. Este menu apresenta todas as funções, incluindo quaisquer funções personalizadas, que pode conceder neste recurso.

gcloud

Use o comando gcloud iam list-grantable-roles para devolver uma lista de todas as funções que podem ser aplicadas a um determinado recurso.

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

Consoante o recurso pretendido, pode ser devolvido um grande número de funções. Para limitar os resultados, pode especificar uma expressão de filtro.

O resultado vai ter um aspeto semelhante a:

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

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

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

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.


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 cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Go IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

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

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

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 cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Python IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte a secção Antes de começar.

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

O método roles.queryGrantableRoles devolve uma lista de todas as funções atribuíveis num recurso.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • FULL_RESOURCE_NAME: um URI composto pelo nome do serviço e o caminho para o recurso. Para ver exemplos, consulte o artigo Nomes de recursos completos.

Método HTTP e URL:

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

Corpo JSON do pedido:

{
  "fullResourceName": "FULL_RESOURCE_NAME"
}

Para enviar o seu pedido, expanda uma destas opções:

Deve receber uma resposta JSON semelhante à seguinte:

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

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

Por exemplo, para devolver todas as funções atribuíveis num 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 para devolver todas as funções atribuíveis numa instância do Compute Engine:

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

O que se segue?