Como conceder, alterar e revogar acesso aos membros do projeto

Nesta página, descreveremos como conceder, alterar e revogar acesso aos membros do Projeto. É possível adicionar membros da equipe aos projetos que você tem e conceder aos membros diferentes níveis de acesso a recursos e APIs do projeto. Para conceder acesso a um projeto, o proprietário dele pode adicionar novos usuários e conceder a eles papéis específicos do Cloud IAM.

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

Antes de começar

Como conceder acesso a membros da equipe

Para permitir que os membros da equipe acessem os recursos e as APIs de um projeto, os proprietários dos projetos podem conceder papéis do IAM aos usuários. Você pode conceder um papel a um usuário usando o Console do GCP, a ferramenta de linha de comando gcloud ou o método setIamPolicy(). Quando você define uma política ou adiciona uma vinculação para conceder um papel a um usuário, ele não recebe um e-mail de convite. Em vez disso, o acesso do usuário é atualizado diretamente.

Com o método setIamPolicy(), atribua papéis a usuários anexando uma política do Cloud IAM a um recurso. Essa política é um conjunto de instruções que define o acesso de cada um. Os papéis que podem ser concedidos estão relacionados aos serviços da API que estão ativados. Se um serviço, como o Compute Engine, não estiver ativo para esse projeto, os papéis que concedem acesso às Compute Engine APIs não serão visíveis no console ou atribuíveis por qualquer método. Para mais informações, consulte Ativar e desativar APIs.

Ler-modificar-gravar: um padrão comum na atualização dos metadados de um recurso, como Policy, é ler o estado atual dele, atualizar os dados localmente e enviá-los para gravação. Com esse padrão, um conflito pode ocorrer 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 na política simultaneamente, pode haver uma falha. Esse problema é solucionado no Cloud IAM por meio da propriedade etag nas políticas. Com essa propriedade, você verifica se a política foi alterada desde a última solicitação. Quando a solicitação é enviada ao Cloud IAM com um valor etag, esse valor etag é comparado ao valor etag associado à política. A política é gravada somente se os valores de etag forem correspondentes.

Ao atualizar uma policy, adquira primeiro a policy usando getIamPolicy(), atualize a policy e grave a policy atualizada usando setIamPolicy(). Use o valor etag quando configurar a policy somente se a política correspondente no GetPolicyResponse contiver um valor etag.

gcloud

Você pode usar arquivos JSON ou YAML com os comandos gcloud. Este exemplo usa JSON.

Para definir a política Cloud IAM de um projeto usando o comando gcloud:

  1. Acesse a política que você quer modificar e grave-a em um arquivo JSON:

    gcloud projects get-iam-policy PROJECT_ID --format json > iam.json
    
  2. O conteúdo do arquivo JSON será semelhante ao código a seguir. Observe que o campo "version" é somente leitura, você não precisa fornecê-lo.

    {
        "bindings": [
        {
            "members": [
              "user:email1@gmail.com"
            ],
            "role": "roles/owner"
        },
        {
            "members": [
              "serviceAccount:our-project-123@appspot.gserviceaccount.com",
              "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
            ],
            "role": "roles/editor"
        }
        ],
        "etag": "BwUjMhCsNvY=",
        "version": 1
    }
    
  3. Com um editor de texto, adicione um novo objeto à matriz bindings. Nela, estão definidos os membros do grupo e os papéis atribuídos a eles. Por exemplo, para atribuir o papel roles/viewer ao usuário email2@gmail.com, mude o exemplo mostrado acima da seguinte maneira:

    {
        "bindings": [
        {
            "members": [
              "user:email1@gmail.com"
            ],
            "role": "roles/owner"
        },
        {
            "members": [
              "serviceAccount:our-project-123@appspot.gserviceaccount.com",
              "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
              "user:email2@gmail.com"
            ],
            "role": "roles/viewer"
        }
        ],
        "etag": "BwUjMhCsNvY=",
     }
    
  4. Atualize a política do projeto. Basta executar o seguinte comando:

    gcloud projects set-iam-policy PROJECT_ID iam.json
    
  5. O comando gera a política atualizada:

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

Para adicionar uma única vinculação a uma política existente do Cloud IAM:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member user:email3@gmail.com --role roles/editor

O comando gera a política atualizada:

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
      - user:email3@gmail.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
    role: roles/viewer
    etag: BwUm38GGAQk=
    version: 1

Console

Para adicionar um membro da equipe e conceder um papel do Cloud IAM ao membro:

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

    Abrir a página "IAM"

  2. Clique em Selecionar um projeto.

  3. Selecione um projeto e clique em Abrir.

  4. Clique em Adicionar para incluir novos membros ao projeto e defina as permissões deles. Na lista suspensa Selecionar um papel, clique em um nome de serviço para procurar as funções que pertencem a ele.

Para atribuir mais de um papel ao mesmo membro do projeto:

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

    Abrir a página "IAM"

  2. Clique em Selecionar um projeto.

  3. Selecione um projeto e clique em Abrir.

  4. Insira o endereço de e-mail do membro e selecione todos os papéis que quer atribuir a ele. Clique em Adicionar.

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. Na guia IAM no painel à direita, adicione o novo membro e selecione um papel para atribuir a todos os projetos selecionados.

API

A política de um projeto é definida pelo seguinte snippet de código:

Solicitação:

POST https://cloudresourcemanager.googleapis.com/v1/projects/our-project-123:setIamPolicy

 {
   "policy": {
     "bindings": [
      {
        "role": "roles/owner",
        "members": [
          "user:email1@gmail.com",
          "user:email2@gmail.com",
          "user:email3@gmail.com"
         ]
      },
      {
        "role": "roles/editor",
        "members": [
          "serviceAccount:my-other-app@appspot.gserviceaccount.com"
         ]
      }
      ]
    }
}

Resposta:

{
  "bindings": [
   {
     "role": "roles/owner",
     "members": [
       "user:email1@gmail.com",
       "user:email2@gmail.com",
       "user:email3@gmail.com"
     ]
   },
   {
     "role": "roles/editor",
     "members": [
       "serviceAccount:my-other-app@appspot.gserviceaccount.com"
     ]
   }
   ]
 }

Java

O snippet de código do Java abaixo segue o padrão ler-modificar-gravar para adicionar a policy.

import com.google.api.services.cloudresourcemanager.model.Policy;
import com.google.api.services.cloudresourcemanager.model.SetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.model.GetIamPolicyRequest;
import com.google.api.services.cloudresourcemanager.model.Binding;
import java.util.LinkedList;
import java.util.Arrays;

...

String[] myViewers = new String[] {"user:testviewer1@gmail.com",
    "user:testviewer2@gmail.com"};

String targetRole = "viewers";

Policy policy =
    client.projects().getIamPolicy(projectId,
    new GetIamPolicyRequest()).execute();

Binding targetBinding = null;

// Make a local copy of the bindings for modifying
LinkedList<Binding> bindings =
    new LinkedList<Binding>(policy.getBindings());

// Search for the existing binding having role name of
// targetRole.
for (Binding binding : bindings) {
    if (binding.getRole().equals(targetRole)) {
        targetBinding = binding;
    break;
    }
}

// If no matching targetBinding is found, construct a new Binding object,
// and add it to the bindings list.
if (targetBinding == null) {
    targetBinding = new Binding();
targetBinding.setRole(targetRole);
bindings.add(targetBinding);
}

// Finally, set the list of members as the members of targetBinding.
targetBinding.setMembers(Arrays.asList(myViewers));

// Write the policy back into the project by calling SetIamPolicy.
SetIamPolicyRequest setIamPolicyRequest = new SetIamPolicyRequest();
    setIamPolicyRequest.setPolicy(policy);
client.projects().setIamPolicy(projectId,
    setIamPolicyRequest).execute();

...

Como alterar o acesso dos membros da equipe

gcloud

Você pode usar arquivos JSON ou YAML com os comandos gcloud. Este exemplo usa JSON.

Para modificar a política do Cloud IAM de um projeto usando o comando gcloud:

  1. Acesse a política que você quer modificar e grave-a em um arquivo JSON:

    gcloud projects get-iam-policy PROJECT_ID --format json > iam.json
    
  2. O conteúdo do arquivo JSON será semelhante ao código a seguir. Observe que o campo version é somente para leitura, você não precisa fornecê-lo.

    {
        "bindings": [
        {
            "members": [
              "user:email1@gmail.com"
            ],
            "role": "roles/owner"
        },
        {
            "members": [
              "serviceAccount:our-project-123@appspot.gserviceaccount.com",
              "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
            ],
            "role": "roles/editor"
        }
        ],
        "etag": "BwUjMhCsNvY=",
        "version": 1
    }
    
  3. Com um editor de texto, adicione um novo objeto à matriz bindings. Nela estão definidos os membros do grupo e os papéis atribuídos a eles. Por exemplo, para atribuir o papel roles/viewer ao usuário email2@gmail.com, altere o exemplo mostrado acima da seguinte maneira:

    {
        "bindings": [
        {
            "members": [
              "user:email1@gmail.com"
            ],
            "role": "roles/owner"
        },
        {
            "members": [
              "serviceAccount:our-project-123@appspot.gserviceaccount.com",
              "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
            ],
            "role": "roles/editor"
        },
        {
            "members": [
              "user:email2@gmail.com"
            ],
            "role": "roles/viewer"
        }
        ],
        "etag": "BwUjMhCsNvY="
    }
    
  4. Atualize a política do projeto. Basta executar o seguinte comando:

    gcloud projects set-iam-policy PROJECT_ID iam.json
    
  5. O comando gera a política atualizada:

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
        role: roles/viewer
    etag: BwUjMhXbSPU=
    version: 1
    

Console

  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 alterar o acesso.

  5. Na lista suspensa Papéis na linha do membro, desmarque os papéis atribuídos anteriormente e marque os novos papéis que você quer atribuir.

  6. Clique em Salvar.

API

Para modificar uma política existente:

  1. Acesse a política existente enviando a seguinte solicitação:

    POST
    https://cloudresourcemanager.googleapis.com/v1beta1/projects/$our-project-123:getIamPolicy
    
  2. O comando retorna a política na resposta:

    {
        "bindings": [
        {
            "role": "roles/editor",
            "members": [
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
              "user:email1@gmail.com",
              "user:email2@gmail.com",
              "user:email3@gmail.com"
            ]
        }
        ]
    }
    
  3. Modifique a política.

  4. Escreva a política usando setIamPolicy():

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$our-project-123:setIamPolicy
    
     {
         "policy": {
             "bindings": [
             {
                 "role": "roles/owner",
                 "members": [
                   "user:email1@gmail.com",
                   "user:email2@gmail.com",
                   "user:email3@gmail.com"
                 ]
             },
             {
                 "role": "roles/viewer",
                 "members": [
                   "serviceAccount:my-other-app@appspot.gserviceaccount.com"
                 ]
             }
             ]
         }
    }
    
  5. A solicitação setIamPolicy() retorna a política na resposta:

    {
        "bindings": [
        {
            "role": "roles/owner",
            "members": [
              "user:email1@gmail.com",
              "user:email2@gmail.com",
              "user:email3@gmail.com"
            ]
        },
        {
            "role": "roles/viewer",
            "members": [
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
        }
        ]
    }
    

Como revogar o acesso aos membros da equipe

gcloud

Você pode usar arquivos JSON ou YAML com os comandos gcloud. Este exemplo usa JSON.

Para revogar o acesso do usuário a um projeto:

  1. Acesse a política que você quer modificar e grave-a em um arquivo JSON:

    gcloud projects get-iam-policy PROJECT_ID --format json > iam.json
    
  2. O conteúdo do arquivo JSON será semelhante ao código a seguir. Observe que o campo "version" é somente leitura, você não precisa fornecê-lo.

    {
        "bindings": [
        {
            "members": [
              "user:email1@gmail.com"
            ],
            "role": "roles/owner"
        },
        {
            "members": [
              "serviceAccount:our-project-123@appspot.gserviceaccount.com",
              "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
            ],
            "role": "roles/editor"
        }
        ],
        "etag": "BwUjMhCsNvY=",
        "version": 1
    }
    
  3. Usando um editor de texto, exclua o usuário que tenha a permissão que você quer revogar. Por exemplo, para revogar o papel roles/editor do usuário serviceAccount:our-project-123@appspot.gserviceaccount.com, altere o exemplo mostrado acima da seguinte maneira:

    {
        "bindings": [
        {
            "members": [
              "user:email1@gmail.com"
            ],
            "role": "roles/owner"
        },
        {
            "members": [
              "serviceAccount:123456789012-compute@developer.gserviceaccount.com"
            ],
            "role": "roles/editor"
        },
        ],
        "etag": "BwUjMhCsNvY="
    }
    
  4. Atualize a política do projeto. Basta executar o seguinte comando:

    gcloud projects set-iam-policy PROJECT_ID iam.json
    
  5. O comando gera a política atualizada:

    bindings:
    - members:
      - user:email1@gmail.com
        role: roles/owner
    - members:
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
        role: roles/editor
    etag: BwUjMhXbSPU=
    version: 1
    

Para remover uma vinculação de uma política:

    gcloud projects remove-iam-policy-binding PROJECT_ID \
        --member user:email3@gmail.com --role roles/editor

O comando gera a política atualizada:

    bindings:
    - members:
      - user:email1@gmail.com
      role: roles/owner
    - members:
      - serviceAccount:our-project-123@appspot.gserviceaccount.com
      - serviceAccount:123456789012-compute@developer.gserviceaccount.com
      role: roles/editor
    - members:
      - user:email2@gmail.com
      role: roles/viewer
    etag: BwUf0bMcTwg=
    version: 1

Console

  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.

  5. Na lista suspensa Papéis na linha do membro, desmarque os papéis que você quer revogar e clique em Salvar.

API

Para modificar uma política existente:

  1. Acesse a política existente enviando a seguinte solicitação:

    POST
    https://cloudresourcemanager.googleapis.com/v1beta1/projects/$our-project-123:getIamPolicy
    
  2. A solicitação retorna a política:

    {
        "bindings": [
        {
            "role": "roles/editor",
            "members": [
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
              "user:email1@gmail.com",
              "user:email2@gmail.com",
              "user:email3@gmail.com"
            ]
        }
        ]
    }
    
  3. Exclua o usuário da vinculação de membro e escreva a política usando setIamPolicy(). Por exemplo, para revogar o papel de proprietário de email2@gmail.com, a solicitação é semelhante à seguinte:

    POST https://cloudresourcemanager.googleapis.com/v1/projects/$our-project-123:setIamPolicy
    
     {
         "policy": {
             "bindings": [
             {
                 "role": "roles/owner",
                 "members": [
                   "user:email1@gmail.com",
                   "user:email3@gmail.com"
                 ]
             },
             {
                 "role": "roles/viewer",
                 "members": [
                   "serviceAccount:my-other-app@appspot.gserviceaccount.com"
                 ]
             }
             ]
         }
    }
    
  4. A resposta será a política atualizada:

    {
        "bindings": [
        {
            "role": "roles/owner",
            "members": [
              "user:email1@gmail.com",
              "user:email3@gmail.com"
            ]
        },
        {
            "role": "roles/viewer",
            "members": [
              "serviceAccount:my-other-app@appspot.gserviceaccount.com"
            ]
        }
        ]
    }
    

Próximas etapas

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

Enviar comentários sobre…

Documentação do Cloud Identity and Access Management