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

答え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 システム管理者 - ユーザーガイド - セッションマネージャ - セッションの開始 (リモートホストへのポート転送)

関連AWSブログ投稿:

関連するGitHubの問題とプールリクエスト:

関連StackOverflow質問:

関連情報