AWS Session Managerを使用してEC2インスタンスを介してRDSに接続するときのタイムアウト

AWS Session Managerを使用してEC2インスタンスを介してRDSに接続するときのタイムアウト

Session Managerを使用してec2インスタンス(Ubuntu)を介してプライベートサブネットのAWS RDSインスタンスにアクセスできない。

AWS Session Managerを使用したポート転送 -

    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インスタンスには、ポート3307のすべてのトラフィックをポート3306(MYSQL PORT)のrdsホストに転送するためのiptableルールがあります。

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は次のシナリオを処理するように設計されています。手動でインストールしてインストールしたMySQLデータベースなど、EC2で実行されているものがあります。たとえば、ワークステーションから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

おすすめ記事