Funções para a autenticação de contas de serviço

Os principais podem usar contas de serviço para fazer a autenticação de algumas formas diferentes. Cada tipo de autenticação requer que o principal tenha autorizações de gestão de identidade e de acesso (IAM) específicas na conta de serviço.

Esta página descreve as funções que pode conceder a responsáveis para lhes permitir roubar a identidade de contas de serviço ou anexar contas de serviço a recursos. Também descreve as autorizações de que precisa em cenários comuns.

Para saber mais sobre as diferentes formas de autenticação com uma conta de serviço, consulte os artigos Credenciais da conta de serviço e Simulação da conta de serviço.

Funções da conta de serviço

Esta secção descreve as funções que permitem que os principais sejam autenticados com contas de serviço. Para saber como conceder e revogar estas funções, consulte o artigo Faça a gestão do acesso às contas de serviço.

Função de utilizador da conta de serviço

A função Utilizador da conta de serviço (roles/iam.serviceAccountUser) permite que um principal anexe uma conta de serviço a um recurso. Quando o código em execução nesse recurso precisa de autenticar, pode obter credenciais para a conta de serviço anexada.

Esta função não permite que os diretores criem credenciais de curta duração para contas de serviço nem usem a flag --impersonate-service-account para a CLI Google Cloud. Para concluir estas tarefas, precisa da função de criador de tokens de contas de serviço na conta de serviço.

Função de criador de tokens de contas de serviço

A função Criador de tokens de contas de serviço (roles/iam.serviceAccountTokenCreator) permite que os principais criem credenciais de curta duração para uma conta de serviço.

A função de criador de tokens de conta de serviço permite-lhe criar os seguintes tipos de credenciais de curta duração:

  • Tokens de acesso OAuth 2.0, que pode usar para autenticar com as APIs Google
  • Tokens de ID do OpenID Connect (OIDC)
  • Símbolos da Web JSON (JWTs) assinados e blobs binários

A função Service Account Token Creator também permite que os principais usem a flag --impersonate-service-account para a CLI gcloud. Quando usa esta flag, a CLI gcloud cria automaticamente credenciais de curta duração para a conta de serviço.

As autorizações da função incluem o seguinte:

  • iam.serviceAccounts.getAccessToken: permite-lhe criar chaves de acesso OAuth 2.0
  • iam.serviceAccounts.getOpenIdToken: permite-lhe criar tokens de ID do OpenID Connect (OIDC)
  • iam.serviceAccounts.implicitDelegation: permite que as contas de serviço recebam tokens numa cadeia de delegação
  • iam.serviceAccounts.signBlob: permite-lhe assinar blobs binários
  • iam.serviceAccounts.signJwt: permite-lhe assinar JWTs

Criador de tokens de identidade OpenID Connect de conta de serviço

A função Criador de tokens de identidade do OpenID Connect da conta de serviço (roles/iam.serviceAccountOpenIdTokenCreator) permite que os diretores criem tokens de ID OIDC de curta duração. Se só precisar de criar tokens de ID OIDC, use esta função. Se precisar de criar outros tipos de tokens, use antes a função Criador de tokens de conta de serviço.

A função inclui a autorização iam.serviceAccounts.getOpenIdToken, que lhe permite criar um token de ID OIDC.

Função de utilizador do Workload Identity

A função de utilizador do Workload Identity (roles/iam.workloadIdentityUser) permite que os diretores usem a identidade de contas de serviço a partir de cargas de trabalho do GKE.

As autorizações da função incluem o seguinte:

  • iam.serviceAccounts.getAccessToken: permite-lhe criar tokens de acesso OAuth 2.0
  • iam.serviceAccounts.getOpenIdToken: permite-lhe criar tokens de ID do OpenID Connect (OIDC)

Autorizações da conta de serviço para cenários comuns

As contas de serviço podem ser usadas em muitos cenários diferentes e cada um deles requer determinadas autorizações. Esta secção descreve cenários comuns e as autorizações necessárias.

Anexar contas de serviço a recursos

Se quiser iniciar uma tarefa de execução prolongada que seja autenticada como uma conta de serviço, tem de anexar uma conta de serviço ao recurso que vai executar a tarefa.

Autorizações:

  • Autorizações para criar o recurso
  • iam.serviceAccounts.actAs

Para encontrar funções que incluem estas autorizações, pesquise as autorizações na lista de funções.

Existem vários Trusted Cloud recursos que podem executar tarefas de longa duração como contas de serviço. Alguns exemplos destes recursos incluem:

  • VMs do Compute Engine
  • Funções do Cloud Run

Quando cria estes recursos, tem a opção de anexar uma conta de serviço. Esta conta de serviço atua como a identidade do recurso.

Para criar um recurso e anexar uma conta de serviço, precisa de autorizações para criar esse recurso e autorização para anexar a conta de serviço aos recursos. A autorização para anexar contas de serviço a recursos é fornecida por qualquer função que inclua a autorização iam.serviceAccounts.actAs, por exemplo, a função de utilizador da conta de serviço (roles/iam.serviceAccountUser).

Depois de criar o recurso e anexar-lhe uma conta de serviço, pode iniciar uma tarefa de longa duração no recurso. A tarefa é executada como a conta de serviço anexada ao recurso e usa essa conta de serviço para autorizar pedidos àsTrusted Cloud APIs.

Para saber como anexar contas de serviço a recursos, consulte o artigo Anexar uma conta de serviço a um recurso.

Usar a identidade de uma conta de serviço

Autorizações:

  • iam.serviceAccounts.getAccessToken
  • iam.serviceAccounts.signBlob
  • iam.serviceAccounts.signJwt
  • iam.serviceAccounts.implicitDelegation

Funções:

  • roles/iam.serviceAccountTokenCreator (criador de tokens de contas de serviço)

Depois de concedidas as autorizações necessárias, um utilizador (ou outra conta de serviço) pode roubar a identidade da conta de serviço em alguns cenários comuns.

Primeiro, o utilizador pode autenticar-se como a conta de serviço. Por exemplo, podem obter credenciais de curta duração para a conta de serviço através da autorização iam.serviceAccounts.getAccessToken e chamando o método generateAccessToken(). Em alternativa, podem usar a flag --impersonate-service-account para a CLI gcloud para se fazerem passar pela conta de serviço. Quando um utilizador se autentica como uma conta de serviço, pode emitir comandos para oTrusted Cloud e pode aceder a todos os recursos aos quais a conta de serviço tem acesso.

Em segundo lugar, o utilizador pode obter artefactos assinados pela chave privada gerida pela Google da conta de serviço através da autorização iam.serviceAccounts.signBlob e chamando o método signBlob() ou signJwt(). A chave privada gerida pela Google é sempre mantida em depósito e nunca é exposta diretamente. signBlob() permite a assinatura de payloads arbitrários (como URLs assinados do Cloud Storage), enquanto signJwt() só permite a assinatura de JWTs bem formados.

Por último, o utilizador pode roubar a identidade da conta de serviço sem nunca obter uma credencial para a conta de serviço. Este é um exemplo de utilização avançado e só é suportado para acesso programático através do método generateAccessToken(). Em cenários com, pelo menos, 3 contas de serviço, nomeadamente A, B e C: a conta de serviço A pode obter uma chave de acesso para a conta de serviço C se a conta de serviço A tiver a autorização iam.serviceAccounts.implicitDelegation em B e B tiver a autorização iam.serviceAccounts.getAccessToken em C.

Gerar tokens de ID do OpenID Connect (OIDC)

Autorizações:

  • iam.serviceAccounts.getOpenIdToken

Funções:

  • roles/iam.serviceAccountOpenIdTokenCreator (Service Account OpenID Connect Identity Token Creator)

Um utilizador (ou um serviço) pode gerar um token JWT compatível com o OpenID Connect (OIDC) assinado pelo fornecedor do OIDC da Google (accounts.google.com) que representa a identidade da conta de serviço através da autorização iam.serviceAccounts.getOpenIdToken.

Estes tokens não são aceites diretamente pela maioria das APIs Google sem que a sua organização implemente uma federação de identidades adicional para conceder acesso ao Google.

Gerar chaves privadas externas

Autorizações:

  • iam.serviceAccountKeys.create

Funções:

  • roles/editor (editor)
  • roles/iam.serviceAccountKeyAdmin (administrador da chave da conta de serviço)

Um utilizador ou um serviço pode gerar material de chave privada externa (RSA) que pode ser usado para autenticar diretamente no Google como a conta de serviço. Este material de chave pode ser usado com bibliotecas de credenciais predefinidas da aplicação (ADC) ou com o comando gcloud auth activate-service-account. Qualquer pessoa que obtenha acesso ao material da chave tem acesso total a todos os recursos aos quais a conta de serviço tem acesso. Este material de chave privada deve ser tratado com a maior preocupação e deve ser considerado menos seguro quanto mais tempo existir. Por conseguinte, a rotação do material da chave privada é fundamental para manter uma segurança forte.

Autorizações da conta de serviço que ativam outras capacidades

Algumas autorizações para credenciais de contas de serviço ativam várias capacidades. Por exemplo, iam.serviceAccounts.signBlob e iam.serviceAccounts.signJwt também permitem que os membros gerem chaves de acesso e chaves de identificação para uma conta de serviço. Além disso, uma vez que o iam.serviceAccounts.signBlob permite que os diretores assinem qualquer tipo de dados, também permite que os diretores assinem JWTs.

Antes de adicionar qualquer uma destas autorizações a funções personalizadas, certifique-se de que compreende que ações cada autorização permite.

A tabela seguinte mostra as operações ativadas por estas autorizações:

Autorização Operações ativadas
iam.serviceAccounts.getAccessToken Obtenha um token de acesso para a conta de serviço
iam.serviceAccounts.getOpenIdToken Obtenha um token de ID para a conta de serviço
iam.serviceAccounts.signJwt
  • Assine um JWT
  • Obtenha uma chave de acesso ou um token de ID para a conta de serviço através de um token de portador JWT.
iam.serviceAccounts.signBlob
  • Assine qualquer tipo de blob, incluindo JWTs
  • Obtenha uma chave de acesso ou um token de ID para a conta de serviço através de um token de portador JWT.

Práticas recomendadas para conceder funções em contas de serviço

Em cenários em que uma conta de serviço recebeu autorizações para realizar operações altamente privilegiadas, tenha cuidado ao conceder a função de utilizador da conta de serviço ou as respetivas autorizações incluídas a um utilizador nessa conta de serviço.

As contas de serviço representam a segurança ao nível do serviço. A segurança do serviço é determinada pelas pessoas que têm funções do IAM para gerir e usar as contas de serviço, e pelas pessoas que detêm chaves de contas de serviço para essas contas de serviço. As práticas recomendadas para garantir a segurança incluem o seguinte:

  • Use a API IAM para auditar as contas de serviço, as chaves e as políticas de autorização nessas contas de serviço.
  • Se as suas contas de serviço não precisarem de chaves de contas de serviço, desative-as ou elimine-as.
  • Se os utilizadores não precisarem de autorização para gerir ou usar contas de serviço, remova-os da política de autorização aplicável.
  • Compreenda como a concessão de determinadas autorizações para contas de serviço pode ativar efetivamente outras capacidades.
  • Certifique-se de que as contas de serviço têm o menor número possível de autorizações. Use contas de serviço predefinidas com precaução, porque lhes é concedida automaticamente a função de Editor (roles/editor) no projeto.

Para saber mais sobre as práticas recomendadas, consulte o artigo Práticas recomendadas para trabalhar com contas de serviço.