SSM で Windows Server に RDP 接続するハンズオン

インバウンド 3389 もパブリック IP も使わず、Session Manager と Fleet Manager で安全にリモートデスクトップ接続する

Systems Manager Session Manager Fleet Manager Windows Server VPC エンドポイント マネコン操作 所要時間 90〜105 分 v1.0

📋 概要

従来、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 接続のメリット
  • インバウンド 3389 不要:セキュリティグループのインバウンドを完全に閉じられる
  • パブリック IP / 踏み台不要:プライベートサブネットの EC2 にも接続できる
  • IAM で認証・認可:誰がどのインスタンスに接続できるかを IAM ポリシーで制御
  • 監査ログ:接続操作を CloudTrail / セッションログで記録

🏗️ アーキテクチャ

方法 A:Session Manager ポートフォワーディング

💻 ローカル PC(AWS CLI + Session Manager plugin + RDP クライアント)
↓ localhost:13389 → SSM トンネル(HTTPS 443 アウトバウンドのみ)
🔐 SSM サービスエンドポイント
↓ SSM Agent 経由
🪟 Windows Server EC2(インバウンド 3389 閉、パブリック IP なし)

方法 B:Fleet Manager Remote Desktop

🌐 ブラウザ(AWS マネジメントコンソール)
↓ Fleet Manager の GUI RDP セッション
🔐 SSM サービス
↓ SSM Agent 経由
🪟 Windows Server EC2

ネットワーク 2 パターン

パターンSSM 到達経路特徴
A. パブリックサブネット簡易版IGW 経由でパブリック SSM エンドポイントへ手順が短い・学習向け。EC2 はパブリック IP を持つが 3389 は閉じる
B. プライベート + VPC エンドポイント版3 種の Interface エンドポイント経由インターネット非経由で完全プライベート。本番想定
ℹ️ SSM に必要な 3 つの VPC エンドポイント(パターン B)
エンドポイント役割
com.amazonaws.<region>.ssmSSM の API 操作
com.amazonaws.<region>.ssmmessagesSession Manager のデータチャネル(接続の実体)
com.amazonaws.<region>.ec2messagesSSM Agent とのメッセージング

いずれも Interface 型でプライベート DNS を有効にします。Fleet Manager / ポートフォワーディングの両方でこの 3 つが必要です。

✅ 前提条件

🔧 ツールの事前セットアップ

AWS CLI・Git・Docker などのインストールと初期設定は 環境セットアップガイド にまとめています。初めての方は先にご確認ください。

⚠️ リージョン確認

このハンズオンは ap-northeast-1(東京) で進めます。コンソール右上のリージョンを固定してください。

ℹ️ Session Manager plugin のインストール(方法 A 用)

AWS CLI とは別に Session Manager plugin が必要です。未導入の場合は公式手順に従ってインストールしてください。

# インストール確認 session-manager-plugin --version aws --version

🪟 ステップ 1 ― Windows Server EC2 とネットワークを準備する

SSM 管理対象となる Windows Server EC2 を起動します。まず共通手順(VPC・IAM ロール・キーペア)を準備し、その後 パターン A(パブリックサブネット簡易版)または パターン B(プライベートサブネット + VPC エンドポイント版)のどちらかを選んで進めます。

── 共通手順 ──

1-1. VPC を作成する

VPC コンソール →「VPC を作成」→「VPC のみ」を選択して以下を設定します。

名前タグssm-rdp-vpc
IPv4 CIDR10.0.0.0/16
テナンシーデフォルト

「VPC を作成」をクリックします。

1-2. SSM 用 IAM ロールを作成する

IAM → ロール →「ロールを作成」→ 信頼されたエンティティ「AWS のサービス」→「EC2」を選択して次へ。

アタッチするポリシーAmazonSSMManagedInstanceCore
ロール名ec2-ssm-role

「ロールを作成」をクリックします。

ℹ️ SSM 管理化の必須条件

このロールがアタッチされ、かつ SSM エンドポイントへ到達できる EC2 だけが「マネージドノード」として SSM に登録されます。Windows Server の公式 AMI には SSM Agent がプリインストール済みです。

1-3. キーペアを確認する(なければ作成)

EC2 コンソール →「ネットワーク & セキュリティ」→「キーペア」。既存のキーペアがあれば流用可。なければ「キーペアを作成」して .pem ファイルを安全な場所に保存してください。

キーペアは後で Administrator パスワードを復号するために使用します(RDP ログインの認証情報として使う)。

── パターン A:パブリックサブネット簡易版 ──

VPC にパブリックサブネットと IGW を作成し、EC2 にパブリック IP を付与します。VPC エンドポイントは不要で手順が短く、学習入門に最適です。

1-A-1. パブリックサブネットを作成する

VPC →「サブネット」→「サブネットを作成」。

VPC IDssm-rdp-vpc(先ほど作成)
サブネット名ssm-rdp-subnet-public
アベイラビリティゾーンap-northeast-1a(任意)
IPv4 CIDR10.0.1.0/24

「サブネットを作成」をクリックします。

1-A-2. インターネットゲートウェイを作成して VPC にアタッチする

VPC →「インターネットゲートウェイ」→「インターネットゲートウェイを作成」。

名前タグssm-rdp-igw

作成後、一覧の ssm-rdp-igw を選択 →「アクション」→「VPC にアタッチ」→ ssm-rdp-vpc を選択して「インターネットゲートウェイをアタッチ」します。ステータスが Attached になることを確認します。

1-A-3. パブリックルートテーブルを作成して設定する

VPC →「ルートテーブル」→「ルートテーブルを作成」。

名前ssm-rdp-rt-public
VPCssm-rdp-vpc

作成後、ssm-rdp-rt-public を選択して以下 2 つの操作を行います。

  1. 「ルート」タブ →「ルートを編集」→「ルートを追加」
    送信先: 0.0.0.0/0   ターゲット: ssm-rdp-igw(インターネットゲートウェイ)→「変更を保存」
  2. 「サブネットの関連付け」タブ →「サブネットの関連付けを編集」→ ssm-rdp-subnet-public にチェック →「関連付けを保存」
1-A-4. EC2 用セキュリティグループを作成する

VPC →「セキュリティグループ」→「セキュリティグループを作成」。

セキュリティグループ名ssm-rdp-sg
説明SG for SSM RDP Windows EC2
VPCssm-rdp-vpc
方向設定
インバウンドルールなし(3389 は追加しない)
アウトバウンドすべてのトラフィック許可(デフォルトのまま)
ℹ️ インバウンド 3389 不要な理由

SSM はアウトバウンドの HTTPS(443) を使って SSM エンドポイントへ接続します。EC2 側からの発信であるため、インバウンド 3389 を開ける必要が一切ありません。これがこのハンズオンの肝です。

1-A-5. Windows Server EC2 を起動する

EC2 →「インスタンスを起動」。

名前ssm-rdp-win
AMIMicrosoft Windows Server 2022 Base
インスタンスタイプt3.medium
キーペア1-3 で確認/作成したキーペア

「ネットワーク設定」→「編集」をクリックして以下を設定します。

VPCssm-rdp-vpc
サブネットssm-rdp-subnet-public
パブリック IP の自動割り当て有効
セキュリティグループssm-rdp-sg(既存を選択)

「高度な詳細」→「IAM インスタンスプロファイル」で ec2-ssm-role を選択します。「インスタンスを起動」をクリックします。

── パターン B:プライベートサブネット + VPC エンドポイント版 ──

インターネットに一切出ない完全プライベートな構成です。3 つの Interface VPC エンドポイントで SSM 通信を確保します。本番環境に近いセキュアな構成を学べます。

1-B-1. プライベートサブネットを作成する

VPC →「サブネット」→「サブネットを作成」。

VPC IDssm-rdp-vpc
サブネット名ssm-rdp-subnet-private
アベイラビリティゾーンap-northeast-1a(任意)
IPv4 CIDR10.0.2.0/24

「サブネットを作成」をクリックします。

ℹ️ ルートテーブルは追加不要

プライベートサブネットには IGW へのルートは不要です。VPC のメインルートテーブル(ローカルルートのみ)が自動で関連付けられているので追加設定は不要です。

1-B-2. VPC エンドポイント用セキュリティグループを作成する

VPC →「セキュリティグループ」→「セキュリティグループを作成」。

セキュリティグループ名ssm-rdp-endpoint-sg
説明SG for SSM VPC Endpoints
VPCssm-rdp-vpc
方向タイプポートソース説明
インバウンドHTTPS44310.0.0.0/16(VPC CIDR)Allow HTTPS from VPC
アウトバウンドすべてのトラフィック許可(デフォルトのまま)

「セキュリティグループを作成」をクリックします。

1-B-3. SSM 用 VPC エンドポイントを 3 つ作成する

VPC →「エンドポイント」→「エンドポイントを作成」を 3 回繰り返します。各エンドポイントで タイプ: Interface、VPC: ssm-rdp-vpc、サブネット: ssm-rdp-subnet-private、SG: ssm-rdp-endpoint-sg「プライベート DNS 名を有効にする」をチェック して作成します。

名前サービス名用途
ssm-ep-ssmcom.amazonaws.ap-northeast-1.ssmSSM API 操作
ssm-ep-ssmmessagescom.amazonaws.ap-northeast-1.ssmmessagesSession Manager データチャネル
ssm-ep-ec2messagescom.amazonaws.ap-northeast-1.ec2messagesSSM Agent メッセージング
⚠️ プライベート DNS 名を必ず有効化する

「プライベート DNS 名を有効にする」をチェックしないと、SSM Agent がパブリックの SSM エンドポイント名を解決しようとしてしまいます。また VPC 自体の「DNS ホスト名」と「DNS 解決」が有効になっていることも確認してください(新規 VPC ではデフォルト有効です)。

1-B-4. EC2 用セキュリティグループを作成する

VPC →「セキュリティグループ」→「セキュリティグループを作成」。

セキュリティグループ名ssm-rdp-sg
説明SG for SSM RDP Windows EC2
VPCssm-rdp-vpc
方向タイプポート送信先説明
インバウンドルールなし(3389 は追加しない)
アウトバウンドHTTPS443ssm-rdp-endpoint-sg(SG 指定)Allow HTTPS to SSM endpoints
ℹ️ アウトバウンドを最小権限にする

デフォルトの「すべてのトラフィックを許可」のままでも動作しますが、エンドポイント SG だけに絞ることでより厳格なセキュリティを実現できます。送信先に SG ID を指定するのがポイントです。

1-B-5. Windows Server EC2 を起動する

EC2 →「インスタンスを起動」。

名前ssm-rdp-win
AMIMicrosoft Windows Server 2022 Base
インスタンスタイプt3.medium
キーペア1-3 で確認/作成したキーペア

「ネットワーク設定」→「編集」をクリックして以下を設定します。

VPCssm-rdp-vpc
サブネットssm-rdp-subnet-private
パブリック IP の自動割り当て無効
セキュリティグループssm-rdp-sg(既存を選択)

「高度な詳細」→「IAM インスタンスプロファイル」で ec2-ssm-role を選択します。「インスタンスを起動」をクリックします。

✅ 確認ポイント

EC2 が「実行中」になり、選んだパターンのネットワーク設定が完了していれば次へ進みます。SSM への登録反映には起動後 2〜5 分 かかります。

🔍 ステップ 2 ― SSM 管理状態と管理者パスワードを確認する

EC2 が SSM の「マネージドノード」として認識されているかを確認し、RDP 認証用の Administrator パスワードを取得します。

2-1. Fleet Manager でマネージドノードを確認する

Systems Manager コンソール → 「ノード管理」→「Fleet Manager」(または「フリートマネージャー」)を開きます。一覧に ssm-rdp-win が表示され、「SSM エージェントの ping ステータス」が「オンライン」になっていれば管理化成功です。

⚠️ 一覧に出てこないときのチェック
  • IAM ロール ec2-ssm-role がアタッチされているか
  • SSM エンドポイントへ到達できるか(パブリック IP / NAT / VPC エンドポイント)
  • パターン B の場合、3 つのエンドポイントが available でプライベート DNS 有効か
  • 反映に数分かかる。少し待って再読み込み
2-2. Administrator パスワードを取得する

EC2 コンソール → ssm-rdp-win を選択 → 「接続」→「RDP クライアント」タブ →「パスワードを取得」。Step1 で指定したキーペアの秘密鍵をアップロードして復号し、Administrator のパスワードを控えます(方法 A / B 両方の RDP ログインで使用)。

ℹ️ Fleet Manager からキーペアで直接接続も可能

方法 B(Fleet Manager)では、接続時にキーペアの秘密鍵を指定すれば自動でログインできるため、パスワードの手動入力を省略できます(Step4 で扱います)。

✅ 確認ポイント

Fleet Manager でノードが「オンライン」、かつ Administrator パスワードを取得できていれば準備完了です。

🔌 ステップ 3 ― 方法 A:Session Manager ポートフォワーディングで RDP 接続

ローカル PC の 13389 番ポートを SSM トンネル経由で EC2 の 3389 番へ転送し、普段使いの RDP クライアントで接続します。

3-1. インスタンス ID を確認する

EC2 コンソールで ssm-rdp-win のインスタンス ID(例:i-0123456789abcdef0)を控えます。

3-2. ポートフォワーディングセッションを開始する

ローカル PC のターミナル(PowerShell / bash)で、AWS マネージドドキュメント AWS-StartPortForwardingSession を使ってトンネルを張ります。

aws ssm start-session \ --target i-0123456789abcdef0 \ --document-name AWS-StartPortForwardingSession \ --parameters "portNumber=3389,localPortNumber=13389" \ --region ap-northeast-1

成功すると Starting session ... Port 13389 opened for sessionId ... と表示され、このターミナルは開いたままにします(トンネルが維持されます)。

ℹ️ Windows PowerShell で改行する場合

上記はバックスラッシュ改行(bash 形式)です。PowerShell では 1 行で書くか、行末をバッククォート(`)に置き換えてください。

3-3. RDP クライアントで localhost:13389 へ接続する

別のウィンドウで RDP クライアントを起動し、接続先に localhost:13389(または 127.0.0.1:13389)を指定します。

  • Windows:mstsc /v:localhost:13389 を実行、もしくはリモートデスクトップ接続に localhost:13389 を入力
  • macOS:Microsoft Remote Desktop で PC に localhost:13389 を追加

ユーザー名 Administrator、パスワードは Step2 で取得した値を入力します。

# Windows の例 mstsc /v:localhost:13389
✅ 確認ポイント

Windows のデスクトップ画面が表示されれば、3389 を一切公開せずに SSM トンネル経由で RDP 接続できています 🎉 切断するときは RDP を閉じ、トンネルのターミナルで Ctrl + C を押します。

ℹ️ RemoteHost 版でポートフォワード(応用)

AWS-StartPortForwardingSessionToRemoteHost を使うと、SSM 管理下の踏み台を経由して「その先のホスト(RDS や別サーバー)」へ転送することもできます。多段構成のトンネリングに便利です。

🖥️ ステップ 4 ― 方法 B:Fleet Manager Remote Desktop で RDP 接続

ローカルに CLI も RDP クライアントも入れず、AWS コンソールのブラウザ画面だけで GUI 接続します。

4-1. Fleet Manager から Remote Desktop を起動する

Systems Manager → 「Fleet Manager」→ ssm-rdp-win を選択 → 右上の 「ノードアクション」→「接続」→「リモートデスクトップで接続」(Connect with Remote Desktop)をクリックします。

4-2. 認証方法を選ぶ

認証方法を 2 種類から選べます。

認証方法内容
キーペアStep1 のキーペアの秘密鍵をアップロード → 自動で Administrator ログイン
ユーザー認証情報ユーザー名 Administrator + Step2 で取得したパスワードを入力

「接続」をクリックします。

4-3. ブラウザ内でデスクトップを操作する

ブラウザのタブ内に Windows のデスクトップが表示されます。最大 4 セッションまで同時接続でき、画面上部のツールバーから解像度変更・クリップボード連携・切断などが行えます。

✅ 確認ポイント

ローカルに何もインストールせず、ブラウザだけで Windows デスクトップが操作できれば成功です。使い終わったらツールバーの「終了」または「切断」でセッションを閉じます。

ℹ️ Fleet Manager Remote Desktop の制限
  • 同時接続は最大 4 セッション
  • 大きなファイル転送には不向き(クリップボード経由が中心)
  • 長時間の連続作業よりは、緊急対応・点検などのスポット利用向き

⚖️ ステップ 5 ― 2 方式の比較と運用 Tips

方法 A / B の使い分け

観点A. Session Manager ポートフォワードB. Fleet Manager Remote Desktop
ローカル準備AWS CLI + plugin + RDP クライアントブラウザのみ
操作感普段の mstsc と同じ(フル機能)コンソール内の簡易 GUI
ファイル転送・複数モニタRDP 標準機能をフル活用可制限あり(最大 4 セッション)
端末制約がある環境クライアント導入が必要ブラウザだけで可、踏み台に最適
向くケース日常的に作業する管理者緊急対応・一時点検・制約端末

IAM で RDP 接続を制御する

誰がどのインスタンスへ接続できるかは 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}-*"
    }
  ]
}

接続を監査・ログ記録する

ℹ️ よくあるトラブルシュート
症状主な原因
マネージドノードに出てこないIAM ロール未アタッチ / SSM エンドポイント未到達 / 反映待ち
ポートフォワードが TargetNotConnectedSSM Agent オフライン、ssmmessages エンドポイント不足
RDP で資格情報エラーユーザー名は Administrator、パスワードはキーペアで復号した値か再確認
13389 がすでに使用中localPortNumber を別の空きポートに変更
✅ 確認ポイント

2 方式の違いと、IAM・ログによる統制ポイントを理解できれば本ハンズオンの目標達成です。

🧹 クリーンアップ

⚠️ 課金防止のためクリーンアップを必ず実施してください

Windows EC2 は Linux より時間単価が高く、Interface 型 VPC エンドポイントもエンドポイント単位 + AZ 単位で時間課金されます(3 つ分)。使い終わったら必ず削除してください。

削除手順(依存関係の逆順で行うこと)

  1. 開いているセッションを終了する
    ポートフォワードのターミナルを Ctrl + C、Fleet Manager のセッションを切断
  2. EC2 インスタンスを終了する
    EC2 コンソール → ssm-rdp-win →「インスタンスを終了」→ ステータスが「終了済み」になるまで待つ
  3. VPC エンドポイントを削除する(パターン B を作成した場合)
    VPC →「エンドポイント」→ ssm-ep-ssm / ssm-ep-ssmmessages / ssm-ep-ec2messages の 3 つを選択 →「アクション」→「エンドポイントを削除」→ ステータスが消えるまで待つ
  4. セキュリティグループを削除する
    VPC →「セキュリティグループ」→ ssm-rdp-sg を削除。
    パターン B の場合は続けて ssm-rdp-endpoint-sg も削除(ssm-rdp-sg を先に削除する)
  5. サブネットを削除する
    VPC →「サブネット」→ ssm-rdp-subnet-public(パターン A)または ssm-rdp-subnet-private(パターン B)→「アクション」→「サブネットを削除」
  6. ルートテーブルを削除する(パターン A のみ)
    VPC →「ルートテーブル」→ ssm-rdp-rt-public →「アクション」→「ルートテーブルを削除」
  7. インターネットゲートウェイをデタッチして削除する(パターン A のみ)
    VPC →「インターネットゲートウェイ」→ ssm-rdp-igw を選択 →「アクション」→「VPC からデタッチ」→ デタッチ完了後、再度「アクション」→「インターネットゲートウェイを削除」
  8. VPC を削除する
    VPC →「お使いの VPC」→ ssm-rdp-vpc →「アクション」→「VPC を削除」
  9. IAM ロールを削除する(再利用しない場合)
    IAM →「ロール」→ ec2-ssm-role を削除
  10. キーペアを削除する(このハンズオン専用に作成した場合)
    EC2 →「キーペア」→ 作成したキーペアを削除
✅ クリーンアップ完了の確認
  • EC2 インスタンスが「終了済み」
  • VPC エンドポイント一覧から 3 つが消えた(パターン B の場合)
  • VPC 一覧から ssm-rdp-vpc が消えた
  • Fleet Manager のマネージドノードから対象が消えた

学習のまとめ

習得したスキル実践内容
EC2 の SSM 管理化IAM ロール + エンドポイント到達性でマネージドノード化
Session Manager ポートフォワードAWS-StartPortForwardingSession で 3389 を非公開のまま RDP
Fleet Manager Remote Desktopブラウザだけで GUI リモートデスクトップ接続
プライベート接続3 種の VPC エンドポイントでインターネット非経由の SSM 接続
統制・監査IAM ポリシーでの接続制御・CloudTrail / セッションログ