Acerca das contas de serviço no GKE

Este documento descreve as contas de serviço no Google Kubernetes Engine (GKE) e como fornecem identidades para aplicações. Vai saber mais sobre os diferentes tipos de contas de serviço e quando usar cada tipo para autenticar o acesso aos recursos no GKE sem depender de credenciais pessoais.

Este documento destina-se a especialistas de segurança e operadores que criam e gerem contas de serviço para interagir com aplicações do GKE. Para saber mais acerca das funções comuns e das tarefas de exemplo que referimos no Google Cloud conteúdo, consulte o artigo Funções e tarefas comuns de utilizadores do GKE.

Contas de serviço do Kubernetes e contas de serviço do IAM

A tabela seguinte descreve as principais diferenças entre as contas de serviço do Kubernetes e as contas de serviço do IAM:

Tipos de contas de serviço no GKE
ServiceAccount do Kubernetes
  • ServiceAccount no servidor da API Kubernetes
  • Com âmbito num espaço de nomes do Kubernetes num cluster
  • Fornece uma identidade para os pods usarem no cluster
Conta de serviço do IAM
  • Faça a gestão através da API IAM
  • Com âmbito num Google Cloud projeto
  • Fornece uma identidade para as aplicações no projeto

ServiceAccounts do Kubernetes

As contas de serviço do Kubernetes são geridas ao nível do cluster e existem no servidor da API Kubernetes como objetos ServiceAccount. A documentação do Kubernetes e a documentação do GKE usam frequentemente o termo ServiceAccount para distinguir estes recursos do Kubernetes das contas de serviço noutros ambientes, como o IAM.

Cria uma ServiceAccount do Kubernetes num espaço de nomes e, em seguida, atribui essa ServiceAccount a um pod através do campo serviceAccountName no manifesto do pod. O processo kubelet no nó recebe um token de portador de curta duração para a ServiceAccount atribuída e monta o token como um volume projetado no pod. Por predefinição, este volume projetado tem um nome que começa com o prefixo kube-api-access-. Todos os volumes que começam com este prefixo são geridos pelo GKE, o que significa que não pode modificar o tamanho destes volumes. Para uma monitorização da utilização do disco mais precisa, exclua os volumes que começam com o prefixo kube-api-access- da configuração de monitorização.

O token de portador de curta duração é um token da Web JSON (JWT) assinado pelo servidor da API, que é um fornecedor do OpenID Connect (OIDC). Para validar o token de autorização, obtenha a chave de validação pública para o cluster chamando o método projects.locations.clusters.getJwks na API GKE.

Credenciais da conta de serviço do Kubernetes comprometidas

Se uma credencial da conta de serviço do Kubernetes for comprometida, use uma das seguintes opções para revogar as credenciais:

  • Recrie os seus pods: o token de portador está associado a cada UID do pod exclusivo, pelo que a recriação dos pods invalida as credenciais anteriores.
  • Recrie a conta de serviço do Kubernetes: o token de portador está associado ao UID do objeto ServiceAccount na API Kubernetes. Elimine a ServiceAccount e crie uma nova ServiceAccount com o mesmo nome. Os tokens anteriores tornam-se inválidos porque o UID da nova conta de serviço é diferente.
  • Efetue uma rotação de credenciais: esta operação revoga todas as credenciais da conta de serviço do Kubernetes no seu cluster. A rotação também altera o certificado da CA e o endereço IP do cluster. Para obter detalhes, consulte a secção Rotação de credenciais.

Contas de serviço do IAM

As contas de serviço da IAM são geridas ao nível do projeto através da API IAM. Pode usar estas contas de serviço para realizar ações como chamar APIs Google Cloud programaticamente e gerir autorizações para aplicações em execução em Google Cloud produtos.

Para saber mais, consulte a vista geral das contas de serviço do IAM.

Agentes de serviço do GKE

Um agente do serviço IAM é uma conta de serviço IAM que Google Cloud faz a gestão. O GKE usa os seguintes dois agentes de serviço:

Agente do serviço do Kubernetes Engine

O GKE usa o agente de serviço do Kubernetes Engine para gerir o ciclo de vida dos recursos do cluster em seu nome, como nós, discos e equilibradores de carga. Este agente de serviço tem o domínio container-engine-robot.iam.gserviceaccount.com e recebe a função Agente de serviço do Kubernetes Engine (roles/container.serviceAgent) no seu projeto quando ativa a API GKE.

O identificador deste agente de serviço é o seguinte:

service-CLUSTER_PROJECT_NUMBER@container-engine-robot.iam.gserviceaccount.com

CLUSTER_PROJECT_NUMBER é o número do projeto numérico do projeto que contém o seu cluster do GKE.

Agente de serviço do nó predefinido do Kubernetes Engine

O GKE usa o agente de serviço de nó predefinido do Kubernetes Engine para suportar o registo e a monitorização de nós do Kubernetes para clusters que usam a versão 1.33 e posteriores do Kubernetes. Este agente de serviço tem o domínio gcp-sa-gkenode.iam.gserviceaccount.com e tem o papel Agente de serviço de nós predefinido do Kubernetes Engine (roles/container.defaultNodeServiceAgent) concedido no seu projeto quando ativa a API GKE.

O identificador deste agente de serviço é o seguinte:

service-CLUSTER_PROJECT_NUMBER@gcp-sa-gkenode.iam.gserviceaccount.com

CLUSTER_PROJECT_NUMBER é o número do projeto numérico do projeto que contém o seu cluster do GKE.

Se remover as autorizações do agente de serviço no seu projeto, pode recuperá-las seguindo as instruções em Erro 400/403: faltam autorizações de edição na conta.

Contas de serviço de nós

O GKE usa contas de serviço da IAM anexadas aos seus nós para executar tarefas do sistema, como registo e monitorização. No mínimo, estas contas de serviço de nós têm de ter a função Conta de serviço de nós predefinida do Kubernetes Engine (roles/container.defaultNodeServiceAccount) no seu projeto. Por predefinição, o GKE usa a conta de serviço predefinida do Compute Engine, que é criada automaticamente no seu projeto, como a conta de serviço do nó.

Se a sua organização aplicar a restrição da política da organização iam.automaticIamGrantsForDefaultServiceAccounts, a conta de serviço do Compute Engine predefinida no seu projeto pode não receber automaticamente as autorizações necessárias para o GKE.

Se usar a conta de serviço predefinida do Compute Engine para outras funções no seu projeto ou organização, a conta de serviço pode ter mais autorizações do que o GKE precisa, o que pode expô-lo a riscos de segurança.

Não desative a conta de serviço predefinida do Compute Engine, a menos que esteja a fazer a migração para contas de serviço geridas pelo utilizador.

Endereços de email das contas de serviço de nós

O endereço de email da sua conta de serviço do nó depende do tipo de conta de serviço, da seguinte forma:

  • Conta de serviço predefinida do Compute Engine:

    CLUSTER_PROJECT_NUMBER-compute@developer.gserviceaccount.com
    

    Substitua CLUSTER_PROJECT_NUMBER pelo número do projeto que contém o seu cluster, como 1234567890.

  • Conta de serviço personalizada:

    SERVICE_ACCOUNT_NAME@SERVICE_ACCOUNT_PROJECT_ID.iam.gserviceaccount.com
    

    Substitua o seguinte:

    • SERVICE_ACCOUNT_NAME: o nome da conta de serviço.
    • SERVICE_ACCOUNT_PROJECT_ID: o ID do projeto do projeto Google Cloud que contém a conta de serviço.

Contas de serviço de nós e agentes de serviço de projetos

Quando cria um cluster ou um conjunto de nós, os agentes de serviço no projeto do cluster usam a conta de serviço associada aos nós para realizar tarefas como transferências de imagens. Por predefinição, os agentes de serviço no projeto do cluster têm o seguinte acesso às contas de serviço dos nós nesse projeto:

  • O agente de serviço do Compute Engine num projeto pode criar tokens de acesso para contas de serviço de nós no mesmo projeto.
  • O agente de serviço do GKE num projeto pode roubar a identidade de contas de serviço de nós no mesmo projeto.

Algumas organizações usam um projeto dedicado para gerir todas as contas de serviço. Se a conta de serviço do nó não estiver no projeto do cluster, os agentes de serviço no projeto do cluster não podem criar tokens nem roubar a identidade dessa conta de serviço. Tem de conceder aos agentes de serviço no projeto do cluster as seguintes funções na conta de serviço:

Para mais informações, consulte o artigo Configure a utilização de contas de serviço em vários projetos.

Quando usar uma conta de serviço específica

O tipo de conta de serviço que usa depende do tipo de identidade que quer fornecer para as suas aplicações, da seguinte forma:

  • Forneça uma identidade para os seus pods usarem no cluster: use uma ServiceAccount do Kubernetes. Todos os espaços de nomes do Kubernetes têm uma default ServiceAccount, mas recomendamos que crie novas ServiceAccounts com privilégios mínimos para cada carga de trabalho em cada espaço de nomes.
  • Forneça uma identidade para os seus pods usarem fora do cluster: use a Federação de identidades de cargas de trabalho para o GKE. A Workload Identity Federation para o GKE permite-lhe especificar recursos do Kubernetes, como ServiceAccounts, como principais nas políticas do IAM. Por exemplo, use a Workload Identity Federation para o GKE quando chamar Google Cloud APIs como o Secret Manager ou o Spanner a partir dos seus pods.
  • Forneça uma identidade predefinida para os seus nós: use uma conta de serviço do IAM com privilégios mínimos personalizada quando criar os seus clusters ou nós do GKE. Se não usar uma conta de serviço do IAM personalizada, o GKE usa a conta de serviço predefinida do Compute Engine.

O que se segue?