aws ssmコマンドでポートフォワード

AWS CLIのサブコマンドaws ssm start-sessionではログインだけでなくポートフォワードもできる。
セッションマネージャーをセッションマネージャーでポートフォワードができるので、SSHのポートを公開する必要が無くなる。

セッションマネージャーでポートフォワードするには--document-nameAWS-StartPortForwardingSessionToRemoteHostを指定して以下のように実行する。

$ aws ssm start-session \
  --target インスタンスID \
  --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters "{\"portNumber\":[\"リモートポート番号\"], \"localPortNumber\":[\"ローカルポート番号\"]}"

プロファイルやリージョンなどは--profileオプションや--regionオプションなどで適宜追加して指定する。

–parameterに指定できる値

--parameterに指定できる値は以下の通り。

パラメータ名説明
hostリモートホスト名
portNumberリモートポート番号
localPortNumberローカルポート番号

実行例

EC2を介してRDSの5432番ポートに接続するには以下のように実行する。
($rds_hostはRDSインスタンスのエンドポイント名)

$ aws ssm start-session --target "$instanceid" \
  --document-name AWS-StartPortForwardingSessionToRemoteHost \
  --parameters "{\"host\":[\"$rds_host\"],\"portNumber\":[\"5432\"], \"localPortNumber\":[\"15432\"]}"