Como atribuir papéis a contas de serviço

Ao conceder os papéis do IAM, você pode tratar a conta de serviço como recurso ou como identidade.

Uma conta de serviço é usada pelo seu aplicativo como uma identidade para ser autenticada nos serviços do Google Cloud Platform. Por exemplo, se uma máquina virtual (VM, na sigla em inglês) do Google Compute Engine está sendo executada como uma conta de serviço, atribua o papel de editor à conta de serviço (a identidade) para um projeto (o recurso).

Ao mesmo tempo, controle também quem pode iniciar a VM. Faça isso atribuindo o papel serviceAccountUser a um usuário (a identidade) para a conta de serviço (o recurso).

Para informações sobre contas de serviço e outros exemplos sobre o uso delas como um recurso, consulte Contas de serviço.

Pré-requisitos para este guia

Como atribuir papéis a uma conta de serviço para recursos específicos

Atribua papéis a uma conta de serviço para que ela tenha permissão para concluir ações específicas nos recursos no projeto do Cloud Platform. Por exemplo, atribua o papel storage.admin a uma conta para que ela tenha controle sobre objetos e intervalos no Google Cloud Storage.

Para conceder papéis a uma conta de serviço, use um dos métodos abaixo:

gcloud

Adicione um papel a uma única conta de serviço.

gcloud projects add-iam-policy-binding my-project-123 \
    --member serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.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
      - serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com
      - user:email3@gmail.com
        role: roles/editor
    - members:
      - user:email2@gmail.com
    role: roles/viewer
    etag: BwUm38GGAQk=
    version: 1

Para instruções sobre como conceder acesso a contas de serviço como identidades nos projetos, consulte Como conceder, alterar e revogar acesso a membros do projeto.

API

A solicitação POST a seguir usa o método projects.setIamPolicy() para conceder acesso de editor a uma conta de serviço my-sa-123 do projeto my-project-123. O corpo da solicitação precisa conter a nova política que concede permissões à conta. Cada papel pode ter vários membros.

POST https://cloudresourcemanager.googleapis.com/v1beta1/projects/my-project-123:setIamPolicy

{
    "policy":
    {
        "version": 1,
        "etag": "BwUqMvZQGfo=",
        "bindings": [
        {
            "role": "roles/editor",
            "members": [
                "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
                "user:alice@gmail.com"
            ]
        },
        {
            "role":"roles/owner",
            "members":
            [
                "user:bob@gmail.com",
            ]
        },
        {
            "role":"roles/viewer",
            "members":
            [
                "user:john@gmail.com",
            ]
        },
        {
            "role":"roles/iam.serviceAccountUser",
            "members":
            [
                "user:alice@gmail.com"
            ]
        },
        ]
    },
}

A resposta contém a política atualizada:

{
    "version": 1,
    "etag": "BwUqMvZQGfo=",
    "bindings": [
    {
        "role": "roles/editor",
        "members": [
            "serviceAccount:my-sa-123@my-project-123.iam.gserviceaccount.com",
            "user:alice@gmail.com"
        ]
    },
    {
        "role":"roles/owner",
        "members":
        [
            "user:bob@gmail.com",
        ]
    },
    {
        "role":"roles/viewer",
        "members":
        [
            "user:john@gmail.com",
        ]
    },
    {
        "role":"roles/iam.serviceAccountUser",
        "members":
        [
            "user:alice@gmail.com"
        ]
    },
    ]
}

Console

Gerencie os papéis em contas de serviço da mesma maneira que gerencia os papéis dos usuários no projeto.

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

    Abrir a página "IAM e Admin"

  2. Selecione o projeto e clique em Continuar.

  3. Identifique a conta de serviço à qual você quer adicionar um papel.

    • Se a conta de serviço ainda não está na lista de membros, ela não tem nenhum papel atribuído a ela. Clique em Adicionar e digite o endereço de e-mail da conta do serviço.
    • Se a conta de serviço já está na lista de membros, ela já tem papéis. Clique na lista suspensa em Papéis para a conta do serviço que você quer editar.
  4. Selecione um ou mais papéis a serem aplicados à conta de serviço.

  5. Clique em Adicionar ou Salvar para aplicar os papéis à conta de serviço.

Como configurar propriedade e acesso a uma conta de serviço

Conceda a usuários específicos acesso e propriedade a contas de serviço e às respectivas configurações. Usuários com papéis de proprietário primitivo e editor de projeto podem modificar essas contas, mas restrinja o acesso de alguns para que possam executar somente ações específicas em recursos da conta de serviço.

Para conceder uma permissão de usuário a uma conta de serviço, use um dos métodos abaixo:

gcloud

Atualizar toda a política:

  1. Acesse a política que deseja modificar e grave-a em um arquivo JSON. Use o sinalizador --format para escolher os formatos de saída disponíveis como JSON, YAML e texto. Outros exemplos nesta página usam formatos de saída de texto padrão, mas este exemplo escreve a saída em um arquivo JSON para modificar a política antes de defini-la.

        gcloud iam service-accounts get-iam-policy \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --format json > policy.json
    

    Caso não haja uma política existente, o conteúdo do arquivo JSON será semelhante ao seguinte:

    {
      "etag": "ACAB"
    }
    

    Se já houver uma política em vigor, o conteúdo do arquivo JSON será semelhante ao seguinte:

    {
      "bindings": [
        {
          "members": [
            "user:bob@gmail.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8="
    }
    
  2. Usando um editor de texto, adicione um novo objeto à matriz bindings que defina os membros do grupo e os papéis deles. Crie a matriz bindings, se ela ainda não existir. Para conceder a função serviceAccountUser a alice@gmail.com, basta alterar o exemplo acima da seguinte maneira:

    {
        "bindings": [
        {
            "role": "roles/iam.serviceAccountUser",
            "members": [
                "user:alice@gmail.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@gmail.com"
            ]
        }
        ],
        "etag": "BwUqLaVeua8=",
    }
    
  3. Para atualizar a política, basta executar o seguinte comando:

    gcloud iam service-accounts set-iam-policy \
        my-sa-123@my-project-123.iam.gserviceaccount.com policy.json
    


    O comando gera a política atualizada:

    bindings:
    - members:
      - user:alice1@gmail.com
        role: roles/iam.serviceAccountUser
      - members:
    - bob@gmail.com
      role: roles/owner
      etag: BwUjMhXbSPU=
      version: 1
      


Adicionar uma única vinculação:

Adicione uma única vinculação a uma política existente. Basta executar o seguinte comando:

gcloud iam service-accounts add-iam-policy-binding \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --member='user:jane@gmail.com' --role='roles/editor'

O comando gera a política atualizada:

bindings: - members: - user:alice@gmail.com role: roles/iam.serviceAccountUser - members: - user:bob@gmail.com role: roles/owner - members: - user:jane@gmail.com role: roles/editor etag: BwUqKjVeua8= version: 1


Remover uma única vinculação:

Remova uma única vinculação de uma política existente. Basta executar o seguinte comando:

gcloud iam service-accounts remove-iam-policy-binding \
    my-sa-123@my-project-123.iam.gserviceaccount.com \
    --member='user:jane@gmail.com' --role='roles/editor'

O comando gera a política atualizada:

bindings: - members: - user:alice@gmail.com role: roles/iam.serviceAccountUser - members: - user:bob@gmail.com role: roles/owner etag: BwUqNkVeua8= version: 1

API

Solicitação:

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:setIamPolicy

O corpo da solicitação precisa conter a política a ser concedida:

{
    "policy":
    {
        "etag": "BwUqLaVeua8=",
        "bindings": [
        {
            "role": "roles/iam.serviceAccountUser",
            "members": [
                "user:alice@gmail.com"
            ]
        },
        {
            "role": "roles/owner",
            "members": [
                "user:bob@gmail.com"
            ]
        },
        ]
    },
}

A resposta contém a política atualizada:

{
    "etag": "BwUqMqbViM8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    },
    {
        "role": "roles/owner",
        "members": [
        "user:bob@gmail.com"
        ]
    }
    ]
}

Console

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

    Abrir a página "IAM e Admin"

  2. Selecione o projeto e clique em Continuar.

  3. Na navegação à esquerda, clique em Contas de serviço.

  4. Selecione uma conta de serviço e clique em Permissões. Todos os usuários que podem acessar essa conta de serviço são exibidos.

  5. Adicione o endereço de e-mail de um membro do projeto.

  6. Selecione um papel para o membro para definir quais ações ele pode executar na conta de serviço.

  7. Clique em Adicionar para aplicar o papel ao membro do projeto.

Como ver os papéis existentes em uma conta de serviço

Você pode conseguir uma política IAM de uma conta de serviço usando o método serviceAccounts.getIamPolicy(), o Console do GCP e a ferramenta gcloud.

gcloud

Para acessar uma política para uma conta de serviço, gere o seguinte comando:

gcloud iam service-accounts get-iam-policy \
    my-sa-123@my-project-123.iam.gserviceaccount.com

O resultado será a política, semelhante ao seguinte:

bindings:
- members:
  - user:bob@gmail.com
    role: roles/owner
- members:
  - user:alice@gmail.com
    role: roles/iam.serviceAccountUser
etag: BwUqLaVeua8=
version: 1

Se você não atribuiu um papel à conta de serviço, a saída mostrará apenas um valor de etag:

etag: ACAB

API

A política de IAM para a conta de serviço my-sa-123@my-project-123.iam.gserviceaccount.com é recebida pelos seguintes snippets de código.

Solicitação:

POST https://iam.googleapis.com/v1/projects/my-project-123/serviceAccounts/my-sa-123@my-project-123.iam.gserviceaccount.com:getIamPolicy

Resposta:

{
    "etag": "BwUqLaVeua8=",
    "bindings": [
    {
        "role": "roles/iam.serviceAccountUser",
        "members": [
            "user:alice@gmail.com"
        ]
    }
    ]
}

Se você não atribuiu um papel à conta de serviço, a resposta conterá apenas um valor de etag:

{
  "etag": "ACAB"
}

Console

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

    Abrir a página "IAM e Admin"

  2. Selecione o projeto e clique em Continuar. Todos os usuários e os respectivos papéis para esse projeto são listados nessa página.

  3. Na navegação à esquerda, clique em Contas de serviço.

  4. Selecione uma conta de serviço e clique em Permissões. Todos os papéis da conta do serviço são exibidos.

Para mais informações sobre as políticas do IAM, consulte a Política.

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

Enviar comentários sobre…

Documentação do Cloud Identity and Access Management