通过 EC2 实例使用 AWS 会话管理器连接 RDS 时超时

通过 EC2 实例使用 AWS 会话管理器连接 RDS 时超时

我在通过 ec2 实例 (Ubuntu) 使用会话管理器访问私有子网中的 AWS RDS 实例时遇到问题。

使用 AWS 会话管理器进行端口转发 -

    aws ssm start-session --target $INSTANCE_ID \
                       --document-name AWS-StartPortForwardingSession \
                       --parameters '{"portNumber":[3307],"localPortNumber":["8000"]}' \
                                             --profile=production \
                       --region=us-east-1`

现在本地8000端口成功转发到EC2的3307端口。

lsof -nP +c 15 | grep LISTEN

session-manager 59744 xrage 12u IPv4 0xa6c821d0a800e9a1 0t0 TCP 127.0.0.1:8000 (LISTEN)

EC2 实例有一条 iptable 规则,将端口 3307 上的所有流量转发到端口 3306 (MYSQL PORT) 上的 rds 主机。

sudo iptables -t nat -A OUTPUT -o lo -d 127.0.0.1 -p tcp --dport 3307 -j DNAT  --to-destination <rds_private_ip>:3306

这允许我从 ec2 访问所需端口上的远程主机,但仍然无法在端口 8000 上本地访问远程主机。

本地计算机上的网络详细信息 -

  • 不使用任何代理
  • Mac 上的防火墙被禁用

因此很明显,SSM 设置正在工作,但其他东西正在阻止此流量,这里需要一些帮助。

答案1

当你说远程主机可以访问MySQL实例时,你尝试过该端口(telnet)或mysql命令行客户端,只是为了确认?

假设上述问题是肯定的,我将继续下一步。据我了解,AWS-StartPortForwardingSession 旨在涵盖以下场景:您的 EC2 上正在运行某些内容,例如您手动安装并安装的 MySQL 数据库。您希望通过 SSM 将流量从您的工作站(例如)转发到在 EC2 上运行的 MySQL 实例。这就是 AWS-StartPortForwardingSession 的设计目的。

在您的情况下,EC2更像是一个堡垒主机,而您的MySQL实例是RDS类型。因此,您的 EC2 不托管任何东西——它只是连接到 RDS 的网关。

假设上述假设是正确的,我将使用 AWS-StartSSHSession 代替(https://docs.aws.amazon.com/systems-manager/latest/userguide/session-manager-getting-started-enable-ssh-connections.html)。

完整的答案会很冗长,但我几个月前才这样做:https://medium.com/@clearwaterstream/recipe-connect-to-an-rds-database-in-a-private-subnet-from-your-workstation-over-https-c66db6ead9f0

答案2

2022 年 5 月 27 日,AWS宣布支持为了使用会话管理器将端口转发到远程主机

首先,请在要与其建立端口转发会话的托管实例上安装 SSM 代理版本 3.1.1374.0 或更高版本。您可以使用会话管理器文档从命令行启动端口转发会话 AWS-StartPortForwardingSessionToRemoteHost

要启动端口转发会话,请从 CLI 运行以下命令。将<EC2_INSTANCE_ID><RDS_DB><RDS_PORT>和的值替换<LOCAL_PORT>为您的信息:

aws ssm start-session \
    --target <EC2_INSTANCE_ID> \
    --document-name AWS-StartPortForwardingSessionToRemoteHost \
    --parameters '{"host":["<RDS_DB>"], "portNumber":["<RDS_PORT>"], "localPortNumber":["<LOCAL_PORT>"]}'

更多详细信息请参阅 AWS 文档:AWS Systems Manager - 用户指南 - 会话管理器 - 启动会话(端口转发到远程主机)

相关 AWS 博客文章:

相关 GitHub 问题和拉取请求:

相关 StackOverflow 问题:

相关内容