Faça a gestão do acesso a contas de serviço

Esta página descreve como conceder, alterar e revogar o acesso de um principal a uma única conta de serviço. Para gerir o acesso de um principal a todas as contas de serviço num projeto, numa pasta ou numa organização, faça a gestão do respetivo acesso ao nível do projeto, da pasta ou da organização.

Na gestão de identidade e de acesso (IAM), o acesso é gerido através de políticas de autorização, também conhecidas como políticas de IAM. Uma política de permissão está anexada a um recursoGoogle Cloud . Cada política de autorização contém uma coleção de associações de funções que associam um ou mais responsáveis, como utilizadores ou contas de serviço, a uma função do IAM. Estas associações de funções concedem as funções especificadas aos principais, tanto no recurso ao qual a política de autorização está anexada como em todos os descendentes desse recurso. Para mais informações sobre as políticas de autorização, consulte o artigo Compreender as políticas de autorização.

As contas de serviço são recursos aos quais outros responsáveis podem receber acesso e responsáveis que podem receber acesso a outros recursos. Esta página trata as contas de serviço como recursos e descreve como conceder a outros responsáveis acesso às mesmas. Para saber como conceder acesso de uma conta de serviço a outros recursos, consulte os seguintes guias:

Esta página descreve como gerir o acesso a contas de serviço através da consolaGoogle Cloud , da Google Cloud CLI e da API REST. Também pode gerir o acesso através das bibliotecas de cliente da IAM.

Antes de começar

Funções de IAM necessárias

Para obter as autorizações de que precisa para gerir o acesso a uma conta de serviço, peça ao seu administrador para lhe conceder a função de administrador da conta de serviço (roles/iam.serviceAccountAdmin) do IAM na conta de serviço ou no projeto proprietário da conta de serviço. Para mais informações sobre a atribuição de funções, consulte o artigo Faça a gestão do acesso a projetos, pastas e organizações.

Esta função predefinida contém as autorizações necessárias para gerir o acesso a uma conta de serviço. Para ver as autorizações exatas que são necessárias, expanda a secção Autorizações necessárias:

Autorizações necessárias

São necessárias as seguintes autorizações para gerir o acesso a uma conta de serviço:

  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
  • iam.serviceAccounts.getIamPolicy
  • iam.serviceAccounts.setIamPolicy

Também pode conseguir estas autorizações com funções personalizadas ou outras funções predefinidas.

Veja o acesso atual

A secção seguinte mostra como usar a Google Cloud consola, a CLI gcloud e a API REST para ver quem tem acesso a uma conta de serviço. Também pode ver o acesso através das bibliotecas do cliente do IAM para obter a política de autorização da conta de serviço.

Consola

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

  3. Clique no endereço de email da conta de serviço.

  4. Aceda ao separador Autorizações. A secção Principais com acesso a esta conta de serviço apresenta todos os principais aos quais foi concedida uma função na conta de serviço.

    Esta lista inclui os responsáveis cujo acesso provém de funções concedidas em recursos principais. Para mais informações sobre a herança de políticas, consulte o artigo Herança de políticas e a hierarquia de recursos.

  5. Opcional: para ver concessões de funções para agentes de serviço, selecione a caixa de verificação Incluir concessões de funções fornecidas pela GoogleGoogle.

gcloud

Para ver quem tem acesso à sua conta de serviço, obtenha a política de autorização para a conta de serviço. Para saber como interpretar as políticas de permissão, consulte o artigo Compreender as políticas de permissão.

Para obter a política de permissão para a conta de serviço, execute o comando get-iam-policy para a conta de serviço:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Indique os seguintes valores:

  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • FORMAT: o formato da política. Use json ou yaml.

  • PATH: o caminho para um novo ficheiro de saída para a política.

Por exemplo, o comando seguinte obtém a política para a conta de serviço my-service-account e guarda-a no seu diretório principal no formato JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

Para ver quem tem acesso à sua conta de serviço, obtenha a política de autorização para a conta de serviço. Para saber como interpretar as políticas de permissão, consulte o artigo Compreender as políticas de permissão.

O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: O ID do seu Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
  • SA_ID: o ID da sua conta de serviço. Este pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

Corpo JSON do pedido:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Para enviar o seu pedido, expanda uma destas opções:

A resposta contém a política de permissão da conta de serviço. Por exemplo:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:my-user@example.com"
      ]
    }
  ]
}

Conceda ou revogue uma única função de IAM

Pode usar a Google Cloud consola e a CLI gcloud para conceder ou revogar rapidamente uma única função para um único principal, sem editar diretamente a política de autorização da conta de serviço. Os tipos comuns de principais incluem contas Google, contas de serviço, grupos Google e domínios.Para ver uma lista de todos os tipos de diretor, consulte Tipos de diretor.

Em geral, as alterações às políticas entram em vigor no prazo de 2 minutos. No entanto, em alguns casos, a propagação das alterações por todo o sistema pode demorar 7 minutos ou mais.

Se precisar de ajuda para identificar a função predefinida mais adequada, consulte o artigo Encontre as funções predefinidas certas.

Conceda uma única função de IAM

Para conceder uma única função a um principal, faça o seguinte:

Consola

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

  3. Clique no endereço de email da conta de serviço.

  4. Aceda ao separador Autorizações e encontre a secção Membros com acesso a esta conta de serviço.

  5. Selecione um principal ao qual atribuir uma função:

    • Para conceder uma função a um principal que já tenha outras funções na conta de serviço, encontre uma linha que contenha o principal, clique em Editar principal nessa linha e, de seguida, clique em Adicionar outra função.

      Para conceder uma função a um agente de serviço, selecione a caixa de verificação Incluir concessões de funções fornecidas pela Google para ver o respetivo endereço de email.

    • Para conceder uma função a um principal que não tenha funções existentes na conta de serviço, clique em Conceder acesso e, em seguida, introduza um identificador para o principal, por exemplo, my-user@example.com ou //iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com.

  6. Selecione uma função a conceder na lista pendente. Para as melhores práticas de segurança, escolha uma função que inclua apenas as autorizações de que o seu principal precisa.

  7. Opcional: adicione uma condição à função.

  8. Clique em Guardar. O principal recebe a função na conta de serviço.

gcloud

Para conceder rapidamente uma função a um principal, execute o comando add-iam-policy-binding:

gcloud iam service-accounts add-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME \
    --condition=CONDITION

Indique os seguintes valores:

  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • PRINCIPAL: um identificador do principal ou membro, que normalmente tem o seguinte formato: PRINCIPAL-TYPE:ID. Por exemplo, user:my-user@example.com ou principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. Para ver uma lista completa dos valores que PRINCIPAL pode ter, consulte Identificadores principais.

    Para o tipo principal user, o nome do domínio no identificador tem de ser um domínio do Google Workspace ou um domínio do Cloud ID. Para saber como configurar um domínio do Cloud ID, consulte a vista geral do Cloud ID.

  • ROLE_NAME: o nome da função que quer conceder. Use um dos seguintes formatos:

    • Funções predefinidas: roles/SERVICE.IDENTIFIER
    • Funções personalizadas ao nível do projeto: projects/PROJECT_ID/roles/IDENTIFIER
    • Funções personalizadas ao nível da organização: organizations/ORG_ID/roles/IDENTIFIER

    Para ver uma lista das funções predefinidas, consulte o artigo Compreender as funções.

  • CONDITION: opcional. A condição a adicionar à associação de funções. Para mais informações sobre as condições, consulte a vista geral das condições.

Por exemplo, para conceder a função Utilizador da conta de serviço ao utilizador my-user@example.com para a conta de serviço my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts add-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Revogue uma única função de IAM

Para revogar uma única função de um principal, faça o seguinte:

Consola

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

  3. Clique no endereço de email da conta de serviço.

  4. Aceda ao separador Autorizações e encontre a secção Membros com acesso a esta conta de serviço.

  5. Procure a linha que contém o principal cujo acesso quer revogar. Em seguida, clique em Editar principal nessa linha.

  6. Clique no botão Eliminar para a função que quer revogar e, de seguida, clique em Guardar.

gcloud

Para revogar rapidamente uma função de um utilizador, execute o comando remove-iam-policy-binding:

gcloud iam service-accounts remove-iam-policy-binding SA_ID \
    --member=PRINCIPAL --role=ROLE_NAME

Indique os seguintes valores:

  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • PRINCIPAL: um identificador do principal ou membro, que normalmente tem o seguinte formato: PRINCIPAL-TYPE:ID. Por exemplo, user:my-user@example.com ou principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. Para ver uma lista completa dos valores que PRINCIPAL pode ter, consulte Identificadores principais.

    Para o tipo principal user, o nome do domínio no identificador tem de ser um domínio do Google Workspace ou um domínio do Cloud ID. Para saber como configurar um domínio do Cloud ID, consulte a vista geral do Cloud ID.

  • ROLE_NAME: o nome da função que quer revogar. Use um dos seguintes formatos:

    • Funções predefinidas: roles/SERVICE.IDENTIFIER
    • Funções personalizadas ao nível do projeto: projects/PROJECT_ID/roles/IDENTIFIER
    • Funções personalizadas ao nível da organização: organizations/ORG_ID/roles/IDENTIFIER

    Para ver uma lista das funções predefinidas, consulte o artigo Compreender as funções.

Por exemplo, para revogar a função Utilizador da conta de serviço do utilizador my-user@example.com para a conta de serviço my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts remove-iam-policy-binding my-service-account@my-project.iam.gserviceaccount.com \
    --member=user:my-user@example.com --role=roles/iam.serviceAccountUser

Conceda ou revogue várias funções do IAM através da Google Cloud consola

Pode usar a Google Cloud consola para conceder e revogar várias funções para um único principal:

  1. Na Google Cloud consola, aceda à página Contas de serviço.

    Aceda a Contas de serviço

  2. Selecione um projeto.

  3. Clique no endereço de email da conta de serviço.

  4. Aceda ao separador Autorizações e encontre a secção Membros com acesso a esta conta de serviço.

  5. Selecione o principal cujas funções quer modificar:

    • Para modificar funções de um principal que já tenha funções na conta de serviço, encontre uma linha que contenha o principal, clique em Editar principal nessa linha e, de seguida, clique em Adicionar outra função.

      Para modificar as funções de um agente de serviços, selecione a caixa de verificação Incluir atribuições de funções fornecidas pela Google Googlepara ver o respetivo endereço de email.

    • Para conceder funções a um principal que não tenha funções existentes na conta de serviço, clique em Conceder acesso e, de seguida, introduza o endereço de email ou outro identificador do principal.

  6. Modifique as funções do principal:

    • Para conceder uma função a um principal que não tenha funções existentes no recurso, clique em Selecionar uma função e, de seguida, selecione uma função a conceder na lista pendente.
    • Para conceder uma função adicional ao principal, clique em Adicionar outra função e, em seguida, selecione uma função a conceder na lista pendente.
    • Para substituir uma das funções do principal por uma função diferente, clique na função existente e, de seguida, escolha uma função diferente para conceder na lista pendente.
    • Para revogar uma das funções do principal, clique no botão Eliminar para cada função que quer revogar.

    Também pode adicionar uma condição a uma função, modificar a condição de uma função ou remover a condição de uma função.

  7. Clique em Guardar.

Conceda ou revogue várias funções do IAM por programação

Para fazer alterações de acesso em grande escala que envolvam a concessão e a revogação de várias funções para vários responsáveis, use o padrão read-modify-write para atualizar a política de autorização da conta de serviço:

  1. Leia a política de permissão atual chamando getIamPolicy().
  2. Edite a política de autorização, através de um editor de texto ou programaticamente, para adicionar ou remover quaisquer responsáveis ou associações de funções.
  3. Escreva a política de permissão atualizada chamando setIamPolicy().

Esta secção mostra como usar a CLI gcloud e a API REST para atualizar a política de autorização. Também pode atualizar a política de autorização através das bibliotecas de cliente da IAM.

Em geral, as alterações às políticas entram em vigor no prazo de 2 minutos. No entanto, em alguns casos, a propagação das alterações por todo o sistema pode demorar 7 minutos ou mais.

Obtenha a política de permissão atual

gcloud

Para obter a política de permissão para a conta de serviço, execute o comando get-iam-policy para a conta de serviço:

gcloud iam service-accounts get-iam-policy SA_ID --format=FORMAT > PATH

Indique os seguintes valores:

  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • FORMAT: o formato da política de permissão. Use json ou yaml.

  • PATH: o caminho para um novo ficheiro de saída para a política allow.

Por exemplo, o comando seguinte obtém a política de autorização para a conta de serviço my-service-account e guarda-a no seu diretório principal no formato JSON:

gcloud iam service-accounts get-iam-policy my-service-account --format json > ~/policy.json

REST

O método serviceAccounts.getIamPolicy obtém a política de autorização de uma conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: O ID do seu Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
  • SA_ID: o ID da sua conta de serviço. Este pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • POLICY_VERSION: a versão da política a ser devolvida. Os pedidos devem especificar a versão da política mais recente, que é a versão 3 da política. Consulte o artigo Especificar uma versão da política ao obter uma política para ver detalhes.

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:getIamPolicy

Corpo JSON do pedido:

{
  "options": {
    "requestedPolicyVersion": POLICY_VERSION
  }
}

Para enviar o seu pedido, expanda uma destas opções:

A resposta contém a política de permissão da conta de serviço. Por exemplo:

{
  "version": 1,
  "etag": "BwWKmjvelug=",
  "bindings": [
    {
      "role": "roles/serviceAccountAdmin",
      "members": [
        "user:my-user@example.com"
      ]
    }
  ]
}

Guarde a resposta num ficheiro do tipo adequado (json ou yaml).

Java

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Java IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.


import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ServiceAccountName;
import com.google.iam.v1.GetIamPolicyRequest;
import com.google.iam.v1.Policy;
import java.io.IOException;

public class GetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    getPolicy(projectId, serviceAccount);
  }

  // Gets a service account's IAM policy.
  public static Policy getPolicy(String projectId, String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to get.
    String serviceAccountEmail = serviceAccount + "@" + projectId + ".iam.gserviceaccount.com";

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      GetIamPolicyRequest request = GetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, serviceAccountEmail).toString())
              .build();
      Policy policy = iamClient.getIamPolicy(request);
      System.out.println("Policy retrieved: " + policy.toString());
      return policy;
    }
  }
}

Python

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Python IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def get_service_account_iam_policy(project_id: str, account: str) -> policy_pb2.Policy:
    """Get policy for service account.

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    """

    iam_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.GetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    policy = iam_client.get_iam_policy(request)
    return policy

Modifique a política de autorização

Modifique programaticamente ou através de um editor de texto a cópia local da política de autorização da sua conta de serviço para refletir as funções que quer conceder ou revogar a determinados utilizadores.

Para garantir que não substitui outras alterações, não edite nem remova o campo etag da política de permissão. O campo etag identifica o estado atual da política de autorização. Quando define a política de permissão atualizada, o IAM compara o valor etag no pedido com o etag existente e só escreve a política de permissão se os valores corresponderem.

Para editar as funções que uma política de autorização concede, tem de editar as associações de funções na política de autorização. As associações de funções têm o seguinte formato:

{
  "role": "ROLE_NAME",
  "members": [
    "PRINCIPAL_1",
    "PRINCIPAL_2",
    ...
    "PRINCIPAL_N"
  ],
  "conditions:" {
    CONDITIONS
  }
}

Os marcadores de posição têm os seguintes valores:

  • ROLE_NAME: o nome da função que quer conceder. Use um dos seguintes formatos:

    • Funções predefinidas: roles/SERVICE.IDENTIFIER
    • Funções personalizadas ao nível do projeto: projects/PROJECT_ID/roles/IDENTIFIER
    • Funções personalizadas ao nível da organização: organizations/ORG_ID/roles/IDENTIFIER

    Para ver uma lista das funções predefinidas, consulte o artigo Compreender as funções.

  • PRINCIPAL_1, PRINCIPAL_2, ...PRINCIPAL_N: identificadores dos principais aos quais quer conceder a função.

    Normalmente, os identificadores principais têm o seguinte formato: PRINCIPAL-TYPE:ID. Por exemplo, user:my-user@example.com ou principalSet://iam.googleapis.com/locations/global/workforcePools/example-pool/group/example-group@example.com. Para ver uma lista completa dos valores que PRINCIPAL pode ter, consulte Identificadores principais.

    Para o tipo principal user, o nome do domínio no identificador tem de ser um domínio do Google Workspace ou um domínio do Cloud ID. Para saber como configurar um domínio do Cloud ID, consulte a vista geral do Cloud ID.

  • CONDITIONS: opcional. Quaisquer condições que especifiquem quando o acesso é concedido.

Conceda uma função

Para conceder funções aos seus principais, modifique as associações de funções na política de autorização. Para saber que funções pode conceder, consulte o artigo Compreender as funções ou ver as funções concedíveis para a conta de serviço. Se precisar de ajuda para identificar as funções predefinidas mais adequadas, consulte o artigo Encontre as funções predefinidas certas.

Opcionalmente, pode usar condições para conceder funções apenas quando determinados requisitos são cumpridos.

Para conceder uma função que já está incluída na política de autorização, adicione o principal a uma associação de funções existente:

gcloud

Edite a política de autorização adicionando o principal a uma associação de funções existente. Tenha em atenção que esta alteração não entra em vigor até definir a política de autorização atualizada.

Por exemplo, imagine que a política de autorização contém a seguinte associação de funções, que concede a função de utilizador da conta de serviço (roles/iam.serviceAccountUser) a Kai:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Para conceder essa mesma função a Raha, adicione Raha à associação de funções existente:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

REST

Edite a política de autorização adicionando o principal a uma associação de funções existente. Tenha em atenção que esta alteração não entra em vigor até definir a política de autorização atualizada.

Por exemplo, imagine que a política de autorização contém a seguinte associação de funções, que concede a função de utilizador da conta de serviço (roles/iam.serviceAccountUser) a Kai:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com"
  ]
}

Para conceder essa mesma função a Raha, adicione Raha à associação de funções existente:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Para conceder uma função que ainda não esteja incluída na política de autorização, adicione uma nova associação de funções:

gcloud

Edite a política de autorização adicionando uma nova associação de funções que conceda a função ao principal. Esta alteração não entra em vigor até que defina a política de permissão atualizada.

Por exemplo, para conceder a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) a Raha, adicione a associação de funções seguinte à matriz bindings para a política de autorização:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

REST

Edite a política de autorização adicionando uma nova associação de funções que conceda a função ao principal. Esta alteração não entra em vigor até que defina a política de permissão atualizada.

Por exemplo, para conceder a função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) a Raha, adicione a associação de funções seguinte à matriz bindings para a política de autorização:

{
  "role": "roles/iam.serviceAccountTokenCreator",
  "members": [
    "user:raha@example.com"
  ]
}

Revogue uma função

Para revogar uma função, remova o principal da associação de funções. Se não existirem outros principais na associação de funções, remova toda a associação de funções da política de autorização.

gcloud

Edite a política de permissão removendo o principal ou a associação de funções completa. Esta alteração não entra em vigor até definir a política de permissão atualizada.

Por exemplo, imagine que a política de permissão contém a seguinte associação de funções, que concede a Kai e Raha a função de utilizador da conta de serviço (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Para revogar a função de Kai, remova o identificador principal de Kai da associação de funções:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    user:raha@example.com
  ]
}

Para revogar a função de Kai e Raha, remova a associação de funções da política de autorização.

REST

Edite a política de permissão removendo o principal ou a associação de funções completa. Esta alteração não entra em vigor até definir a política de permissão atualizada.

Por exemplo, imagine que a política de permissão contém a seguinte associação de funções, que concede a Kai e Raha a função de utilizador da conta de serviço (roles/iam.serviceAccountUser):

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    "user:kai@example.com",
    "user:raha@example.com"
  ]
}

Para revogar a função de Kai, remova o identificador principal de Kai da associação de funções:

{
  "role": "roles/iam.serviceAccountUser",
  "members": [
    user:raha@example.com
  ]
}

Para revogar a função de Kai e Raha, remova a associação de funções da política de autorização.

Defina a política de permissão

Depois de modificar a política de autorização para conceder e revogar funções, chame setIamPolicy() para fazer as atualizações.

gcloud

Para definir a política de autorização para o recurso, execute o comando set-iam-policy para a conta de serviço:

gcloud iam service-accounts set-iam-policy SA_ID PATH

Indique os seguintes valores:

  • SA_ID: o ID da sua conta de serviço. Pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • PATH: o caminho para um ficheiro que contém a nova política de permissão.

A resposta contém a política de permissão atualizada.

Por exemplo, o comando seguinte define a política de permissão armazenada em policy.json como a política de permissão para a conta de serviço my-service-account@my-project.iam.gserviceaccount.com:

gcloud iam service-accounts set-iam-policy my-service-account@my-project.iam.gserviceaccount.com \
    ~/policy.json

REST

O método serviceAccounts.setIamPolicy define uma política de permissão atualizada para a conta de serviço.

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: O ID do seu Google Cloud projeto. Os IDs dos projetos são strings alfanuméricas, como my-project.
  • SA_ID: o ID da sua conta de serviço. Este pode ser o endereço de email da conta de serviço no formato SA_NAME@PROJECT_ID.iam.gserviceaccount.com ou o ID numérico exclusivo da conta de serviço.

  • POLICY: Uma representação JSON da política que quer definir. Para mais informações sobre o formato de uma política, consulte a referência de políticas.

    Por exemplo, para definir a política de permissão apresentada no passo anterior, substitua policy pelo seguinte:

    {
      "version": 1,
      "etag": "BwUqLaVeua8=",
      "bindings": [
        {
          "role": "roles/iam.serviceAccountUser",
          "members": [
            "group:my-group@example.com"
          ]
        },
        {
          "role": "roles/serviceAccountAdmin",
          "members": [
            "user:my-user@example.com"
          ]
        }
      ]
    }

Método HTTP e URL:

POST https://iam.googleapis.com/v1/projects/PROJECT_ID/serviceAccounts/SA_ID:setIamPolicy

Corpo JSON do pedido:

{
  "policy": POLICY
}

Para enviar o seu pedido, expanda uma destas opções:

A resposta contém a política de permissão atualizada.

Java

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Java IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

import com.google.cloud.iam.admin.v1.IAMClient;
import com.google.iam.admin.v1.ServiceAccountName;
import com.google.iam.v1.Policy;
import com.google.iam.v1.SetIamPolicyRequest;
import com.google.protobuf.FieldMask;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;

public class SetServiceAccountPolicy {
  public static void main(String[] args) throws IOException {
    // TODO(developer): Replace the variables before running the sample.
    // TODO: Replace with your project ID.
    String projectId = "your-project-id";
    // TODO: Replace with your service account name.
    String serviceAccount = "your-service-account";
    // TODO: Replace with your policy, GetPolicy.getPolicy(projectId, serviceAccount).
    Policy policy = Policy.newBuilder().build();

    setServiceAccountPolicy(policy, projectId, serviceAccount);
  }

  // Sets a service account's policy.
  public static Policy setServiceAccountPolicy(Policy policy, String projectId,
                                               String serviceAccount) throws IOException {

    // Construct the service account email.
    // You can modify the ".iam.gserviceaccount.com" to match the name of the service account
    // whose allow policy you want to set.
    String accountEmail = String.format("%s@%s.iam.gserviceaccount.com", serviceAccount, projectId);

    // Initialize client that will be used to send requests.
    // This client only needs to be created once, and can be reused for multiple requests.
    try (IAMClient iamClient = IAMClient.create()) {
      List<String> paths = Arrays.asList("bindings", "etag");
      SetIamPolicyRequest request = SetIamPolicyRequest.newBuilder()
              .setResource(ServiceAccountName.of(projectId, accountEmail).toString())
              .setPolicy(policy)
              // A FieldMask specifying which fields of the policy to modify. Only
              // the fields in the mask will be modified. If no mask is provided, the
              // following default mask is used:
              // `paths: "bindings, etag"`
              .setUpdateMask(FieldMask.newBuilder().addAllPaths(paths).build())
              .build();

      return iamClient.setIamPolicy(request);
    }
  }
}

Python

Para saber como instalar e usar a biblioteca cliente para a IAM, consulte o artigo Bibliotecas cliente da IAM. Para mais informações, consulte a documentação de referência da API Python IAM.

Para se autenticar no IAM, configure as Credenciais padrão da aplicação. Para mais informações, consulte o artigo Configure a autenticação para um ambiente de desenvolvimento local.

from google.cloud import iam_admin_v1
from google.iam.v1 import iam_policy_pb2, policy_pb2


def set_service_account_iam_policy(
    project_id: str, account: str, policy: policy_pb2.Policy
) -> policy_pb2.Policy:
    """Set policy for service account.

    Pay attention that previous state will be completely rewritten.
    If you want to update only part of the policy follow the approach
    read->modify->write.
    For more details about policies check out
    https://cloud.google.com/iam/docs/policies

    project_id: ID or number of the Google Cloud project you want to use.
    account: ID or email which is unique identifier of the service account.
    policy: Policy which has to be set.
    """

    # Same approach as for policies on project level,
    # but client stub is different.
    iam_client = iam_admin_v1.IAMClient()
    request = iam_policy_pb2.SetIamPolicyRequest()
    request.resource = f"projects/{project_id}/serviceAccounts/{account}"

    # request.etag field also will be merged which means
    # you are secured from collision, but it means that request
    # may fail and you need to leverage exponential retries approach
    # to be sure policy has been updated.
    request.policy.MergeFrom(policy)

    policy = iam_client.set_iam_policy(request)
    return policy

O que se segue?

Experimente

Se for um novo utilizador do Google Cloud, crie uma conta para avaliar o desempenho dos nossos produtos em cenários reais. Os novos clientes também recebem 300 USD em créditos gratuitos para executar, testar e implementar cargas de trabalho.

Comece gratuitamente