问题描述
想知道如何存储应用程序所需的凭据,因为大家都说在版本控制(git)中存储凭据是不好的。用户希望了解是否有更好的存储凭据的方法。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
在云计算时代,应用程序的凭据管理一直是一个挑战。存储凭据的方式有很多种,每种方式都有其优点和缺点。以下是一些你可能在凭据(凭证)管理解决方案中寻找的功能:
– 访问控制:你是否可以给管理员写入权限,给应用程序只读权限?你是否可以限制应用程序能够读取的凭据(应用程序A只能访问特定的凭据)?
– 审计日志:对于许多合规性报告来说是必需的,也是发现问题的好方法。
– 凭据的安全存储:解决方案如何存储凭据?是加密的数据库还是加密的文件系统?如果有加密密钥,是由谁/什么来保管?这个密钥是如何使用的 – 只在启动时使用一次,然后安全地丢弃?
– 密钥/密码的轮换或更新:如果一个凭据被泄露,你能否撤销它并向应用程序发送更新后的凭据?应用程序是否可以使用凭据管理服务进行凭据池化?
– 兼容性:一些解决方案与特定的编程语言或框架紧密集成,一些提供REST API。你对此感兴趣吗?
通过研究这些项目,了解它们对你的重要性以及它们在解决方案中的实现方式,你将能够选择一个适合你的凭据管理服务。
方案2
在纯EC2环境中,最简单的解决方案是使用AWS IAM角色和S3存储桶策略。这种模式的一些变体还包括使用KMS进行加密和使用DynamoDB而不是S3进行存储,但我没有找到一个非常有说服力的理由来使用它们。你可以查看https://github.com/poise/citadel,它专门针对Chef用户,但底层模式适用于任何情况,你只需要自己编写一个帮助程序来从S3下载凭据。
请注意,这个回答是对早期和更具体版本的问题的回答。AWS现在提供了一个专门的服务来存储键值对,包括通过KMS进行加密:https://aws.amazon.com/ec2/systems-manager/parameter-store/。