Criar e gerenciar funções personalizadas

Nesta página, descrevemos como criar e gerenciar papéis personalizados de gerenciamento de identidade e acesso (IAM). O gerenciamento de papéis inclui modificar, desativar, listar, excluir e cancelar a exclusão de papéis.

Antes de começar

  • Enable the IAM API.

    Enable the API

  • Configure a 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 exemplos .NET desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud.

    C++

    Para usar os exemplos C++ desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud.

    Go

    Para usar os exemplos Go desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud.

    Java

    Para usar os exemplos Java desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud.

    Python

    Para usar os exemplos Python desta página em um ambiente de desenvolvimento local, instale e inicialize o gcloud CLI e e configure o Application Default Credentials com suas credenciais de usuário.

    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.

    Para mais informações, consulte Configurar a autenticação para um ambiente de desenvolvimento local na documentação de autenticação do Google Cloud.

    REST

    Para usar as amostras da API REST nesta página em um ambiente de desenvolvimento local, use as credenciais fornecidas para gcloud CLI.

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

      gcloud init

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

  • Entenda a hierarquia de recursos do Google Cloud.

  • Leia Noções básicas sobre papéis personalizados do IAM.

Funções exigidas

Para conseguir as permissões necessárias para criar e gerenciar papéis personalizados, peça ao administrador que conceda a você os seguintes papéis do IAM:

Para mais informações sobre a concessão de papéis, consulte Gerenciar o acesso a projetos, pastas e organizações.

Também é possível conseguir as permissões necessárias por meio de papéis personalizados ou de outros papéis predefinidos.

Ver as permissões disponíveis para projetos, pastas e organizações

É possível criar papéis personalizados para uma organização inteira ou para um projeto específico dessa organização. As permissões disponíveis para papéis personalizados dependem de onde o papel é criado. Por exemplo, se uma permissão só pode ser usada no nível da organização, ela não pode ser incluída em um papel personalizado no nível do projeto.

Para verificar quais permissões estão disponíveis para os papéis personalizados no nível da organização e do projeto, use a CLI gcloud ou a API de gerenciamento de identidade e acesso para listar as permissões disponíveis em uma organização ou projeto específico. Por exemplo, é possível conseguir todas as permissões disponíveis para papéis personalizados criados no projeto.

Algumas permissões podem não estar visíveis para você ou utilizáveis em um papel personalizado, mesmo que sejam suportadas por papéis personalizados. Por exemplo, uma permissão pode não estar disponível para uso em papéis personalizados se você não tiver ativado a API para o serviço.

Para saber mais sobre as permissões que podem ser adicionadas aos papéis personalizados, consulte Permissões compatíveis.

gcloud

  1. 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.

  2. Use o comando gcloud iam list-testable-permissions para receber uma lista de permissões disponíveis para papéis personalizados em um projeto ou uma organização específica. A resposta lista as permissões que podem ser usadas em papéis personalizados para esse projeto ou organização.

    Para listar as permissões disponíveis em papéis personalizados de um projeto ou organização, execute este comando:

    gcloud iam list-testable-permissions FULL_RESOURCE_NAME \
        --filter="customRolesSupportLevel!=NOT_SUPPORTED"

    Substitua FULL_RESOURCE_NAME por um dos seguintes valores:

    • Projeto: //cloudresourcemanager.googleapis.com/projects/PROJECT_ID (por exemplo, //cloudresourcemanager.googleapis.com/projects/my-project)

    • Organização: //cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID (por exemplo, //cloudresourcemanager.googleapis.com/organizations/123456789012)

    Os resultados indicam se cada permissão é compatível com papéis personalizados. As permissões que não têm um campo customRolesSupportLevel são totalmente compatíveis.

    O comando list-testable-permissions pode retornar centenas de resultados. Este exemplo parcial mostra o formato de cada resultado:

    ---
    name: appengine.applications.create
    stage: GA
    ---
    customRolesSupportLevel: TESTING
    name: appengine.applications.disable
    stage: GA
    ---
    name: appengine.applications.get
    stage: GA
    ---
    name: appengine.applications.update
    stage: GA
    ---
    name: appengine.instances.delete
    stage: GA
    ---
    name: appengine.instances.get
    stage: GA
    ---
    

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& resource) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::QueryTestablePermissionsRequest request;
  request.set_full_resource_name(resource);
  int count = 0;
  for (auto& permission : client.QueryTestablePermissions(request)) {
    if (!permission) throw std::move(permission).status();
    std::cout << "Permission successfully retrieved: " << permission->name()
              << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No testable permissions 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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte 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<Permission> QueryTestablePermissions(
        string fullResourceName)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var request = new QueryTestablePermissionsRequest
        {
            FullResourceName = fullResourceName
        };
        var response = service.Permissions.QueryTestablePermissions(request)
            .Execute();
        foreach (var p in response.Permissions)
        {
            Console.WriteLine(p.Name);
        }
        return response.Permissions;
    }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import (
	"context"
	"fmt"
	"io"

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

// queryTestablePermissions lists testable permissions on a resource.
func queryTestablePermissions(w io.Writer, fullResourceName string) ([]*iam.Permission, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	request := &iam.QueryTestablePermissionsRequest{
		FullResourceName: fullResourceName,
	}
	response, err := service.Permissions.QueryTestablePermissions(request).Do()
	if err != nil {
		return nil, fmt.Errorf("Permissions.QueryTestablePermissions: %w", err)
	}
	for _, p := range response.Permissions {
		fmt.Fprintf(w, "Found permissions: %v", p.Name)
	}
	return response.Permissions, nil
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.cloud.iam.admin.v1.IAMClient.QueryTestablePermissionsPagedResponse;
import com.google.iam.admin.v1.QueryTestablePermissionsRequest;
import java.io.IOException;

/** View available permissions in a project. */
public class QueryTestablePermissions {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    // Full resource names can take one of the following forms:
    // cloudresourcemanager.googleapis.com/projects/PROJECT_ID
    // cloudresourcemanager.googleapis.com/organizations/NUMERIC_ID
    String fullResourceName = "your-full-resource-name";

    queryTestablePermissions(fullResourceName);
  }

  public static void queryTestablePermissions(String fullResourceName) throws IOException {
    QueryTestablePermissionsRequest queryTestablePermissionsRequest =
        QueryTestablePermissionsRequest.newBuilder().setFullResourceName(fullResourceName).build();

    try (IAMClient iamClient = IAMClient.create()) {
      QueryTestablePermissionsPagedResponse queryTestablePermissionsPagedResponse =
          iamClient.queryTestablePermissions(queryTestablePermissionsRequest);
      queryTestablePermissionsPagedResponse
          .iterateAll()
          .forEach(permission -> System.out.println(permission.getName()));
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from typing import List

from google.cloud import resourcemanager_v3
from google.iam.v1 import iam_policy_pb2, policy_pb2


def query_testable_permissions(
    project_id: str, permissions: List[str]
) -> policy_pb2.Policy:
    """
    Tests IAM permissions of the caller.

    project_id: ID or number of the Google Cloud project you want to use.
    """

    client = resourcemanager_v3.ProjectsClient()
    request = iam_policy_pb2.TestIamPermissionsRequest()
    request.resource = f"projects/{project_id}"
    request.permissions.extend(permissions)

    permissions_reponse = client.test_iam_permissions(request)
    print(permissions_reponse)
    return permissions_reponse.permissions

REST

O método permissions.queryTestablePermissions lista as permissões disponíveis em uma organização ou um projeto.

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.
  • PAGE_SIZE: opcional. O número de permissões a serem incluídas na resposta. O valor padrão é 100, e o valor máximo é 1.000. Se o número de permissões for maior que o tamanho da página, a resposta conterá um token de paginação que é possível usar para recuperar a próxima página de resultados.
  • NEXT_PAGE_TOKEN: opcional. O token de paginação retornado em uma resposta anterior desse método. Se especificado, a lista de permissões testáveis começará onde a resposta anterior terminou.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/permissions:queryTestablePermissions

Corpo JSON da solicitação:

{
  "fullResourceName": "FULL_RESOURCE_NAME"
  "pageSize": PAGE_SIZE,
  "pageToken": "NEXT_PAGE_TOKEN"
}

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

A resposta contém a lista de permissões.

{
  "permissions": [
    {
      "name": "iam.serviceAccountKeys.create",
      "stage": "GA"
    },
    {
      "name": "iam.serviceAccountKeys.delete",
      "stage": "GA"
    },
    {
      "name": "iam.serviceAccountKeys.get",
      "stage": "GA"
    }
  ],
  "nextPageToken": "CgoHBajEfjUDQyABEPaIv5vIiMDTVhgDIhtpYW0uc2VydmljZUFjY291bnRLZXlzLmxpc3Q"
}

acessar os metadados do papel

Antes de criar um papel personalizado, consulte os metadados dos papéis predefinidos e personalizados. Esses metadados incluem o código e as permissões do papel. Visualize os metadados usando o console do Google Cloud ou a API IAM.

Para visualizar os metadados do papel, use um dos métodos abaixo:

Console

  1. No console do Google Cloud, abra a página Papéis.

    Acessar a página "Papéis"

  2. Selecione a organização ou o projeto na lista suspensa na parte superior da página.

  3. Marque a caixa de seleção de um ou mais papéis para visualizar as permissões. O painel do lado direito exibirá as permissões deles, se houver.

Os ícones na coluna Tipo indicam se é um papel personalizado ou predefinido

Para procurar todos os papéis com uma permissão específica, na parte superior da lista "Papéis", digite o nome da permissão na caixa Filtro.

gcloud

  1. 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.

  2. Use o comando gcloud iam roles describe para visualizar os metadados de papéis predefinidos e personalizados.

    Para visualizar os metadados de um papel predefinido, execute o seguinte comando:

    gcloud iam roles describe ROLE_ID

    ROLE_ID é o ID do papel. Os papéis predefinidos incluem o prefixo role nos IDs. Por exemplo, roles/iam.roleViewer.

    O exemplo a seguir demonstra a saída do comando describe quando executado no papel predefinido roles/iam.roleViewer:

    gcloud iam roles describe roles/iam.roleViewer

    description: Read access to all custom roles in the project.
    etag: AA==
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - resourcemanager.projects.get
    - resourcemanager.projects.getIamPolicy
    name: roles/iam.roleViewer
    stage: GA
    title: Role Viewer

    Para visualizar os metadados de um papel personalizado, execute um dos seguintes comandos:

    • Para visualizar os metadados de um papel personalizado criado no nível da organização, execute o seguinte comando:

      gcloud iam roles describe --organization=ORGANIZATION_ID ROLE_ID
    • Para visualizar os metadados de um papel personalizado criado no nível do projeto, execute o seguinte comando:

      gcloud iam roles describe --project=PROJECT_ID ROLE_ID

    Cada valor do marcador é descrito a seguir:

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    • ROLE_ID é o ID do papel, excluindo qualquer prefixo como projects/, organizations/ ou roles/. Por exemplo, myCompanyAdmin.

    Para saber mais, consulte a documentação de referência para gcloud iam roles describe.

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::GetRoleRequest request;
  request.set_name(name);
  auto response = client.GetRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully retrieved: " << response->DebugString()
            << "\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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role GetRole(string name)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = service.Roles.Get(name).Execute();
        Console.WriteLine(role.Name);
        Console.WriteLine(String.Join(", ", role.IncludedPermissions));
        return role;
    }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import (
	"context"
	"fmt"
	"io"

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

// getRole gets role metadata.
func getRole(w io.Writer, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	role, err := service.Roles.Get(name).Do()
	if err != nil {
		return nil, fmt.Errorf("Roles.Get: %w", err)
	}
	fmt.Fprintf(w, "Got role: %v\n", role.Name)
	for _, permission := range role.IncludedPermissions {
		fmt.Fprintf(w, "Got permission: %v\n", permission)
	}
	return role, nil
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.GetRoleRequest;
import com.google.iam.admin.v1.Role;
import java.io.IOException;

/** Get role metadata. Specifically, printing out role permissions. */
public class GetRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    String roleId = "a unique identifier (e.g. testViewer)";

    getRole(roleId);
  }

  public static void getRole(String roleId) throws IOException {
    GetRoleRequest getRoleRequest = GetRoleRequest.newBuilder().setName(roleId).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role role = iamClient.getRole(getRoleRequest);
      role.getIncludedPermissionsList().forEach(permission -> System.out.println(permission));
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from google.api_core.exceptions import NotFound
from google.cloud.iam_admin_v1 import GetRoleRequest, IAMClient, Role


def get_role(project_id: str, role_id: str) -> Role:
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    request = GetRoleRequest(name=name)
    try:
        role = client.get_role(request)
        print(f"Retrieved role: {role_id}: {role}")
        return role
    except NotFound:
        raise f"Role with id [{role_id}] not found, take some actions"

REST

O método roles.get recebe a definição de um papel.

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

  • ROLE_NAME: o nome completo do papel, incluindo qualquer prefixo organizations/, projects/ ou roles/. Por exemplo: organizations/123456789012/roles/myCompanyAdmin

Método HTTP e URL:

GET https://iam.googleapis.com/v1/ROLE_NAME

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

A resposta contém a definição do papel.

{
  "name": "projects/my-project/roles/customRole",
  "title": "My Custom Role",
  "description": "My custom role description.",
  "includedPermissions": [
    "storage.buckets.get",
    "storage.buckets.list"
  ],
  "etag": "BwWiPg2fmDE="
}

Criar um papel personalizado

É possível criar um papel personalizado no nível do projeto ou da organização.

Um papel personalizado no nível da organização pode incluir qualquer uma das permissões do IAM com suporte a papéis personalizados. Um papel personalizado no nível do projeto pode conter qualquer permissão compatível, exceto as permissões que só podem ser usadas no nível da organização ou da pasta, como resourcemanager.organizations.get. Se você tentar adicionar essas permissões a um papel personalizado no nível do projeto, uma mensagem de erro será exibida:

Console

A seguinte mensagem de aviso é exibida: "Não aplicável a papéis personalizados para envolvidos no projeto". A permissão será automaticamente desmarcada na lista de permissões incluídas para você prosseguir com a criação do papel.

gcloud

A seguinte mensagem de erro é retornada: INVALID_ARGUMENT: Permission PERMISSION is not valid. O papel personalizado não será criado até que você remova a permissão da definição do papel e tente a operação novamente.

API REST

A mensagem de erro a seguir é retornada: Permission PERMISSION is not valid, com um código de erro HTTP 400 e um status de INVALID_ARGUMENT. O papel personalizado não será criado até que você remova a permissão da definição do papel e tente a operação novamente.

Cada papel personalizado pode conter até 3.000 permissões. Além disso, o tamanho total máximo do título, da descrição e dos nomes de permissão de um papel personalizado é de 64 KB. Caso precise criar um maior, é possível dividir as permissões em vários papéis personalizados. Escolha títulos que mostrem a relação entre os papéis personalizados, como Custom Admin (1 of 2) e Custom Admin (2 of 2).

Cada papel personalizado pode ter um estágio de lançamento. A maior parte dos estágios de lançamento é informativa e ajuda a monitorar se cada papel está pronto para uso geral. Além disso, a etapa de lançamento DISABLED permite desativar um papel personalizado. Para mais informações sobre as etapas de lançamento, consulte Como testar e implantar.

Console

Alguns papéis predefinidos têm permissões com uso suspenso ou não permitidas em papéis personalizados. Se você tentar criar um papel personalizado com base em um desses papéis predefinidos, esse papel omitirá as permissões obsoletas e restritas.

Para criar um papel personalizado do zero:

  1. No console do Google Cloud, abra a página Papéis.

    Acessar a página "Papéis"

  2. Usando a lista suspensa na parte superior da página, selecione a organização ou o projeto em que você quer criar um papel.

  3. Clique em Criar papel.

  4. Insira um Título, uma Descrição, um ID e a Fase de lançamento do papel para o papel. Após a criação do papel, não é possível alterar o nome dele.

  5. Clique em Adicionar permissões.

  6. Selecione as permissões que você quer incluir no papel e clique em Adicionar permissões. Use as listas suspensas Todos os serviços e Todos os tipos para filtrar e selecionar permissões por serviço e tipo.

Para criar um papel personalizado com base em um papel predefinido atual, siga estas etapas:

  1. No console do Google Cloud, abra a página Papéis.

    Acessar a página "Papéis"

  2. Selecione a organização ou o projeto em que você quer criar um papel.
  3. Selecione os papéis em que você quer basear o novo papel personalizado.
  4. Clique em Criar papel a partir da seleção.
  5. Insira um Título, uma Descrição, um ID e a Fase de lançamento do papel para o papel. Após a criação do papel, não é possível alterar o nome dele.
  6. Desmarque as permissões que quer excluir do papel.
  7. Clique em Adicionar permissões para incluir permissões.
  8. Clique em Criar.

gcloud

  1. 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.

  2. Use o comando gcloud iam roles create para criar novos papéis personalizados. Ele pode ser usado de duas maneiras:

    • Com o fornecimento de um arquivo YAML que tenha a definição do papel.

    • Com o uso de sinalizações para especificar a definição do papel.

    Ao criar um papel personalizado, especifique se ele será aplicado ao nível da organização ou do projeto usando as flags --organization=ORGANIZATION_ID ou --project=PROJECT_ID. Nos exemplos abaixo, são criados papéis personalizados no nível do projeto.

    Um papel personalizado pode conter apenas permissões compatíveis com papéis personalizados. Se o papel personalizado tiver outras permissões, o comando falhará.

    Para criar um papel personalizado usando um arquivo YAML:

    Crie um arquivo YAML que tenha a definição do papel personalizado. É preciso que o arquivo seja estruturado da seguinte maneira:

    title: ROLE_TITLE
    description: ROLE_DESCRIPTION
    stage: LAUNCH_STAGE
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2

    Cada valor do marcador é descrito a seguir:

    • ROLE_TITLE é um título intuitivo para o papel, como "My Company Admin".

    • ROLE_DESCRIPTION é uma breve descrição do papel, como "My custom role description".

    • LAUNCH_STAGE indica o estágio de um papel no ciclo de vida do lançamento, como ALPHA, BETA ou GA.

    • PERMISSION_1 e PERMISSION_2 são permissões a serem incluídas no papel personalizado, como iam.roles.get. Não é possível usar caracteres curinga (*) em nomes de permissão.

    Salve o arquivo YAML e execute um dos seguintes comandos:

    • Para criar um papel personalizado no nível da organização, execute o seguinte comando:

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • Para criar um papel personalizado no nível do projeto, execute o seguinte comando:

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    • YAML_FILE_PATH é o caminho do local do arquivo YAML que contém a definição do papel personalizado.

    Exemplos

    No arquivo YAML de exemplo a seguir, demonstramos como criar uma definição de papel:

    title: "My Company Admin"
    description: "My custom role description."
    stage: "ALPHA"
    includedPermissions:
    - iam.roles.get
    - iam.roles.list

    O exemplo a seguir demonstra como criar um papel no nível da organização usando o arquivo YAML:

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

    Se o papel for criado, a saída do comando será semelhante a esta:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    O exemplo a seguir demonstra como criar um papel no nível do projeto usando o arquivo YAML:

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

    Se o papel for criado, a saída do comando será semelhante a esta:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Para criar um papel personalizado usando sinalizações:

    Execute um dos seguintes comandos:

    • Para criar um papel personalizado no nível da organização, execute o seguinte comando:

      gcloud iam roles create ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE
    • Para criar um papel personalizado no nível do projeto, execute o seguinte comando:

      gcloud iam roles create ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --permissions="PERMISSIONS_LIST" --stage=LAUNCH_STAGE

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    • ROLE_TITLE é um título intuitivo para o papel, como "My Company Admin".

    • ROLE_DESCRIPTION é uma breve descrição do papel, como "My custom role description.".

    • PERMISSIONS_LIST contém uma lista de permissões separadas por vírgula que você quer incluir no papel personalizado. Por exemplo: iam.roles.get,iam.roles.list. Não é possível usar caracteres curinga (*) em nomes de permissão.

    • LAUNCH_STAGE indica o estágio de um papel no ciclo de vida do lançamento, como ALPHA, BETA ou GA.

    Exemplos

    O exemplo a seguir demonstra como criar um papel no nível da organização usando flags:

    gcloud iam roles create myCompanyAdmin --organization=123456789012 \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

    Se o papel for criado, a saída do comando será semelhante a esta:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    O exemplo a seguir demonstra como criar um papel no nível do projeto usando flags:

    gcloud iam roles create myCompanyAdmin --project=my-project \
        --title="My Company Admin" --description="My custom role description." \
        --permissions="iam.roles.get,iam.roles.list" --stage=ALPHA

    Se o papel for criado, a saída do comando será semelhante a esta:

    Created role [myCompanyAdmin].
    description: My custom role description.
    etag: BwVkBX0sQD0=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& parent, std::string const& role_id,
   std::vector<std::string> const& included_permissions) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::CreateRoleRequest request;
  request.set_parent("projects/" + parent);
  request.set_role_id(role_id);
  google::iam::admin::v1::Role role;
  role.set_stage(google::iam::admin::v1::Role::GA);
  for (auto const& permission : included_permissions) {
    *role.add_included_permissions() = permission;
  }
  *request.mutable_role() = role;
  auto response = client.CreateRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully created: " << response->DebugString()
            << "\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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte 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 Role CreateRole(string name, string projectId, string title,
        string description, IList<string> permissions, string stage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var role = new Role
        {
            Title = title,
            Description = description,
            IncludedPermissions = permissions,
            Stage = stage
        };
        var request = new CreateRoleRequest
        {
            Role = role,
            RoleId = name
        };
        role = service.Projects.Roles.Create(request,
            "projects/" + projectId).Execute();
        Console.WriteLine("Created role: " + role.Name);
        return role;
    }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import (
	"context"
	"fmt"
	"io"

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

// createRole creates a custom role.
func createRole(w io.Writer, projectID, name, title, description, stage string, permissions []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.CreateRoleRequest{
		Role: &iam.Role{
			Title:               title,
			Description:         description,
			IncludedPermissions: permissions,
			Stage:               stage,
		},
		RoleId: name,
	}
	role, err := service.Projects.Roles.Create("projects/"+projectID, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Create: %w", err)
	}
	fmt.Fprintf(w, "Created role: %v", role.Name)
	return role, nil
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.CreateRoleRequest;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.Role.RoleLaunchStage;
import java.io.IOException;
import java.util.Arrays;

/** Create role. */
public class CreateRole {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";
    String title = "a title for your role (e.g. IAM Role Viewer)";
    String description = "a description of the role";
    Iterable<String> includedPermissions =
        Arrays.asList("roles/iam.roleViewer", "roles/logging.viewer");

    createRole(projectId, title, description, includedPermissions, roleId);
  }

  public static void createRole(
      String projectId,
      String title,
      String description,
      Iterable<String> includedPermissions,
      String roleId)
      throws IOException {
    Role.Builder roleBuilder =
        Role.newBuilder()
            .setTitle(title)
            .setDescription(description)
            .addAllIncludedPermissions(includedPermissions)
            // See launch stage enums at
            // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
            .setStage(RoleLaunchStage.BETA);
    CreateRoleRequest createRoleRequest =
        CreateRoleRequest.newBuilder()
            .setParent("projects/" + projectId)
            .setRoleId(roleId)
            .setRole(roleBuilder)
            .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.createRole(createRoleRequest);
      System.out.println("Created role: " + result.getName());
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from typing import List, Optional

from google.api_core.exceptions import AlreadyExists, FailedPrecondition
from google.cloud.iam_admin_v1 import CreateRoleRequest, IAMClient, Role


def create_role(
    project_id: str, role_id: str, permissions: List[str], title: Optional[str] = None
) -> Role:
    """
    Creates iam role with given parameters.
    Args:
        project_id: GCP project id
        role_id: id of GCP iam role
        permissions: list of iam permissions to assign to role. f.e ["iam.roles.get", "iam.roles.list"]
        title: title for iam role. role_id will be used in case of None

    Returns: google.cloud.iam_admin_v1.Role object
    """
    client = IAMClient()

    parent = f"projects/{project_id}"

    request = CreateRoleRequest(
        parent=parent,
        role_id=role_id,
        role=Role(title=title, included_permissions=permissions),
    )
    try:
        role = client.create_role(request)
        print(f"Created iam role: {role_id}: {role}")
        return role
    except AlreadyExists:
        print(f"Role with id [{role_id}] already exists, take some actions")
    except FailedPrecondition:
        print(
            f"Role with id [{role_id}] already exists and in deleted state, take some actions"
        )

REST

O método roles.create cria um papel personalizado em um projeto ou organização.

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

  • RESOURCE_TYPE: o tipo de recurso com os papéis personalizados que você quer gerenciar. Use o valor projects ou organizations.
  • RESOURCE_ID: o ID do projeto ou da organização com os papéis personalizados que você quer gerenciar. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos da organização são numéricos, como 123456789012.
  • ROLE_ID: o nome do papel, como myCompanyAdmin.
  • ROLE_TITLE: o título legível do papel. Por exemplo, My Company Admin.
  • ROLE_DESCRIPTION: uma descrição para o papel. Por exemplo, "The company admin role allows company admins to access important resources".
  • PERMISSION_1 e PERMISSION_2: as permissões que você quer incluir no papel. Por exemplo, storage.objects.update. Não é possível usar caracteres curinga (*) em nomes de permissão.

    Um papel personalizado pode conter apenas permissões compatíveis com papéis personalizados. Se o papel personalizado tiver outras permissões, a solicitação falhará.

  • LAUNCH_STAGE: o estágio de lançamento atual do papel. Esse campo pode conter um dos seguintes valores: EAP, ALPHA, BETA, GA, DEPRECATED ou DISABLED.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corpo JSON da solicitação:

{
  "roleId": "ROLE_ID",
  "role": {
    "title": "ROLE_TITLE",
    "description": "ROLE_DESCRIPTION",
    "includedPermissions": [
      "PERMISSION_1",
      "PERMISSION_2"
    ],
    "stage": "LAUNCH_STAGE"
  }
}

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

A resposta contém o papel que você criou.

{
  "name": "projects/myProject/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWox/JbaZw="
}

Editar uma função personalizada

Um padrão comum para atualizar os metadados de um recurso, como um papel personalizado, é o padrão read-modify-write. Com esse padrão, você lê o estado atual do papel, atualiza os dados localmente e envia os dados modificados para gravação.

O padrão read-modify-write pode causar um conflito se dois ou mais processos independentes tentarem executar a sequência simultaneamente. Por exemplo, quando dois proprietários de um projeto fazem alterações conflitantes em um papel ao mesmo tempo, pode haver uma falha. O IAM resolve esse problema usando uma propriedade etag em papéis personalizados. Essa propriedade é usada para verificar se o papel personalizado foi alterado desde a última solicitação. Quando você faz uma solicitação ao IAM com um valor ETag, o IAM compara o valor ETag na solicitação com o valor ETag existente associado ao papel personalizado. A alteração só é gravada quando esses valores são correspondentes.

Ao atualizar um papel, primeiro consiga o papel usando roles.get(), atualize o papel e, em seguida, grave o papel atualizado usando roles.patch(). Ao configurar o papel, use o valor etag somente quando o papel correspondente em roles.get() também contiver um valor etag.

Console

  1. No console do Google Cloud, abra a página Papéis.

    Acessar a página "Papéis"

  2. Na lista suspensa na parte superior da página, selecione o projeto ou a organização que contém o papel que você quer editar.

  3. Clique em um papel personalizado.

  4. Clique em Editar papel.

  5. Para atualizar os metadados do papel, edite o Título, a Descrição ou o Estágio de lançamento do papel.

  6. Para atualizar as permissões do papel, faça o seguinte:

    1. Clique em Adicionar permissões para adicionar novas permissões ao papel.
    2. Desmarque as permissões para removê-las do papel.
  7. Clique em Atualizar para salvar o papel editado.

gcloud

  1. 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.

  2. Use o comando gcloud iam roles update para atualizar papéis personalizados. Ele pode ser usado de duas maneiras:

    • Por meio de um arquivo YAML contendo a definição atualizada do papel.

    • Com sinalizações para especificar a definição atualizada do papel

    Ao atualizar um papel personalizado, especifique se ele será aplicado ao nível da organização ou do projeto usando as flags --organization=ORGANIZATION_ID ou --project=PROJECT_ID. Nos exemplos abaixo, são criados papéis personalizados no nível do projeto.

    Para atualizar um papel personalizado usando um arquivo YAML:

    Veja a definição atual do papel executando um dos seguintes comandos:

    • Para ver a definição de um papel personalizado no nível da organização, execute o seguinte comando:

      gcloud iam roles describe ROLE_ID --organization=ORGANIZATION_ID
    • Para ver a definição de um papel personalizado para envolvidos no projeto, execute o seguinte comando:

      gcloud iam roles describe ROLE_ID --project=PROJECT_ID

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel a ser atualizado, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    O comando describe retorna a definição do papel e inclui um valor etag que identifica exclusivamente a versão atual do papel. O valor etag precisa ser incluído na definição atualizada do papel para impedir a substituição de alterações de papel simultâneas.

    O comando describe retorna a seguinte saída:

    description: ROLE_DESCRIPTION
    etag: ETAG
    includedPermissions:
    - PERMISSION_1
    - PERMISSION_2
    name: ROLE_NAME
    stage: LAUNCH_STAGE
    title: ROLE_TITLE

    Cada valor do marcador é descrito a seguir:

    • ROLE_DESCRIPTION é uma breve descrição do papel, como "My custom role description".

    • ETAG é o identificador exclusivo da versão atual do papel, como BwVkBkbfr70=.

    • PERMISSION_1 e PERMISSION_2 são permissões a serem incluídas no papel personalizado, como iam.roles.get. Não é possível usar caracteres curinga (*) em nomes de permissão.

    • ROLE_NAME é o nome completo do papel, incluindo qualquer prefixo organizations/, projects/ ou roles/. Por exemplo: organizations/123456789012/roles/myCompanyAdmin.

    • LAUNCH_STAGE indica o estágio de um papel no ciclo de vida do lançamento, como ALPHA, BETA ou GA.

    • ROLE_TITLE é um título intuitivo para o papel, como "My Company Admin".

    Para atualizar o papel, inclua a definição gerada em um arquivo YAML ou atualize o arquivo YAML original com o valor etag gerado.

    Considere o seguinte exemplo de arquivo YAML, que contém a saída do comando describe de um papel para envolvidos no projeto e adiciona duas permissões do Cloud Storage:

    description: My custom role description.
    etag: BwVkBkbfr70=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Salve o arquivo YAML e execute um dos seguintes comandos:

    • Para atualizar um papel no nível da organização, execute o seguinte comando:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --file=YAML_FILE_PATH
    • Para atualizar um papel no nível do projeto, execute o seguinte comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel a ser atualizado, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project-id.

    • YAML_FILE_PATH é o caminho do local do arquivo YAML que contém a definição atualizada do papel personalizado.

    Exemplos

    O exemplo a seguir demonstra como atualizar um papel no nível da organização usando um arquivo YAML:

    gcloud iam roles update ROLE_ID --organization=ORGANIZATION_ID \
        --file=YAML_FILE_PATH
    • Para atualizar um papel no nível do projeto, execute o seguinte comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --file=YAML_FILE_PATH

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel a ser atualizado, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    • YAML_FILE_PATH é o caminho do local do arquivo YAML que contém a definição atualizada do papel personalizado.

    Exemplos

    O exemplo a seguir demonstra como atualizar um papel no nível da organização usando um arquivo YAML:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --file=my-role-definition.yaml

    Se o papel for atualizado, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organizations/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    O exemplo a seguir demonstra como atualizar um papel para envolvidos no projeto usando um arquivo YAML:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --file=my-role-definition.yaml

    Se o papel for atualizado, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    Para atualizar um papel personalizado usando sinalizações:

    Cada uma das partes da definição de papel pode ser atualizada usando uma sinalização correspondente. Consulte o tópico gcloud iam roles update para ver uma lista de todas as flags possíveis.

    Use as sinalizações a seguir para adicionar ou remover permissões:

    • --add-permissions=PERMISSIONS: adiciona ao papel uma ou mais permissões separadas por vírgula. Não é possível usar caracteres curinga (*) em nomes de permissão.

    • --remove-permissions=PERMISSIONS: remove do papel uma ou mais permissões separadas por vírgula. Não é possível usar caracteres curinga (*) em nomes de permissão.

    Outra possibilidade é especificar simplesmente as novas permissões usando a flag --permissions=PERMISSIONS e fornecendo uma lista de permissões separadas por vírgulas para substituir a lista que já existe.

    Para atualizar outras partes da definição do papel, execute um dos seguintes comandos:

    • Para atualizar um papel no nível da organização, execute o seguinte comando:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE
    • Para atualizar um papel no nível do projeto, execute o seguinte comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --title=ROLE_TITLE --description=ROLE_DESCRIPTION \
          --stage=LAUNCH_STAGE

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    • ROLE_TITLE é um título intuitivo para o papel, como "My Company Admin".

    • ROLE_DESCRIPTION é uma breve descrição do papel, como "My custom role description.".

    • LAUNCH_STAGE indica o estágio de um papel no ciclo de vida do lançamento, como ALPHA, BETA ou GA.

    Exemplos

    O exemplo a seguir demonstra como adicionar permissões a um papel no nível da organização usando flags:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --add-permissions="storage.buckets.get,storage.buckets.list"

    Se o papel for atualizado, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: organization/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    O exemplo a seguir demonstra como adicionar permissões a um papel para envolvidos no projeto usando flags:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --add-permissions="storage.buckets.get,storage.buckets.list"

    Se o papel for atualizado, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkBwDN0lg=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    - storage.buckets.get
    - storage.buckets.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name, std::string const& title) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::UpdateRoleRequest request;
  request.set_name(name);
  google::iam::admin::v1::Role role;
  role.set_title(title);
  google::protobuf::FieldMask update_mask;
  *update_mask.add_paths() = "title";
  *request.mutable_role() = role;
  *request.mutable_update_mask() = update_mask;
  auto response = client.UpdateRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully updated: " << response->DebugString()
            << "\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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte 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 Role EditRole(string name, string projectId, string newTitle,
        string newDescription, IList<string> newPermissions, string newStage)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });
        // First, get a Role using List() or Get().
        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Get(resource).Execute();
        // Then you can update its fields.
        role.Title = newTitle;
        role.Description = newDescription;
        role.IncludedPermissions = newPermissions;
        role.Stage = newStage;
        role = service.Projects.Roles.Patch(role, resource).Execute();
        Console.WriteLine("Updated role: " + role.Name);
        return role;
    }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import (
	"context"
	"fmt"
	"io"

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

// editRole modifies a custom role.
func editRole(w io.Writer, projectID, name, newTitle, newDescription, newStage string, newPermissions []string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	role, err := service.Projects.Roles.Get(resource).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Get: %w", err)
	}
	role.Title = newTitle
	role.Description = newDescription
	role.IncludedPermissions = newPermissions
	role.Stage = newStage
	role, err = service.Projects.Roles.Patch(resource, role).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Patch: %w", err)
	}
	fmt.Fprintf(w, "Updated role: %v", role.Name)
	return role, nil
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.Role.RoleLaunchStage;
import com.google.iam.admin.v1.UpdateRoleRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

/** Edit role metadata. Specifically, update description and launch stage. */
public class EditRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";
    String description = "a new description of the role";

    editRole(projectId, roleId, description);
  }

  public static void editRole(String projectId, String roleId, String description)
      throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    Role.Builder roleBuilder =
        Role.newBuilder()
            .setName(roleName)
            .setDescription(description)
            // See launch stage enums at
            // https://cloud.google.com/iam/docs/reference/rpc/google.iam.admin.v1#rolelaunchstage
            .setStage(RoleLaunchStage.GA);
    FieldMask fieldMask = FieldMask.newBuilder().addPaths("description").addPaths("stage").build();
    UpdateRoleRequest updateRoleRequest =
        UpdateRoleRequest.newBuilder()
            .setName(roleName)
            .setRole(roleBuilder)
            .setUpdateMask(fieldMask)
            .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.updateRole(updateRoleRequest);
      System.out.println("Edited role:\n" + result);
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from google.api_core.exceptions import NotFound
from google.cloud.iam_admin_v1 import IAMClient, Role, UpdateRoleRequest

from snippets.get_role import get_role


def edit_role(role: Role) -> Role:
    """
    Edits an existing IAM role in a GCP project.
    Args:
        role: google.cloud.iam_admin_v1.Role object to be updated

    Returns: Updated google.cloud.iam_admin_v1.Role object
    """
    client = IAMClient()
    request = UpdateRoleRequest(name=role.name, role=role)
    try:
        role = client.update_role(request)
        print(f"Edited role: {role.name}: {role}")
        return role
    except NotFound:
        print(f"Role [{role.name}] not found, take some actions")

REST

O método roles.patch atualiza um papel personalizado em um projeto ou organização.

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

Obrigatório:

  • RESOURCE_TYPE: o tipo de recurso com os papéis personalizados que você quer gerenciar. Use o valor projects ou organizations.
  • RESOURCE_ID: o ID do projeto ou da organização com os papéis personalizados que você quer gerenciar. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos da organização são numéricos, como 123456789012.
  • ROLE_NAME: o nome completo do papel, incluindo qualquer prefixo organizations/, projects/ ou roles/. Por exemplo: organizations/123456789012/roles/myCompanyAdmin

Recomendação:

  • ETAG: identificador de uma versão do papel. Inclua este campo para evitar a substituição de outras alterações de papéis.

Opcional (defina um ou mais dos seguintes valores):

  • ROLE_TITLE: o título legível do papel. Por exemplo, My Company Admin.
  • ROLE_DESCRIPTION: uma descrição para o papel. Por exemplo, "The company admin role allows company admins to access important resources".
  • PERMISSION_1 e PERMISSION_2: as permissões que você quer incluir no papel. Por exemplo, storage.objects.update. Não é possível usar caracteres curinga (*) em nomes de permissão.
  • LAUNCH_STAGE: o estágio de lançamento atual do papel. Esse campo pode conter um dos seguintes valores: EAP, ALPHA, BETA, GA, DEPRECATED ou DISABLED.

Método HTTP e URL:

PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corpo JSON da solicitação:

{
  "roleId": "ROLE_NAME",
  "title": "ROLE_TITLE",
  "description": "ROLE_DESCRIPTION",
  "includedPermissions": [
    "PERMISSION_1",
    "PERMISSION_2"
  ],
  "stage": "LAUNCH-STAGE",
  "etag": "ETAG"
}

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

A resposta contém uma definição de papel abreviada que inclui o nome do papel, os campos que você atualizou e uma ETag que identifica a versão atual do papel.

{
  "name": "projects/test-project-1000092/roles/myCompanyAdmin",
  "title": "My Updated Company Admin",
  "includedPermissions": [
    "storage.buckets.get",
    "storage.buckets.list"
  ],
  "stage": "BETA",
  "etag": "BwWoyDpAxBc="
}

desativar um papel personalizado

Desative um papel personalizado alterando o estágio de lançamento para DISABLED. Quando um papel é desativado, as vinculações de política relacionadas a ele ficam inativas e as permissões de atribuição não podem ser aplicadas a um usuário.

Console

  1. No console do Google Cloud, abra a página Papéis.

    Acessar a página "Papéis"

  2. Clique na lista suspensa "Selecionar um projeto" na parte superior da página.

  3. Selecione a organização ou o projeto.

  4. Selecione um papel personalizado e clique em Desativar.

gcloud

  1. 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.

  2. Use o comando gcloud iam roles update para desativar um papel personalizado definindo seu estágio de lançamento como DISABLED.

    Conforme descrito na guia gcloud da seção Como editar um papel personalizado, é possível atualizar um papel personalizado que já existe destas duas maneiras:

    • Por meio de um arquivo YAML contendo a definição atualizada do papel.

    • Com sinalizações para especificar a definição atualizada do papel

    A maneira mais fácil de desativar um papel personalizado que já existe é usar a flag --stage e defini-la como DISABLED. Execute um dos seguintes comandos:

    • Para desativar um papel no nível da organização, execute o seguinte comando:

      gcloud iam roles update ROLE_ID--organization=ORGANIZATION_ID \
          --stage=DISABLED
    • Para desativar um papel no nível do projeto, execute o seguinte comando:

      gcloud iam roles update ROLE_ID --project=PROJECT_ID \
          --stage=DISABLED

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    Exemplos

    O exemplo a seguir demonstra como desativar um papel no nível da organização:

    gcloud iam roles update myCompanyAdmin --organization=123456789012 \
        --stage=DISABLED

    Se o papel for atualizado, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organization/123456789012/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin

    O exemplo a seguir demonstra como desativar um papel no nível do projeto:

    gcloud iam roles update myCompanyAdmin --project=my-project \
        --stage=DISABLED

    Se o papel for atualizado, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkB5NLIQw=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: DISABLED
    title: My Company Admin

C++

Atualize o campo stage do papel para DISABLED.

C#

Atualize o campo stage do papel para DISABLED.

Go

Atualize o campo stage do papel para DISABLED.

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.UpdateRoleRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;

public class DisableRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "testRole";

    Role role = disableRole(projectId, roleId);
    System.out.println("Role name: " + role.getName());
    System.out.println("Role stage: " + role.getStage());
  }

  public static Role disableRole(String projectId, String roleId)
          throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    Role role = Role.newBuilder()
                    .setName(roleName)
                    .setStage(Role.RoleLaunchStage.DISABLED)
                    .build();

    FieldMask fieldMask = FieldMask.newBuilder().addPaths("stage").build();
    UpdateRoleRequest updateRoleRequest =
              UpdateRoleRequest.newBuilder()
                      .setName(roleName)
                      .setRole(role)
                      .setUpdateMask(fieldMask)
                      .build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      return iamClient.updateRole(updateRoleRequest);
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from google.cloud.iam_admin_v1 import GetRoleRequest, IAMClient, Role, UpdateRoleRequest


def disable_role(project_id: str, role_id: str) -> Role:
    """
    Disables an IAM role in a GCP project.
    Args:
        project_id: GCP project ID
        role_id: ID of GCP IAM role

    Returns: Updated google.cloud.iam_admin_v1.Role object with disabled stage
    """
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    get_request = GetRoleRequest(name=name)
    try:
        role = client.get_role(get_request)
        role.stage = Role.RoleLaunchStage.DISABLED
        update_request = UpdateRoleRequest(name=role.name, role=role)
        client.update_role(update_request)
        print(f"Disabled role: {role_id}: {role}")
        return role
    except NotFound:
        raise f"Role with id [{role_id}] not found, take some actions"

REST

O método roles.patch permite alterar o estágio de lançamento de um papel personalizado para DISABLED, o que desativa o papel.

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

  • RESOURCE_TYPE: o tipo de recurso com os papéis personalizados que você quer gerenciar. Use o valor projects ou organizations.
  • RESOURCE_ID: o ID do projeto ou da organização com os papéis personalizados que você quer gerenciar. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos da organização são numéricos, como 123456789012.
  • ROLE_NAME: o nome completo do papel, incluindo qualquer prefixo organizations/, projects/ ou roles/. Por exemplo: organizations/123456789012/roles/myCompanyAdmin
  • ETAG: identificador de uma versão do papel. Inclua este campo para evitar a substituição de outras alterações de papéis.

Método HTTP e URL:

PATCH https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles

Corpo JSON da solicitação:

{
  "roleId": "ROLE_NAME",
  "stage": DISABLED,
  "etag": "ETAG"
}

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

Você receberá uma resposta JSON semelhante a esta:

{
  "name": "projects/test-project-1000092/roles/myCompanyAdmin",
  "stage": "DISABLED",
  "etag": "BwWoyDpAxBc="
}

Listar papéis

É possível listar todos os papéis personalizados criados no seu projeto ou organização.

Console

No console do Google Cloud, abra a página Papéis.

Acessar a página "Papéis"

Todos os papéis personalizados da organização ou do projeto que você selecionou são listados na página.

gcloud

  1. 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.

  2. Use o comando gcloud iam roles list para listar papéis personalizados e predefinidos de um projeto ou uma organização.

    • Para listar papéis personalizados no nível da organização, execute o seguinte comando:

      gcloud iam roles list --organization=ORGANIZATION_ID
    • Para listar papéis personalizados no nível do projeto, execute o seguinte comando:

      gcloud iam roles list --project=PROJECT_ID

    Cada valor do marcador é descrito a seguir:

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    Para listar os papéis excluídos, também é possível especificar a sinalização --show-deleted.

    Execute o seguinte comando para listar papéis predefinidos:

    gcloud iam roles list

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& project) {
  iam::IAMClient client(iam::MakeIAMConnection());
  int count = 0;
  google::iam::admin::v1::ListRolesRequest request;
  request.set_parent(project);
  for (auto& role : client.ListRoles(request)) {
    if (!role) throw std::move(role).status();
    std::cout << "Roles successfully retrieved: " << role->name() << "\n";
    ++count;
  }
  if (count == 0) {
    std::cout << "No roles found in project: " << project << "\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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte 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> ListRoles(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        var response = service.Projects.Roles.List("projects/" + projectId)
            .Execute();
        foreach (var role in response.Roles)
        {
            Console.WriteLine(role.Name);
        }
        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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import (
	"context"
	"fmt"
	"io"

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

// listRoles lists a project's roles.
func listRoles(w io.Writer, projectID string) ([]*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	response, err := service.Projects.Roles.List("projects/" + projectID).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.List: %w", err)
	}
	for _, role := range response.Roles {
		fmt.Fprintf(w, "Listing role: %v\n", role.Name)
	}
	return response.Roles, nil
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.cloud.iam.admin.v1.IAMClient.ListRolesPagedResponse;
import com.google.iam.admin.v1.ListRolesRequest;
import java.io.IOException;

/** List roles in a project. */
public class ListRoles {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variable before running the sample.
    String projectId = "your-project-id";

    listRoles(projectId);
  }

  public static void listRoles(String projectId) throws IOException {
    ListRolesRequest listRolesRequest =
        ListRolesRequest.newBuilder().setParent("projects/" + projectId).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      ListRolesPagedResponse listRolesResponse = iamClient.listRoles(listRolesRequest);
      listRolesResponse.iterateAll().forEach(role -> System.out.println(role));
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from google.cloud.iam_admin_v1 import IAMClient, ListRolesRequest, RoleView
from google.cloud.iam_admin_v1.services.iam.pagers import ListRolesPager


def list_roles(
    project_id: str, show_deleted: bool = True, role_view: RoleView = RoleView.BASIC
) -> ListRolesPager:
    """
    Lists IAM roles in a GCP project.
    Args:
        project_id: GCP project ID
        show_deleted: Whether to include deleted roles in the results
        role_view: Level of detail for the returned roles (e.g., BASIC or FULL)

    Returns: A pager for traversing through the roles
    """
    client = IAMClient()
    parent = f"projects/{project_id}"
    request = ListRolesRequest(parent=parent, show_deleted=show_deleted, view=role_view)
    roles = client.list_roles(request)
    for page in roles.pages:
        for role in page.roles:
            print(role)
    print("Listed all iam roles")
    return roles

REST

O método roles.list lista todos os papéis personalizados em um projeto ou organização.

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

  • RESOURCE_TYPE: o tipo de recurso com os papéis personalizados que você quer gerenciar. Use o valor projects ou organizations.
  • RESOURCE_ID: o ID do projeto ou da organização com os papéis personalizados que você quer gerenciar. Os IDs do projeto são strings alfanuméricas, como my-project. Os códigos da organização são numéricos, como 123456789012.
  • ROLE_VIEW: opcional. As informações a serem incluídas para os papéis retornados. Para incluir as permissões dos papéis, defina este campo como FULL. Para excluir as permissões dos papéis, defina este campo como BASIC. O valor padrão é BASIC.
  • PAGE_SIZE: opcional. O número de papéis a serem incluídos na resposta. O valor padrão é 300 e o valor máximo é 1.000. Se o número de papéis for maior que o tamanho da página, a resposta conterá um token de paginação que pode ser usado para recuperar a próxima página de resultados.
  • NEXT_PAGE_TOKEN: opcional. O token de paginação retornado em uma resposta anterior desse método. Se especificado, a lista de papéis começará onde a solicitação anterior foi finalizada.

Método HTTP e URL:

GET https://iam.googleapis.com/v1/RESOURCE_TYPE/RESOURCE_ID/roles?view=ROLE_VIEW&pageSize=PAGE_SIZE&pageToken=NEXT_PAGE_TOKEN

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

Você receberá uma resposta JSON semelhante a esta:

{
  "roles": [
    {
      "name": "projects/my-project/roles/customRole1",
      "title": "First Custom Role",
      "description": "Created on: 2020-06-01",
      "etag": "BwWiPg2fmDE="
    },
    {
      "name": "projects/my-project/roles/customRole2",
      "title": "Second Custom Role",
      "description": "Created on: 2020-06-07",
      "etag": "BwWiuX53Wi0="
    }
  ]
}

excluir um papel personalizado

É possível excluir qualquer papel personalizado no seu projeto ou organização.

Console

  1. No console do Google Cloud, abra a página Papéis.

    Acessar a página "Papéis"

  2. Selecione o papel que você quer excluir e clique em Excluir na parte superior da página.

gcloud

  1. 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.

  2. Use o comando gcloud iam roles delete para excluir um papel personalizado:

    • Para excluir um papel personalizado no nível da organização, execute o seguinte comando:

      gcloud iam roles delete ROLE_ID --organization=ORGANIZATION_ID
    • Para excluir um papel personalizado no nível do projeto, execute o seguinte comando:

      gcloud iam roles delete ROLE_ID --project=PROJECT_ID

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    O papel não será incluído em gcloud iam roles list, a menos que a flag --show-deleted seja incluída. Os papéis excluídos são indicados pelo bloco deleted: true em uma resposta list, como:

    ---
    deleted: true
    description: My custom role description.
    etag: BwVkB5NLIQw=
    name: projects/my-project/roles/myCompanyAdmin
    title: My Company Admin
    ---
    

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::DeleteRoleRequest request;
  request.set_name(name);
  auto response = client.DeleteRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully deleted: " << response->DebugString()
            << "\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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static void DeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        service.Projects.Roles.Delete(
            $"projects/{projectId}/roles/{name}").Execute();
        Console.WriteLine("Deleted role: " + name);
    }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import (
	"context"
	"fmt"
	"io"

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

// deleteRole deletes a custom role.
func deleteRole(w io.Writer, projectID, name string) error {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return fmt.Errorf("iam.NewService: %w", err)
	}

	_, err = service.Projects.Roles.Delete("projects/" + projectID + "/roles/" + name).Do()
	if err != nil {
		return fmt.Errorf("Projects.Roles.Delete: %w", err)
	}
	fmt.Fprintf(w, "Deleted role: %v", name)
	return nil
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.DeleteRoleRequest;
import java.io.IOException;

/** Delete role. */
public class DeleteRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to an existing role.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";

    deleteRole(projectId, roleId);
  }

  public static void deleteRole(String projectId, String roleId) throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    DeleteRoleRequest deleteRoleRequest = DeleteRoleRequest.newBuilder().setName(roleName).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      iamClient.deleteRole(deleteRoleRequest);
      System.out.println("Role deleted.");
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from google.api_core.exceptions import FailedPrecondition, NotFound
from google.cloud.iam_admin_v1 import (
    DeleteRoleRequest,
    IAMClient,
    Role,
    UndeleteRoleRequest,
)

def delete_role(project_id: str, role_id: str) -> Role:
    """
    Deletes iam role in GCP project. Can be undeleted later
    Args:
        project_id: GCP project id
        role_id: id of GCP iam role

    Returns: google.cloud.iam_admin_v1.Role object
    """
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    request = DeleteRoleRequest(name=name)
    try:
        role = client.delete_role(request)
        print(f"Deleted role: {role_id}: {role}")
        return role
    except NotFound:
        print(f"Role with id [{role_id}] not found, take some actions")
    except FailedPrecondition as err:
        print(f"Role with id [{role_id}] already deleted, take some actions)", err)

REST

O método roles.delete exclui um papel personalizado em um projeto ou organização.

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

  • ROLE_NAME: o nome completo do papel, incluindo qualquer prefixo organizations/, projects/ ou roles/. Por exemplo: organizations/123456789012/roles/myCompanyAdmin

Método HTTP e URL:

DELETE https://iam.googleapis.com/v1/ROLE_NAME

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

A resposta contém a definição do papel que foi excluído.

{
  "name": "projects/my-project/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWiPg2fmDE=",
  "deleted": true
}

Quando um papel é excluído, todas as vinculações de papel que se referem a ele permanecem nas políticas do IAM, mas não terão efeito. É possível recuperar um papel em até sete dias. Durante esse período de sete dias, o Console do Google Cloud mostra que o papel foi excluído. Também é possível listar papéis excluídos de maneira programática, mas eles são omitidos por padrão.

Após 7 a 14 dias, o papel é programado para exclusão permanente. Até aqui, o papel não conta mais para o limite de 300 papéis personalizados por organização ou 300 papéis personalizados por projeto.

O processo de exclusão permanente dura 30 dias. Durante esse período, o papel e todas as vinculações associadas são permanentemente removidos e não é possível criar um papel novo com o mesmo ID.

Depois que o papel for excluído permanentemente, será possível criar um novo usando o mesmo ID até 44 dias após a solicitação de exclusão inicial.

Cancelar a exclusão de uma função personalizada

Cancelar a exclusão de um papel faz com que ele retorne ao estado anterior.

Só é possível cancelar a exclusão de papéis em até sete dias após a exclusão. Após esse período, o papel pode ser permanentemente excluído a qualquer momento, e todas as vinculações de papel que se referem a ele são removidas.

Console

  1. No console do Google Cloud, abra a página Papéis.

    Acessar a página "Papéis"

  2. Localize o papel que você quer cancelar a exclusão e clique no ícone de mais no final da linha. Em seguida, clique em Cancelar exclusão.

gcloud

  1. 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.

  2. Use o comando gcloud iam roles undelete para cancelar a exclusão de um papel personalizado.

    • Para cancelar a exclusão de um papel personalizado no nível da organização, execute o seguinte comando:

      gcloud iam roles undelete ROLE_ID --organization=ORGANIZATION_ID
    • Para cancelar a exclusão de um papel personalizado no nível do projeto, execute o seguinte comando:

      gcloud iam roles undelete ROLE_ID --project=PROJECT_ID

    Cada valor do marcador é descrito a seguir:

    • ROLE_ID é o nome do papel, como myCompanyAdmin.

    • ORGANIZATION_ID é o ID numérico da organização, como 123456789012.

    • PROJECT_ID é o nome do projeto, como my-project.

    Exemplos

    O exemplo a seguir demonstra como cancelar a exclusão de um papel personalizado no nível da organização:

    gcloud iam roles undelete myCompanyAdmin --organization=123456789012

    Se a exclusão do papel for cancelada, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: organization/123456789012/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

    O exemplo a seguir demonstra como cancelar a exclusão de um papel personalizado no nível do projeto:

    gcloud iam roles undelete myCompanyAdmin --project=my-project

    Se a exclusão do papel for cancelada, a saída do comando será semelhante a esta:

    description: My custom role description.
    etag: BwVkCAx9W6w=
    includedPermissions:
    - iam.roles.get
    - iam.roles.list
    name: projects/my-project/roles/myCompanyAdmin
    stage: ALPHA
    title: My Company Admin

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

namespace iam = ::google::cloud::iam_admin_v1;
[](std::string const& name) {
  iam::IAMClient client(iam::MakeIAMConnection());
  google::iam::admin::v1::UndeleteRoleRequest request;
  request.set_name(name);
  auto response = client.UndeleteRole(request);
  if (!response) throw std::move(response).status();
  std::cout << "Role successfully undeleted: " << response->DebugString()
            << "\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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


using System;
using Google.Apis.Auth.OAuth2;
using Google.Apis.Iam.v1;
using Google.Apis.Iam.v1.Data;

public partial class CustomRoles
{
    public static Role UndeleteRole(string name, string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(IamService.Scope.CloudPlatform);
        var service = new IamService(new IamService.Initializer
        {
            HttpClientInitializer = credential
        });

        string resource = $"projects/{projectId}/roles/{name}";
        var role = service.Projects.Roles.Undelete(
            new UndeleteRoleRequest(), resource).Execute();
        Console.WriteLine("Undeleted role: " + role.Name);
        return role;
    }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

import (
	"context"
	"fmt"
	"io"

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

// undeleteRole restores a deleted custom role.
func undeleteRole(w io.Writer, projectID, name string) (*iam.Role, error) {
	ctx := context.Background()
	service, err := iam.NewService(ctx)
	if err != nil {
		return nil, fmt.Errorf("iam.NewService: %w", err)
	}

	resource := "projects/" + projectID + "/roles/" + name
	request := &iam.UndeleteRoleRequest{}
	role, err := service.Projects.Roles.Undelete(resource, request).Do()
	if err != nil {
		return nil, fmt.Errorf("Projects.Roles.Undelete: %w", err)
	}
	fmt.Fprintf(w, "Undeleted role: %v", role.Name)
	return role, nil
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.Role;
import com.google.iam.admin.v1.UndeleteRoleRequest;
import java.io.IOException;

/**
 * Undelete a role to return it to its previous state. Undeleting only works on roles that were
 * deleted in the past 7 days.
 */
public class UndeleteRole {

  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // Role ID must point to a role that was deleted in the past 7 days.
    String projectId = "your-project-id";
    String roleId = "a unique identifier (e.g. testViewer)";

    undeleteRole(projectId, roleId);
  }

  public static void undeleteRole(String projectId, String roleId) throws IOException {
    String roleName = "projects/" + projectId + "/roles/" + roleId;
    UndeleteRoleRequest undeleteRoleRequest =
        UndeleteRoleRequest.newBuilder().setName(roleName).build();

    // Initialize client for sending requests. This client only needs to be created
    // once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      Role result = iamClient.undeleteRole(undeleteRoleRequest);
      System.out.println("Undeleted role:\n" + result);
    }
  }
}

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.

Para autenticar no IAM, configure o Application Default Credentials. Para mais informações, consulte Antes de começar.

from google.api_core.exceptions import FailedPrecondition, NotFound
from google.cloud.iam_admin_v1 import (
    DeleteRoleRequest,
    IAMClient,
    Role,
    UndeleteRoleRequest,
)

def undelete_role(project_id: str, role_id: str) -> Role:
    """
    Undeleted deleted iam role in GCP project
    Args:
        project_id: GCP project id
        role_id: id of GCP iam role

    Returns: google.cloud.iam_admin_v1.Role object
    """
    client = IAMClient()
    name = f"projects/{project_id}/roles/{role_id}"
    request = UndeleteRoleRequest(name=name)
    try:
        role = client.undelete_role(request)
        print(f"Undeleted role: {role_id}: {role}")
        return role
    except NotFound:
        print(f"Role with id [{role_id}] not found, take some actions")
    except FailedPrecondition as err:
        print(f"Role with id [{role_id}] is not deleted, take some actions)", err)

REST

O método roles.undelete cancela a exclusão de um papel personalizado em um projeto ou organização.

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

  • ROLE_NAME: o nome completo do papel, incluindo qualquer prefixo organizations/, projects/ ou roles/. Por exemplo: organizations/123456789012/roles/myCompanyAdmin
  • ETAG: identificador de uma versão do papel. Inclua este campo para evitar a substituição de outras alterações de papéis.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/ROLE_NAME:undelete

Corpo JSON da solicitação:

{
  "etag": "ETAG"
}

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

A resposta contém a definição do papel que teve a exclusão cancelada.

{
  "name": "projects/my-project/roles/myCompanyAdmin",
  "title": "My Company Admin",
  "description": "My custom role description.",
  "includedPermissions": [
    "iam.roles.get",
    "iam.roles.list"
  ],
  "etag": "BwWiPg2fmDE="
}

A seguir