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

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

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

评论

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

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

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

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

@Alexandre Hah,我打开它并认为“是一个不错的编译列表”,然后在底部看到自己被引用:)

#1 楼

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

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

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


访问控制:您可以授予管理员和管理员的写访问权限吗?读取应用程序访问权限?您可以限制哪些应用程序可以读取(应用程序A仅可以访问这些机密)吗?
审计日志:许多合规报告所必需的日志,是判断出问题的好方法
安全存储机密:解决方案如何存储机密?加密的数据库?加密的FS?谁/谁拥有加密密钥(如果有)?如何使用此密钥-启动后一次将其安全丢弃?
密钥/密码的轮换或更新:如果机密信息被泄露,您可以撤销它并将更新的机密信息发送到应用程序吗?应用程序可以/应该合并秘密管理服务吗?
通过查看这些项目,它们对您的重要性以及该解决方案的实现方式,您将可以选择其中的一项秘密管理服务。

#2 楼

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

评论


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

–coderanger
17 Mar 2 '17 at 21:44

AWS现在提供了用于键值存储的专用服务,包括通过KMS进行加密:aws.amazon.com/ec2/systems-manager/parameter-store。

–bnzmnzhnz
17年4月4日在5:15