はじめに
EC2インスタンスへのログイン管理において、セキュリティグループで「ポート22(SSH)」をインターネットに開放することは、不正アクセスの標的になる大きなリスクを伴います。本記事では、ポート22を完全に閉じたまま、安全にEC2へシェル接続できる「AWS Systems Manager(SSM)セッションマネージャー」の導入手順と、実務で直面しやすいトラブル解決法を徹底解説します。
前提知識/必要な理由
従来のSSH接続では、踏み台サーバーの管理やSSHキーペアの厳重な保管、IP制限のメンテナンスなど、運用負荷が高いという課題がありました。SSMセッションマネージャーを採用すべき理由は以下の通りです。
- セキュリティの向上:インバウンドのポート22を開放する必要がなく、踏み台サーバーも不要になります。
- アクセス権の一元管理:IAMポリシーを使用して、特定のユーザーやグループに対してEC2への接続権限を細かく制御できます。
- 監査ログの自動取得:実行されたコマンド操作のログを、Amazon S3やCloudWatch Logsへ自動的に記録できます。
具体的な設定手順・設計方法
SSMセッションマネージャーを用いて、EC2へSSHレスで接続するための具体的なステップです。
Step 1. EC2用のIAMロールの作成とアタッチ
EC2がSSMサービスと通信できるようにするためのIAMロールを作成します。
- AWSマネジメントコンソールで「IAM」を開き、「ロールの作成」をクリックします。
- 信頼されたエンティティタイプで「AWSサービス」、ユースケースで「EC2」を選択します。
- 許可ポリシーの検索窓で
AmazonSSMManagedInstanceCoreを検索し、チェックを入れてロールを作成します(例:EC2-SSM-Role)。 - 対象のEC2インスタンスのアクションメニューから「セキュリティ」>「IAMロールを変更」を選択し、作成したロールをアタッチします。
Step 2. セキュリティグループの変更
対象EC2インスタンスのセキュリティグループのインバウンドルールから、ポート22(SSH)の許可ルールを削除します。SSMはアウトバウンド(HTTPS/443)の通信を利用するため、インバウンドルールはすべて空でも接続可能です。
Step 3. クライアント環境のセットアップ(AWS CLIとプラグイン)
ローカルPCのターミナルから接続する場合、AWS CLIに加え、拡張ライブラリである「Session Manager Plugin」の導入が必要です。
macOSの場合(Homebrewを使用):
brew install --cask session-manager-plugin
Windowsの場合(PowerShell):
公式のインストーラー(MSI)をダウンロードして実行するか、以下のコマンドを実行します。
Start-BitsTransfer -Source "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/windows_amd64/SessionManagerPluginSetup.msi" -Destination "C:\SessionManagerPluginSetup.msi"
Start-Process msiexec.exe -ArgumentList "/i C:\SessionManagerPluginSetup.msi /quiet" -Wait
Step 4. 接続確認
設定完了後、ローカルのターミナルから以下のAWS CLIコマンドを実行し、EC2へ接続できるか確認します(インスタンスIDは実際の環境に合わせて書き換えてください)。
aws ssm start-session --target i-0123456789abcdef0
「Starting session with SessionId…」と表示され、プロンプトが切り替われば接続成功です。
実務での注意点とトラブルシューティング
1. プライベートサブネットから接続できない場合の対処法
インターネットへのルートを持たないプライベートサブネットに配置されたEC2の場合、SSMエンドポイントと通信できずに接続エラーとなります。その場合は、VPCエンドポイント(AWS PrivateLink)を作成し、EC2が所属するサブネットに配置してください。必要なエンドポイントは以下の3つです(すべてインターフェイス型、HTTPS/443許可のセキュリティグループを適用)。
com.amazonaws.[region].ssmcom.amazonaws.[region].ssmmessagescom.amazonaws.[region].ec2messages
2. SSM Agentの動作確認
Amazon Linux 2/3やUbuntuの最新AMIには、標準でSSM Agentがプリインストールされています。しかし、古いOSやカスタムAMIの場合は手動インストールが必要な場合があります。起動しない場合は以下のコマンドでステータスを確認してください。
sudo systemctl status amazon-ssm-agent
まとめ
SSMセッションマネージャーを導入することで、ポート22を閉じたまま安全かつ容易にEC2インスタンスを管理できるようになります。踏み台サーバーの維持費や鍵管理の手間を削減できるため、現在のインフラ設計においては必須のベストプラクティスです。プライベートサブネットでの構成時にはVPCエンドポイントの設定を忘れずに行い、セキュアなインフラ環境を構築しましょう。