Terraform管理的AWS EC2 SSH堡垒机多用户SSH密钥管理方案咨询
SSH堡垒机多用户IAM鉴权方案
你提到的基于IAM用户关联SSH密钥实现堡垒机鉴权的思路完全可行,以下是两类可落地的方案,均支持Terraform集成:
方案1:原生AWS EC2 Instance Connect(推荐)
这是AWS官方提供的标准化方案,无需自行维护鉴权逻辑,适配性最高:
- 权限控制完全在IAM侧实现,无需在堡垒机本地存储任何公钥或用户信息。你可以通过IAM策略限制仅指定用户组、带对应标签的用户具备堡垒机登录权限,策略条件可匹配IAM用户标签、用户组归属、目标堡垒机实例ID、登录使用的操作系统用户名等规则,完全符合你的校验需求。
- 核心权限为
ec2-instance-connect:SendSSHPublicKey,将该权限附加给允许登录的IAM用户/用户组即可。用户登录时先通过AWS CLI将本地公钥临时推送到堡垒机(公钥有效期仅60秒),再完成SSH鉴权,全程无敏感信息持久化存储。 - Terraform集成成本极低:Amazon Linux 2/2023默认预装EC2 Instance Connect组件,你仅需通过Terraform管理IAM策略、用户组关联规则即可,无需修改堡垒机的默认SSH配置。
- 额外优势:用户身份生命周期和SSH权限完全联动,删除IAM用户后登录权限自动回收,无需手动清理堡垒机本地配置。
方案2:自定义SSH AuthorizedKeysCommand(适配原生SSH登录习惯)
如果你需要支持用户直接用原生ssh命令登录,无需前置AWS CLI调用,可选择自行实现鉴权脚本:
- 首先通过Terraform为堡垒机实例绑定IAM角色,为角色授予
iam:GetSSHPublicKey、iam:ListGroupsForUser、iam:GetUser等IAM只读访问权限,限制权限仅用于拉取用户公钥和身份信息。 - 在堡垒机的sshd配置中添加如下规则:
自行实现的AuthorizedKeysCommand /usr/local/bin/iam-ssh-auth.sh %u AuthorizedKeysCommandUser rootiam-ssh-auth.sh脚本逻辑如下:- 接收SSH登录传入的用户名(与IAM用户名保持一致,例如
bob) - 调用IAM API校验该用户是否属于指定允许登录的用户组、是否携带要求的标签
- 校验通过后拉取该用户在IAM中上传的SSH公钥,输出给SSH服务完成鉴权
- 接收SSH登录传入的用户名(与IAM用户名保持一致,例如
- 脚本部署、sshd配置修改可通过Terraform的
user_data参数在实例初始化时自动完成,也可配合配置管理工具实现代码化管理。 - 注意事项:可在堡垒机本地对公钥做5-10分钟的缓存,避免频繁调用IAM API触发限流。
内容的提问来源于stack exchange,提问作者sonnenhund
相关产品推荐
相关产品推荐

