Como atribuir papéis a contas de serviço

Durante a concessão dos papéis do IAM, trate a conta de serviço como recurso ou como identidade.

O aplicativo usa essas contas como identidade para autenticação 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. Para isso, conceda a um usuário (a identidade) o papel serviceAccountUser 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, é possível conceder o papel storage.admin a uma conta de serviço 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:

Console

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

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

    Abrir a página "IAM e Admin"

  2. Clique em Selecionar um projeto e em Abrir.

  3. Identifique a conta de serviço em que você quer incluir um papel.

    • Se a conta de serviço ainda não estiver na lista de membros, ela não terá nenhum papel atribuído a ela. Clique em Adicionar e digite o endereço de e-mail da conta do serviço.
    • Se já estiver na lista de membros, a conta de serviço tem papéis no momento. Para editar os papéis da conta de serviço, clique no botão Editar .
  4. Selecione um ou mais papéis a serem aplicados à conta de serviço.

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

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
    

A política atualizada é exibida:

bindings:
    - members:
      - user:email1@example.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@example.com
      role: roles/editor
    - members:
      - user:email2@example.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 ao 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/v1/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@example.com"
                ]
            },
            {
                "role":"roles/owner",
                "members":
                [
                    "user:bob@example.com",
                ]
            },
            {
                "role":"roles/viewer",
                "members":
                [
                    "user:john@example.com",
                ]
            },
            {
                "role":"roles/iam.serviceAccountUser",
                "members":
                [
                    "user:alice@example.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@example.com"
            ]
        },
        {
            "role":"roles/owner",
            "members":
            [
                "user:bob@example.com",
            ]
        },
        {
            "role":"roles/viewer",
            "members":
            [
                "user:john@example.com",
            ]
        },
        {
            "role":"roles/iam.serviceAccountUser",
            "members":
            [
                "user:alice@example.com"
            ]
        },
        ]
    }
    

Como visualizar papéis concedidos a uma conta de serviço

É possível visualizar papéis em contas de serviço da mesma forma que visualiza papéis de usuários em seu projeto:

  • Abra a página "IAM" no Console do Cloud.

    Abrir a página "IAM"

  • Clique em Selecionar um projeto.
  • Selecione o projeto e clique em Abrir.
  • Encontre sua conta de serviço na lista de membros associados ao seu projeto. Os papéis das contas de serviço serão listados na coluna Papel.

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

Trate usuários específicos como recursos em vez de identidades para conceder a eles propriedade e acesso às contas de serviço. Nas etapas desta seção, as contas de serviço são tratadas como recursos. Para mais informações sobre as diferenças entre cada tipo de uso, acesse o tópico Contas de serviço.

Usuários com papéis primários de proprietário 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 a um usuário permissões para uma conta de serviço, use um dos métodos abaixo:

Console

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

    Abrir a página "IAM e Admin"

  2. Clique em Selecionar um projeto e em Abrir.

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

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

  5. Clique em Adicionar membro.

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

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

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

gcloud

Atualizar toda a política:

Primeiro, acesse a política que você quer modificar e grave-a em um arquivo JSON. É possível usar a sinalização --format para escolher os formatos de saída (JSON, YAML e texto). Em outros exemplos desta página, são usados formatos de saída de texto padrão. No entanto, a saída apresentada neste exemplo é gravada em um arquivo JSON (policy.json) para que a política atual seja modificada antes de ser configurada.

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

Observe que apenas políticas configuradas na conta de serviço em si são retornadas por esse comando. Se não houver políticas configuradas na conta de serviço, o conteúdo do arquivo JSON será semelhante ao seguinte:

{
      "etag": "ACAB"
    }
    

Quando não houver política, use as etapas abaixo para criar uma política com uma vinculação ou crie a política manualmente usando o JSON das etapas a seguir como modelo.

Se já houver uma política em vigor, o conteúdo do arquivo policy.json de saída será semelhante ao seguinte:

{
      "bindings": [
        {
          "members": [
            "user:bob@example.com"
          ],
          "role": "roles/owner"
        }
      ],
      "etag": "BwUqLaVeua8="
    }
    

Em segundo lugar, em um editor de texto, modifique o arquivo policy.json com a adição de um novo objeto à matriz bindings que define os membros do grupo e os respectivos papéis. Crie a matriz bindings, se ela ainda não existir. Para conceder o papel serviceAccountUser a alice@example.com, seria preciso alterar o exemplo mostrado acima da seguinte maneira:

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

Em terceiro lugar, atualize a política executando o seguinte comando:

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

A política atualizada é exibida:

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

Adicionar uma única vinculação:

Execute o seguinte comando para adicionar uma vinculação a uma política nova ou existente:

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

A política atualizada é exibida:

bindings:
    - members:
      - user:alice@example.com
      role: roles/iam.serviceAccountUser
    - members:
      - user:bob@example.com
      role: roles/owner
    - members:
      - user:jane@example.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@example.com' --role='roles/editor'
    

A política atualizada é exibida:

bindings:
    - members:
      - user:alice@example.com
      role: roles/iam.serviceAccountUser
    - members:
      - user:bob@example.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@example.com"
                ]
            },
            {
                "role": "roles/owner",
                "members": [
                    "user:bob@example.com"
                ]
            }
            ]
        },
    }
    

A resposta contém a política atualizada:

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

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

É possível tratar uma conta de serviço como um recurso, portanto, ela tem políticas do Cloud IAM, da mesma forma que outros recursos do Google Cloud. Logo, para visualizar os membros que receberam um papel em uma determinada conta de serviço, aplique a política do Cloud IAM para uma conta de serviço usando o método serviceAccounts.getIamPolicy(), o Console do Cloud ou a ferramenta gcloud.

Console

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

    Abrir a página "IAM e Admin"

  2. Clique em Selecionar um projeto e em Abrir. A página agora lista todos os usuários e papéis correspondentes para este projeto.

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

  4. Marque a caixa de seleção ao lado da conta de serviço desejada e clique em Mostrar painel de informações. É exibida uma lista de papéis que foram concedidos na conta de serviço. Expanda cada um deles para visualizar os membros que receberam esse papel na conta de serviço.

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@example.com
      role: roles/owner
    - members:
      - user:alice@example.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

Os seguintes snippets de código conseguem a política do IAM da conta de serviço my-sa-123@my-project-123.iam.gserviceaccount.com.

Solicitação:

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

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

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

{
      "etag": "ACAB"
    }
    

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