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

如何从本地/Cloud9连接VPC公有子网的DocumentDB实例

临时连接DocumentDB的CloudFormation方案及简便测试方法

核心问题梳理

你的DocumentDB为VPC内网部署无公网IP,本地无法直接访问;现有Cloud9 SSM连接失败大概率是VPC缺少SSM端点配置,临时测试推荐以下两种方案:


方案1:CloudFormation创建SSM跳板机(推荐,无密钥,安全)

通过CloudFormation快速部署一台带SSM管理权限的EC2作为跳板,无需暴露SSH端口,直接用SSM端口转发或终端连接DocumentDB。

CloudFormation模板(YAML)

替换模板中的占位符(YourVPCID、DocumentDBSG、YourPublicSubnetID)为实际资源ID,根据AWS区域替换Amazon Linux 2的AMI ID:

AWSTemplateFormatVersion: '2010-09-09'
Description: Temporary EC2 Jump Host for DocumentDB Access via SSM
Resources:
  # SSM管理所需IAM角色
  EC2SSMRole:
    Type: AWS::IAM::Role
    Properties:
      AssumeRolePolicyDocument:
        Version: '2012-10-17'
        Statement:
          - Effect: Allow
            Principal:
              Service: ec2.amazonaws.com
            Action: sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/AmazonSSMManagedInstanceCore
      Path: "/"

  EC2SSMInstanceProfile:
    Type: AWS::IAM::InstanceProfile
    Properties:
      Roles:
        - !Ref EC2SSMRole

  # 跳板机安全组:允许出站访问DocumentDB及SSM服务
  JumpHostSG:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Outbound access to DocumentDB and SSM
      VpcId: !Ref YourVPCID
      SecurityGroupEgress:
        - IpProtocol: tcp
          FromPort: 27017
          ToPort: 27017
          DestinationSecurityGroupId: !Ref DocumentDBSG
        - IpProtocol: "-1"
          CidrIp: 0.0.0.0/0

  # 更新DocumentDB安全组,允许跳板机访问27017端口
  DocumentDBIngressRule:
    Type: AWS::EC2::SecurityGroupIngress
    Properties:
      GroupId: !Ref DocumentDBSG
      IpProtocol: tcp
      FromPort: 27017
      ToPort: 27017
      SourceSecurityGroupId: !Ref JumpHostSG

  # 临时EC2跳板机(t2.micro免费可用)
  JumpHostEC2:
    Type: AWS::EC2::Instance
    Properties:
      InstanceType: t2.micro
      ImageId: ami-0c55b159cbfafe1f0 # Amazon Linux 2 AMI (us-east-1,按需替换区域对应AMI)
      IamInstanceProfile: !Ref EC2SSMInstanceProfile
      SecurityGroupIds:
        - !Ref JumpHostSG
      SubnetId: !Ref YourPublicSubnetID
      Tags:
        - Key: Name
          Value: DocDB-Temp-JumpHost

Outputs:
  JumpHostInstanceId:
    Description: EC2 Instance ID for SSM Session
    Value: !Ref JumpHostEC2

使用步骤

  1. 部署上述CloudFormation栈,等待EC2实例启动完成。
  2. 本地端口转发方式(无需进入EC2终端):
    • 确保本地安装并配置好AWS CLI(具备SSM操作权限)。
    • 执行端口转发命令:
      aws ssm start-session --target <EC2实例ID> --document-name AWS-StartPortForwardingSession --parameters '{"portNumber": ["27017"], "localPortNumber": ["27017"]}'
      
    • 新开本地终端,执行mongosh连接命令:
      # 下载CA证书
      wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
      # 连接DocumentDB
      mongosh "mongodb://localhost:27017" --tls --tlsCAFile rds-combined-ca-bundle.pem --username <你的用户名> --password <你的密码> --tlsAllowInvalidHostnames
      
      (添加--tlsAllowInvalidHostnames是因为证书绑定DocumentDB端点域名,本地转发到localhost会触发域名校验)
  3. SSM终端连接方式:
    • 进入AWS控制台 -> Systems Manager -> Session Manager,选择跳板机启动会话。
    • 在终端内安装mongosh并连接:
      # 安装mongosh
      curl -s https://downloads.mongodb.com/compass/mongosh-1.10.6-linux-x64.tgz | tar -xz -C /usr/local/bin --strip-components=1 mongosh-1.10.6-linux-x64/bin/mongosh
      # 下载CA证书
      wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
      # 连接DocumentDB
      mongosh "mongodb://<DocumentDB集群端点>:27017" --tls --tlsCAFile rds-combined-ca-bundle.pem --username <你的用户名> --password <你的密码>
      

方案2:临时开启DocumentDB公网访问(仅测试用,用完立即关闭)

直接给DocumentDB添加公网端点,无需跳板,但存在安全风险,测试后必须恢复配置。

CloudFormation修改片段

在现有DocumentDB集群资源中添加PubliclyAccessible: true,并更新安全组出站规则:

# 假设你的DocumentDB集群资源名为DocumentDBCluster
DocumentDBCluster:
  Type: AWS::DocDB::DBCluster
  Properties:
    # 保留原有属性
    PubliclyAccessible: true # 开启公网访问

# 更新DocumentDB安全组出站规则(原规则仅允许0.0.0.0/32,无法公网通信)
DocumentDBEgressRule:
  Type: AWS::EC2::SecurityGroupEgress
  Properties:
    GroupId: !Ref DocumentDBSG
    IpProtocol: "-1"
    CidrIp: 0.0.0.0/0

使用步骤

  1. 更新CloudFormation栈,等待集群配置完成。
  2. 本地直接用mongosh连接DocumentDB的公网端点:
    wget https://s3.amazonaws.com/rds-downloads/rds-combined-ca-bundle.pem
    mongosh "mongodb://<DocumentDB公网端点>:27017" --tls --tlsCAFile rds-combined-ca-bundle.pem --username <你的用户名> --password <你的密码>
    
  3. 测试完成后,立即将PubliclyAccessible改回false,并恢复安全组出站规则。

关键注意事项

  • 你的DocumentDB已启用TLS,所有连接必须携带--tls参数并指定CA证书。
  • 测试结束后,务必销毁临时跳板机的CloudFormation栈,或恢复DocumentDB的公网访问及安全组配置,避免不必要的成本和安全隐患。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 15:57:06