話題の記事

AWS System Managerセッションマネージャーがリモートホストのポートフォワードに対応しました

AWS Systems Manager セッションマネージャーがリモートホストのポートも転送できるようになり、EC2を踏み台に、RDS・ElastiCacheなど、様々なVPCリソースにVPC外から通信できるようになりました。
2022.05.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

AWS System Managerセッションマネージャーはポートフォワードに対応しており、セキュリティグループで特定のポートをあけることなく、プライベートサブネットのWindowsサーバーにRDPするといったことが可能です。

従来は、セッション接続先のEC2インスタンス内で LISTEN しているポートしかフォワードできませんでしたが、今回のアップデートにより、リモートホストのポートも転送できるようになりました。

より具体的には、EC2インスタンスを踏み台に、VPC内のリソース、例えばRDSのホスト・ポートを転送するといったことが可能になりました。

やってみた

SSM エージェントバージョンを確認

AWS Systems Managerは操作対象のインスタンスにエージェントをインストールします。

Session Managerを利用したリモートホスト・ポートフォワードの場合、バージョン 3.1.1374.0 以上が必要です。

エージェントのバージョンが古いままの場合、新しいバージョンにアップデートしましょう。

シンプルなSSMシェルアクセス

EC2インスタンスにSSMセッションマネージャーでシェルアクセスする場合、アクセス先のインスタンスIDを指定するだけです。

$ aws ssm start-session \
  --target i-123
...

sh-4.2$

SSMでローカルホストのポートを転送

セッション接続先インスタンス内のポートを転送する場合、この引数にプラスして

  • ポートフォワード用ドキュメント(AWS-StartPortForwardingSession)
  • EC2インスタンス内のポート・ローカルのポート

指定します。

例えば、EC2インスタンス内の MySQLのポートを転送する場合、以下の通りです。

$ aws ssm start-session \
    --target i-123 \
    --document-name AWS-StartPortForwardingSession \
    --parameters '{"portNumber":["3306"], "localPortNumber":["3306"]}'

クライアントからは、localhostの3306ポートに接続します。

$ mysql -u admin -p -h localhost -P 3306

[NEW]SSMでリモートホストのポートを転送

今回発表になったリモートホストのポートを転送する場合、ドキュメントをリモートホスト用のものに変更し、パラメーターでリモートのホスト名も指定します。

  • リモートホストのポートフォワード用ドキュメント(AWS-StartPortForwardingSessionToRemoteHost)
  • リモートのホスト・ポート、ローカルのポート

例えば、RDS MySQL のホスト・ポートをローカルの同じポートに転送する場合、以下の通りです。

$ aws ssm start-session \
    --target i-123 \
    --document-name AWS-StartPortForwardingSessionToRemoteHost \
    --parameters '{"host":["aaa.bbb.ap-northeast-1.rds.amazonaws.com"],"portNumber":["3306"], "localPortNumber":["3306"]}'

クライアントからは、localhostの3306ポートに接続します。

$ mysql -u admin -p -h localhost -P 3306

SSMポートフォワードのメリット

SSM方式のポートフォワードには、様々なメリットがあります。

  • IAMで認証・認可可能
  • 踏み台サーバーはプライベートサブネットに設置可能
  • セキュリティグループのインバウンドルールでSSHやRDPなどを許可しなくて良い
  • クライアントからのアウトバウンドはHTTPS通信。SSHやRDPのアウトバウンド通信が禁止されている環境でも利用可能

など枚挙にいとまがありません。

最後に

AWS Systems Manager セッションマネージャーがリモートホストのポートも転送できるようになり、EC2を踏み台に、RDS・ElastiCacheなど、様々なVPCリソースにVPC外から通信できるようになりました。

より複雑なポートフォワードを行いたい場合、SSH over SSM をご検討ください。

それでは。

参考