AWS Systems Manager Session Managerを使用したポートフォワーディングによるリモートホストへの接続
はじめに
こんにちは!
第一SAチームのshikaです。
この記事はNHN テコラスAdvent Calendar 2024の10日目の記事です。
AWS Systems Manager (SSM) の Session Manager を使えば、セキュリティグループによるポートの開放することなく、安全にリモートリソースへ接続することができます。
本記事では、SSM Session Managerを使ったポートフォワーディングの仕組みとその活用方法について、具体的な手順を交えながら解説します。
ポートフォワーディング機能とは?
AWS SSMのポートフォワーディングは、Session Managerを使って、AWS環境内のリモートリソースにローカルからアクセスできる機能です。この機能により、SSHキーやBastionサーバーを使わずに、EC2インスタンスにアクセスできます。
仕組み
SSMでのポートフォワーディングは、ローカルマシンからAWS CLIを使用してHTTPS通信(ポート443)でAWS API経由のトンネルを構築します。トンネルの片側はローカルマシン上の任意のポート、もう片側はSSMエージェントを通じてEC2インスタンス内の指定ポートに接続されます。
この仕組みにより、EC2のセキュリティグループを開放することなく、セキュアなアクセスが可能です。セッションは一時的で、再接続には新たなセッション開始が必要です。NATゲートウェイやVPCエンドポイントを使用し、SSMへのアウトバウンドのみ許可されていれば、プライベートのEC2にもアクセスできます。
準備
必要な条件
- SSMエージェントのインストールと有効化
・対象のEC2インスタンスにSSMエージェントがインストールされていること。
・SSMエージェントが起動中であること。 -
適切なIAMロールの設定
EC2インスタンスにアタッチされたIAMロールに、以下のポリシーが付与されていること。AmazonSSMManagedInstanceCore
- AWS CLIのセットアップ
ローカル環境にAWS CLIがインストールされ、SSMセッションを使用できるよう設定されていること。 -
ポート443のアウトバウンド許可
EC2インスタンスがSession ManagerとHTTPS通信を行うために、ポート443のアウトバウンド通信が許可されていること。
手順
1. AWS CLIを使ったセッションの開始
まず、AWS CLIを使用してポートフォワーディングセッションを開始します。以下のコマンドを実行します。
例:ローカルの10022番ポートへの接続をリモート22番に転送。
aws ssm start-session \ --target "<インスタンスID>" \ --document-name "AWS-StartPortForwardingSession" \ --parameters '{"portNumber":["22"],"localPortNumber":["10022"]}'
<コマンドの詳細>
–target: 接続対象のEC2インスタンスID。
–document-name: 使用するSSMドキュメント名(デフォルトでAWS-StartPortForwardingSessionを使用)。
–parameters: ローカルポートとリモートポートを指定。
実行後、セッションが確立されます。
2. ローカルからの接続
セッションが確立したら、ローカル環境からフォワーディングされたポートを使って接続します。
SSH接続の場合
例えば、SSH接続を行う場合は以下のコマンドを実行します
ssh -i <秘密鍵ファイル> ec2-user@localhost -p 8888
アプリケーション接続の場合
アプリケーションが特定のポート(例:80)で動作している場合、リモートの80番ポートをローカルの8888番ポートにフォワーディングをして、ブラウザで以下のURLにアクセスします。
http://127.0.0.1:8888
AWS-StartPortForwardingSessionToRemoteHostドキュメントについて
前述の例では「AWS-StartPortForwardingSession」ドキュメントを「aws ssm start-session」コマンドの「–document-name」オプションに指定しましたが、AWS-StartPortForwardingSessionToRemoteHostを使えば、接続したEC2を踏み台として、さらに別のEC2(SSMエージェントの導入も不要)やRDS等のリソースにもフォワーディングが可能です。
例:ローカルの5555番ポートへの接続を踏み台EC2経由でPostgresのRDS(5432)に転送。
aws ssm start-session \ --target "<インスタンスID>" \ --document-name "AWS-StartPortForwardingSessionToRemoteHost" \ --parameters '{"host":["<RDSホスト名>"],"portNumber":["5432"],"localPortNumber":["5555"]}'
これを使えば、SSMエージェントを導入したEC2を一台用意しておけば、このEC2がアクセス可能な全ホストに対してポートフォワーディングが可能となるのでとても便利に運用ができます。
まとめ
AWS SSMのポートフォワーディング機能を活用することで、SSHキーやBastionサーバーを使わずにプライベートなEC2インスタンスに安全にアクセスできます。これにより、運用の効率化とセキュリティの向上が期待できます。
ぜひこの方法を活用して、AWS環境の運用・管理を便利にしてみてください!
テックブログ新着情報のほか、AWSやGoogle Cloudに関するお役立ち情報を配信中!
Follow @twitterRecommends
こちらもおすすめ
-
Auto Scalingで起動テンプレートに更新をかけずにAMIを更新する方法
2024.12.20
Special Topics
注目記事はこちら
データ分析入門
これから始めるBigQuery基礎知識
2024.02.28
AWSの料金が 10 %割引になる!
『AWSの請求代行リセールサービス』
2024.07.16