Como armazenar credenciais exigidas por um aplicativo?

13

Todo mundo está dizendo que armazenar credenciais no controle de versão (git) é uma coisa ruim. Portanto, deve haver outras maneiras de armazenar credenciais muito melhores.

Um aplicativo deve receber credenciais de algum lugar para usar os serviços dos quais depende. Essas credenciais são geralmente armazenadas em arquivos de configuração. A entrada manual de cada servidor para criar esse arquivo está fora de questão, pois os servidores entram e saem sem intervenção humana.

Como gerenciar as credenciais de um aplicativo?

Evgeny
fonte
4
Além disso, isso provavelmente é amplo demais para uma única resposta que não é do tamanho de um livro.
precisa saber é o seguinte
11
@coderanger Observando sua apresentação, sua categorização dos diferentes tipos de segredos é ótima. E posso ver como você acha que é um livro ... mas a pergunta acima não pede uma classificação, apenas uma (s) solução (s) para um problema específico.
Evgeny
2
Se você tiver uma situação específica, edite a pergunta para incluir mais detalhes, como o tipo de segredo que está sendo usado (senha do banco de dados, chaves TLS, etc.).
Coderanger #
11
Isso é muito amplo. Existem pelo menos 14 ferramentas disponíveis para fazer isso, sem incluir scripts ou modelos personalizados: gist.github.com/maxvt/bb49a6c7243163b8120625fc8ae3f3cd Detalhes adicionais são necessários (como um CLI é necessário, é para solução nativa da nuvem ou para grandes empresas) revestimentos monolíticos, etc.)
Alexandre
11
@Alexandre Hah, eu abri isso e pensei "yay uma boa lista de compilação" e, em seguida, me vejo citado na parte inferior :)
coderanger

Respostas:

5

O gerenciamento adequado dos segredos de um aplicativo sempre foi um desafio. Novos desafios surgiram com a adoção da nuvem. Há uma ótima apresentação da OWASP sobre a realidade e os desafios de armazenar segredos na nuvem.

Você pode se surpreender ao saber que armazenar segredos no código-fonte é uma das soluções (ou "arquitetura") apresentada. Isso porque, no momento, não há arquitetura perfeita ou maneira de fazer isso. No final, seus segredos podem ser criptografados ... mas o que está protegendo a chave de criptografia? "Tartarugas até o fim", disseram.

Todo tipo de gerenciamento secreto tem seus pontos fortes e fracos, e a apresentação já cobre isso. Em vez disso, tentarei analisar alguns dos recursos que você pode estar procurando em uma solução de gerenciamento secreto (credencial):

  • Controle de acesso: você pode conceder acesso de gravação a administradores e acesso de leitura a aplicativos? Você pode limitar o que os aplicativos conseguem ler (o aplicativo A tem acesso apenas a esses segredos)?
  • Logs de auditoria: necessários para muitos relatórios de conformidade e uma boa maneira de descobrir se algo está errado
  • Armazenamento seguro dos segredos: como a solução armazena os segredos? DB criptografado? FS criptografado? Quem / o que possui a chave de criptografia, se houver? Como essa chave é usada - uma vez na inicialização e depois descartada com segurança?
  • Rotação ou renovação de chaves / senhas: se um segredo for comprometido, você pode revogá-lo e enviar um segredo atualizado para os aplicativos? Os aplicativos podem / devem agrupar o serviço de gerenciamento secreto?
  • Compatibilidade: Algumas dessas soluções oferecem forte integração com certos idiomas ou estruturas. Alguns oferecem API REST. Você está interessado nisso?

Observando esses itens, como eles são importantes para você e como são implementados pela solução, você poderá escolher um dos serviços de gerenciamento secreto disponíveis .

Alexandre
fonte
3

Para um ambiente puramente baseado em EC2, a solução mais fácil é usar as funções do AWS IAM e as políticas de bucket do S3. Algumas formulações desse padrão também incluem o KMS para criptografia e o DynamoDB em vez do S3 para armazenamento, mas também não achei uma razão extremamente atraente para usá-lo. Confira https://github.com/poise/citadel , especificamente voltado para usuários do Chef, mas o padrão subjacente funciona para qualquer coisa, você pode precisar criar seu próprio auxiliar para fazer o download real do S3.

coderanger
fonte
11
Para o futuro, isso responde a uma versão anterior e mais específica da pergunta.
precisa saber é o seguinte
2
A AWS agora fornece um serviço dedicado para armazenamento de valores-chave, incluindo criptografia via KMS: aws.amazon.com/ec2/systems-manager/parameter-store .
precisa saber é o seguinte