はじめに
AWSのセキュリティベストプラクティスにおいて、EC2インスタンスへの接続方法の見直しは常に重要なテーマです。従来のように踏み台サーバー(bastionホスト)を構築してSSH接続する手法は、管理コストやポート開放に伴うセキュリティリスクを伴います。
本記事では、踏み台サーバーやSSHキーを使用せずに、ブラウザやAWS CLIから安全にEC2に接続できる「AWS Systems Manager (SSM) Session Manager」の設定手順を、実務レベルで徹底解説します。
前提知識とSSMセッションマネージャーが必要な理由
従来のSSH接続では、EC2インスタンスのセキュリティグループで22番ポート(SSH)をインターネットに公開する必要があり、ブルートフォース攻撃などのリスクに晒されていました。また、鍵管理の手間や、誰がいつ接続したかという監査ログの取得も課題でした。
SSM Session Managerを導入することで、以下のメリットが得られます。
- ポート開放が不要: インバウンド(受信)の22番ポートを完全に閉じ、HTTPS(443ポート)のアウトバウンド(送信)のみで接続可能です。
- 鍵管理が不要: IAMポリシーによってアクセス権限を制御するため、SSHキー(PEMファイル)の共有や管理が不要になります。
- 強力な監査ログ: 実行されたコマンド履歴をAWS CloudTrailやAmazon S3、Amazon CloudWatch Logsに記録できます。
具体的な設定手順
ここでは、最も一般的かつセキュリティ水準の高い「プライベートサブネット内のEC2(VPCエンドポイント経由)」を対象にした設定手順を説明します。
ステップ1:EC2用のIAMロールを作成する
EC2インスタンスがSSMサービスと通信するために必要な権限を持つIAMロールを作成します。
- IAMコンソールを開き、[ロール] -> [ロールの作成] を選択します。
- 信頼されたエンティティタイプで [AWSサービス]、ユースケースで [EC2] を選択します。
- 許可ポリシーの検索窓で AmazonSSMManagedInstanceCore を検索し、チェックを入れます。
- ロール名(例:
EC2-SSM-Access-Role)を入力し、ロールを作成します。
ステップ2:VPCエンドポイントの作成
インターネットに直接接続できないプライベートサブネットの場合、SSMと通信するためのVPCエンドポイント(インターフェース型)を3つ作成する必要があります。
対象VPCのセキュリティグループで、EC2インスタンスからのHTTPS(443)インバウンド通信を許可するルールを作成し、以下の3つのサービス用にエンドポイントを作成します。
com.amazonaws.[リージョン名].ssmcom.amazonaws.[リージョン名].ssmmessagescom.amazonaws.[リージョン名].ec2messages
※エンドポイント作成時、「プライベート DNS 名を有効にする」に必ずチェックを入れてください。
ステップ3:EC2インスタンスの起動とIAMロールのアタッチ
Amazon Linux 2やAmazon Linux 2023などのAMIには、最初からSSMエージェントがプリインストールされています。
- EC2インスタンスを起動します(パブリックIPは不要、セキュリティグループのインバウンドルールは空で問題ありません)。
- インスタンス起動時、または起動後に「アクション」 -> 「セキュリティ」 -> 「IAM ロールを変更」から、ステップ1で作成したIAMロールを割り当てます。
ステップ4:ローカルPCから接続するためのクライアント設定
ブラウザのAWSコンソールから直接接続することも可能ですが、実務ではローカルのターミナルから接続することが大半です。そのために「Session Manager Plugin」をローカルPCに導入します。
Macでのインストール手順(Homebrewを使用する場合):
brew install --cask session-manager-plugin
Windowsでのインストール手順(PowerShellを使用する場合):
公式のインストーラー(MSI形式)をダウンロードして実行するか、以下のコマンドを実行します。
Start-BitsTransfer -Source https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows_64bit/SessionManagerPluginSetup.msi -Destination $env:USERPROFILE\Downloads\SessionManagerPluginSetup.msi
Start-Process msiexec.exe -ArgumentList '/i', "$env:USERPROFILE\Downloads\SessionManagerPluginSetup.msi", '/quiet', '/norestart' -NoNewWindow -Wait
インストール完了後、以下のAWS CLIコマンドを実行してEC2インスタンスに接続します。
aws ssm start-session --target i-0123456789abcdef0
実務での注意点
- SSM Agentのステータス確認: IAMロールをアタッチしても接続できない場合、EC2内のSSM Agentが起動しているか確認してください。OS起動時に自動起動しない設定になっている場合があります。
- DNS解決の有効化: VPC設定で「DNS解決」と「DNSホスト名」が有効(True)になっていない場合、VPCエンドポイントの名前解決ができず、接続エラーになります。
- アウトバウンドルールの確認: インスタンスに適用されているセキュリティグループのアウトバウンドルールで、VPCエンドポイント(またはHTTPS通信)への宛先が許可されているか確認してください。
まとめ
SSM Session Managerを導入することで、踏み台サーバーの維持費やパッチ当てなどの管理運用コストを削減しつつ、セキュアなシェルアクセス環境を実現できます。本番環境や検証環境を問わず、モダンなインフラ設計においては必須のベストプラクティスですので、ぜひ既存環境への導入を検討してください。