SSMでリモートホストにPortForwardingする

はじめに

下記アップデートにて、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以降」である必要があります。 尚、検証時点(※5/28)のAmazonLinux2のAMIにデフォルトで入っているエージェントは地味にバージョンが足りないので、利用する場合は手動アップデートが必要になります。 (昨日今日に追加された機能なので、そのうち更新されると思います)

※検証時点(※5/28)で起動したインスタンスの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