Como armazenar segredos criptografados no código de um projeto serverless.com?

12

Com o serverless.com, a maneira mais fácil de expor um segredo a uma função do AWS Lambda é armazená-lo no serverless.ymlarquivo (criptografado com o KMS, por exemplo).

Mas comprometer segredos criptografados com o Git não é a melhor coisa do mundo. Requer alterações de código quando o segredo precisa mudar, por um lado.

Mas apenas em termos de segurança, quais são as melhores alternativas? por exemplo, o segredo pode ser armazenado no S3 (criptografado), com o Lambda tendo acesso a esse local e chave KMS, mas isso é realmente melhor de alguma maneira significativa?

Assaf Lavie
fonte
essa opinião - fobia semântica - me interessa não.
Assaf Lavie

Respostas:

7

Existem alguns elementos a serem considerados aqui:

  1. É valioso ter a capacidade de manter a configuração com uma cadência de liberação separada do código que está sendo configurado. Isso encoraja a rotação de credenciais de maneira automatizada, faça-o regularmente e indolor.

  2. É totalmente razoável, do ponto de vista de "Infraestrutura como código", armazenar toda a configuração no Git, embora provavelmente em um repositório diferente, pois o escopo da configuração provavelmente abrangerá mais de um serviço.

  3. Supondo que ambas as instruções acima sejam relevantes para sua situação, eu estaria inclinado a criptografar os dados com o KMS e armazená-los no S3 ou DynamoDB. Eu diria até que, em situações muito simples, pode ser adequado criptografar e armazenar os dados no próprio KMS.

Existem várias bibliotecas de código aberto que suportam esta operação:

Richard Slater
fonte
1

Normalmente, trato segredos como dados de configuração no escopo. Como tal, ele não convive com o código, pois é tratado por diferentes agendas e processos de release. Um repositório git separado, KMS, dínamo, s3 ou dentro do seu sistema de gerenciamento de configurações (banco de dados de chefes / banco de dados criptografado no mundo dos chefes) são bons lugares. Basicamente, você não precisa criar e implantar uma nova versão do seu software para atualizar um segredo.

Se as necessidades de gerenciamento de segredos forem mais complexas, algo como o Hasicorp Vault ( https://github.com/hashicorp/vault ) seria uma boa opção.

Matt
fonte