【发布时间】:2021-11-23 05:44:29
【问题描述】:
我有一堆使用 Terraform 管理的 AWS 基础设施。多个用户使用一个 EC2 SSH Bastion 实例来访问用于各种批处理任务的私有临时 EC2 实例。
Terraform 提供了一种机制,可以在创建时将单个 SSH 密钥包含到 EC2 实例中,但是我正在尝试找到一种解决方案,最好但不一定是基于 Terraform 的,它允许管理 SSH 堡垒的多个用户。
是否有一种解决方案允许 SSH Bastion 使用与 IAM 用户关联的 SSH 密钥,这样当(例如)bob 尝试 SSH 到 Bastion 时,Bastion 可以使用与 bob 关联的公钥应该bob 属于正确的组,有正确的权限,有正确的标签,还是其他一些识别特征?
如果上述问题暗示了解决问题的错误方法,是否有更好的方法来看待和解决问题?
提前谢谢你。
【问题讨论】:
-
我无法将 SSH 密钥烘焙到 AMI 中,因为将在 AWS 账户中添加和删除用户,或者授予和撤销对该系统的访问权限。每次发生这种情况时都重建 Bastion AMI 并为此重建基础设施是没有意义的。必须有一些合理的方法将 IAM 用户与某些权限关联起来,以允许 SSH 访问堡垒。
-
有,但 Terraform 无法为您管理它,因为 AWS 没有将它作为 API 公开。答案是每次您想更改盒子上的用户或密钥时,针对堡垒运行 Ansible/Chef/Puppet。或者让盒子自动下拉用户和密钥列表并自行配置。如果您将其放入 AMI 或用户数据中,那么 Terraform 将需要在每次更改时进行替换。
-
一般来说,尽管您可能需要考虑其他选项,例如 EC2 instance connect 或 SSM Session Manager。
-
听起来,无论我走哪条路,我都需要跳出纯 Terraform 解决方案。 EC2 Instance Connect 有一些承诺,但我怀疑理智的方法是完全放弃堡垒并允许用户直接进入他们的 EC2 实例进行批处理(这是堡垒允许访问的内容)。这是一种不同的蠕虫病毒,包括用尽弹性 IP。
标签: amazon-web-services amazon-ec2 ssh terraform user-management