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