インバウンド 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 エンドポイント経由のプライベート接続 |
| 所要時間 | 90〜105 分 |
| 難易度 | ★★★☆☆(中級者向け) |
| 前提知識 | 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 つが必要です。
AWS CLI・Git・Docker などのインストールと初期設定は 環境セットアップガイド にまとめています。初めての方は先にご確認ください。
mstsc、macOS の「Microsoft Remote Desktop」などの RDP クライアントこのハンズオンは ap-northeast-1(東京) で進めます。コンソール右上のリージョンを固定してください。
AWS CLI とは別に Session Manager plugin が必要です。未導入の場合は公式手順に従ってインストールしてください。
# インストール確認 session-manager-plugin --version aws --versionSSM 管理対象となる Windows Server EC2 を起動します。まず共通手順(VPC・IAM ロール・キーペア)を準備し、その後 パターン A(パブリックサブネット簡易版)または パターン B(プライベートサブネット + VPC エンドポイント版)のどちらかを選んで進めます。
VPC コンソール →「VPC を作成」→「VPC のみ」を選択して以下を設定します。
「VPC を作成」をクリックします。
IAM → ロール →「ロールを作成」→ 信頼されたエンティティ「AWS のサービス」→「EC2」を選択して次へ。
「ロールを作成」をクリックします。
このロールがアタッチされ、かつ SSM エンドポイントへ到達できる EC2 だけが「マネージドノード」として SSM に登録されます。Windows Server の公式 AMI には SSM Agent がプリインストール済みです。
EC2 コンソール →「ネットワーク & セキュリティ」→「キーペア」。既存のキーペアがあれば流用可。なければ「キーペアを作成」して .pem ファイルを安全な場所に保存してください。
キーペアは後で Administrator パスワードを復号するために使用します(RDP ログインの認証情報として使う)。
VPC にパブリックサブネットと IGW を作成し、EC2 にパブリック IP を付与します。VPC エンドポイントは不要で手順が短く、学習入門に最適です。
VPC →「サブネット」→「サブネットを作成」。
「サブネットを作成」をクリックします。
VPC →「インターネットゲートウェイ」→「インターネットゲートウェイを作成」。
作成後、一覧の ssm-rdp-igw を選択 →「アクション」→「VPC にアタッチ」→ ssm-rdp-vpc を選択して「インターネットゲートウェイをアタッチ」します。ステータスが Attached になることを確認します。
VPC →「ルートテーブル」→「ルートテーブルを作成」。
作成後、ssm-rdp-rt-public を選択して以下 2 つの操作を行います。
0.0.0.0/0 ターゲット: ssm-rdp-igw(インターネットゲートウェイ)→「変更を保存」ssm-rdp-subnet-public にチェック →「関連付けを保存」VPC →「セキュリティグループ」→「セキュリティグループを作成」。
| 方向 | 設定 |
|---|---|
| インバウンド | ルールなし(3389 は追加しない) |
| アウトバウンド | すべてのトラフィック許可(デフォルトのまま) |
SSM はアウトバウンドの HTTPS(443) を使って SSM エンドポイントへ接続します。EC2 側からの発信であるため、インバウンド 3389 を開ける必要が一切ありません。これがこのハンズオンの肝です。
EC2 →「インスタンスを起動」。
「ネットワーク設定」→「編集」をクリックして以下を設定します。
「高度な詳細」→「IAM インスタンスプロファイル」で ec2-ssm-role を選択します。「インスタンスを起動」をクリックします。
インターネットに一切出ない完全プライベートな構成です。3 つの Interface VPC エンドポイントで SSM 通信を確保します。本番環境に近いセキュアな構成を学べます。
VPC →「サブネット」→「サブネットを作成」。
「サブネットを作成」をクリックします。
プライベートサブネットには IGW へのルートは不要です。VPC のメインルートテーブル(ローカルルートのみ)が自動で関連付けられているので追加設定は不要です。
VPC →「セキュリティグループ」→「セキュリティグループを作成」。
| 方向 | タイプ | ポート | ソース | 説明 |
|---|---|---|---|---|
| インバウンド | HTTPS | 443 | 10.0.0.0/16(VPC CIDR) | Allow HTTPS from VPC |
| アウトバウンド | すべてのトラフィック許可(デフォルトのまま) | |||
「セキュリティグループを作成」をクリックします。
VPC →「エンドポイント」→「エンドポイントを作成」を 3 回繰り返します。各エンドポイントで タイプ: Interface、VPC: ssm-rdp-vpc、サブネット: ssm-rdp-subnet-private、SG: ssm-rdp-endpoint-sg、「プライベート DNS 名を有効にする」をチェック して作成します。
| 名前 | サービス名 | 用途 |
|---|---|---|
| ssm-ep-ssm | com.amazonaws.ap-northeast-1.ssm | SSM API 操作 |
| ssm-ep-ssmmessages | com.amazonaws.ap-northeast-1.ssmmessages | Session Manager データチャネル |
| ssm-ep-ec2messages | com.amazonaws.ap-northeast-1.ec2messages | SSM Agent メッセージング |
「プライベート DNS 名を有効にする」をチェックしないと、SSM Agent がパブリックの SSM エンドポイント名を解決しようとしてしまいます。また VPC 自体の「DNS ホスト名」と「DNS 解決」が有効になっていることも確認してください(新規 VPC ではデフォルト有効です)。
VPC →「セキュリティグループ」→「セキュリティグループを作成」。
| 方向 | タイプ | ポート | 送信先 | 説明 |
|---|---|---|---|---|
| インバウンド | ルールなし(3389 は追加しない) | |||
| アウトバウンド | HTTPS | 443 | ssm-rdp-endpoint-sg(SG 指定) | Allow HTTPS to SSM endpoints |
デフォルトの「すべてのトラフィックを許可」のままでも動作しますが、エンドポイント SG だけに絞ることでより厳格なセキュリティを実現できます。送信先に SG ID を指定するのがポイントです。
EC2 →「インスタンスを起動」。
「ネットワーク設定」→「編集」をクリックして以下を設定します。
「高度な詳細」→「IAM インスタンスプロファイル」で ec2-ssm-role を選択します。「インスタンスを起動」をクリックします。
EC2 が「実行中」になり、選んだパターンのネットワーク設定が完了していれば次へ進みます。SSM への登録反映には起動後 2〜5 分 かかります。
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-ep-ssm / ssm-ep-ssmmessages / ssm-ep-ec2messages の 3 つを選択 →「アクション」→「エンドポイントを削除」→ ステータスが消えるまで待つ
ssm-rdp-sg を削除。ssm-rdp-endpoint-sg も削除(ssm-rdp-sg を先に削除する)
ssm-rdp-subnet-public(パターン A)または ssm-rdp-subnet-private(パターン B)→「アクション」→「サブネットを削除」
ssm-rdp-rt-public →「アクション」→「ルートテーブルを削除」
ssm-rdp-igw を選択 →「アクション」→「VPC からデタッチ」→ デタッチ完了後、再度「アクション」→「インターネットゲートウェイを削除」
ssm-rdp-vpc →「アクション」→「VPC を削除」
ec2-ssm-role を削除
ssm-rdp-vpc が消えた| 習得したスキル | 実践内容 |
|---|---|
| EC2 の SSM 管理化 | IAM ロール + エンドポイント到達性でマネージドノード化 |
| Session Manager ポートフォワード | AWS-StartPortForwardingSession で 3389 を非公開のまま RDP |
| Fleet Manager Remote Desktop | ブラウザだけで GUI リモートデスクトップ接続 |
| プライベート接続 | 3 種の VPC エンドポイントでインターネット非経由の SSM 接続 |
| 統制・監査 | IAM ポリシーでの接続制御・CloudTrail / セッションログ |