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.

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. 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, 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:

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 a que você quer adicionar um papel.

    • Se a conta de serviço ainda não estiver na lista de membros, ela não terá papéis atribuídos. 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 já terá 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.

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"
        ]
    },
    ]
}

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 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 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 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 abra o Painel de informaçõ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.

gcloud

Atualizar toda a política:

Primeiro, acesse a política que você quer modificar e grave-a em um arquivo JSON. Use a sinalização --format para escolher os formatos de saída disponíveis como JSON, YAML e texto. Em outros exemplos desta página, são usados formatos de saída de texto padrão, mas neste exemplo, a saída é gravada em um arquivo JSON (policy.json) para que a política existente 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@gmail.com"
      ],
      "role": "roles/owner"
    }
  ],
  "etag": "BwUqLaVeua8="
}

Em um editor de texto, modifique o arquivo policy.json com a adição de um novo objeto à matriz bindings que defina os membros do grupo e os respectivos papéis. Crie a matriz bindings, se ela não existir. Para conceder o papel 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=",
}

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:alice1@gmail.com
  role: roles/iam.serviceAccountUser
- members:
  - bob@gmail.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@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"
        ]
    }
    ]
}

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

Como uma conta de serviço pode ser tratada como um recurso, ela tem políticas do Cloud IAM como outros recursos do GCP. Portanto, para exibir os membros que receberam um papel em uma determinada conta de serviço, solicite a política do Cloud IAM para uma conta de serviço usando o método serviceAccounts.getIamPolicy() no Console do GCP ou na ferramenta gcloud (link em inglês).

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 barra de 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 no canto superior direito da página. Uma lista de funções que foram concedidas na conta de serviço é exibida. Expanda cada função 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@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
Response:

{
    "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"
}

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 IAM