如何实现外部供应商通过带双因素认证的SSH远程管理AWS EC2(RHEL)实例
针对你的RHEL EC2实例远程管理需求,最优方案是AWS Systems Manager Session Manager + 强制双因素认证
嘿,针对你提到的异地供应商通过互联网安全管理AWS EC2 RHEL实例的需求,我强烈推荐AWS Systems Manager Session Manager搭配强制MFA的方案——这几乎是当前场景下最安全、最省心的选择,完美适配供应商用自有终端的要求,还能彻底规避传统SSH暴露22端口的风险。
为什么Session Manager是最优解?
- 彻底消除公网攻击面:Session Manager通过AWS的HTTPS API通道建立连接,你的EC2实例不需要绑定公网IP,也不用在安全组/NACL里把22端口开放给全网(哪怕你已经开了,建议直接关掉,从根源上杜绝暴力破解的可能)。你的WAF虽然能防护,但关闭端口显然是更彻底的安全措施。
- 原生强制MFA,无需额外配置:你可以通过IAM策略直接要求供应商的IAM用户必须启用MFA才能发起会话,完全满足双因素认证的要求,不用在实例上折腾额外的MFA工具。
- 适配供应商自有终端:供应商只需要在自己的电脑上装个AWS CLI和Session Manager插件,就能用命令行发起和SSH体验完全一致的会话;嫌装工具麻烦的话,甚至可以直接通过AWS控制台的Web界面连接,完全不需要你配发设备。
- 自带审计日志:所有会话操作都会自动记录到CloudWatch Logs里,你随时可以回溯供应商做了什么,合规性拉满。
快速配置步骤
- 给EC2实例加IAM角色:创建一个带
AmazonSSMManagedInstanceCore权限的IAM角色,把它附加到目标RHEL实例上——这是实例和Systems Manager通信的凭证。 - 确认SSM Agent已安装:AWS官方的RHEL 7+ AMI默认已经预装了SSM Agent,如果是你自己做的自定义镜像,手动装一下就行:
sudo yum install -y amazon-ssm-agent sudo systemctl start amazon-ssm-agent && sudo systemctl enable amazon-ssm-agent - 创建供应商专用IAM用户:给每个供应商建单独的IAM用户,只给
ssm:StartSession权限,并且在策略里加个强制MFA的条件:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "ssm:StartSession", "Resource": "arn:aws:ec2:你的区域:你的账号ID:instance/实例ID", "Condition": { "BoolIfExists": { "aws:MultiFactorAuthPresent": "true" } } } ] } - 让供应商绑定MFA:告诉供应商登录自己的IAM用户控制台,绑定一个虚拟MFA设备(比如Google Authenticator或者Authy)。
- 供应商连接方式:
- 命令行:装完AWS CLI和插件后,跑这条命令就能进入实例:
aws ssm start-session --target 实例ID --region 你的区域,进去就是熟悉的RHEL命令行。 - Web界面:直接登录AWS控制台,找到Systems Manager -> Session Manager,选目标实例就能发起会话,浏览器里直接操作,连CLI都不用装。
- 命令行:装完AWS CLI和插件后,跑这条命令就能进入实例:
备选:如果必须用传统SSH怎么办?
要是因为某些限制必须保留22端口用SSH,那得把安全措施拉满:
- 彻底禁用密码登录:改RHEL的
/etc/ssh/sshd_config,设置PasswordAuthentication no和PubkeyAuthentication yes,只允许供应商用SSH密钥登录。 - 给SSH加MFA:装
google-authenticator包(sudo yum install -y google-authenticator),给每个供应商配置MFA令牌,然后改sshd_config开启ChallengeResponseAuthentication yes,并设置AuthenticationMethods publickey,keyboard-interactive——这样登录时必须同时提供SSH密钥和MFA验证码。 - 严格限制SSH来源IP:在EC2安全组里只允许供应商的公网IP段访问22端口,别用0.0.0.0/0。
- 配合WAF和Shield Advanced:用WAF拦截暴力破解请求,Shield Advanced防DDoS。
不过说实话,这个方案还是不如Session Manager安全,毕竟22端口暴露在公网始终有风险,能选Session Manager的话优先选它。
内容的提问来源于stack exchange,提问作者Architect




