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ê tem para diferentes usuários, usando os papéis refinados do Cloud IAM.

Gerencie papéis de usuários com o Console do Cloud, a ferramenta de linha de comando gcloud, a API REST ou as bibliotecas de cliente. Usar o Console do Cloud é o método mais fácil e é o abordado na primeira metade deste artigo, assim como a execução de atualizações rápidas usando a ferramenta de linha de comando gcloud. A utilização de métodos programáticos para cenários mais complexos é abordada na segunda metade.

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

Antes de começar

Como usar o Console do Cloud

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

Como 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 "IAM" no Console do Cloud.

    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. Como prática recomendada de segurança, conceda ao membro o mínimo de privilégio necessário. 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 a mais de um projeto, siga estas etapas:

  1. Abra a página "Projetos" da seção "IAM e Admin" no Console do Cloud.

    Abrir a página "Projetos" de "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 recebe o papel escolhido em cada um dos projetos selecionados.

Como revogar o acesso

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

    Abrir a página "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 a ser revogado e, em seguida, clique em Salvar.

Como modificar o 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 a gcloud para atualizações rápidas

Também é possível conceder ou revogar o acesso rapidamente usando a ferramenta de linha de comando gcloud.

Como conceder acesso

Para conceder um papel a um membro rapidamente, execute o comando add-iam-policy-binding da ferramenta gcloud:

gcloud [GROUP] add-iam-policy-binding [RESOURCE] \
    --member [MEMBER] --role [ROLE_ID]

Forneça os valores a seguir:

  • [GROUP]: o grupo de ferramentas gcloud do recurso que você quer atualizar. Por exemplo, é possível usar projects ou organizations.
  • [RESOURCE]: o nome do recurso.
  • [MEMBER]: um identificador para o membro, que geralmente tem este formato: member_type:id. Por exemplo, user:alice@example.com. Veja uma lista completa dos valores que [MEMBER] pode ter na Referência de vinculação de políticas.
  • [ROLE_ID]: o nome do papel.

Por exemplo, para conceder o papel Leitor ao usuário alice@example.com do projeto my-project:

gcloud projects add-iam-policy-binding my-project \
    --member user:alice@example.com --role roles/viewer

Como revogar o acesso

Para revogar rapidamente o papel de um usuário, execute o comando remove-iam-policy-binding da ferramenta gcloud:

gcloud [GROUP] remove-iam-policy-binding [RESOURCE] \
    --member [MEMBER] --role [ROLE_ID]

Forneça os valores a seguir:

  • [GROUP]: o grupo de ferramentas gcloud do recurso que você quer atualizar. Por exemplo, é possível usar projects ou organizations.
  • [RESOURCE]: o nome do recurso.
  • [MEMBER]: um identificador para o membro, que geralmente tem este formato: member_type:id. Por exemplo, user:alice@example.com. Veja uma lista completa dos valores que [MEMBER] pode ter na Referência de vinculação de políticas.
  • [ROLE_ID]: o nome do papel.

Por exemplo, para revogar o papel Leitor do usuário bob@example.com do projeto my-project:

gcloud projects remove-iam-policy-binding my-project \
    --member user:bob@example.com --role roles/viewer

Como controlar o acesso de maneira programática

Em alguns casos de uso, é mais fácil gerenciar o controle de acesso de maneira programática. Use a ferramenta de linha de comando gcloud, a API REST ou as bibliotecas de cliente para controlar o acesso de maneira programática. Os métodos programáticos são úteis para fazer atualizações automáticas ou em grande escala que podem ter execução demorada no Console do Cloud ou para executar comandos gcloud para cada membro.

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.

O exemplo a seguir mostra uma política em que alice@example.com recebeu o papel de Proprietário e bob@example.com e service-account-13@appspot.gserviceaccount.com receberam o papel de Editor:

{
  "bindings":[
    {
      "members":[
        "user:alice@example.com"
      ],
      "role":"roles/owner"
    },
    {
      "members":[
        "serviceAccount:service-account-13@appspot.gserviceaccount.com",
        "user:bob@example.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. gravação 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 gama de recursos do Google Cloud, 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.

Como conseguir a política atual

Comando gcloud

Execute o comando get-iam-policy:

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

Forneça os valores a seguir:

  • [PROJECT_ID]: o projeto que você está atualizando (por exemplo, my-project).
  • [FORMAT]: o valor JSON ou YAML.
  • [FILEPATH]: o caminho para um novo arquivo de saída para a política.

Por exemplo, o comando a seguir recebe a política do projeto my-project no formato JSON e a salva no diretório inicial do usuário:

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

API REST

Chame getIamPolicy():

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

Substitua [PROJECT_ID] pelo projeto sobre o qual você está recebendo informações (por exemplo, my-project).

A resposta contém a 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 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 Cloud IAM para Python.

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

    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

Como modificar uma política

Modifique a cópia local da política do projeto de maneira programática ou com um editor de texto a fim de refletir os papéis que você quer conceder ou revogar em relação a determinados usuários.

Como conceder um papel

Para conceder um papel que já está incluído na política:

Comando gcloud

Conceda um papel editando a política JSON ou YAML retornada pelo comando get-iam-policy. Essa alteração de política só entrará em vigor quando você definir a política atualizada.

O exemplo a seguir concede o papel Editor a eve@example.com. Para conceder esse papel, anexe o usuário à matriz members da vinculação:

{
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:bob@example.com",
    "user:eve@example.com"
  ],
  "role":"roles/editor"
}

API REST

Conceda um papel editando a política retornada pelo comando get-iam-policy. Essa alteração de política só entrará em vigor quando você definir a política atualizada.

O exemplo a seguir concede o papel Editor a eve@example.com. Para conceder esse papel, anexe o usuário à matriz members da vinculação:

{
  "members": [
    "serviceAccount:service-account-13@appspot.gserviceaccount.com",
    "user:bob@example.com",
    "user:eve@example.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 Cloud IAM para C#.


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

public partial class AccessManager
{
    public static 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 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 conceder um papel que ainda não está incluído na política, adicione uma nova binding.

Comando gcloud

Adicione uma nova vinculação editando a política JSON ou YAML retornada pelo comando get-iam-policy. Essa alteração de política só entrará em vigor quando você definir a política atualizada.

O exemplo a seguir concede o papel Leitor a eve@example.com. Para conceder esse papel, adicione uma nova vinculação à matriz bindings da política:

{
  "members": [
    "user:eve@example.com"
  ],
  "role":"roles/reader"
}

API REST

Adicione uma nova vinculação editando a política retornada pelo comando get-iam-policy. Essa alteração de política só entrará em vigor quando você definir a política atualizada.

O exemplo a seguir concede o papel Leitor a eve@example.com. Para conceder esse papel, adicione uma nova vinculação à matriz bindings da política:

{
  "members": [
    "user:eve@example.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 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 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

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.

Como revogar um papel

Para revogar um papel:

Comando gcloud

Revogue um papel editando a política JSON ou YAML retornada pelo comando get-iam-policy. Essa alteração de política só entrará em vigor quando você definir a política atualizada.

Para revogar um papel de um membro, exclua os membros ou as vinculações da matriz bindings da política.

API REST

Revogue um papel editando a política retornada pelo comando get-iam-policy. Essa alteração de política só entrará em vigor quando você definir a política atualizada.

Exclua os membros ou as vinculações da matriz bindings da 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 Cloud IAM para C#.


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

public partial class AccessManager
{
    public static Policy RemoveMember(Policy policy, string role, string member)
    {
        try
        {
            var binding = policy.Bindings.First(x => x.Role == role);
            if (binding.Members.Count != 0 && binding.Members.Contains(member))
            {
                binding.Members.Remove(member);
            }
            if (binding.Members.Count == 0)
            {
                policy.Bindings.Remove(binding);
            }
            return policy;
        }
        catch (System.InvalidOperationException e)
        {
            System.Diagnostics.Debug.WriteLine("Role does not exist in policy: \n" + e.ToString());
            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 Cloud IAM para Python.

def modify_policy_remove_member(policy, role, member):
    """Removes a  member from a role binding."""
    binding = next(b for b in policy['bindings'] if b['role'] == role)
    if 'members' in binding and member in binding['members']:
        binding['members'].remove(member)
    print(binding)
    return policy

Como definir uma política

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

Comando gcloud

Use o comando set-iam-policy e forneça um caminho para o arquivo JSON que contém a política atualizada:

gcloud projects set-iam-policy [PROJECT_ID] [FILEPATH]

Forneça os valores a seguir:

  • [PROJECT_ID]: o projeto que você está atualizando (por exemplo, my-project).
  • [FILEPATH]: o caminho para um arquivo que contém a nova política.

A resposta contém a política atualizada.

API REST

Chame setIamPolicy():

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

Substitua [PROJECT_ID] pelo projeto que você está atualizando (por exemplo, my-project).

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

A resposta contém 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 Cloud IAM para Python.

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

    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, a política conterá um valor etag. Quando você chama setIamPolicy(), o Cloud IAM compara o valor etag contido na solicitação com o etag atual e grava a política somente se os valores corresponderem.

A seguir