Como conceder, alterar e revogar acesso a recursos

Nesta página, descreveremos como conceder, alterar e revogar acesso a um recurso. É possível conceder vários níveis de acesso a recursos que você possui para diferentes usuários, usando os papéis refinados do Cloud IAM.

Gerencie os papéis de usuário com o Console do GCP, a ferramenta de linha de comando gcloud, a API REST ou as bibliotecas de cliente. O uso do Console do GCP é o método mais fácil e é abordado na primeira metade deste artigo. A utilização de métodos programáticos para cenários mais complexos é abordada mais adiante.

Se você quiser usar o Cloud IAM com o Cloud Identity-Aware Proxy (Cloud IAP) para proteger o acesso aos aplicativos, consulte a documentação do Cloud IAP.

Antes de começar

Como usar o Console do GCP

O uso do Console do GCP é uma maneira rápida e fácil de gerenciar os papéis do usuário. Quando você concede um papel a um usuário, ele não recebe um e-mail de convite. O acesso é atualizado diretamente.

Conceder acesso

Para adicionar um membro da equipe a um projeto e conceder a ele um papel do Cloud IAM:

  1. Abra a página do IAM no Console do GCP.

    Abrir a página do IAM

  2. Clique em Selecionar um projeto e em Abrir.

  3. Clique em Adicionar.

  4. Insira um endereço de e-mail. Adicione pessoas, contas de serviço ou Grupos do Google, mas cada projeto precisa ter pelo menos um indivíduo como membro.

  5. Selecione um papel. Os papéis dão aos membros o nível apropriado de permissão. Recomendamos dar ao membro o mínimo de privilégio possível. Os membros com permissões no nível Proprietário também são proprietários do projeto e podem gerenciar todos os aspectos dele, inclusive desativá-lo.

  6. Clique em Salvar.

Para atribuir um papel a um membro para mais de um projeto:

  1. Abra a página de projetos da seção "IAM e Admin" no Console do GCP.

    Abrir a página de projetos da seção "IAM e Admin"

  2. Selecione todos os projetos para os quais você quer conceder permissões.

  3. Clique em Mostrar painel de informações, seguido da guia Permissões.

  4. Digite um endereço de e-mail no campo Adicionar membros e selecione o papel que você quer no menu suspenso.

  5. Clique no botão Adicionar. O membro receberá o papel selecionado em cada um dos projetos.

Revogar acesso

  1. Abra a página IAM do Console do Google Cloud Platform.

    Abrir a página do IAM

  2. Clique em Selecionar um projeto.

  3. Selecione um projeto e clique em Abrir.

  4. Localize o membro para quem você quer revogar o acesso e clique no botão Editar edit à direita.

  5. Clique no botão Excluir delete de cada papel que você quer revogar e clique em Salvar.

Modificar acesso

Não há procedimento especial para modificar o acesso. Basta seguir as etapas para concedê-lo e revogá-lo até que o usuário tenha os papéis que você quer.

Como usar gcloud, REST API ou bibliotecas de cliente

Em alguns casos de uso, é mais fácil gerenciar de maneira programática o controle de acesso em vez de usar o Console do GCP. É possível usar a ferramenta de linha de comando gcloud, a API REST ou as bibliotecas de cliente do Cloud IAM. Os métodos programáticos são úteis principalmente para fazer atualizações automáticas ou em grande escala que demorariam muito se fossem realizadas no Console do GCP.

Atualizações rápidas com a ferramenta de linha de comando gcloud

Se você quiser conceder ou revogar rapidamente um único usuário a um papel com a linha de comando, use os comandos add-iam-policy-binding e remove-iam-policy-binding. Transmita uma sinalização --role para cada papel que você quiser adicionar ou remover.

Para conceder um papel:

gcloud [GROUP] add-iam-policy-binding [RESOURCE-NAME]
  --member user:[USER-EMAIL] --role [ROLE-ID]

Para revogar um papel:

gcloud [GROUP] remove-iam-policy-binding [RESOURCE-NAME]
  --member user:[EMAIL] --role [ROLE-ID]

[GROUP] é o grupo gcloud do recurso ao qual você quer conceder permissões, como projects ou organizations. [RESOURCE] é o nome do recurso. [EMAIL] é o usuário para quem você concede o papel. [ROLE-ID] é o ID do papel a ser concedido.

O exemplo abaixo concede o papel Visualizador a user-1@gmail.com para o projeto my-project (só é possível adicionar o papel Proprietário a um projeto por meio do console)

gcloud projects add-iam-policy-binding my-project
  --member user:user-1@gmail.com --role roles/viewer

Visão geral da política do Cloud IAM

O acesso a um recurso é gerenciado por meio de uma política do Cloud IAM, que é um conjunto de vinculações que associam um membro, como uma conta de usuário ou conta de serviço, a um papel. As políticas são representadas com JSON ou YAML.

Veja uma política de exemplo em que o user-1@gmail.com recebeu o papel de proprietário, já o usuário-2@gmail.com e o service-account-13@appspot.gserviceaccount.com receberam o papel de editor:

{
  "bindings":[
    {
      "members":[
        "user:user-1@gmail.com"
      ],
      "role":"roles/owner"
    },
    {
      "members":[
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:user-2@gmail.com"
      ],
      "role":"roles/editor"
    }
  ],
  "etag":"BwUjMhCsNvY=",
  "version":1
}

Você atualiza uma política para um recurso usando o padrão read-modify-write. Isso significa que não há métodos distintos para criar, modificar ou revogar o acesso do usuário. Em vez disso, todas as modificações são feitas por meio da:

  1. leitura da política atual chamando getIamPolicy();
  2. edição da política retornada, com um editor de texto ou de maneira programática, para adicionar ou remover qualquer membro e as concessões de papel dele;
  3. escrita da política atualizada chamando setIamPolicy().

É comum conceder permissões para um projeto ou organização inteira. No entanto, também é possível definir políticas em um nível mais granular em uma ampla variedade de recursos do GCP, como instâncias do Compute Engine ou intervalos do Cloud Storage. Para ver o nível de recurso mais baixo em que seja possível conceder cada papel e uma lista completa desses papéis, consulte Noções básicas sobre papéis.

As seções abaixo demonstram como receber, modificar e definir uma política para um projeto.

Receber política

COMANDO GCLOUD

Execute o comando get-iam-policy:

gcloud projects get-iam-policy [PROJECT] --format [FORMAT] > [FILE-PATH]

[PROJECT] é o nome do projeto. [FORMAT] é JSON ou YAML. [FILE-PATH] é o caminho no disco para salvar a política.

O exemplo abaixo consegue a política para o projeto my-project no formato JSON e o salva no diretório inicial do usuário.

gcloud projects get-iam-policy my-project --format json > ~/policy.json

A resposta será uma política.

API REST

Chame getIamPolicy():

POST https://cloudresourcemanager.googleapis.com/v1/[PROJECT]:getIamPolicy

[PROJECT] é o nome do recurso para o qual conseguir a política, como projects/my-project.

A resposta será uma política.

C#

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


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy GetPolicy(string projectId)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        var policy = service.Projects.GetIamPolicy(new GetIamPolicyRequest(),
            projectId).Execute();
        return policy;
    }
}

Python

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

def get_policy(project_id):
    """Gets IAM policy for a project."""

    # pylint: disable=no-member
    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])
    service = googleapiclient.discovery.build(
        'cloudresourcemanager', 'v1', credentials=credentials)
    policy = service.projects().getIamPolicy(
        resource=project_id, body={}).execute()
    print(policy)
    return policy

Modificar a política

De maneira programática ou usando um editor de texto, modifique a política para conceder ou revogar papéis a determinados usuários.

Para conceder ao usuário um papel existente:

COMANDO GCLOUD

No exemplo a seguir, um editor de texto é usado para conceder a user-3@gmail.com o papel Editor, anexando o endereço de e-mail dele à matriz members nesta vinculação:

{
  "members":[
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@gmail.com",
    "user:user-3@gmail.com"
  ],
  "role":"roles/editor"
}

API REST

No exemplo a seguir, um editor de texto é usado para conceder a user-3@gmail.com o papel Editor, anexando o endereço de e-mail dele à matriz members nesta vinculação:

{
  "members":[
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:user-2@gmail.com",
    "user:user-3@gmail.com"
  ],
  "role":"roles/editor"
}

C#

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


using System.Linq;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public Policy AddMember(Policy policy, string role, string member)
    {
        var binding = policy.Bindings.First(x => x.Role == role);
        binding.Members.Add(member);
        return policy;
    }
}

Python

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

def modify_policy_add_member(policy, role, member):
    """Adds a new member to a role binding."""

    binding = next(b for b in policy['bindings'] if b['role'] == role)
    binding['members'].append(member)
    print(binding)
    return policy

Para adicionar usuários a um novo papel que ainda não existe, adicione uma nova binding.

COMANDO GCLOUD

Com um editor de texto, adicione uma nova binding à matriz de bindings. O seguinte concede ao user-3@gmail.com o papel Leitor:

{
  "members":[
    "user:user-3@gmail.com"
  ],
  "role":"roles/reader"
}

API REST

Com um editor de texto, adicione uma nova binding à matriz de bindings. O seguinte concede ao user-3@gmail.com o papel Leitor:

{
  "members":[
    "user:user-3@gmail.com"
  ],
  "role":"roles/reader"
}

C#

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


using System.Collections.Generic;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy AddBinding(Policy policy, string role, string member)
    {
        var binding = new Binding
        {
            Role = role,
            Members = new List<string> { member }
        };
        policy.Bindings.Add(binding);
        return policy;
    }
}

Python

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

def modify_policy_add_role(policy, role, member):
    """Adds a new role binding to a policy."""

    binding = {
        'role': role,
        'members': [member]
    }
    policy['bindings'].append(binding)
    print(policy)
    return policy

Para revogar o acesso, exclua os membros ou vinculações que você quer completamente. Vinculações vazias sem membros não são permitidas.

Você só pode conceder papéis relacionados a serviços de API ativados. Se um serviço, como o Compute Engine, não estiver ativo, você não poderá atribuir papéis exclusivamente relacionados ao Compute Engine. Para mais informações, consulte Ativar e desativar APIs.

Há algumas restrições exclusivas ao conceder permissões em projetos, especialmente o papel Proprietário. Consulte a documentação de referência de projects.setIamPolicy() para mais informações.

Definir política

Depois de modificar a política para conceder os papéis que você quer, chame setIamPolicy() para fazer as atualizações.

COMANDO GCLOUD

Execute o comando set-iam-policy com o caminho para o arquivo JSON que contém a política atualizada:

gcloud projects set-iam-policy [PROJECT] [FILE-PATH]

Como acontece com get-iam-policy, [PROJECT] é o nome do projeto para o qual será definida a política. [FILE-PATH] é o caminho para o arquivo que contém a nova política.

A resposta será a política atualizada:

API REST

Chame setIamPolicy():

POST https://cloudresourcemanager.googleapis.com/v1/[PROJECT]:setIamPolicy

[PROJECT] é o nome do recurso para o qual será definida a política, como projects/my-project.

O corpo da solicitação precisa conter a política atualizada do IAM.

A resposta será a política atualizada:

C#


using Google.Apis.Auth.OAuth2;
using Google.Apis.CloudResourceManager.v1;
using Google.Apis.CloudResourceManager.v1.Data;

public partial class AccessManager
{
    public static Policy SetPolicy(string projectId, Policy policy)
    {
        var credential = GoogleCredential.GetApplicationDefault()
            .CreateScoped(CloudResourceManagerService.Scope.CloudPlatform);
        var service = new CloudResourceManagerService(
            new CloudResourceManagerService.Initializer
            {
                HttpClientInitializer = credential
            });

        return service.Projects.SetIamPolicy(new SetIamPolicyRequest
        {
            Policy = policy
        }, projectId).Execute();
    }
}

Python

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

def set_policy(project_id, policy):
    """Sets IAM policy for a project."""

    # pylint: disable=no-member
    credentials = service_account.Credentials.from_service_account_file(
        filename=os.environ['GOOGLE_APPLICATION_CREDENTIALS'],
        scopes=['https://www.googleapis.com/auth/cloud-platform'])
    service = googleapiclient.discovery.build(
        'cloudresourcemanager', 'v1', credentials=credentials)

    policy = service.projects().setIamPolicy(
        resource=project_id, body={
            'policy': policy
        }).execute()
    print(policy)
    return policy

Para evitar colisões, se várias fontes tentarem atualizar a política simultaneamente, esta conterá um valor etag. Quando você chama setIamPolicy(), o Cloud IAM compara o valor etag na solicitação com o etag existente e grava a política somente se os valores corresponderem.

A seguir

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

Enviar comentários sobre…

Documentação do Cloud IAM