You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS SSM配置SSH隧道访问VPC私有子网内EC2、RDS、Redis等资源

基于AWS SSM实现本地macOS访问VPC私有子网资源实操指南与疑问

方案背景

  • 需求场景:测试自研应用的RDS数据库、Redis及私有API网关
  • 选型理由:相比OpenVPN、公有子网堡垒机方案,SSM无需暴露公网入口规避安全风险,且配置速度快适合MVP开发阶段
  • 适用环境:单可用区VPC,包含1个公有子网+1个私有子网的沙箱环境

具体配置步骤

  1. 使用VPC启动向导在us-east-1c可用区创建包含1个公有子网、1个私有子网的VPC
  2. 在私有子网中启动Redis实例
  3. 在私有子网中启动使用Amazon Linux 2 AMI的EC2实例,不开启公网访问权限
  4. 创建IAM角色绑定到上述EC2实例,附加AmazonSSMManagedInstanceCore策略
  5. 创建仅开启编程访问权限的IAM用户,附加AmazonSSMFullAccess、EC2InstanceConnect策略
  6. 本地通过pip3安装awscli包:pip3 install awscli
  7. 本地macOS安装SSM插件
  8. 终端执行aws configure配置上述IAM用户的凭证信息
  9. 执行命令测试SSM会话连接:
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx

输出示例:

sh-4.2$
  1. 执行命令为EC2实例推送SSH公钥:
aws ec2-instance-connect send-ssh-public-key \
--availability-zone us-east-1c \
--instance-id i-xxxxxxxxxxxxxxxxx \
--instance-os-user ec2-user \
--ssh-public-key file://$HOME/.ssh/id_rsa.pub
  1. 在$HOME/.ssh/config文件中添加如下配置:
host i-*
  ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
  1. 执行隧道转发命令,将本地5000端口映射到远端Redis实例6379端口:
ssh ec2-user@i-xxxxxxxxxxxxxxxxx -NL 5000:some_redis_aws_url.cache.amazon.com:6379 -i test.pem -v

疑问解答与优化建议

通用疑问解答

  1. EC2实例绑定的SSM角色中,KMS加密、日志上传功能是否必需?
    AmazonSSMManagedInstanceCore是基础必需策略,KMS加密和日志属于可选的安全审计配置,非功能必需项。日志未上传通常是因为角色缺少CloudWatch日志写入、S3上传的对应权限,或SSM会话管理器的默认配置未指定日志存储位置,无审计需求可以直接关闭相关配置减少操作复杂度。
  2. 本地IAM用户的AmazonSSMFullAccess和EC2InstanceConnect策略是否必需?
    两个都是必需策略:AmazonSSMFullAccess用于调用SSM会话接口建立隧道,EC2InstanceConnect用于推送SSH公钥到目标EC2实例实现身份认证。生产环境可以按最小权限原则裁剪策略,只开放指定实例的访问权限即可,无需使用全量访问策略。
  3. 执行send-ssh-public-key命令的作用是什么?
    EC2 Instance Connect会把你本地的公钥临时写入目标EC2实例的~/.ssh/authorized_keys文件,默认有效期60秒,到期自动删除,无需在实例上提前预置静态公钥,比传统固定密钥的方式更安全。
  4. 建立隧道时为什么还需要指定.pem文件?怎么省略?
    报错是因为SSH默认会优先读取本地默认路径的私钥,如果你的公钥是用id_rsa.pub推送的,把命令里的-i test.pem改成-i ~/.ssh/id_rsa即可;也可以在~/.ssh/config的host i-*配置块下加一行IdentityFile ~/.ssh/id_rsa,后续执行SSH命令就不用再加-i参数。

流程优化方案

可以把公钥推送、隧道建立的步骤封装成Shell脚本,执行时只需要传入目标实例ID、本地端口、远端资源地址+端口三个参数即可,一键完成隧道建立,不需要每次手动执行多步命令。

内容的提问来源于stack exchange,提问作者dataviews

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 19:24:00