Como gerenciar o acesso aos recursos do Compute Engine

Neste guia, descrevemos como usar o princípio de menor privilégio ao conceder acesso a recursos específicos do Compute Engine em vez de a um recurso pai, como um projeto, uma pasta ou uma organização.

Para conceder acesso a um recurso, defina uma política de gerenciamento de identidade e acesso (IAM, na sigla em inglês) no recurso. A política vincula um ou mais membros, como um usuário ou uma conta de serviço, a um ou mais papéis. Cada papel tem uma lista de permissões que permitem que o membro interaja com o recurso.

Ao conceder acesso a um recurso pai (por exemplo, a um projeto), você concede acesso implícito a todos os recursos filhos (por exemplo, todas as VMs desse projeto). Para limitar o acesso aos recursos, defina políticas do IAM em recursos de nível inferior, quando possível, em vez de no nível do projeto ou acima.

Para informações gerais sobre como conceder, alterar e revogar o acesso a recursos não relacionados ao Compute Engine (como conceder acesso a um projeto do Google Cloud, por exemplo), consulte a documentação do IAM sobre Como conceder, alterar e revogar acesso a recursos.

Antes de começar

Recursos compatíveis

O Compute Engine é compatível com o controle de acesso no nível dos seguintes recursos:

Não é possível controlar o acesso no nível dos demais recursos do Compute Engine. Portanto, você precisa gerenciar o acesso a eles para envolvidos no projeto, nível da pasta ou da organização. Para informações sobre organizações, pastas ou projetos, consulte Hierarquia de recursos.

Como conceder acesso aos recursos do Compute Engine

Antes de conceder um papel de IAM a um usuário em um recurso, verifique quais papéis estão disponíveis para esse recurso específico. Para mais informações, consulte Como ver os papéis atribuíveis a recursos.

Para conceder aos usuários permissão para acessar recursos específicos do Compute Engine, defina uma política de IAM no recurso.

Console

  1. No Console do Google Cloud, acesse a página do recurso para qual você quer incluir 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. No campo Adicionar membros, adicione um ou mais membros.
  5. Na lista Selecionar um papel, escolha um ou mais papéis.
  6. Clique em Adicionar para salvar as mudanças.

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'

Substitua o seguinte:

  • resource-type: o tipo do recurso. Alguns dos valores válidos são:
    • disks
    • images
    • instances
    • instance-templates
    • regionDisks
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • resource-name: o nome do recurso. Por exemplo, my_instance.
  • member: uma identidade válida para a qual você quer conceder o papel. Precisa estar no formato user|group|serviceAccount:email ou domain:domain. Exemplo:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • role: o papel que você quer atribuir à identidade.

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

API

Para modificar uma política do IAM por meio da API, faça o seguinte:

  1. Leia a política atual com o respectivo método getIamPolicy do recurso. Por exemplo, a solicitação HTTP a seguir lê a política do IAM de uma VM:

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:getIamPolicy

    Substitua o seguinte:

    • project-id: ID do projeto que contém a VM.
    • zone: a zona da VM. Para recursos regionais ou globais, substitua zones/zone por regions/region ou global.
    • instance: o nome da instância de VM.

    O Compute Engine retorna a política atual na resposta.

  2. Edite a política com um editor de texto para incluir ou remover membros e os respectivos papéis. Por exemplo, para conceder o papel compute.admin a email@example.com, inclua a nova vinculação a seguir à política:

    {
      "members": [
        "user:email@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. Grave a política atualizada com setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:setIamPolicy

    Substitua o seguinte:

    • project-id: ID do projeto que contém a VM.
    • zone: a zona da VM. Para recursos regionais ou globais, substitua zones/zone por regions/region ou global.
    • instance: o nome da instância de VM.

    No corpo da solicitação, forneça a política do IAM atualizada da etapa anterior.

Como revogar acesso a recursos

Como prática recomendada, depois que os membros não precisarem mais acessar seus recursos do Compute Engine, revogue o acesso deles.

Console

  1. No Console do Google Cloud, acesse a página do recurso para qual você quer incluir 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. Clique no cartão do papel do recurso de que você quer remover membros. Isso expande o cartão e mostra os membros com esse papel no recurso.
  5. Clique em Excluir para remover um membro desse papel.

gcloud

Para remover um papel de um membro em um recurso, 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'

Substitua o seguinte:

  • resource-type: tipo do recurso. Alguns dos valores válidos são:
    • disks
    • images
    • instances
    • instance-templates
    • regionDisks
    • sole-tenancy node-groups
    • sole-tenancy node-templates
    • snapshots
  • resource-name: nome do recurso. Por exemplo, my_instance.
  • member: a identidade que você quer remover. Precisa estar no formato user|group|serviceAccount:email ou domain:domain. Exemplo:
    • user:test-user@gmail.com
    • group:admins@example.com
    • serviceAccount:test123@example.domain.com
    • domain:example.domain.com
  • role: o papel que você quer remover da identidade.

Se você quiser remover o acesso a um recurso que está atualmente em versão Beta, use um comando gcloud beta compute.

API

Para modificar uma política do IAM diretamente por meio da API, faça o seguinte:

  1. Leia a política atual com o respectivo método getIamPolicy do recurso. Por exemplo, a solicitação HTTP a seguir lê a política do IAM de uma VM:

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:getIamPolicy

    Substitua o seguinte:

    • project-id: o ID do projeto da instância de VM.
    • zone: a zona da VM. Para recursos regionais ou globais, substitua zones/zone por regions/region ou global.
    • instance: o nome da instância de VM.

    O Compute Engine retorna a política atual na resposta.

  2. Edite a política com um editor de texto para remover membros dos respectivos papéis. Por exemplo, remova email@example.com do papel compute.admin:

    {
      "members": [
        "user:owner@example.com"
      ],
      "role":"roles/compute.admin"
    }
    
  3. Grave a política atualizada com setIamPolicy():

    POST https://compute.googleapis.com/compute/v1/projects/project-id/zones/zone/instances/instance:setIamPolicy

    Substitua o seguinte:

    • project-id: ID do projeto que contém a VM.
    • zone: a zona da VM. Para recursos regionais ou globais, substitua zones/zone por regions/region ou global.
    • instance: o nome da instância de VM.

    No corpo da solicitação, forneça a política do IAM atualizada da etapa anterior.

Como testar se o autor da chamada tem permissões

Se você não souber quais permissões uma identidade tem, use o método de API testIamPermissions para verificar as permissões disponíveis para essa identidade.

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

Geralmente, testIamPermissions se destina à integração com seu software proprietário, como uma interface gráfica do usuário (GUI, na sigla em inglês) personalizada. Normalmente, você não chama testIamPermissions se estiver usando o Google Cloud diretamente para gerenciar as permissões.

Por exemplo, se você estiver criando uma GUI na API Compute Engine e essa interface tiver um botão para iniciar uma instância, chame compute.instances.testIamPermissions() para determinar se o botão tem que estar ativado ou desativado.

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

  1. Envie uma solicitação para o recurso e inclua no corpo dela 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"
      ]
    }
    

Como modificar o acesso de vários membros aos recursos

Se você quiser modificar simultaneamente o acesso de vários membros aos recursos do Compute Engine, revise as recomendações sobre como modificar uma política do IAM de maneira programática.

A seguir