はじめに
AWSの運用において、EC2インスタンスへのSSH接続は頻繁に発生します。しかし、従来の踏み台サーバー(砦サーバー)の運用や、SSHキー(鍵ファイル)の管理には、セキュリティリスクやメンテナンス負荷が伴います。本記事では、踏み台サーバーを排除し、IAM権限のみで安全にEC2へ接続できる「AWS Systems Manager Session Manager(セッションマネージャー)」の設定手順を、実務に即してステップバイステップで解説します。
前提知識/必要な理由
Session Managerを採用すべき最大の理由は「セキュリティの向上」と「運用コストの削減」です。
従来のSSH接続では、インターネットからアクセス可能なインバウンドポート(TCP/22)を開放する必要があり、これが攻撃対象領域(アタックサーフェス)となっていました。また、個人のSSH鍵の紛失や漏洩、管理の繁雑さも課題でした。
Session Managerを利用することで、以下のメリットを享受できます。
- インバウンドポートの完全閉鎖: EC2側で22番ポートを開放する必要がありません。
- SSHキーの管理不要: AWS IAMによってアクセス権限を統合管理します。
- 証跡の自動保存: 実行したコマンドのログをCloudWatch LogsやS3に自動保存可能です。
具体的な設定手順・設計方法
今回は、EC2インスタンスがインターネットに直接接続できない「プライベートサブネット」にある環境を想定した、実務で最も役立つ設計手順を解説します。
Step 1. EC2用のIAMロール(インスタンスプロフィール)の作成
EC2がSystems Manager(SSM)と通信できるようにするためのIAMロールを作成します。
- AWS管理コンソールのIAM画面から「ロールの作成」を選択します。
- 信頼されたエンティティタイプとして「AWSのサービス」、ユースケースに「EC2」を選択します。
- 許可ポリシーとして、AWS管理ポリシーの
AmazonSSMManagedInstanceCoreをアタッチします。 - 任意のロール名(例:
EC2-SSM-Access-Role)を入力してロールを作成します。
Step 2. EC2インスタンスの起動とIAMロールのアタッチ
対象のEC2インスタンス(Linuxを推奨)を起動し、先ほど作成したIAMロールをアタッチします。なお、セキュリティグループのインバウンドルールは空(許可ルールなし)で問題ありません。
※最近の主要なAMI(Amazon Linux 2023、Amazon Linux 2、Ubuntu等)には、Session Managerに必要なSSM Agentが最初からインストールされているため、特別なインストール作業は不要です。
Step 3. VPCエンドポイントの設定(プライベート環境の場合)
プライベートサブネット内のEC2がインターネットを介さずにSSMと通信できるよう、VPCエンドポイント(Interface型)を3つ作成します。通信先サブネットのセキュリティグループでは、EC2からの「HTTPS (443)」通信を許可してください。
com.amazonaws.[region].ssmcom.amazonaws.[region].ssmmessagescom.amazonaws.[region].ec2messages
Step 4. クライアント環境(手元のPC)の接続準備
ローカルPCのターミナルからAWS CLIを使って接続する場合、標準のAWS CLIに加えて、拡張プラグインであるSession Manager PluginをローカルPCに導入する必要があります。
以下は、各環境での導入手順です。
macOSの場合(Homebrewを使用):
# Session Manager Pluginのインストール
brew install --cask session-manager-plugin
# インストールの確認
session-manager-plugin --version
Windowsの場合(PowerShellを使用):
# インストーラーのダウンロードと実行
Invoke-WebRequest "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows/SessionManagerPluginSetup.exe" -OutFile "SessionManagerPluginSetup.exe"
Start-Process -FilePath ".\SessionManagerPluginSetup.exe" -ArgumentList "/S" -Wait
# インストールの確認
session-manager-plugin --version
Step 5. 接続の実行
準備が整ったら、ローカルPCのターミナルから以下のAWS CLIコマンドを実行して、EC2に接続します。
# EC2への接続コマンド(instance-idの部分に対象のIDを入力)
aws ssm start-session --target i-0123456789abcdef0
コマンド実行後、シェルが起動し、EC2のOS操作が可能になれば接続成功です。
実務での注意点
- SSM Agentの死活監視: EC2内でSSM Agentプロセスが停止すると接続できなくなります。特に古いOSやカスタムAMIを使用する場合は、事前にAgentのインストールと自動起動設定(
systemctl enable amazon-ssm-agent)を確認してください。 - ロールの最小権限原則: 実務では、どのユーザーがどのEC2に接続できるかを制限するため、IAMポリシーで
ssm:StartSessionのResourceタグなどを利用してアクセス制御を細かく設計してください。 - VPC DNSの有効化: VPCエンドポイントを使用する際は、VPC設定で「DNS解決」と「DNSホスト名」の両方が有効(True)になっている必要があります。
まとめ
AWS Systems Manager Session Managerを導入することで、インフラ全体のセキュリティが劇的に向上します。従来の「SSHキーの配布・ローテーション」「踏み台サーバーのコストとセキュリティパッチ管理」から解放されるため、実務において不可欠なモダンインフラの設計プラクティスです。ぜひ本手順を参考に、安全なリモート管理環境を構築してください。