AWS セッションマネージャー(SSM)で SSH 鍵不要の EC2 接続を実現する手順
目次
はじめに
EC2 インスタンスへのアクセスには、従来 SSH 秘密鍵とパブリック IP アドレスが必要でした。しかし、鍵ファイルの管理漏れや、インバウンドポート 22 を開放することによるセキュリティリスクは、運用上の大きな課題になりがちです。
AWS のセッションマネージャー(Systems Manager Session Manager / SSM)を使うと、秘密鍵もパブリック IP アドレスも不要で EC2 インスタンスに安全に接続できます。さらに、プライベートサブネットに配置した EC2 にも VPC エンドポイント経由でアクセス可能です。本記事では、IAM ロールの作成からコンソールでの接続確認まで、パブリック・プライベート両方のケースを手順付きで解説します。
セッションマネージャーの仕組みと3つのメリット
セッションマネージャーは AWS Systems Manager のひとつの機能で、EC2 インスタンス上で動作する SSM エージェントが SSM サービスとの接続を確立します。ユーザーは AWS マネジメントコンソールまたは AWS CLI からシェルセッションを開始できます。
- SSH 鍵の管理が不要:鍵ペアを発行・保管する必要がないため、鍵の紛失・漏洩リスクをなくせる
- インバウンドポートを開放しない:セキュリティグループでポート 22(SSH)や 3389(RDP)を開放せずに済む
- プライベートサブネットの EC2 に接続できる:VPC エンドポイントを使えばインターネット経由の通信なしでアクセス可能
事前準備:IAM ロールの作成と EC2 へのアタッチ
1. IAM ロールを作成する(AmazonSSMManagedInstanceCore)
セッションマネージャーを利用するには、EC2 が SSM サービスにアクセスするための IAM ロールを作成し、インスタンスにアタッチする必要があります。まず IAM コンソールのロールタブから「ロールの作成」をクリックします。

信頼されたエンティティのタイプは EC2 を選択して次に進みます。

アタッチするポリシーは AmazonSSMManagedInstanceCore をフィルタで検索して選択してください。このポリシーは「セッションマネージャーで EC2 インスタンスにアクセスするためだけ」のものです。パッチマネージャーなど他の Systems Manager 機能を利用する場合は、別途必要なポリシーを追加してください。

タグの設定は任意です。最後にロール名と説明を入力してロールの作成を完了します。

2. EC2 インスタンスに IAM ロールをアタッチする
EC2 コンソールで対象のインスタンスを選択し、「アクション」→「セキュリティ」メニューから「IAM ロールを変更」をクリックします。インスタンス作成時にも設定できますが、後から変更する場合はこのメニューを利用します。

先ほど作成した IAM ロールを選択して保存します。

これで IAM 関連の設定は完了です。
3. SSM エージェントについて
セッションマネージャーを利用するには EC2 上で SSM エージェントが動作している必要があります。Amazon Linux 2 / Amazon Linux 2023・Ubuntu では SSM エージェントがプリインストール済みのため、追加のインストール手順は不要です。その他の OS へのインストール方法は 公式ドキュメント を参照してください。
パブリックサブネットの EC2 への接続確認
IAM ロールのアタッチまで完了していれば、パブリックサブネットに設置した EC2 への接続には追加の設定は不要です。EC2 インスタンスの画面で「接続」をクリックします。

「セッションマネージャー」タブから接続ボタンが押せるようになっているはずです。
注意:設定が正しくても、IAM ロールを付与した直後はセッションマネージャーが有効になるまで数分かかることがあります。しばらく待っても接続ボタンが押せない場合は、インスタンスを再起動してみてください。特に起動中のインスタンスに後からロールを設定した場合は再起動が有効です。

問題がなければ、以下のようにブラウザ上でシェルが起動します。

パブリックサブネットの EC2 へのアクセスは以上で完了です。
プライベートサブネットの EC2 への接続:VPC エンドポイントの作成
プライベートサブネットに配置した EC2 は、インターネットゲートウェイを経由する通信経路がないため、SSM のエンドポイントに直接接続できません。この場合は VPC エンドポイント(AWS PrivateLink)を作成することで、VPC 内部のプライベートな経路で SSM サービスと通信できるようにします。
1. 必要な 3 つの VPC エンドポイントを作成する
VPC コンソールのエンドポイントページを開き、以下の 3 つのインターフェースエンドポイントを作成します。
com.amazonaws.<リージョン>.ssmcom.amazonaws.<リージョン>.ssmmessagescom.amazonaws.<リージョン>.ec2messages
<リージョン> の部分は、EC2 を配置しているリージョン識別子に置き換えてください(例:東京リージョンなら ap-northeast-1)。
VPC とサブネットには EC2 が設置されているものを選択します。


プライベートサブネットは有効のままにし、セキュリティグループは HTTPS(ポート 443)のインバウンドを許可しているものを選択してください。セッションマネージャーは HTTPS を使って SSM サービスと通信するためです。

その他の項目はデフォルトのままで問題ありません。「エンドポイントの作成」ボタンをクリックし、上記の 3 つのエンドポイントを順番に作成してください。
作成には数分かかりますが、完了すると以下のように表示されます。

なお、セキュリティグループは VPC 内からのポート 443 を許可する設定にする必要があります。参考として以下のような構成が必要です。

これで VPC エンドポイントの作成は完了です。
2. プライベートサブネットの EC2 への接続を確認する
設定が完了していれば、パブリックサブネットの EC2 と同じ手順でセッションマネージャー経由の接続が可能になっています。

まとめ:セッションマネージャーが EC2 運用のセキュリティを高める理由
本記事で紹介した手順をまとめます。
- IAM ロールの作成:
AmazonSSMManagedInstanceCoreポリシーをアタッチしたロールを EC2 用に作成する - IAM ロールのアタッチ:対象の EC2 インスタンスにロールを紐付ける(後からでも変更可能)
- パブリックサブネット:IAM の設定だけで接続可能。SSH ポートの開放が不要
- プライベートサブネット:ssm・ssmmessages・ec2messages の 3 つの VPC エンドポイントを追加で作成する
セッションマネージャーを採用すると、鍵管理の手間を省けるだけでなく、セキュリティグループのインバウンドルールをシンプルに保つことができます。パッチマネージャーやオートメーションなど他の Systems Manager 機能と組み合わせることで、EC2 の運用管理をさらに効率化できます。ぜひ本番環境への導入を検討してみてください。







ディスカッション
コメント一覧
まだ、コメントがありません