はじめに
AWS上でEC2インスタンスを構築した際、SSHキー(鍵ペア)の管理や、踏み台サーバーの運用、セキュリティグループでのポート開放(22番)などに悩まされたことはありませんか?
本記事では、これらを一切不要にし、AWSのマネジメントコンソールやローカルのターミナルからセキュアにEC2へログインできる「AWS Systems Manager (SSM) セッションマネージャー」の設定手順を、初心者から中級者向けにステップバイステップで解説します。
前提知識/必要な理由
セッションマネージャーとは?
セッションマネージャーは、AWS Systems Managerの機能の一つです。EC2インスタンスにSSHキーを登録することなく、ブラウザやAWS CLIを介して安全なシェルアクセスを可能にします。
従来のSSH接続との違いと導入すべき理由
従来のSSH接続には、以下のようなセキュリティと運用の課題がありました。
- 踏み台サーバー(Bastion)を設置することによる運用コストやOSパッチ管理の負荷
- SSHキー(.pemファイル)の紛失や、不要な共有による情報漏洩リスク
- セキュリティグループで22番ポートをインターネットに開放するリスク
セッションマネージャーを利用すれば、22番ポートを閉じたままIAMの権限だけでアクセス制御ができ、操作ログも自動的に記録されるため、セキュリティと監査性が大幅に向上します。
具体的な設定手順・設計方法
ステップ1: IAMロールの作成
EC2インスタンスがSSMのAPIと通信できるようにするためのIAMロール(インスタンスプロフィール)を作成します。
信頼ポリシーに「ec2.amazonaws.com」を指定し、AWS管理ポリシーである AmazonSSMManagedInstanceCore をアタッチしたロールを作成してください。信頼ポリシーのJSON例は以下の通りです。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "ec2.amazonaws.com"
},
"Action": "sts:AssumeRole"
}
]
}
ステップ2: EC2インスタンスへのSSM Agentの導入
セッションマネージャーを利用するには、EC2に「SSM Agent」が導入されている必要があります。「Amazon Linux 2023」や「Amazon Linux 2」などの主要なAMIには、標準でSSM Agentがプリインストールされています。
もしUbuntuなどの他のOSを利用する場合や、エージェントを手動で導入・再インストールする必要がある場合は、以下のコマンドを実行します。
# Ubuntu Server(64ビット)でSSM Agentを手動導入する手順
sudo snap install amazon-ssm-agent --classic
sudo systemctl enable amazon-ssm-agent
sudo systemctl start amazon-ssm-agent
ステップ3: インバウンドルール「なし」のセキュリティグループ設定
SSMセッションマネージャーは、EC2側からAWSのSSMエンドポイントへアウトバウンド(HTTPS/443ポート)でポーリング通信を行う仕組みです。そのため、セキュリティグループのインバウンド(受信)ルールにSSH(22番)を許可する必要はありません。受信ルールは完全に空で問題ありません。
※アウトバウンド(送信)ルールで、インターネットへの443ポートの通信が許可されていることを確認してください。
ステップ4: セッションマネージャーでの接続確認
設定が完了したら、AWSマネジメントコンソールにログインします。
- 「Systems Manager」のコンソールを開き、左メニューから「セッションマネージャー」を選択します。
- 「セッションの開始」をクリックし、対象のEC2インスタンスを選択して接続します。
ローカルのターミナル(AWS CLI)から接続したい場合は、ローカル環境に標準外の外部プラグインである「Session Manager Plugin」を導入する必要があります。以下は各環境での導入手順です。
# macOSでのインストール手順(Homebrewを使用する場合)
brew install --cask aws-session-manager-plugin
# Windows(PowerShell)でのインストール手順
# 公式インストーラー(MSIファイル)をダウンロードして実行後、以下で確認
aws ssm start-session --version
# 接続コマンド
aws ssm start-session --target i-0123456789abcdef0
実務での注意点
1. プライベートサブネット運用の場合はVPCエンドポイントが必要
EC2がパブリックIPを持たない「完全なプライベートサブネット」に配置されている場合、そのままではSSMのパブリックエンドポイントと通信できません。その場合は、VPCエンドポイント(AWS PrivateLink)を作成し、以下の3つのエンドポイント(HTTPS/443)をVPC内に作成してください。
com.amazonaws.[region].ssmcom.amazonaws.[region].ssmmessagescom.amazonaws.[region].ec2messages
2. 操作ログのS3・CloudWatchへの転送設定
実務では、いつ誰がどのようなコマンドを実行したかを監査できるようにするため、セッションマネージャーの「設定」タブから、ログをAmazon S3バケットやAmazon CloudWatch Logsへ転送する設定を必ず有効化しましょう。
まとめ
SSMセッションマネージャーを導入することで、SSHキーの管理コストや踏み台サーバーの維持費、そして何よりポートの開放に伴うセキュリティリスクを完全にゼロにできます。設定自体はIAMロールをEC2に付与するだけで非常にシンプルですので、ぜひ実務の設計に組み込んでみてください。