透過 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 問題:

相關內容