amazon-ec2 - 是否有防止将动态 ec2 密钥对写入 tfstate 文件的方法?
问题描述
我们开始使用 Terraform 来构建我们的 aws ec2 基础架构,但希望尽可能安全地进行此操作。
理想情况下,我们想做的是为每个 Windows ec2 实例动态创建一个密钥对,并将私钥存储在 Vault 中。这是可能的,但是如果没有将私钥写入 tfstate 文件,我想不出一种方法来实现它。是的,我知道我可以将 tfstate 文件存储在加密的 s3 存储桶中,但这似乎不是最佳的安全解决方案。
如果需要通过另一种机制生成密钥对并将名称作为变量传递给 Terraform,我很乐意编写自定义代码,但如果有其他更健壮和经过测试的方法,我不想这样做。我希望我们可以使用 Vault 来做到这一点,但在研究它看起来不太可能。
有没有人做过类似的事情的经验?失败了,有什么建议吗?
解决方案
最安全的选择是使用任意密钥对销毁私有密钥和将实例连接到AWS Managed Microsoft AD域控制器的 user_data。之后,您可以使用传统的 AD 用户和组来控制对实例的访问(但遗憾的是,不能使用任何深度的组策略)。您需要域成员服务器来管理该详细级别的 AD。
如果您确实需要能够在这些 Windows EC2 实例上使用本地管理员,那么您需要手动创建用于解密密码的密钥对,然后使用 Vault 之类的工具通过密钥或密码管理器与其他管理员安全地共享它或 1 个密码。
我看不到为每个实例创建密钥对有任何安全优势,只是增加了相当大的复杂性。如果您担心暴露,请在获取管理员密码后更改它们并将其存储在您的机密或密码管理器中。
如果您使用的是 Windows,我仍然建议您使用 AD。带有 AD 的 Windows 实现了世界领先的统一端点管理,而微软在这方面一直处于领先地位。
推荐阅读
- r - R用ifelse遍历向量
- html - 引用外部 svg 文件
- ambari - ambari 集群 + ambari-agent 与 ambari 服务器之间的连接不良
- c# - 在 ASP.NET Core 3 中添加 Mime 类型
- python - Python geopandas - 编辑地理数据
- python - 我哪里错了
- cytoscape - 删除了冗余边,但未创建边表列
- amazon-web-services - AWS InvalidSignatureException,从 docker 容器运行时签名已过期
- reactjs - 重构一些代码我发现了这个。我认为它应该在构造函数中。关于这在课堂之外有什么想法吗?
- php - PHP MySQL 选择特定/非特定模式