インバウンド 3389 もパブリック IP も使わず、Session Manager と Fleet Manager で安全にリモートデスクトップ接続する
従来、Windows Server へのリモートデスクトップ(RDP)接続にはセキュリティグループでポート 3389 を開け、パブリック IP を付与する必要がありました。これはインターネットからの攻撃対象になりやすい構成です。AWS Systems Manager(SSM)を使えば、インバウンド 3389 を一切開けず、パブリック IP も不要で、IAM 認証ベースの安全な RDP 接続を実現できます。
このハンズオンでは、SSM による Windows への RDP 接続を 2 つの方法で体験します。
さらにネットワーク構成も 2 パターン(パブリックサブネット簡易版 / プライベートサブネット + VPC エンドポイント版)を扱い、本番に近いセキュアな構成も学びます。
| 項目 | 内容 |
|---|---|
| 対象サービス | Systems Manager(Session Manager / Fleet Manager)、EC2(Windows)、VPC エンドポイント、IAM |
| 主な学習内容 | SSM 管理化・ポートフォワーディング RDP・Fleet Manager RDP・VPC エンドポイント経由のプライベート接続 |
| 所要時間 | 75〜90 分 |
| 難易度 | ★★★☆☆(中級者向け) |
| 前提知識 | EC2・VPC・IAM ロール・セキュリティグループの基礎 |
| 費用目安 | 約 1〜3 USD(Windows EC2 時間課金 + VPC エンドポイント。数時間で完了しクリーンアップ前提) |
| パターン | SSM 到達経路 | 特徴 |
|---|---|---|
| A. パブリックサブネット簡易版 | IGW 経由でパブリック SSM エンドポイントへ | 手順が短い・学習向け。EC2 はパブリック IP を持つが 3389 は閉じる |
| B. プライベート + VPC エンドポイント版 | 3 種の Interface エンドポイント経由 | インターネット非経由で完全プライベート。本番想定 |
| エンドポイント | 役割 |
|---|---|
| com.amazonaws.<region>.ssm | SSM の API 操作 |
| com.amazonaws.<region>.ssmmessages | Session Manager のデータチャネル(接続の実体) |
| com.amazonaws.<region>.ec2messages | SSM Agent とのメッセージング |
いずれも Interface 型でプライベート DNS を有効にします。Fleet Manager / ポートフォワーディングの両方でこの 3 つが必要です。
mstsc、macOS の「Microsoft Remote Desktop」などの RDP クライアントこのハンズオンは ap-northeast-1(東京) で進めます。コンソール右上のリージョンを固定してください。
AWS CLI とは別に Session Manager plugin が必要です。未導入の場合は公式手順に従ってインストールしてください。
# インストール確認 session-manager-plugin --version aws --versionSSM 管理対象となる Windows Server EC2 を起動します。ネットワークは パターン A(簡易)と パターン B(VPC エンドポイント)のいずれか、または両方を試せます。
IAM → ロール →「ロールを作成」→ 信頼されたエンティティ「EC2」→ ポリシー AmazonSSMManagedInstanceCore をアタッチ → ロール名 ec2-ssm-role で作成します。
このロールがアタッチされ、かつ SSM エンドポイントへ到達できる EC2 だけが「マネージドノード」として SSM に登録されます。Windows Server の公式 AMI には SSM Agent がプリインストール済みです。
EC2 →「インスタンスを起動」。
キーペアは Step2 で Administrator パスワードを取得するために使用します(RDP の認証に使う)。
このハンズオンの肝です。セキュリティグループのインバウンドルールは空(または既存のまま 3389 を追加しない)にします。アウトバウンドはデフォルトの「すべて許可」のままで構いません。
| 方向 | 設定 |
|---|---|
| インバウンド | RDP(3389) を追加しない(空でよい) |
| アウトバウンド | すべて許可(SSM への HTTPS 443 が通ればよい) |
この構成なら VPC エンドポイントは不要です。EC2 はパブリック IP を持ちますが、インバウンド 3389 を開けないので RDP はインターネットから直接到達できません。SSM トンネル経由でのみ接続します。
プライベートサブネット + NAT なし + VPC エンドポイントなしの構成では SSM エンドポイントに到達できず「マネージドノード」に出てきません。その場合はパターン B(VPC エンドポイント)が必要です。
VPC →「エンドポイント」→「エンドポイントを作成」を 3 回繰り返し、以下を作成します。いずれも タイプ: Interface、EC2 と同じ VPC・プライベートサブネットを選択、プライベート DNS 名を有効化します。
| サービス名 | 用途 |
|---|---|
| com.amazonaws.ap-northeast-1.ssm | SSM API |
| com.amazonaws.ap-northeast-1.ssmmessages | Session Manager データチャネル |
| com.amazonaws.ap-northeast-1.ec2messages | SSM Agent メッセージング |
VPC エンドポイントにアタッチするセキュリティグループのインバウンドで、EC2 のセキュリティグループ(または VPC CIDR)からの HTTPS(443) を許可します。これが無いと SSM Agent がエンドポイントへ接続できません。
| タイプ | ポート | ソース |
|---|---|---|
| HTTPS | 443 | EC2 の SG / VPC CIDR |
EC2 が「実行中」になり、選んだパターンに応じたネットワーク設定が完了していれば次へ進みます。SSM 登録の反映には数分かかります。
EC2 が SSM の「マネージドノード」として認識されているかを確認し、RDP 認証用の Administrator パスワードを取得します。
Systems Manager コンソール → 「ノード管理」→「Fleet Manager」(または「フリートマネージャー」)を開きます。一覧に ssm-rdp-win が表示され、「SSM エージェントの ping ステータス」が「オンライン」になっていれば管理化成功です。
ec2-ssm-role がアタッチされているかavailable でプライベート DNS 有効かEC2 コンソール → ssm-rdp-win を選択 → 「接続」→「RDP クライアント」タブ →「パスワードを取得」。Step1 で指定したキーペアの秘密鍵をアップロードして復号し、Administrator のパスワードを控えます(方法 A / B 両方の RDP ログインで使用)。
方法 B(Fleet Manager)では、接続時にキーペアの秘密鍵を指定すれば自動でログインできるため、パスワードの手動入力を省略できます(Step4 で扱います)。
Fleet Manager でノードが「オンライン」、かつ Administrator パスワードを取得できていれば準備完了です。
ローカル PC の 13389 番ポートを SSM トンネル経由で EC2 の 3389 番へ転送し、普段使いの RDP クライアントで接続します。
EC2 コンソールで ssm-rdp-win のインスタンス ID(例:i-0123456789abcdef0)を控えます。
ローカル PC のターミナル(PowerShell / bash)で、AWS マネージドドキュメント AWS-StartPortForwardingSession を使ってトンネルを張ります。
成功すると Starting session ... Port 13389 opened for sessionId ... と表示され、このターミナルは開いたままにします(トンネルが維持されます)。
上記はバックスラッシュ改行(bash 形式)です。PowerShell では 1 行で書くか、行末をバッククォート(`)に置き換えてください。
別のウィンドウで RDP クライアントを起動し、接続先に localhost:13389(または 127.0.0.1:13389)を指定します。
mstsc /v:localhost:13389 を実行、もしくはリモートデスクトップ接続に localhost:13389 を入力localhost:13389 を追加ユーザー名 Administrator、パスワードは Step2 で取得した値を入力します。
Windows のデスクトップ画面が表示されれば、3389 を一切公開せずに SSM トンネル経由で RDP 接続できています 🎉 切断するときは RDP を閉じ、トンネルのターミナルで Ctrl + C を押します。
AWS-StartPortForwardingSessionToRemoteHost を使うと、SSM 管理下の踏み台を経由して「その先のホスト(RDS や別サーバー)」へ転送することもできます。多段構成のトンネリングに便利です。
ローカルに CLI も RDP クライアントも入れず、AWS コンソールのブラウザ画面だけで GUI 接続します。
Systems Manager → 「Fleet Manager」→ ssm-rdp-win を選択 → 右上の 「ノードアクション」→「接続」→「リモートデスクトップで接続」(Connect with Remote Desktop)をクリックします。
認証方法を 2 種類から選べます。
| 認証方法 | 内容 |
|---|---|
| キーペア | Step1 のキーペアの秘密鍵をアップロード → 自動で Administrator ログイン |
| ユーザー認証情報 | ユーザー名 Administrator + Step2 で取得したパスワードを入力 |
「接続」をクリックします。
ブラウザのタブ内に Windows のデスクトップが表示されます。最大 4 セッションまで同時接続でき、画面上部のツールバーから解像度変更・クリップボード連携・切断などが行えます。
ローカルに何もインストールせず、ブラウザだけで Windows デスクトップが操作できれば成功です。使い終わったらツールバーの「終了」または「切断」でセッションを閉じます。
| 観点 | A. Session Manager ポートフォワード | B. Fleet Manager Remote Desktop |
|---|---|---|
| ローカル準備 | AWS CLI + plugin + RDP クライアント | ブラウザのみ |
| 操作感 | 普段の mstsc と同じ(フル機能) | コンソール内の簡易 GUI |
| ファイル転送・複数モニタ | RDP 標準機能をフル活用可 | 制限あり(最大 4 セッション) |
| 端末制約がある環境 | クライアント導入が必要 | ブラウザだけで可、踏み台に最適 |
| 向くケース | 日常的に作業する管理者 | 緊急対応・一時点検・制約端末 |
誰がどのインスタンスへ接続できるかは IAM ポリシーで制御します。例えばタグ Env=dev のインスタンスにのみセッションを許可する、といった絞り込みが可能です。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": ["ssm:StartSession"],
"Resource": "arn:aws:ec2:*:*:instance/*",
"Condition": {
"StringEquals": { "ssm:resourceTag/Env": "dev" }
}
},
{
"Effect": "Allow",
"Action": ["ssm:StartSession"],
"Resource": [
"arn:aws:ssm:*:*:document/AWS-StartPortForwardingSession"
]
},
{
"Effect": "Allow",
"Action": ["ssm:TerminateSession", "ssm:ResumeSession"],
"Resource": "arn:aws:ssm:*:*:session/${aws:username}-*"
}
]
}
StartSession などの API 呼び出しを記録(誰がいつ接続したか)| 症状 | 主な原因 |
|---|---|
| マネージドノードに出てこない | IAM ロール未アタッチ / SSM エンドポイント未到達 / 反映待ち |
| ポートフォワードが TargetNotConnected | SSM Agent オフライン、ssmmessages エンドポイント不足 |
| RDP で資格情報エラー | ユーザー名は Administrator、パスワードはキーペアで復号した値か再確認 |
| 13389 がすでに使用中 | localPortNumber を別の空きポートに変更 |
2 方式の違いと、IAM・ログによる統制ポイントを理解できれば本ハンズオンの目標達成です。
Windows EC2 は Linux より時間単価が高く、Interface 型 VPC エンドポイントもエンドポイント単位 + AZ 単位で時間課金されます(3 つ分)。使い終わったら必ず削除してください。
Ctrl + C、Fleet Manager のセッションを切断
ssm-rdp-win →「インスタンスを終了」
ssm / ssmmessages / ec2messages の 3 つを削除
ec2-ssm-role を削除
| 習得したスキル | 実践内容 |
|---|---|
| EC2 の SSM 管理化 | IAM ロール + エンドポイント到達性でマネージドノード化 |
| Session Manager ポートフォワード | AWS-StartPortForwardingSession で 3389 を非公開のまま RDP |
| Fleet Manager Remote Desktop | ブラウザだけで GUI リモートデスクトップ接続 |
| プライベート接続 | 3 種の VPC エンドポイントでインターネット非経由の SSM 接続 |
| 統制・監査 | IAM ポリシーでの接続制御・CloudTrail / セッションログ |