はじめに
実務のAWSインフラ構築において、VPC内のプライベートサブネットにあるEC2インスタンスへのセキュアな接続経路の確保は必須の要件です。従来の「踏み台サーバーを立ててSSHポート(22)を開放する」方法には、踏み台自体のメンテナンスコストや、SSH鍵の管理漏洩リスクが伴いました。
本記事では、踏み台サーバー不要かつインバウンドポート全閉じでEC2に安全に接続できる「AWS Systems Manager Session Manager(セッションマネージャー)」の具体的な設定手順と設計ベストプラクティスを解説します。
前提知識/必要な理由
セッションマネージャーとは、AWS Systems Manager(SSM)の一機能であり、ブラウザやAWS CLIを介してEC2インスタンスに安全にワンクリックで接続できるサービスです。この仕組みが推奨される理由は以下の3点です。
- インバウンドポートの開放不要: EC2上のSSM Agentがアウトバウンド通信(HTTPS/443)でAWSのSSMエンドポイントと通信するため、セキュリティグループで22番ポートなどを開ける必要がありません。
- SSH鍵の管理が不要: IAMによる認証・認可でアクセス制御を行うため、個人ごとのSSH鍵の発行・配布・廃止の手間が不要になります。
- 操作ログの自動取得: 実行されたすべてのコマンドや出力を、Amazon S3やAmazon CloudWatch Logsに自動で記録・保存できるため、監査対応が容易になります。
具体的な設定手順・設計方法
今回は、インターネットへ直接出られない「完全なプライベートサブネット」に配置されたLinux(Amazon Linux 2023)のEC2インスタンスに接続する設定手順を解説します。
ステップ1:EC2用のIAMロールの作成と割り当て
EC2上のSSM AgentがSSMサービスと通信するためのIAMロールを作成します。
- IAMコンソールを開き、信頼されたエンティティタイプとして「AWSサービス」、ユースケースに「EC2」を選択します。
- 許可ポリシーとして、AWS管理ポリシーの
AmazonSSMManagedInstanceCoreをアタッチします。 - 任意の名前(例:
EC2-SSM-Access-Role)を付けてロールを作成し、対象のEC2インスタンスに割り当てます。
ステップ2:VPCエンドポイントの設定(プライベート環境の場合)
インターネットに接続できないプライベートサブネットの場合、SSMと通信するためのVPCエンドポイント(AWS PrivateLink)をVPC内に作成する必要があります。以下の3つのインターフェース型エンドポイントを作成してください。
com.amazonaws.[リージョン名].ssmcom.amazonaws.[リージョン名].ssmmessagescom.amazonaws.[リージョン名].ec2messages
※エンドポイントに紐付けるセキュリティグループでは、EC2が配置されているサブネット(またはEC2自身のセキュリティグループ)からの HTTPS(ポート443)のインバウンド通信を許可 するように設定してください。
ステップ3:ローカル環境(クライアント)の準備
ローカルPCの端末(ターミナルなど)からAWS CLI経由で接続を行うには、AWS CLIに加えて「Session Manager Plugin」という外部プラグインの導入が必要です。以下は主要なOSでの導入手順です。
【macOSの場合(Homebrewを使用)】
# Session Manager Pluginのインストール
brew install --cask session-manager-plugin
# インストール確認
session-manager-plugin --version
【Linux (Ubuntu/Debian) の場合】
# プラグインのダウンロードとインストール
curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/ubuntu_64bit/session-manager-plugin.deb" -o "session-manager-plugin.deb"
sudo dpkg -i session-manager-plugin.deb
# インストール確認
session-manager-plugin --version
ステップ4:接続テストの実行
ローカル環境のAWS CLIの認証情報(IAMユーザーやIAMロール)が正しく設定されていることを確認し、以下のコマンドを実行してEC2インスタンスに接続します。
# インスタンスIDを指定して接続を開始
aws ssm start-session --target i-0123456789abcdef0
正常に接続され、シェル(sh-5.2$ など)が表示されれば設定は完了です。
実務での注意点
1. セキュリティグループの確認
よくあるトラブルとして「セッションマネージャーで接続できない」という問題の多くは、VPCエンドポイント側のセキュリティグループ設定、またはEC2のアウトバウンド(HTTPS/443)が閉じていることが原因です。通信経路の設定を二重チェックしてください。
2. 証跡ログの保管場所設計
実務では、運用の透明性を担保するためにセッションログの保存が必須となります。Systems Managerの「Session Manager」設定画面から、「S3バケット」または「CloudWatch Logs」へのログ出力を有効化してください。その際、EC2のIAMロール(AmazonSSMManagedInstanceCore)に、指定したS3バケットへの書き込み権限(s3:PutObject)を個別に追加(カスタマイズ)する必要がある点に注意が必要です。
まとめ
AWS Systems Manager Session Managerを採用することで、踏み台サーバーの排除によるコスト削減と、インバウンドポート全閉鎖による劇的なセキュリティ向上が同時に実現できます。インフラ設計の初期段階からこの接続方式をスタンダードとして組み込み、安全でシンプルなAWS環境の構築・運用を目指しましょう。