如何在 EC2 实例上安全地安装机密?

如何在 EC2 实例上安全地安装机密?

背景:设置一个包含一些自动扩展组和一些非扩展独立虚拟机的基础设施。一些角色需要机密(私钥),这些机密应仅限于 root 用户或特定用户。管理通过 Puppet(“无服务器” - 配置在 git 存储库中)完成,也可以使用 Ansible。

  • 将机密信息放在 Puppet 或 git 中是不可接受的,因为它们很容易被访问
  • 将机密信息放入 EC2 用户数据中会限制对特定 VM 的访问,并在自动扩展组中正确复制,但 VM 中的任何 Unix 用户都可以访问它。
  • 将机密信息放在安全的 S3 存储桶中需要做大量工作,限制对特定虚拟机的访问,在自动缩放组中正确复制,加密静态数据,但虚拟机中的任何 unix 用户都可以访问它 - 请参阅http://blogs.aws.amazon.com/security/post/Tx2B3QUWAA7KOU/如何管理Amazon EC2 容器服务中的机密信息
  • AWS KMS 改进了安全的 S3 存储桶,但我找不到任何限制访问其服务的迹象在虚拟机中

我并不幻想 Linux 的用户权限是万无一失的。但是将机密访问权限限制为 Linux 根用户...很有用!:-)

答案1

我们找到了一个可行的解决方案:

  • 使用 Vault 或类似工具来管理实际的秘密,按角色分组,并使用短密钥解锁每组秘密。
  • 使用可编写脚本(例如:Cloudformation、Terraform、aws cli)自动创建实例,作为创建脚本的一部分……
    • 使用 Vault 密钥创建并填充短期 S3 存储桶
    • 通过 EC2 用户数据提供引导脚本,从 S3 存储桶中获取 Vault 密钥

假设:

  • S3 bucket url 随机性阻止其(快速)发现
  • 您的基本 AMI 在引导完成之前是安全的;这意味着它不是预先扎根的;-) 并且不会出现不安全/配置错误的服务,这些服务可能会使其在 S3 存储桶生命周期的短暂时间窗口内受到成功攻击。

感谢@ceejayoz 提供的有用提示。

相关内容