はじめに
EC2インスタンスへのログイン管理、どのように行っていますか?従来のSSHキーペア(PEMファイル)の管理や、インターネットに対してSSHポート(22番)を開放する運用は、セキュリティリスクや管理工数の増大に直結します。
本記事では、AWS Systems Manager(SSM)のセッションマネージャーを利用し、踏み台サーバーやSSH鍵を使用せずに、プライベートサブネット内のEC2インスタンスへ安全にCLI接続する手順をステップバイステップで解説します。
前提知識/必要な理由
SSMセッションマネージャーとは?
AWS Systems Managerが提供する機能の1つで、インバウンドのポートを開放することなく、AWS管理コンソールやAWS CLI経由でEC2インスタンスなどのマネージドノードにシェル接続(インタラクティブセッション)を確立できるサービスです。
なぜ導入すべきなのか?(メリット)
- インバウンドポートの開放不要: SSM AgentからAWSのAPIGatewayエンドポイントに対するアウトバウンド通信(HTTPS/443ポート)のみで通信を確立するため、外部からの不正アタック経路を完全に遮断できます。
- 踏み台サーバーと鍵管理からの解放: 個別のSSH公開鍵の配布や鍵紛失のリスクから解放されます。アクセス権限はIAMポリシーで一元管理できます。
- 強力な監査ログの取得: 誰がいつログインし、どのような操作を行ったかのコマンドログをAmazon S3やCloudWatch Logsへ自動的に記録・保存できます。
具体的な設定手順・設計方法
ここでは、インターネットから直接アクセスできない「プライベートサブネット」に配置されたLinux(Amazon Linux 2023)のEC2に、ローカルPCからAWS CLIを用いて安全に接続する手順を設定します。
ステップ1:EC2用IAMロール(インスタンスプロファイル)の作成
EC2内のSSM AgentがSSMサービスとセキュアに通信するためのIAMロールを作成します。
- AWS IAMコンソールにアクセスし、「ロールの作成」をクリックします。
- 信頼されたエンティティタイプで「AWSのサービス」、ユースケースで「EC2」を選択します。
- 許可ポリシーの検索窓に「AmazonSSMManagedInstanceCore」と入力し、該当ポリシーをチェックします。
- ロール名(例:
EC2SSMAccessRole)を設定し、「ロールを作成」をクリックします。
ステップ2:EC2インスタンスへのIAMロールの付与
- EC2コンソールから対象のインスタンスを選択します。
- 右上の「アクション」 > 「セキュリティ」 > 「IAMロールを変更」をクリックします。
- ステップ1で作成した
EC2SSMAccessRoleを選択し、「IAMロールの更新」をクリックします。
ステップ3:プライベート接続用のVPCエンドポイントの作成
プライベートサブネット内のEC2がインターネットを介さずにSSMと通信するには、VPCエンドポイント(AWS PrivateLink)が必要です。
VPCの設定画面から、以下の3つのインターフェイス型エンドポイントをEC2と同じVPC、プライベートサブネット、443ポートからのインバウンド通信を許可したセキュリティグループを指定して作成します。
com.amazonaws.[リージョン名].ssmcom.amazonaws.[リージョン名].ssmmessagescom.amazonaws.[リージョン名].ec2messages
ステップ4:ローカル環境の設定と接続確認
ローカルPCのターミナルからセッションマネージャーを起動するには、AWS CLIに加え、専用の「Session Manager プラグイン」が必要です。以下の手順で導入と接続確認を行います。
【補足】Session Manager プラグインの導入手順:
macOSの場合はHomebrewを使用して簡単にインストールできます。WindowsやLinuxの場合は、AWS公式ドキュメントからインストーラをダウンロードしてください。
# macOSでのインストール例
brew install --cask session-manager-plugin
# インストール後の動作確認
session-manager-plugin --version
ローカルのAWS認証情報(CLIプロファイル)が設定されていることを確認し、以下のコマンドを実行して接続します。
# インスタンスIDを指定してセッションを開始
aws ssm start-session --target i-0123456789abcdef0
接続が成功すると、踏み台サーバーを経由せずに対象EC2のプロンプトが表示され、作業が開始可能になります。
実務での注意点
- SSM Agentの起動確認: Amazon Linux 2023やUbuntu 22.04 LTSなどの標準的なAMIにはSSM Agentがプリインストールされています。もし独自AMIや古いOS等を使用しており自動起動しない場合は、手動でエージェントを起動させてください。
# UbuntuでのSSM Agent手動インストール・起動コマンド例 sudo snap install amazon-ssm-agent --classic sudo systemctl enable snap.amazon-ssm-agent.amazon-ssm-agent.service sudo systemctl start snap.amazon-ssm-agent.amazon-ssm-agent.service - VPCのDNSホスト名設定: VPCエンドポイント(PrivateLink)を正しく名前解決するために、VPC設定の「DNSホスト名」および「DNS解決」が有効(Enabled)になっていることを必ず確認してください。
- IAMポリシーの最小特権の原則: 実務で運用する場合は、全インスタンスへの接続を許可するのではなく、IAMの「ResourceTag」などを利用し、特定のタグを持つインスタンス(例:
Environment: Development)のみへの接続を許可するポリシーにカスタマイズすることを強く推奨します。
まとめ
AWS Systems Manager セッションマネージャーを使用すれば、SSHポートをインターネットに晒すことなく、プライベートサブネット内のEC2インスタンスに最も安全な方法でアクセスできます。初期設定の手間を考慮しても、セキュリティ向上や鍵管理コストの削減といったメリットは計り知れません。本手順を参考に、安全なリモート運用体制を整備しましょう。