如何存储应用程序所需的凭据?


13

所有人都说将凭据存储在版本控制(git)中是一件坏事。因此,必须有其他更好的存储凭据的方法。

应用程序必须从某处接收凭据才能使用其依赖的服务。这些凭据通常存储在配置文件中。手动输入每台服务器以创建该文件是不可能的,因为服务器的往返操作无需人工干预。

如何管理应用程序的凭据?


4
同样,对于一个不是书本大小的单个答案来说,这可能太宽泛了。
coderanger

1
@coderanger观看您的演示文稿,您对不同类型的秘密进行了很好的分类。而且我可以看到您如何看待这本书...但是上面的问题并没有要求分类,仅是针对特定问题的解决方案。
Evgeny

2
如果遇到特殊情况,请编辑问题以包括更多详细信息,例如所使用的机密类型(数据库密码,TLS密钥等)。
coderanger

1
这太广泛了。至少有14种工具可以执行此操作,不包括自定义脚本或模板:gist.github.com/maxvt/bb49a6c7243163b8120625fc8ae3f3cd 需要其他详细信息(例如,是否需要CLI,是用于云原生解决方案还是大型云服务?整体应用等)
亚历山大

1
@Alexandre Hah,我打开了它,以为“是个不错的编译列表”,然后在底部引用自己:)
coderanger 2017年

Answers:


5

正确管理应用程序的秘密一直是一个挑战。云的采用带来了新的挑战。OWASP上有一个很棒的演讲,介绍了在云中存储机密的现实和挑战。

您可能会惊讶地发现,将机密存储到源代码中是提出的解决方案(或“体系结构”)之一。这是因为,目前还没有完美的体系结构或方法。最后,您的机密可能会被加密...但是保护加密密钥的是什么?他们说:“乌龟一直向下”。

每种类型的秘密管理都有其优点和缺点,介绍已经涵盖了这一点。相反,我将尝试介绍您在秘密(凭证)管理解决方案中可能需要的一些功能:

  • 访问控制:您可以授予管理员写访问权限和具有应用程序读权限吗?您可以限制哪些应用程序可以读取(应用程序A仅可以访问这些机密)吗?
  • 审核日志:许多合规报告所必需,并且是判断问题的好方法
  • 安全存储机密:解决方案如何存储机密?加密的数据库?加密的FS?谁/什么拥有加密密钥(如果有)?如何使用此密钥-启动后一次将其安全丢弃?
  • 密钥/密码的轮换或续订:如果机密信息被泄露,您可以将其撤消并将更新后的机密发送到应用程序吗?应用程序可以/应该合并秘密管理服务吗?
  • 兼容性:其中一些解决方案提供与某些语言或框架的紧密集成。有些提供REST API。您对此感兴趣吗?

通过查看这些项目,它们对您的重要性以及该解决方案的实现方式,您将可以选择其中的一项秘密管理服务


3

对于纯基于EC2的环境,最简单的解决方案是使用AWS IAM角色和S3存储桶策略。这种模式的某些表述还包括用于加密的KMS和用于存储的DynamoDB(而不是S3),但是我还没有找到使用它们的强烈理由。查看https://github.com/poise/citadel,它专门针对Chef用户,但是其基础模式适用于任何情况,您可能需要自己制作帮助程序才能从S3进行实际下载。


1
对于未来,这将回答该问题的更早版本和更具体版本。
coderanger

2
AWS现在提供了用于键值存储的专用服务,包括通过KMS进行加密:aws.amazon.com/ec2/systems-manager/parameter-store
bnzmnzhnz
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.