はじめに
AWSの運用において、EC2インスタンスへのリモート接続は日常的に発生する作業です。しかし、従来のSSH接続では「踏み台サーバーの管理コスト」「SSH鍵の厳重な管理」「セキュリティグループでポート22を解放するセキュリティリスク」といった課題がつきまといます。
これらの課題をすべて解決するのが、AWS Systems Manager(SSM)の「Session Manager(セッションマネージャー)」です。本記事では、踏み台サーバーを排除し、安全かつシンプルにEC2へ接続するための具体的な設定手順を解説します。
前提知識/必要な理由
SSMセッションマネージャーは、AWSのマネージドサービスを利用してEC2インスタンスへのセキュアなシェル接続を提供する機能です。これを利用すべき主な理由は以下の3点です。
- インバウンドポートの開放が不要:EC2インスタンス側でポート22を開放する必要がありません。SSMエージェントからAWS APIへのアウトバウンド通信のみで動作するため、攻撃表面を最小限に抑えられます。
- 鍵管理からの解放:SSH公開鍵や秘密鍵の作成・配布・管理が不要になり、すべてAWS IAMの権限(ポリシー)でアクセス制御を行います。
- 操作ログの自動記録:接続中の実行コマンドや出力を、Amazon S3やAmazon CloudWatch Logsへ自動的に記録し、監査ログとして保管できます。
具体的な設定手順・設計方法
SSMセッションマネージャーを使ってEC2インスタンスへ接続するための設定手順は以下の4ステップです。
ステップ1:EC2用のIAMロールを作成する
EC2がSSMサービスと通信できるようにするためのIAMロールを作成します。
- IAMコンソールを開き、「ロールの作成」を選択します。
- 信頼されたエンティティタイプで「AWSのサービス」、ユースケースで「EC2」を選択します。
- 許可ポリシーの追加画面で、AWS管理ポリシーである「AmazonSSMManagedInstanceCore」を検索し、チェックを入れます。
- ロール名(例:
EC2-SSM-Access-Role)を入力し、ロールを作成します。
ステップ2:EC2インスタンスを起動し、IAMロールを割り当てる
作成したIAMロールをEC2インスタンスにアタッチします。新規起動時、または既存のインスタンスに対して設定します。
- AMIの選択:Amazon Linux 2やAmazon Linux 2023などの標準的なAMIには、接続に必要な「SSM Agent」が最初からプリインストールされているため、特別な導入手順は不要です。
- IAMプロファイルの設定:EC2の「高度な詳細」または「セキュリティ」設定から、ステップ1で作成したIAMロールをインスタンスに割り当てます。
ステップ3:ローカル環境にSession Managerプラグインを導入する
AWS CLI経由でローカルPCからEC2に接続するためには、AWS CLIに加えて専用の拡張モジュールである「Session Managerプラグイン」のインストールが必要です。各OS向けの導入手順は以下の通りです。
macOSの場合(Homebrewを使用):
# Homebrewを使用してプラグインをインストール
brew install --cask session-manager-plugin
# インストール確認(バージョンが表示されれば成功)
session-manager-plugin --version
Windowsの場合(PowerShellを使用):
公式のインストーラーを実行するか、以下のPowerShellコマンドを使ってサイレントインストールを行います。
# インストーラーのダウンロードと実行
Invoke-WebRequest "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows_amd64/SessionManagerPluginSetup.exe" -OutFile "SessionManagerPluginSetup.exe"
Start-Process -FilePath ".\SessionManagerPluginSetup.exe" -ArgumentList "/S" -Wait
# インストール確認(バージョンが表示されれば成功)
session-manager-plugin
ステップ4:AWS CLIからEC2インスタンスへ接続する
ローカルのターミナルまたはコマンドプロンプトから、以下のコマンドを実行して接続します。i-xxxxxxxxxxxxxxxxx の部分には、対象EC2インスタンスのインスタンスIDを記述してください。
# SSMセッションの開始コマンド
aws ssm start-session --target i-xxxxxxxxxxxxxxxxx
コマンド実行後、シェルが起動し、EC2のOSにログインできれば接続完了です。
実務での注意点
実務でSSMセッションマネージャーを本番環境等に導入する際は、以下の構成・設計に注意してください。
- プライベートサブネットでの通信経路設計:インターネットへのルートを持たない完全なプライベートサブネット内のEC2に接続する場合、VPCエンドポイント(AWS PrivateLink)の設置が必要です。具体的には以下の3つのエンドポイントを作成し、EC2が所属するセキュリティグループからのHTTPS(443ポート)のインバウンド通信を許可してください。
com.amazonaws.[region].ssmcom.amazonaws.[region].ssmmessagescom.amazonaws.[region].ec2messages
- IAMポリシーによるアクセス制限:特定のユーザーにのみ特定のEC2への接続を許可したい場合は、接続元のIAMユーザーやロールに対して、リソース制限を明記したIAMポリシーを適用してください。
まとめ
SSMセッションマネージャーを導入することで、SSH鍵の管理から解放され、セキュリティグループの管理も劇的にシンプルになります。踏み台サーバーを廃止することは、インフラのコスト削減だけでなく、セキュリティリスクの低減にも直結します。ぜひ本手順を参考に、より安全なAWSインフラを設計・構築してください。