はじめに
下記アップデートにて、SSMのドキュメントでPortForwardingができるようになりました。
https://aws.amazon.com/jp/about-aws/whats-new/2022/05/aws-systems-manager-support-port-forwarding-remote-hosts-using-session-manager/
リンク先のドキュメントは何も書いてないに等しかったので、調査がてら試してみることにしました。
(尚、コンソールのセッションマネージャーやRunCommandからできたら楽だったのですが、現状はできない模様です)
やりたいこと
今回はローカルPCからプライベートサブネット上のDocumentDBにログインしてみます。
【接続経路】
ローカルPC(WSL2)→EC2(AmazonLinux2)→DocumentDB(Port:27017)
※接続先がDocumentDBなのは今案件で使っていて試しやすかっただけで他意はないです(EC2やRDSでも可能です)
※そのせいでMongo-shellの実行環境を作る必要があって地味にめんどくさかったのは秘密
事前準備
PortForwarding用のEC2インスタンスを作成します。
基本デフォルト(キーペアもSGのインバウンドルールも不要)で問題ないですが、セッションマネージャーで接続ができることが前提なので「AmazonSSMManagedInstanceCore」権限のあるインスタンスプロファイル(IAMロール)をアタッチしてあれば良いです。
また、PortForwardingはSSMエージェントのバージョンが「3.1.1374.0以降」である必要があります。
尚、今日時点のAmazonLinux2のAMIにデフォルトで入っているエージェントは地味にバージョンが足りないので、利用する場合は手動アップデートが必要になります。
(昨日今日に追加された機能なので、そのうち更新されると思います)
※今日起動したインスタンスのSSMエージェントバージョン
# rpm -qa | grep -i ssm
amazon-ssm-agent-3.1.1188.0-1.amzn2.x86_64
※バージョンアップ手順はこちら
https://docs.aws.amazon.com/systems-manager/latest/userguide/agent-install-al2.html
※更新後のバージョン
# rpm -qa | grep -i ssm
amazon-ssm-agent-3.1.1446.0-1.x86_64
接続コマンド
SSMドキュメント名は「AWS-StartPortForwardingSessionToRemoteHost」です。
詳細はドキュメントの説明(SSMのコンソールから見れます)に譲りますが、パラメータにローカル/リモートのポートと転送先のホスト(今回はDocumentDBのエンドポイント)を設定すれば接続できます。
$ aws ssm start-session --target i-xxxxxxxxxxxx --document-name AWS-StartPortForwardingSessionToRemoteHost --parameters 'portNumber=27017,localPortNumber=27017,host=docdb.cluster-abcdefghij.ap-northeast-1.docdb.amazonaws.com'
Starting session with SessionId: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Port 27017 opened for sessionId xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Waiting for connections...
実行後、別画面でlocalhost宛てに接続すれば転送先にログインできます。
$ mongo --host localhost:27017 --username mongo
MongoDB shell version v4.4.14
Enter password:
connecting to: mongodb://localhost:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("c5988ed1-5497-4e17-9138-16ae18b0b71e") }
MongoDB server version: 4.0.0
(※中略)
rs0:PRIMARY>
参考
WSL2でMongo-shellを使いたい場合、単にaptではインストールできないようです。
自分は下記サイトを参考にしました。
(DBが必要なわけではないのでmongodb-org-shellのみインストールしました)
https://www.lisz-works.com/entry/mongodb-wsl-ubuntu