Gerenciamento de chaves secretas com o Cloud KMS

Os aplicativos costumam exigir acesso a pequenos fragmentos de dados confidenciais no momento de criação ou execução. Esses fragmentos de dados são frequentemente chamados de chave secreta. Elas se assemelham, em conceito, aos arquivos de configuração, mas geralmente são mais confidenciais, porque podem conceder acesso a outros dados, como dados de usuário.

Neste tópico, descrevemos alguns dos principais conceitos de gerenciamento de chaves secretas. Também é possível encontrar orientações sobre como usar o Cloud Key Management Service para gerenciamento de chaves secretas.

Visão geral do gerenciamento de chaves secretas

Há várias opções para gerenciar chaves secretas. Algumas maneiras comuns de armazená-las incluem o uso de:

  • código ou binários
  • um gerenciador de implementação
  • um volume de chave secreta em um contêiner
  • metadados de uma VM
  • um sistema de armazenamento

Para escolher entre essas opções, geralmente é preciso achar o equilíbrio entre segurança e funcionalidade. Veja a seguir algumas preocupações comuns de segurança:

  • Autorização: gerenciamento de acesso de chaves secretas ou do local em que elas estão armazenadas, incluindo escopos de autorização rígidos.
  • Verificação de uso: a capacidade de auditar, em nível baixo de granularidade (por exemplo, por chave secreta), o acesso e o uso de chaves secretas.
  • Criptografia em repouso: criptografia de chaves secretas em caso de roubo ou perda de dados.
  • Rotação: capacidade de fazer rotação ou atualização de chaves secretas regularmente ou conforme necessário, em reação a um incidente.
  • Isolamento: separação entre o local em que as chaves secretas são gerenciadas e o local em que são usadas. O isolamento também envolve a separação de tarefas entre os usuários que podem gerenciar chaves secretas e os que podem usá-las.

Veja a seguir algumas preocupações comuns de funcionalidade:

  • Consistência: sincronização de chaves secretas entre vários locais e diversos aplicativos.
  • Gerenciamento de versões: compreensão de quando e como as chaves são atualizadas, visando a compatibilidade com a rotação de chaves secretas.

Como escolher uma solução de gerenciamento de chaves secretas

A escolha da melhor solução de gerenciamento de chaves secretas depende da combinação de ambiente, chaves secretas e necessidades de segurança existentes. Veja a seguir algumas abordagens comuns:

  1. Armazenamento de chaves secretas em código, criptografadas com uma chave do Cloud KMS. Essa solução costuma ser implementada pela criptografia de chaves secretas na camada de aplicativo. O uso dela ajuda a fornecer uma camada extra de proteção contra ameaças de pessoas com informações privilegiadas, o que é feito por meio da limitação do escopo de acesso à chave secreta. O acesso à chave secreta é vedado a todos os desenvolvedores com acesso ao código, exceto os que têm acesso ao código e à chave correspondente. A implementação dessa opção traz benefícios mesmo nos casos em que todos os desenvolvedores tenham acesso ao código e à chave, já que permite fazer auditoria do acesso à chave secreta, o que talvez não seja possível em um repositório de código.

  2. Armazenamento de chaves secretas em um intervalo no Cloud Storage, criptografadas em repouso. Essa solução oferece benefícios semelhantes aos da solução anterior, na medida em que limita o acesso às chaves secretas a um conjunto menor de desenvolvedores e permite fazer auditoria desse acesso. Além disso, ao armazenar as chaves secretas em um local separado, você pode fazer a rotação delas com mais facilidade, quando necessário. Por exemplo, quando é detectada uma violação de segurança. Essa solução também permite a separação de sistemas. Se o repositório de código que usa as chaves secretas for violado, as próprias chaves secretas ainda poderão ser protegidas.

  3. Uso de uma solução de terceiros para gerenciamento de chaves secretas. Uma ferramenta dedicada de gerenciamento de chaves secretas tem como base as duas primeiras opções desta lista. Além de facilitarem a rotação de chaves secretas, em alguns casos, essas ferramentas fazem isso para você ou simplificam a rotação regular.

Como alterar chaves secretas

Outra consideração importante ao escolher uma solução de gerenciamento de chaves secretas é a facilidade para alterá-las. Por exemplo, fixar uma chave secreta no código muitas vezes é uma solução tentadora, mas que faz a alteração de chaves secretas ficar demorada e difícil.

Ao observar uma solução de gerenciamento de chaves secretas, considere os seguintes requisitos de design e o grau de relevância deles para o aplicativo:

  • Rotação de chaves secretas. Convém fazer a rotação regular das chaves secretas, especialmente por questões de segurança. O ideal é armazenar várias versões de cada chave secreta e fazer com que o código faça o teste delas, uma por vez. Ao armazenar muitas versões de uma chave secreta e fazer a rotação para chaves secretas mais novas conforme necessário, você melhora a consistência com um sistema externo que talvez precise dessa chave. Isso também permite reverter para chaves secretas anteriores, quando necessário. A implementação dessa solução pode ser bem complicada, mas se você considerar essas necessidades com antecedência, poderá facilitar o gerenciamento das chaves secretas ao longo do tempo.
  • Armazenar chaves secretas em cache local. Dependendo do local onde são armazenadas as chaves secretas relativas ao aplicativo, pode ser preciso armazená-las localmente. Desse modo, elas podem ser atualizadas com frequência, como várias vezes por hora. A vantagem dessa solução é que, quanto maior for a frequência de atualização, mais rápida será a resposta a uma interrupção. A desvantagem disso é que, se a chave secreta ficar mal configurada de alguma maneira, uma atualização mais rápida permitirá que esse erro se espalhe de modo mais acelerado por toda a frota.
  • Uso de uma solução ou plataforma separada. Quando se trata de gerenciamento de chaves secretas, convém evitar o bloqueio usando uma solução de gerenciamento independente de plataforma. Desse modo, você terá opções caso seja disponibilizada uma solução mais flexível.

Gerenciamento de chaves secretas com o Google Cloud Platform

O GCP oferece várias maneiras de ajudá-lo a implementar sua solução de gerenciamento de chaves secretas com a abordagem que você quer. Nesta seção, descrevemos uma abordagem que usa o Cloud Storage para armazenamento de chaves secretas, o Cloud KMS para chaves de criptografia, o Cloud Identity and Access Management para controle de acesso e o Cloud Audit Logging para auditoria.

Veja aqui uma maneira de implementar usando gerenciamento de chaves secretas no GCP. Para mais informações, consulte Como armazenar chaves secretas criptografadas com o Cloud KMS.

  • Crie dois projetos. O primeiro projeto usa o Cloud Storage para armazenar chaves secretas. O segundo usa o Cloud KMS para gerenciar chaves de criptografia.
  • Atribua os papéis storage.objectAdmin e cloudkms.cryptoKeyEncrypterDecrypter a qualquer usuário que precise acessar as chaves secretas. Se preferir, você poderá usar uma conta de serviço que acessa o Cloud Storage em nome de um usuário. Certifique-se de que os usuários sem necessidade de acesso a chaves secretas tenham permissão de gerenciamento, mas não de acesso.
  • No Cloud Storage, armazene cada chave secreta como um objeto criptografado e agrupe-as em intervalos, conforme necessário. Em geral, você poderá agrupar chaves secretas se elas compartilharem as mesmas necessidades de uso, acesso e proteção.
  • Proteja cada intervalo usando uma chave exclusiva no Cloud KMS na camada do aplicativo. Outra opção é aplicar a criptografia padrão do Google.
  • Faça a rotação das chaves secretas regularmente, sempre que possível.
  • Monitore a atividade usando o Cloud Audit Logging. Por padrão, os registros de atividades administrativas, como rotação de chaves ou alterações de permissões do Cloud IAM, são gravados. Outra opção a se considerar é a ativação da geração de registros de acesso a dados nos objetos do Cloud Storage. Esses registros são úteis no monitoramento das chaves secretas especialmente críticas.

Essa solução aborda a maioria dos requisitos de gerenciamento de chaves secretas descritos em Como escolher uma solução de gerenciamento de chaves secretas. Um item não abordado é o gerenciamento de versões. Isso porque a abordagem do gerenciamento de versões varia de aplicativo para aplicativo.

Antes de implementar uma solução como essa, você também precisa pensar em qual é a opção de criptografia mais adequada às suas necessidades e como quer gerenciar o acesso de usuário às chaves secretas.

Opções de criptografia

No GCP, você tem duas opções para criptografar chaves secretas:

  • Usar a criptografia de camada de aplicativo com uma chave no Cloud KMS. Com essa opção, você implementa a criptografia em objetos ou intervalos no Cloud Storage além da criptografia existente do Google, por meio de uma chave armazenada no Cloud KMS. Esta é a opção recomendada.

  • Usar a criptografia padrão integrada ao intervalo do Cloud Storage. O GCP criptografa o conteúdo do cliente armazenado em repouso, usando um ou mais mecanismos de criptografia. Como o próprio nome diz, essa criptografia está disponível por padrão e não requer nenhuma outra ação sua.

Para saber mais sobre essas e outras opções de criptografia, consulte Criptografia em repouso.

Criptografia de camada de aplicativo usando uma chave no Cloud KMS

A maneira recomendada de armazenar chaves secretas é usar criptografia de camada de aplicativo usando uma chave no Cloud KMS. Esse método é especialmente útil quando você quer mais uma camada de controle ou tem um requisito de conformidade para gerenciar as próprias chaves.

Para implementar esse tipo de criptografia, é necessário enviar as chaves secretas ao Cloud KMS para serem criptografadas por meio de uma solicitação Encrypt. O Cloud KMS retorna essas chaves criptografadas para que seja possível gravá-las no armazenamento.

O Cloud KMS pode gerenciar chaves secretas de até 64 KiB. Se você precisa criptografar chaves maiores, é recomendável usar uma hierarquia com uma chave de criptografia de dados (DEK, na sigla em inglês) gerada localmente para criptografar a chave secreta. Além disso, você precisa de uma chave de criptografia de chave (KEK, na sigla em inglês) no Cloud KMS para criptografar a DEK. Para saber mais sobre DEKs, consulte Criptografia de envelope.

Criptografia padrão

Se o uso da codificação de camada de aplicativo não é uma opção para o aplicativo, outra solução comum é usar a criptografia padrão do Cloud Storage. Essa opção é usada com frequência quando se busca principalmente uma solução em nuvem para proteger as chaves secretas no armazenamento.

Essa criptografia é ativada automaticamente e não requer nenhum esforço extra de sua parte para ser implementada.

Como gerenciar o acesso a chaves secretas

Há duas opções principais para restringir e impor o acesso:

  • Controles de acesso no intervalo em que a chave secreta está armazenada. Essa opção aceita várias chaves secretas (objetos) por intervalo, ou apenas uma chave secreta por intervalo. Essa é a opção recomendada.
  • Controles de acesso na chave que criptografa o intervalo em que a chave secreta está armazenada. Essa opção aceita várias chaves secretas por chave ou apenas uma chave secreta por chave.

A segregação de chaves secretas só é aconselhável quando melhora a segurança e a facilidade de uso. Uma prática recomendada comum é limitar o volume de dados protegido por qualquer chave de criptografia, para fins de isolamento criptográfico, ou protegido por qualquer lista de controle de acesso. Esse artifício permite que você tenha maior controle granular sobre o acesso a chaves secretas, ajuda a evitar permissões acidentais e aceita auditorias mais detalhadas. Ao agrupar chaves secretas, faça isso quando fizer sentido em termos lógicos. Por exemplo, você pode agrupar algumas chaves secretas para simplificar o controle, como quando um único aplicativo precisa acessar uma determinada coleção de chaves secretas no tempo de execução.

Ao decidir como armazenar chaves secretas, é recomendável usar estas diretrizes:

  • Cada chave secreta é o próprio objeto.
  • As chaves secretas ficam em um único intervalo, em que elas têm várias características em comum.
  • Uma única chave de criptografia é usada para criptografar cada intervalo, que inclui essas chaves secretas agrupadas logicamente.

Veja a seguir alguns cenários em que convém agrupar chaves secretas:

  • O mesmo aplicativo requer acesso de chave secreta.
  • Os mesmos administradores humanos gerenciam versões e acesso de chaves secretas.
  • O mesmo ambiente, como produção, desenvolvimento ou teste.
  • O mesmo tempo de uso, como tempo de criação ou tempo de implementação.
  • O mesmo nível de proteção pretendido.

Rotação de chaves

É recomendável fazer a rotação das chaves regularmente para criptografar chaves secretas. Essa prática ajuda a limitar o volume de dados criptografados com uma única chave e ajuda a limitar o ciclo de vida da chave, caso ela seja comprometida. Além da rotação automática das chaves, você também pode fazer a rotação de uma chave manualmente. Por exemplo, é possível fazer a rotação de uma chave manualmente quando uma nova versão da chave secreta é atualizada. Para saber mais, consulte Rotação de chave.

Rotação de chave secreta

Além de fazer a rotação de chaves, você também pode fazer a rotação de chaves secretas. Geralmente a rotação (ou atualização) de uma chave secreta ocorre quando uma nova versão é criada. Por exemplo, ao gerar uma nova senha para uma credencial de banco de dados. Convém também fazer a rotação de chave regularmente para limitar o ciclo de vida da chave secreta.

Com a rotação, uma chave secreta fica com várias versões que você precisa gerenciar. Pode haver uma única versão de uma chave secreta que seja válida a qualquer momento ou várias versões de chaves secretas. Pense em manter as versões antigas de uma chave secreta por algum tempo, porque elas poderão ser necessárias se o aplicativo for revertido a uma versão anterior.

Uma maneira de gerenciar várias versões de chaves secretas é criar um objeto para cada versão e armazená-los no mesmo intervalo associado a essa chave secreta específica. Em seguida, é possível adotar uma convenção de nomenclatura que será usada para rastrear qual versão está em uso. Além disso, é possível usar um conjunto central de variáveis para ajudá-lo a determinar qual chave secreta precisa estar em uso a qualquer momento.

Gerenciamento de permissões usando o Cloud IAM

Como parte do gerenciamento de chaves secretas no GCP, é recomendado usar o Cloud IAM. Ele permite criar e gerenciar permissões para recursos do GCP. unifica o controle de acesso de serviços do GCP em um único sistema e apresenta um conjunto consistente de operações. Para saber mais sobre o Cloud IAM, consulte a documentação do Cloud IAM.

Um conceito crítico no gerenciamento de papéis e acesso é a separação de deveres. Convém evitar que apenas uma pessoa seja capaz de criptografar e descriptografar dados, bem como gerenciar ou criar novas chaves. Para mais informações, consulte Separação de deveres.

As duas formas de gerenciar permissões são:

  • Sem conta de serviço. Essa é a opção recomendada.
  • Com conta de serviço.

Gerenciamento de permissões sem conta de serviço

Para gerenciar chaves secretas usando o Cloud KMS, a configuração ideal precisa minimizar o acesso desnecessário e impor a separação de deveres. Esse tipo de configuração requer vários usuários:

  • Um administrador no nível da organização. Trata-se de um usuário com o papel resourcemanager.organizationAdmin. O administrador no nível da organização costuma ser o proprietário comercial da conta. Se você usou o papel resourcemanager.projectCreator em vez do outro, é concedido a esse usuário o acesso owner para esses projetos. Esse nível de acesso geralmente não é necessário. Não é recomendado usar esse papel para gerenciamento de chaves secretas.
  • Um segundo usuário com o papel storage.objectstorageA.admin. Responsável por gerenciar chaves secretas, esse usuário também usa uma conta de serviço com o papel storage.admin para o produto que contém o intervalo do Cloud Storage. Essa conta de serviço limita a capacidade desse usuário de excluir o intervalo ou de editar os metadados dele.
  • Um terceiro usuário com o papel cloudkms.admin. Ele gerencia as chaves usadas para criptografar chaves secretas.
  • Um quarto usuário com os papéis storage.objectAdmin e cloudkms.cryptoKeyEncrypterDecrypter. Trata-se do usuário final que precisa acessar as chaves secretas.

Gerenciamento de permissões com conta de serviço

Uma implementação alternativa requer que o usuário final só tenha permissões no intervalo de armazenamento e que o serviço de armazenamento use uma conta de serviço para acessar a chave em nome do usuário. Essa configuração é semelhante à descrita em Gerenciamento de permissões sem conta de serviço, com as seguintes alterações:

  • O usuário final que acessa as chaves secretas tem o papel storage.objectAdmin.
  • Um quinto usuário, para a conta de serviço do Cloud Storage, tem o papel cloudkms.cryptoKeyEncrypterDecrypter.

Essa configuração atende a uma situação em que nenhuma pessoa tem acesso para criptografar e descriptografar com uma chave, o que pode ser preferível em alguns casos. No entanto, permite que o Cloud Storage criptografe e descriptografe com a chave por sua própria autoridade.

Como auditar usando o Cloud Audit Logging

Uma consideração final ao gerenciamento de chaves secretas no GCP é o uso do Cloud Audit Logging. Esse serviço consiste em dois fluxos de registro, “Atividade do administrador” e “Acesso a dados”, que são gerados pelos serviços do GCP. Esses fluxos ajudam você a responder à pergunta “quem fez o quê, onde e quando?” nos projetos do GCP.

Os registros de “Atividade do administrador” contêm entradas para chamadas de API ou ações administrativas que modificam a configuração ou os metadados de um serviço ou projeto. Esse registro fica sempre ativado e visível para todos os membros do projeto.

Os registros “Acesso a dados” contêm entradas de registro para chamadas de API que criam, modificam ou leem dados fornecidos pelo usuário gerenciados por um serviço, como os dados armazenados em um serviço de banco de dados. Os registros de acesso a dados só ficam visíveis para proprietários e usuários do projeto que tenham o papel “Leitor de registros particulares”.

Tanto no Cloud Storage como no Cloud KMS, os registros “Atividade do administrador” são ativados por padrão. Eles incluem ações como criar um novo intervalo ou fazer a rotação de uma chave. Os registros “Atividade do administrador” são ativados por padrão, não exigem nenhuma ação do usuário para isso.

Nem o Cloud Storage nem o Cloud KMS têm registros "Acesso a dados" ativados por padrão, visto que poderiam gerar um volume de dados significativo. Esses registros rastreiam ações que ocorrem com frequência, especialmente quando se implementa a solução descrita aqui. Exemplos dessas ações são: ler o intervalo ou criptografar/descriptografar com uma chave. Além disso, qualquer acesso de chave secreta requer o uso do Cloud Storage e do Cloud KMS, de modo que as interações com chaves secretas possam ser gravadas em um ou outro local (embora gravar nos dois seja redundante).

Se você optar por usar a geração de registros, é recomendado ativar os registros "Acesso a dados" nos objetos do Cloud Storage, e não nas chaves do Cloud KMS. Esses registros fornecem dados mais granulares e mais fáceis de auditar do que os registros "Acesso a dados" nas chaves do Cloud KMS. Também é possível ativar os registros "Acesso a dados" nos objetos do Cloud Storage para chaves secretas que são especialmente críticas.

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Cloud KMS