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

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

Systems Manager Session Manager Fleet Manager Windows Server VPC エンドポイント マネコン操作 所要時間 75〜90 分 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 エンドポイント経由のプライベート接続
所要時間75〜90 分
難易度★★★☆☆(中級者向け)
前提知識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 つが必要です。

✅ 前提条件

⚠️ リージョン確認

このハンズオンは 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 を起動します。ネットワークは パターン A(簡易)パターン B(VPC エンドポイント)のいずれか、または両方を試せます。

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

IAM → ロール →「ロールを作成」→ 信頼されたエンティティ「EC2」→ ポリシー AmazonSSMManagedInstanceCore をアタッチ → ロール名 ec2-ssm-role で作成します。

ℹ️ これが SSM 管理化の必須条件

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

1-2. Windows Server EC2 を起動する

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

名前ssm-rdp-win
AMIMicrosoft Windows Server 2022 Base
インスタンスタイプt3.medium
キーペア既存のキーペア(管理者パスワード復号に使用)
IAM インスタンスプロファイルec2-ssm-role

キーペアは Step2 で Administrator パスワードを取得するために使用します(RDP の認証に使う)。

1-3. 【重要】セキュリティグループのインバウンド 3389 を開けない

このハンズオンの肝です。セキュリティグループのインバウンドルールは空(または既存のまま 3389 を追加しない)にします。アウトバウンドはデフォルトの「すべて許可」のままで構いません。

方向設定
インバウンドRDP(3389) を追加しない(空でよい)
アウトバウンドすべて許可(SSM への HTTPS 443 が通ればよい)

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

1-A. パブリックサブネットに配置する
  • サブネット:パブリックサブネット(IGW へのルートがある)
  • パブリック IP の自動割り当て:有効(SSM パブリックエンドポイントへ到達するため)

この構成なら VPC エンドポイントは不要です。EC2 はパブリック IP を持ちますが、インバウンド 3389 を開けないので RDP はインターネットから直接到達できません。SSM トンネル経由でのみ接続します。

⚠️ NAT もパブリック IP も無い場合は繋がらない

プライベートサブネット + NAT なし + VPC エンドポイントなしの構成では SSM エンドポイントに到達できず「マネージドノード」に出てきません。その場合はパターン B(VPC エンドポイント)が必要です。

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

1-B-1. EC2 をプライベートサブネットに配置する
  • サブネット:プライベートサブネット(IGW へのルートなし)
  • パブリック IP:無効
1-B-2. SSM 用 VPC エンドポイントを 3 つ作成する

VPC →「エンドポイント」→「エンドポイントを作成」を 3 回繰り返し、以下を作成します。いずれも タイプ: Interface、EC2 と同じ VPC・プライベートサブネットを選択、プライベート DNS 名を有効化します。

サービス名用途
com.amazonaws.ap-northeast-1.ssmSSM API
com.amazonaws.ap-northeast-1.ssmmessagesSession Manager データチャネル
com.amazonaws.ap-northeast-1.ec2messagesSSM Agent メッセージング
1-B-3. エンドポイント用セキュリティグループを設定する

VPC エンドポイントにアタッチするセキュリティグループのインバウンドで、EC2 のセキュリティグループ(または VPC CIDR)からの HTTPS(443) を許可します。これが無いと SSM Agent がエンドポイントへ接続できません。

タイプポートソース
HTTPS443EC2 の SG / VPC CIDR
✅ 確認ポイント

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

🔍 ステップ 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 / ssmmessages / ec2messages の 3 つを削除
  4. IAM ロールを削除(再利用しない場合)
    IAM → ec2-ssm-role を削除
  5. セキュリティグループ・キーペアを削除(任意・他で使わない場合)
✅ クリーンアップ完了の確認
  • EC2 インスタンスが「終了済み」
  • VPC エンドポイント一覧が空(パターン B の場合)
  • Fleet Manager のマネージドノードから対象が消えた

学習のまとめ

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