AWS SSM ポートフォワードとは?
はじめに
AWS で EC2 インスタンスに直接アクセスするには、通常 SSH を使用したり、セキュリティグループでポートを開放する必要があります。しかし、セキュリティを考慮すると、可能な限りポート開放は避けたいものです。
そこで AWS SSM(AWS Systems Manager)ポートフォワード機能 を活用すると、EC2 のポートを開放せずに、安全にリモート接続できます。本記事では、ポートフォワードの仕組みや設定方法について解説します。
ポートフォワードとは?
ポートフォワードとは、特定のポートへの通信を、別の場所へ転送する仕組み です。
例えば、ローカルの 1234
番ポートにデータを送ると、それが 別のサーバーの 1234
番ポートに転送される という動作をします。
AWS SSM ポートフォワードのイメージ
AWS SSM を使ったポートフォワード では、以下のような流れでデータが転送されます。
1. ローカルの 1234
番ポートでデータを送信
nc -w 3 127.0.0.1 1234 < assets.tar.gz
💡 ローカルの 127.0.0.1:1234
にデータを送っているだけ
2. SSM ポートフォワードの動作
aws ssm start-session --target ${{ secrets.INSTANCE_ID }} --document-name "AWS-StartPortForwardingSession" --parameters '{
"portNumber":["1234"],
"localPortNumber":["1234"]
}' &
このコマンドを実行すると
- ローカルの
1234
番ポートに送ったデータが、自動的に EC2 の1234
に転送される
3. EC2 側で nc
がリスン(待機)
sudo nc -l -p 1234 > /var/www/test/tmp_assets/assets.tar.gz
EC2 側では nc
が 1234
番ポートでデータを受け取る準備をしている
→ 送られたデータが assets.tar.gz
に保存される
ポートフォワードの具体的な流れ
[ ローカル PC ] -----> [ AWS SSM ポートフォワード ] -----> [ EC2 の 1234 番ポート ]
nc -w 3 127.0.0.1 1234 < assets.tar.gz sudo nc -l -p 1234 > /var/www/test/tmp_assets/assets.tar.gz
なぜポートフォワードが必要?
1. EC2 のポート 1234
は開いていない
通常、EC2 のポート 1234
に直接アクセスするには
- EC2 のセキュリティグループで
1234
を開放 -
EC2 のパブリック IP に接続
が必要ですが、セキュリティ的にリスクがある
💡 SSM ポートフォワードを使うと、セキュリティグループを変更せずに安全に転送できる
2. ローカルの 1234
に接続するだけで、EC2 にデータを送れる
nc -w 3 127.0.0.1 1234 < assets.tar.gz
🔹 ローカルでは 127.0.0.1:1234
に送信
🔹 でも実際には SSM が裏で EC2 の 1234
に転送してくれる
🔹 結果として、EC2 にデータが届く
イメージ図
ポートフォワードなし
❌ 直接 EC2 に送ろうとすると 失敗する
[ ローカル PC ] ----X----> [ EC2 の 1234 番ポート ]
(セキュリティグループでブロックされる)
ポートフォワードあり
✅ SSM が間に入るので成功
[ ローカル PC ] ---> [ SSM ] ---> [ EC2 の 1234 番ポート ]
(ローカルの 1234 に送るだけで EC2 に届く)
まとめ
✅ ポートフォワードを使うと、ローカルの 1234
に送るだけで EC2 に転送できる
✅ セキュリティグループの設定変更なしで、安全に通信できる
✅ AWS SSM が SSH トンネルのような役割をする
AWS SSM ポートフォワードは、セキュリティを向上させつつ、安全に EC2 との通信を可能にする便利な機能です。是非活用してみてください!