Service Account Impersonation - GCP
Configurar e utilizar a Service Account (SA) Impersonation
GCP - Service Account Impersonation
Esta documentação descreve como configurar e utilizar a Service Account (SA) Impersonation no Google Cloud Platform (GCP) para permitir que um usuário ou serviço atue em nome de uma SA específica. A impersonação de SAs é útil para delegar permissões e acessar recursos do GCP de maneira segura e controlada.
Conteúdo
- O que é Service Account Impersonation?
- Como funciona?
- Pré-requisitos
- Configuração de Service Account Impersonation
- Uso de Service Account Impersonation (desenvolvimento local)
- Deploy da aplicação no ambiente GCP
- Boas Práticas
- Referências
O que é Service Account Impersonation?
Antes de entender sobre SA Impersonation, é importante compreender o que é uma Service Account (SA). Uma SA é uma identidade especial usada por aplicativos e serviços para interagir com APIs do Google Cloud. Diferente das contas de usuário, as SAs são gerenciadas pelo sistema e não estão associadas a um usuário específico. A autorização de uma conta de serviço é gerenciada através do IAM (Identity and Access Management). Você concede papéis (roles) a uma conta de serviço, definindo exatamente quais permissões ela tem sobre quais recursos. Por exemplo, você pode dar a uma conta de serviço a permissão para apenas ler objetos de um bucket específico no Cloud Storage. Isso permite aplicar o princípio do menor privilégio, garantindo que a aplicação só acesse o que for estritamente necessário.
A Service Account Impersonation permite que um usuário ou serviço assuma a identidade de uma SA para acessar recursos do GCP. Isso é feito concedendo permissões específicas ao usuário ou serviço para "impersonar" a SA, permitindo que ele execute ações em nome dessa conta.
Quando você usa este método, você começa como um usuário autenticado e solicita credenciais de curta duração para uma conta de serviço que tenha a autorização exigida pelo seu caso de uso. O usuário autenticado precisa ter as permissões necessárias para representar a conta de serviço. Esse processo acaba se tornando mais seguro por três motivos:
- Você não precisa distribuir chaves de conta de serviço, que podem ser perdidas ou comprometidas.
- Você pode auditar o uso da conta de serviço, pois as ações são registradas como realizadas pelo usuário autenticado.
- As credenciais de curta duração são automaticamente revogadas após um período de tempo, reduzindo o risco de uso indevido.
Como funciona?
- Uma conta de usuário ou serviço solicita a representação de uma conta de serviço de destino.
- O IAM verifica se o solicitante possui as permissões necessárias para representar o destino.
- Se autorizado, o GCP gera credenciais de curta duração para a conta de serviço de destino.
- O solicitante usa essas credenciais temporárias para acessar recursos.
- O recurso valida as credenciais e concede acesso com base nas permissões da conta de serviço de destino.
Pré-requisitos
Para utilizar a Service Account Impersonation, você precisa atender aos seguintes pré-requisitos:
-
Ativar a API IAM Service Account Credentials no projeto do GCP.
-
Ter uma conta do Google Cloud com permissões adequadas.
- Conceder permissões de impersonation ao usuário ou serviço que irá assumir a SA. Para isto é necessário atribuir o papel
roles/iam.serviceAccountTokenCreatorao usuário ou serviço na SA que será impersonada.
- Conceder permissões de impersonation ao usuário ou serviço que irá assumir a SA. Para isto é necessário atribuir o papel
-
Ter uma Service Account (SA) criada no projeto do GCP.
Configuração de Service Account Impersonation
Para configurar a Service Account Impersonation, siga os passos abaixo:
- Acesse o Console do Google Cloud.
- Navegue até a seção "IAM & Admin" e selecione "Service Accounts".
- Selecione a SA que você deseja que seja impersonada.
- Clique na aba "Permissions" e adicione o usuário ou serviço que irá assumir a SA.
- Atribua o papel
roles/iam.serviceAccountTokenCreatorao usuário ou serviço. - Salve as alterações.
Uso de Service Account Impersonation (desenvolvimento local)
Via gcloud CLI (Command Line Interface)
Uma forma simples de utilizar a Service Account Impersonation é através da CLI da gcloud. É possível personificar uma conta de serviço para um comando específico da CLI da gcloud ou configurar a CLI da gcloud para usar a impersonation em cada comando automaticamente.
Em um comando da CLI da gcloud, use a sinalização --impersonate-service-account. Por exemplo, o comando a seguir lista os buckets de armazenamento usando a identidade e o acesso fornecidos pela conta de serviço especificada:
Caso você queira desenvolver um script ou aplicação que utilize a impersonação de SA sem adicionar linhas em seu código, autentique e configure o Application Default Credentials (ADC). Para isso, no seu terminal local, você vai configurar o ambiente para que as bibliotecas de cliente do Google Cloud usem suas credenciais de usuário para impersonificar a service account.
- Faça login com sua conta de usuário:
- Configure o ADC para usar a impersonação de SA:
Este comando gera um arquivo de credenciais localmente (~/.config/gcloud/application_default_credentials.json) que informa às bibliotecas do Google Cloud para primeiro se autenticarem como seu usuário e, em seguida, obter um token de curta duração para a service account especificada.
Após configurar o ADC, as bibliotecas cliente do Google Cloud usarão automaticamente a conta de serviço impersonificada para autenticação. Você pode verificar se a configuração foi bem-sucedida executando o seguinte comando:
A vantagem dessa abordagem é que o código não precisa de nenhuma alteração especial. As bibliotecas de cliente do Google Cloud (google-cloud-aiplatform, google-cloud-storage, etc.) procuram automaticamente por essas credenciais de ambiente (ADC). Seu código para inicializar os clientes do Vertex AI (para o Gemini) e do Cloud Storage, por exemplo, permanecerá simples, sem nenhuma referência a arquivos de chave.
Via Código
Para utilizar a Service Account Impersonation em seu código, você pode usar a biblioteca cliente do Google Cloud para a linguagem de programação de sua escolha (REST, Go, Java, Node.js, Python). Abaixo está um exemplo em Python utilizando a biblioteca google-auth e google-cloud-storage. Para usar as credenciais da SA, seu aplicativo precisa ser autenticado primeiro com credenciais de origem.
Deploy da aplicação no ambiente GCP
Quando a aplicação está sendo executada em um ambiente do GCP (como Compute Engine, Cloud Run, App Engine, etc.), o processo de impersonação não se torna necessário, pois para a maioria dos serviços, é possível "anexar" uma service account diretamente à instância ou serviço. Dessa forma, a aplicação pode usar as permissões da service account sem a necessidade de impersonação. Como exemplo, podemos citar o Cloud Run, onde é possível selecionar a service account que o serviço irá utilizar diretamente no comando de deploy:
Agora, considerando um cenário no qual temos um ambiente de nuvem híbrida/multicloud, a solução recomendada e mais segura para que uma aplicação em outro provedor acesse recursos do Google Cloud (como a API do Gemini no AI Platform/Vertex AI) é usar o Workload Identity Federation (Federação de Identidade de Carga de Trabalho). Essa é uma funcionalidade de segurança do GCP que permite que aplicações executando fora do Google Cloud acessem recursos do GCP sem a necessidade de gerenciar chaves de conta de serviço de longa duração. É possível usar o Workload Identity Federation com workloads que executam em Amazon Web Services (AWS), Azure, Active Directory local, serviços de deployment como GitHub e GitLab, e com qualquer provedor de identidade (IdP) que suporte OpenID Connect (OIDC) ou Security Assertion Markup Language (SAML) V2.0.
Boas Práticas
- Sempre utilize o menor escopo de permissões necessário para a Service Account (princípio do menor privilégio).
- Revogue as permissões de impersonação quando não forem mais necessárias.
- Monitore o uso da Service Account e audite as ações realizadas em seu nome.
- Use tokens de curta duração (a expiração padrão de 1 hora geralmente é uma boa opção)
- Audite regularmente os relacionamentos de personificação.