Identidade temporária de conta de serviço

Quando um principal autenticado, como um usuário ou outra conta de serviço, é autenticado como uma conta de serviço para receber as permissões dela, isso é chamado de representação da conta de serviço. Representar uma conta de serviço permite que um principal autenticado acesse tudo o que ela pode acessar. Somente os principais autenticados com as permissões apropriadas podem representar contas de serviço.

A representação é útil quando você quer alterar as permissões de um usuário sem alterar as políticas do Identity and Access Management (IAM). Por exemplo, é possível usar a representação para conceder temporariamente um acesso elevado a um usuário ou para testar se um conjunto específico de permissões é suficiente para uma tarefa. Também é possível usar a representação para desenvolver localmente aplicativos que só podem ser executados como uma conta de serviço ou para autenticar aplicativos executados fora do Google Cloud.

A representação da conta de serviço do Google Cloud é semelhante aos métodos da API Security Token Service da Amazon Web Services (AWS), como AssumeRole.

Como funciona a representação de uma conta de serviço

A representação da conta de serviço sempre envolve duas identidades: uma principal autenticada e a conta de serviço representada por ela. Para representar a conta de serviço, o principal autenticado recebe um token para ela e o usa para fazer a autenticação.

Há várias maneiras de representar uma conta de serviço:

  • Defina a flag --impersonate-service-account ou a propriedade impersonate-service-account ao executar um comando da CLI do Google Cloud. Quando você executa um comando da gcloud CLI com essa configuração, ela cria credenciais de curta duração para a conta de serviço e executa o comando com essas credenciais.

    Também é possível usar a flag --impersonate-service-account ao configurar o arquivo do Application Default Credentials. Com essa configuração, as bibliotecas de cliente compatíveis com a representação podem usar a conta de serviço automaticamente.

  • Crie credenciais de curta duração usando a API Service Account Credentials e use essas credenciais para autenticar uma solicitação de API.

    As credenciais de curta duração têm uma vida útil limitada, com durações de apenas algumas horas ou menos, e não são atualizadas automaticamente. Elas também oferecem menos risco do que as credenciais de longa duração, como as chaves de conta de serviço.

  • Use um arquivo de configuração de credencial para configurar um aplicativo externo para representar uma conta de serviço. Essa opção só está disponível para aplicativos que usam a federação de identidade da carga de trabalho.

    Quando um aplicativo usa um arquivo de configuração de credencial para acessar o Google Cloud, primeiro ele usa as credenciais específicas do ambiente para receber uma credencial de curta duração para uma conta de serviço designada. Em seguida, ele usa essa credencial de curta duração para se autenticar no Google Cloud.

Se um principal acessar recursos enquanto estiver representando uma conta de serviço, a maioria dos registros de auditoria incluirá a identidade e a identidade da conta de serviço que está sendo representada. Para mais informações, consulte Como interpretar registros de auditoria.

Ao usar o console do Google Cloud, você sempre se autenticará com suas credenciais de usuário. Não é possível representar uma conta de serviço para acessar recursos no console do Google Cloud.

Autenticação sem representação

Há várias maneiras de uma carga de trabalho ou um usuário se autenticar como uma conta de serviço sem representar a conta de serviço:

  • Uma carga de trabalho usa uma conta de serviço anexada para autenticar nas APIs do Google. Nesse caso, a conta de serviço anexada funciona como a identidade da carga de trabalho e é a única identidade autenticada envolvida na solicitação.

    Para saber como as cargas de trabalho se autenticam no Google Cloud, consulte Identidades para cargas de trabalho.

  • Um principal usa uma chave de conta de serviço para se autenticar como uma conta de serviço. O uso de uma chave de conta de serviço para autenticação como conta de serviço envolve apenas uma identidade autenticada: a da conta de serviço. Como há apenas uma identidade envolvida, o uso de uma chave não é a representação da conta de serviço.

Nesses casos, os registros de auditoria registram apenas a identidade da conta de serviço. Elas não registram nenhuma outra identidade. Por exemplo, as identidades dos usuários que executaram o código na carga de trabalho ou as que usaram a chave da conta de serviço para autenticação. Como resultado, o uso de chaves de conta de serviço ou a concessão de permissão aos desenvolvedores para executar código em recursos privilegiados (por exemplo, uma sessão SSH para uma instância de VM) pode criar riscos de escalonamento de privilégios e não repúdio.

Permissões necessárias

Para representar uma conta de serviço, é necessária a permissão iam.serviceAccounts.getAccessToken. Essa permissão está presente em papéis como o papel de criador de token da conta de serviço (roles/iam.serviceAccountTokenCreator).

Para mais informações sobre os papéis necessários para a representação, consulte Papéis para autenticação da conta de serviço.

Casos de uso de representação de conta de serviço

A representação da conta de serviço é útil quando você precisa executar tarefas como estas:

  • Conceder a um usuário acesso elevado temporário
  • Testar se um conjunto específico de permissões é suficiente para uma tarefa
  • Desenvolver localmente aplicativos que só podem ser executados como uma conta de serviço
  • Autenticar aplicativos externos

Conceder acesso elevado temporário

Em alguns casos, você pode permitir que um usuário acesse recursos específicos temporariamente. Por exemplo, é possível conceder a alguém acesso adicional para que ele possa resolver um incidente ou permitir que alguém acesse dados confidenciais por um período limitado após registrar uma justificativa.

A representação de uma conta de serviço é uma das maneiras de dar aos usuários esse acesso elevado temporário. Para usar uma conta de serviço para acesso elevado temporário, primeiro conceda a ela os papéis do IAM que quer conceder temporariamente aos usuários. Em seguida, você permite que os usuários representem a conta de serviço, concedendo a eles permissão para representar a conta de serviço ou usando um agente de token para emitir uma credencial de curta duração para a conta de serviço.

Para saber mais sobre os métodos para conceder aos usuários acesso elevado temporário, consulte Visão geral do acesso elevado temporário.

Como testar permissões

Em alguns casos, convém verificar se um conjunto específico de permissões é suficiente para uma tarefa. Por exemplo, talvez você queira confirmar se uma conta de serviço ainda poderá executar um aplicativo se remover determinadas permissões em excesso. Ou talvez você esteja ajudando um usuário a resolver problemas de uma tarefa e queira verificar se ele pode executar um determinado comando com os papéis atuais do IAM.

Use a representação de conta de serviço para testar um conjunto específico de permissões. Primeiro, crie uma conta de serviço e conceda a ela um ou mais papéis do IAM com as permissões que você quer testar. Em seguida, represente a conta de serviço e tente a tarefa. Esse método permite testar permissões sem precisar criar contas de usuário de teste ou modificar suas próprias permissões do IAM.

Para saber como representar contas de serviço, consulte Usar a representação de uma conta de serviço.

Desenvolver aplicativos localmente

Ao desenvolver aplicativos localmente, é possível autenticar usando suas credenciais de usuário. No entanto, em algumas situações, isso pode não ser possível. Por exemplo, se você quiser se autenticar em um serviço que exige um token com público personalizado, que os usuários normalmente não podem configurar. Nesses casos, você precisa fazer a autenticação como uma conta de serviço, em vez de usar suas credenciais de usuário.

Nessas situações, recomendamos usar a representação de uma conta de serviço. Usar a representação de uma conta de serviço permite evitar o uso de chaves de conta de serviço, que criam mais riscos de segurança.

Para saber como representar contas de serviço para desenvolver aplicativos, consulte Representação de contas de serviço.

Autenticar aplicativos externos

Para acessar os recursos do Google Cloud, os aplicativos executados fora dele precisam ser autenticados no Google Cloud. Uma maneira de autenticar esses aplicativos é usando a representação de uma conta de serviço.

Para permitir que o aplicativo represente uma conta de serviço, primeiro é necessário configurar a federação de identidade da carga de trabalho, que fornece uma identidade autenticada ao aplicativo. Em seguida, você pode usar um arquivo de configuração de credencial para configurar seu aplicativo para representar uma conta de serviço.

Embora seja possível usar chaves de contas de serviço para autenticar aplicativos externos, não recomendamos fazer isso. As chaves de conta de serviço criam mais riscos de segurança e precisam ser evitadas sempre que possível.

A seguir