はじめに
AWSのEC2インスタンスを運用する際、従来の「SSHキー(.pem)の管理」や「インターネットに公開された踏み台サーバー(Bastion)の運用」は、セキュリティリスクや運用負荷の面から大きな課題となっていました。
本記事では、ポート22(SSH)を開放することなく、IAM権限のみで安全にEC2にシェル接続できる「AWS Systems Manager (SSM) セッションマネージャー」の構築手順を解説します。これにより、実務におけるインフラの安全性と運用のシンプルさを大幅に向上させることができます。
前提知識/必要な理由
SSMセッションマネージャーを導入すべき主な理由は以下の3点です。
- セキュリティの向上: インバウンドの22番ポートを開放する必要がないため、ポートスキャンや不正アクセスのリスクをゼロにできます。
- 鍵管理の撤廃: SSH鍵(キーペア)を紛失するリスクや、メンバーの離退職に伴う鍵の更新作業が不要になります。
- アクセスログの統合: 誰が、いつ、どのインスタンスで何のコマンドを実行したかを、CloudWatch LogsやS3に自動で記録・監査できます。
具体的な設定手順・設計方法
今回は、インターネットから直接アクセスできないプライベートサブネット内のEC2(Amazon Linux 2023)に対して、SSMセッションマネージャー経由で接続するための設計手順を4ステップで解説します。
ステップ1: EC2用のIAMロールの作成
EC2インスタンスがSSMサービスと通信するためのIAMロールを作成します。
- AWSマネジメントコンソールの「IAM」を開き、ロールを作成します。
- 信頼されたエンティティタイプとして「AWSのサービス」、ユースケースに「EC2」を選択します。
- 許可ポリシーとして、AWS管理ポリシーである「AmazonSSMManagedInstanceCore」を選択してアタッチします。
- ロール名に
EC2-SSM-Roleと入力し、ロールを作成します。
ステップ2: プライベートサブネット用VPCエンドポイントの設定
NATゲートウェイを使用せず、VPC内部から安全にSSMと通信するため、以下の3つのVPCエンドポイント(インターフェースタイプ)を作成します。
com.amazonaws.[リージョン名].ssmcom.amazonaws.[リージョン名].ec2messagescom.amazonaws.[リージョン名].ssmmessages
※サブネットには、EC2が存在するサブネットを選択し、セキュリティグループでは、EC2からこれらエンドポイントへの「HTTPS(ポート443)」の送信が許可されていることを確認してください。
ステップ3: EC2インスタンスの起動とロールのアタッチ
EC2インスタンスを起動し、ステップ1で作成したIAMロールを割り当てます。Amazon Linux 2023には、SSM接続に必要な「SSM Agent」がデフォルトでインストールされているため、追加の導入作業は不要です。
# EC2インスタンス起動時の設定例
- AMI: Amazon Linux 2023
- インスタンスプロファイル: EC2-SSM-Role
- セキュリティグループ(インバウンド): 完全に空(許可ルールなし)
- セキュリティグループ(アウトバウンド): 443ポート(VPCエンドポイント宛)または全開放
ステップ4: ローカルPCからの接続準備と実行
ローカルPCのCLIから接続する場合、AWS CLIと「Session Manager Plugin」が必要です。
1. Session Manager Pluginのインストール
お使いのローカル環境(OS)に合わせて、以下のコマンドでプラグインを導入してください。
macOSの場合 (Homebrewを使用):
brew install --cask session-manager-plugin
Windowsの場合 (PowerShellでインストーラーを実行):
msiexec.exe /i https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows_amd64/SessionManagerPlugin.msi /qn
2. 接続コマンドの実行
ローカルのターミナルから、接続先のインスタンスIDを指定して以下のAWS CLIコマンドを実行します。
aws ssm start-session --target i-0123456789abcdef0
成功すると、SSH鍵の指定なしでEC2のシェルプロンプトが表示され、操作が可能になります。
実務での注意点
- SSM Agentの死活確認: 万が一接続できない場合は、EC2のOS内でSSM Agentのサービスが起動しているか確認してください。起動確認コマンドは以下の通りです。
sudo systemctl status amazon-ssm-agent - 最小特権の原則(IAMポリシー): 開発者にセッションマネージャーの利用を許可する場合、IAMポリシーで特定のEC2インスタンスIDのみに接続制限を行う設計を推奨します。
- 操作ログの暗号化: CloudWatch LogsやS3にログを転送する場合は、ロググループの暗号化(KMS)を有効にし、機密情報がプレーンテキストで残らないように配慮してください。
まとめ
AWS Systems Manager セッションマネージャーを導入することで、インバウンドポートを完全に閉じた状態でEC2へのセキュアなアクセス環境を構築できます。鍵の管理コストや踏み台サーバーの維持費、そしてセキュリティリスクを一度に解消できるため、実務のインフラ設計では最優先で採用すべきベストプラクティスです。ぜひ本手順を参考に構築してみてください。