Proteger chaves de conta de serviço

Ao contrário dos usuários normais, as contas de serviço não têm senhas. Em vez disso, as contas de serviço usam pares de chaves ECDSA para autenticação. Como a chave privada do par de Chave RSA permite que você se autentique como a conta de serviço, ter acesso à chave privada é semelhante a saber a senha de um usuário. A chave privada é conhecida como chave da conta de serviço. As chaves da conta de serviço são um risco de segurança quando não são gerenciadas com cuidado.

As principais ameaças relacionadas às chaves de conta de serviço são:

  • Vazamento de credenciais: as chaves da conta de serviço podem acabar em locais onde não deveriam ser armazenadas. Um usuário mal-intencionado pode usar uma chave de conta de serviço vazada para autenticar e ter acesso ao seu ambiente.

  • Escalonamento de privilégios: se um usuário mal-intencionado tiver acesso a uma chave de conta de serviço protegida insatisfatoriamente, ele poderá usá-la para escalonar privilégios.

  • Divulgação de informações: as chaves da conta de serviço podem divulgar dados confidenciais acidentalmente.

  • Não repúdio: ao autenticar usando uma chave de conta de serviço e permitir que a conta de serviço realize operações em nome dela, um usuário mal-intencionado pode ocultar a identidade e as ações dele.

Esta página apresenta as práticas recomendadas para gerenciar, usar e proteger chaves de conta de serviço.

Proteção contra vazamento de credenciais

Assim como um nome de usuário e uma senha, as chaves de conta de serviço são uma forma de credenciais. Se um usuário puder acessar uma chave de conta de serviço válida, ele poderá usá-la para autenticar e acessar os recursos aos quais a respectiva conta de serviço tem acesso.

Os usuários mal-intencionados podem achar as chaves de conta de serviço mais valiosas do que uma senha vazada. Por exemplo, é improvável que a tentativa de login usando uma senha vazada funcione se a conta de usuário tiver sido configurada para usar a verificação em duas etapas e os desafios de login. Por outro lado, a autenticação com uma chave de conta de serviço vazada provavelmente vai funcionar, já que as contas de serviço não estão sujeitas a outras verificações de login.

Os usuários mal-intencionados podem procurar chaves de conta de serviço das seguintes maneiras:

  • repositórios de código-fonte de projetos de código aberto;
  • Despejos de dados públicos de serviços violados.

Além dos locais públicos, os usuários mal-intencionados podem procurar chaves de conta de serviço em locais particulares comprometidos por eles. Por exemplo:

  • Caixas de entrada de e-mail
  • Compartilhamento de arquivos
  • Armazenamento de backup
  • diretórios do sistema de arquivos temporários.

Uma maneira eficaz de reduzir o risco de vazamento de chaves de conta de serviço é diminuir o número de chaves em circulação e desencorajar a criação de novas chaves. As seções a seguir descrevem como limitar o número de chaves de conta de serviço em circulação e quais outras medidas podem ajudar a limitar o risco de vazamentos de contas de serviço.

Evite deixar chaves de conta de serviço em locais temporários

Ao criar uma chave de conta de serviço, mova-a imediatamente para o local onde você quer armazená-la. Confira se você não está deixando acidentalmente uma cópia na pasta de downloads ou na lixeira do computador.

Não transmitir chaves de conta de serviço entre usuários

Ao implantar um aplicativo que requer uma chave de conta de serviço, talvez você não tenha permissão para criar uma chave de conta de serviço, sendo necessário pedir a outra pessoa para criar uma chave de conta de serviço para você.

Não enviar chaves de contas de serviço a repositórios de código-fonte

As chaves da conta de serviço são credenciais e precisam ser protegidas contra acesso não autorizado. Quando você envia uma chave de conta de serviço para um repositório de código-fonte, há um risco maior de a chave ficar acessível a usuários não autorizados e usuários mal-intencionados:

  • Usuários mal-intencionados podem verificar o código-fonte dos repositórios de origem pública em busca de chaves vazadas.

  • No futuro, você pode optar por transformar um repositório de origem particular em um repositório público, sem antes verificar se há chaves nele.

  • Outros membros da equipe podem armazenar cópias do código-fonte nas estações de trabalho deles.

Ao trabalhar com código que usa uma chave de conta de serviço, sempre armazene a chave da conta de serviço separada do código-fonte para reduzir o risco de enviar acidentalmente a chave para o repositório de origem. Em muitos casos, é possível reduzir ainda mais esse risco não usando chaves de conta de serviço durante o desenvolvimento e usando as credenciais pessoais em vez de chaves de conta de serviço.

Não incorporar chaves de conta de serviço em binários do programa

As chaves da conta de serviço são strings que correspondem a um determinado padrão. Elas podem ser identificadas mesmo que estejam incorporadas em outros arquivos ou binários. Se um usuário mal-intencionado tiver acesso ao binário, ele poderá extrair todas as chaves de conta de serviço incorporadas no binário.

Os binários do programa para aplicativos do lado do servidor podem ser hospedados em repositórios de artefatos ou copiados para as estações de trabalho de desenvolvedores para fins de depuração. Manter as chaves da conta de serviço separadas dos binários do programa ajuda a garantir que um usuário com acesso ao binário não consiga acessar implicitamente as credenciais da conta de serviço.

  • Para aplicativos do lado do cliente, como ferramentas, programas para computador ou apps para dispositivos móveis, não use contas de serviço.
  • Para aplicativos do lado do servidor, não incorpore chaves de conta de serviço no binário. Em vez disso, mantenha as chaves separadas do binário do aplicativo.

Rotacionar chaves da conta de serviço para reduzir o risco de segurança causado por vazamentos de chaves

Embora seja possível reduzir a probabilidade de vazamento acidental de uma chave de conta de serviço, pode ser difícil eliminar o risco completamente.

A rotação de chaves é o processo de substituir as chaves existentes por novas e, em seguida, invalidar as chaves substituídas. Recomendamos que você faça a rotação de todas as chaves que gerencia, incluindo as chaves da conta de serviço.

A rotação de chaves da conta de serviço pode ajudar a reduzir o risco representado por chaves vazadas ou roubadas. Se uma chave vazar, pode levar dias ou semanas para que usuários ou pessoas mal-intencionadas a descubram. Se você alterna regularmente as chaves da sua conta de serviço, há uma chance maior de que as chaves com vazamento sejam inválidas no momento em que um usuário de má-fé as receber.

Use prazos de validade para permitir que as chaves expirem automaticamente

Por padrão, as chaves de conta de serviço criadas têm um prazo de validade de um ano e permanecem válidas até que você as exclua. Você também pode definir seu próprio tempo de expiração. Definir um prazo de validade para as chaves da conta de serviço pode limitar o risco de segurança reduzindo o ciclo de vida da credencial persistente. No entanto, há outros riscos associados à definição de prazos de validade. Por exemplo, definir um prazo de validade pode fazer com que as cargas de trabalho falhem quando as chaves expirarem.

Use prazos de validade quando precisar de acesso temporário a um sistema que exija uma chave de conta de serviço. Por exemplo, use prazos de validade nos seguintes casos:

  • O desenvolvimento de código em um ambiente de não produção para um aplicativo só pode autenticar com chaves de conta de serviço.
  • O uso de uma ferramenta de terceiros só pode autenticar com chaves de conta de serviço.

Evite usar prazos de validade nestes cenários:

  • Cargas de trabalho de produção. Na produção, uma chave de conta de serviço expirada pode causar uma interrupção acidental. Em vez disso, use chaves que não expirem e gerencie o ciclo de vida delas com a rotação de chaves.
  • Cargas de trabalho de não produção que precisam de acesso permanente, como um pipeline de integração contínua (CI).
  • Sistemas de rotação de chaves que impedem o uso de uma chave após um período especificado.

Para limitar a validade das chaves de conta de serviço, configure um prazo de validade para chaves recém-criadas no projeto, na pasta ou na organização. O prazo de validade não se aplica às chaves atuais.

Ter um processo estabelecido para alternar as chaves da conta de serviço também ajuda a agir rapidamente caso você suspeite que uma chave da conta de serviço foi comprometida.

Usar uma chave dedicada para cada máquina que executa um aplicativo

Para ajudar a restringir as possíveis fontes de atividade suspeita, crie chaves individuais para cada cópia do aplicativo. Dessa forma, você poderá usar o campo serviceAccountKeyName que muitos serviços adicionam aos registros de auditoria para distinguir a máquina de origem de uma atividade.