Como conceder acesso aos recursos do Compute Engine

As políticas do Cloud IAM para recursos do Compute Engine permitem conceder acesso a recursos específicos, como instâncias de VM, discos e imagens, por meio do gerenciamento de papéis do Cloud IAM nesses recursos. Isso oferece flexibilidade para aplicar o princípio do menor privilégio, por exemplo, para conceder permissões de colaboradores apenas aos recursos específicos necessários para o trabalho.

Os recursos também herdam as políticas do pai. A política efetiva de um recurso é a união da políticas definida nesse recurso e da política herdada de um recurso acima na hierarquia.

Ao vincular um membro ou definir a política em um recurso, os membros não receberão um e-mail de convite. Em vez disso, o acesso de cada membro será atualizado diretamente.

Consulte a documentação do Cloud IAM para mais informações sobre os tipos de membros, como usuários e grupos, que podem ser incluídos em uma política do Cloud IAM.

Antes de começar

Recursos compatíveis

Atualmente, é possível conceder acesso aos recursos do Compute Engine a seguir:

Também é possível conceder acesso aos recursos a seguir. No entanto, a concessão de acesso a esses recursos está atualmente em Beta, portanto, você precisa usar gcloud beta ou os comandos da API Beta:

Como adicionar e remover vinculações de membros de um recurso

Uma vinculação do Cloud IAM em um recurso concede um papel específico a um membro nesse recurso. É possível adicionar e remover vinculações do Cloud IAM em instâncias, discos, imagens e instantâneos usando o Console do Google Cloud Platform e a ferramenta de linha de comando gcloud.

Para atualizar a política do Cloud IAM de todos os membros em um recurso, consulte Como conseguir e definir a política de um recurso.

Console

  1. Acesse a respectiva página de recursos a que você quer adicionar permissões.
  2. Marque as caixas de seleção ao lado dos recursos que você quer atualizar.
  3. Clique em Mostrar painel de informações para expandir a coluna de permissões.
  4. Para adicionar membros:
    1. No campo Adicionar membros, adicione um ou mais membros.
    2. No menu suspenso Selecionar um papel, selecione um ou mais papéis.
    3. Clique em Adicionar para salvar as alterações.
  5. Para remover membros:
    1. Se o recurso tiver vinculações de política para um ou mais papéis, esses papéis serão exibidos como cartões expansíveis. Clique no cartão do papel de que você quer remover um ou mais membros.
    2. Clique no ícone de exclusão (ícone de exclusão semelhante a uma lixeira) para remover cada papel.

gcloud

Para conceder um papel a um membro em um recurso, use o subcomando add-iam-policy-binding do recurso com as sinalizações --member e --role.

gcloud compute [RESOURCE_TYPE] add-iam-policy-binding [RESOURCE_NAME] \
    --member='[MEMBER]' \
    --role='[ROLE]'

Para remover uma vinculação de política, use o subcomando remove-iam-policy-binding do recurso com as sinalizações --member e --role.

gcloud compute [RESOURCE_TYPE] remove-iam-policy-binding [RESOURCE_NAME] \
    --member='[MEMBER]' \
    --role='[ROLE]'

em que:

  • [RESOURCE_TYPE] é o tipo de recurso: disks, images, instances, instance-templates, sole-tenancy node-groups, sole-tenancy node-templates ou snapshots;
  • [RESOURCE_NAME] é o nome do recurso. Por exemplo, my_instance;
  • [MEMBER] é membro para adição da vinculação.
    • Deve estar no formato user|group|serviceAccount:email ou domain:domain. Por exemplo, user:test-user@gmail.com, group:admins@example.com, serviceAccount:test123@example.domain.com ou domain:example.domain.com.
    • Também pode ter um dos valores especiais a seguir:
      • allUsers: qualquer pessoa que esteja na Internet, com ou sem uma Conta do Google.
      • allAuthenticatedUsers: qualquer pessoa autenticada com uma Conta do Google ou uma conta de serviço.
  • [ROLE] é o papel a ser adicionado para esse membro.

Se você estiver concedendo acesso a um recurso que está em Beta no momento, use um comando gcloud beta compute.

Como conseguir e definir a política de um recurso

A política do Cloud IAM de um recurso é uma coleção de instruções que define quem recebeu acesso a esse recurso.

É possível atualizar a política de um recurso usando o padrão Ler-Modificar-Gravar, em que a política atual do Cloud IAM de um recurso é primeiramente recuperada, depois atualizada e, por fim, definida. Consulte a documentação do Cloud IAM para mais informações sobre esse padrão.

gcloud

Para conseguir ou definir a política de um recurso, use arquivos JSON ou YAML quando for executar comandos gcloud. Nos exemplos desta seção, usamos JSON.

  1. Execute o subcomando get-iam-policy do recurso para recuperar a política que você quer modificar.

    gcloud compute [RESOURCE_TYPE] get-iam-policy [RESOURCE_NAME] --format json > policy.json
    

    em que:

    • [RESOURCE_TYPE] é o tipo de recurso: disks, images, instances, instance-templates ou snapshots;
    • [RESOURCE_NAME] é o nome do recurso.

    Por exemplo, para recuperar a política do Cloud IAM de um disco chamado example-disk, execute:

    gcloud compute disks get-iam-policy example-disk --format json > policy.json
    
  2. Um arquivo de política JSON vazio será semelhante ao seguinte. A propriedade etag é usada para verificar se a política foi alterada desde a última solicitação.

    {
      "etag": "ACAB"
    }
    
  3. Usando um editor de texto, atualize o arquivo JSON. Construa um objeto bindings que contenha uma matriz. Cada objeto na matriz tem uma matriz de members e um papel associado para esses membros. Por exemplo, para conceder o papel roles/compute.imageUser aos grupos all-devs@example.com e some-devs@other-place.com e conceder o papel roles/compute.storageAdmin a bob@example.com:

    {
      "bindings": [
        {
          "members": [
            "group:all-devs@example.com",
            "group:other-devs@other-place.com"
          ],
          "role": "roles/compute.imageUser"
        },
        {
          "members": [
            "user:bob@example.com"
          ],
          "role": "roles/compute.storageAdmin"
        }
      ],
      "etag": "ACAB"
    }
    
  4. Para atualizar a política, execute o subcomando set-iam-policy do recurso e informe o caminho do arquivo JSON que contém a nova política. O comando será executado somente se o valor etag no arquivo JSON corresponder ao valor etag atual do recurso.

    gcloud compute [RESOURCE_TYPE] set-iam-policy [RESOURCE_NAME] policy.json
    

    Por exemplo, para definir a política do Cloud IAM de um disco chamado example-disk, execute:

    gcloud compute disks set-iam-policy example-disk policy.json
    
  5. A resposta ao comando gera a política atualizada, que inclui um valor etag atualizado.

    bindings:
    - members:
      - user:bob@example.com
        role: roles/compute.storageAdmin
    - members:
      - group:all-devs@example.com
      - group:other-devs@other-place.com
        role: roles/compute.imageUser
    etag: BwUjMhXbSPU=
    

API

Para modificar uma política atual:

  1. Recupere a política atual chamando o método getIamPolicy() do recurso.

    Por exemplo, em um disco:

    GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/getIamPolicy
    
  2. A solicitação retorna a política, inclusive uma matriz de bindings, se houver vinculações, e um valor etag. A propriedade etag é usada para verificar se a política foi alterada desde a última solicitação.

    {
      "etag": "BwVvzaUs8EY=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email2@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  3. Modifique a política conforme necessário e, em seguida, defina a política atualizada chamando setIamPolicy().

    Por exemplo, se você quiser revogar o papel compute.imageUser para email2@gmail.com, a solicitação terá a seguinte aparência.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/disks/[DISK_NAME]/setIamPolicy

    {
      "etag": "BwVvzaUs8EY=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    
  4. A resposta mostra a política atualizada, que inclui um valor etag atualizado.

    {
      "etag": "BwVwGgz7Arg=",
      "bindings":[
        {
          "role":"roles/compute.storageAdmin",
          "members":[
            "user:bob@example.com",
            "serviceAccount:service-account@my-project.iam.gserviceaccount.com"
          ]
        },
        {
          "role":"roles/compute.imageUser",
          "members":[
            "user:email1@gmail.com",
            "user:email3@gmail.com"
          ]
        }
      ]
    }
    

Como testar se um autor da chamada tem permissões

O método da API testIamPermissions usa um URL de recurso e um conjunto de permissões como parâmetros de entrada e retorna o conjunto de permissões do autor da chamada. Esse método pode ser usado em todos os recursos compatíveis.

Você normalmente não invocará testIamPermission se estiver usando o GCP diretamente para gerenciar permissões. A testIamPermissions se destina à integração com o software reservado, como uma interface gráfica personalizada do usuário. Por exemplo, se você estiver criando uma GUI na API Compute Engine e a GUI tiver um botão" "iniciar" "que inicia uma instância, chame compute.instances.testIamPermissions() para determinar se o botão deve ser ativado ou desativado.

Para testar se um autor da chamada tem permissões específicas em um recurso:

  1. Envie uma solicitação para o recurso e inclua no corpo da solicitação uma lista de permissões a serem verificadas.

    Por exemplo, em uma instância, convém verificar compute.instances.start, compute.instances.stop e compute.instances.delete.

    POST https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/instances/[INSTANCE_NAME]/setIamPolicy

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop",
        "compute.instances.delete"
       ]
    }
    
  2. A solicitação retorna as permissões ativadas para o autor da chamada.

    {
      "permissions": [
        "compute.instances.start",
        "compute.instances.stop"
      ]
    }
    

Cenários

Como compartilhar imagens específicas dentro de uma organização

Considere uma empresa que tenha um conjunto de imagens de máquina com certificação de TI e queira conceder a determinadas equipes acesso a determinadas imagens. Sem as políticas do Cloud IAM para recursos do Compute Engine, a empresa precisaria conceder a todos acesso a todas as imagens ou armazenar as imagens em vários projetos. Com as políticas do Cloud IAM para recursos do Compute Engine, a empresa pode manter todas as imagens em um único projeto para facilitar o gerenciamento e conceder a equipes acesso apenas ao subconjunto de imagens de que precisam para realizar o trabalho delas.

No exemplo abaixo, há várias imagens em images-project. O grupo all-devs@example.com tem acesso para usar a imagem ubuntu-base-v1-0, mas não para as imagens ubuntu-v1-1-test e mysql-v1. Além disso, o grupo db-admins@example.com só tem acesso para usar a imagem mysql-v1. Para fazer essa configuração, defina uma política do Cloud IAM na imagem ubuntu-base-v1-0 que conceda o papel Usuário da imagem a all-devs@example.com e defina uma política do Cloud IAM em mysql-v1 que conceda o papel Usuário da imagem a db-admin@example.com.

Para usar a ferramenta de linha de comando gcloud a fim de conceder a all-devs@example.com a permissão para usar a imagem shared-image:

  1. Consiga a política do Cloud IAM:

    gcloud compute images get-iam-policy shared-image --format json > policy.json
    
  2. Modifique policy.json em um editor de texto para conceder a all-devs@example.com o papel roles/compute.imageUser:

    {
      "bindings": [
        {
          "members": [
            "group:all-devs@example.com"
          ],
          "role": "roles/compute.imageUser"
        }
      ],
      "etag": "ACAB"
    }
    
  3. Aplique o policy.json modificado à imagem.

    gcloud compute images set-iam-policy shared-image policy.json
    

Como compartilhar imagens específicas com o público

Suponhamos que você seja um parceiro do Google que publique imagens para usuários do Compute Engine. É possível definir uma política do Cloud IAM em uma imagem para compartilhá-la com todos os usuários autenticados no Compute Engine.

Para disponibilizar shared-image a todos os usuários do Compute Engine usando a API Compute Engine:

  1. Consiga a política do Cloud IAM.

    GET https://compute.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/getIamPolicy
    
  2. A solicitação retorna a política.

    {
     "etag": "ACAB"
    }
    
  3. Aplique a política modificada.

    POST https://compute.googleapis.com/compute/alpha/projects/[PROJECT_ID]/zones/[ZONE]/images/shared-image/setIamPolicy
    {
      "bindings": [
        {
          "members": [
            "allAuthenticatedUsers"
          ],
          "role": "roles/compute.imageUser"
        }
      ],
      "etag": "ACAB"
    }
    
  4. A solicitação retorna a política atualizada.

    {
     "etag": "BwVa45js9SQ=",
     "bindings": [
       {
         "role": "roles/compute.imageUser",
         "members": [
           "allAuthenticatedUsers"
         ]
       }
     ]
    }
    

Como conceder a um colega de equipe acesso a uma instância para depurar um problema

Suponhamos que você tenha criado uma instância e queira que alice@example.com ajude a depurar um problema. Modifique a política do Cloud IAM da instância para conceder o papel Administrador da instância do Compute (v1) a alice@example.com.

Se a instância estiver configurada para ser executada como uma conta de serviço e você quiser que Alice possa se conectar usando SSH, definir metadados ou anexar um disco, conceda o papel Usuário da conta de serviço a alice@example.com na conta de serviço da instância. Conceder esse papel na conta de serviço é necessário porque essas três operações permitem que Alice execute comandos em nome da conta. Consulte Permissões da conta de serviço para mais informações sobre como tratar contas de serviço como um recurso.

Se você quiser que Alice gerencie a instância usando o Console do GCP, conceda a ela um papel com a permissão compute.projects.get. Por exemplo, é possível conceder a Alice o papel Leitor do Compute, que contém essa permissão. Esse papel também pode ver todos os recursos do Compute Engine no projeto, mas não pode ler dados de discos, imagens ou instantâneos. Como alternativa, é possível criar um papel personalizado com as permissões necessárias.

Veja como fazer isso com gcloud.

  1. Consiga a política do Cloud IAM para a instância.

    gcloud compute instances get-iam-policy example-instance --format json > policy.json
    
  2. Modifique policy.json em um editor de texto.

    {
      "bindings": [
        {
          "members": [
            "user:alice@example.com"
          ],
          "role": "roles/compute.instanceAdmin.v1"
        }
      ],
      "etag": "ACAB"
    }
    
  3. Aplique o policy.json modificado à instância.

    gcloud compute instances set-iam-policy example-instance policy.json
    
  4. Conceda o papel Usuário da conta de serviço a alice@example.com na conta de serviço da instância. Suponha que a conta de serviço da instância seja data-reader-service-account@[PROJECT_ID].iam.gserviceaccount.com.

     gcloud iam service-accounts add-iam-policy-binding \
         data-reader-service-account@[PROJECT_ID].iam.gserviceaccount.com \
         --member="user:alice@example.com" \
         --role="roles/iam.serviceAccountUser"
    

    gcloud retorna o seguinte:

     bindings:
     - members:
       - user:alice@example.com
       role: roles/iam.serviceAccountUser
     etag: BwVa42MC-aY=
    
  5. Conceda o papel Leitor do Compute a alice@example.com no projeto

    gcloud projects add-iam-policy-binding [PROJECT_ID] \
        --member=user:alice@example.com \
        --role=roles/compute.viewer
    

    gcloud retorna o seguinte:

    bindings:
    - members:
      - user:alice@example.com
      role: roles/iam.serviceAccountUser
    [...]
    etag: BwVa42MC-aY=
    

Alice já pode ver a instância no Console do GCP e tem permissão para chamar qualquer método na instância. Se Alice precisar de permissões em recursos adicionais (por exemplo, sub-redes ou firewalls), você precisará conceder a ela o papel predefinido apropriado (por exemplo, Usuário da rede).

A seguir

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

Enviar comentários sobre…

Documentação do Compute Engine