1. はじめに
- AWSにWindows Serverインスタンスを立てて、外部から安全にアクセスしたいという案件あり。
- そういう時に用いる Session Manager に関して、以前Linuxインスタンスへのアクセスについてはまとめたことがあった(【初心者】AWS Systems Manager Session Manager を使ってみる)。
- 類似機能のInstance Connectも含めて、改めてWindows Serverインスタンスへリモートアクセスする場合どうしたらよいのかの手順を確認する。
2. やったこと
- VPC内(Private Subnet)に、Windows Server 2022インスタンスを作成する。
- 手元のPC(Win11)から、Instance Connect経由、Session Manager経由で接続可能なことを確認する。
- Instance ConnectとSession Managerで何が異なるのかを自分なりにまとめる。
- 最近(2025/4頃~?)、「ジャストインタイムノードアクセス」という、より高機能な接続オプションが提供開始されているが、まだ大阪リージョンでは使えない(2026/2時点)こともあり、今回は検証していない。
3. 構成図
4. ざっくり比較
4.1 比較表
細かいことは書ききれないので、主要な差分をメモする。
| 項目 | Instance Connect | Session Manager |
|---|---|---|
| 接続方法 | PCのRDPクライアント | 1) PCのRDPクライアント 2) FleetManagerのRDP接続 3) FleetManagerのターミナル接続 |
| クライアント側に必要なもの | AWS CLI、PCのRDPクライアント | 1) AWS CLI、Session Manager Plugin、RDPクライアント 2) ブラウザのみ 3) ブラウザのみ |
| インスタンス側に必要なもの | なし | SSM Agent、ロール(AmazonSSMManagedInstanceCoreなど) |
| インスタンスで許可する通信 | エンドポイントからの3389/tcp | エンドポイントへの443/tcp |
| 必要なエンドポイント | インスタンスコネクトエンドポイント ※マルチAZ不可 | ssm用エンドポイントx3、S3エンドポイント/CloudWatch Logsエンドポイント(ログ出力する場合) ※マルチAZ可 |
| ログ | トンネル接続のログ(ユーザ名、時刻など) | 1),2) セッション接続のログ(ユーザ名、時刻など) 3):セッション接続のログ(ユーザ名、時刻など)に加え、S3/CloudWatch Logs出力を有効にしている場合、コマンド実行結果 |
4.2 ユースケース毎の使い分け(自分の理解)
全てのパターンではないが、「こんな要件だったらどれがよいか?」を考えてみる。
- 一時的な開発用などで、なるべくシンプルにRDP接続したい ⇒ Instance Connect
- クライアントPCに追加ソフトを入れたくない(社用PCなど)⇒ Session Manager のパターン2) Fleet ManagerでのRDP接続
- RDPではなくCLI(PowerShell)だけ使えればよいので、操作ログ(実行したコマンド)を全てログ出力したい ⇒ Session Manager のパターン3) Fleet Managerでのターミナル接続
- RDPもしたいし、操作ログ(実行したコマンド)も取りたい ⇒ 今回の検証範囲では実現不可なので、別途インスタンス内でログを取得したり、新機能の「ジャストインタイムノードアクセス」に紐づく操作録画機能を使ったりする必要あり
5. 手順
5.1 事前準備
VPC作成
- 構成図のVPC(Public Subnet x2, Private Subnet x2)を作成する(今回はPublic Subnetは特に使用しない)。
- NAT Gatewayは作成しないため、Private Subnetからのインターネット接続は不可。
Windows Server 2022の作成
- 接続テスト先として、Private Subnet内にWindows Server 2022 インスタンスを作成する。
- AMI: Windows_Server-2022-Japanese-Full-Base-2025.12.10 (日本語版のAMIは、AMI検索時、「Japanese」で検索すると出てくる)
- Amazonが提供するAMIのため、SSM Agent(Session Managerの利用時に必要)はプリインストールされている。
5.2 Instance Connect による接続
接続に必要な設定
- VPC内にインスタンスコネクトエンドポイントを作成し、Outbound(インスタンス向け)のRDP(3389/tcp)が許可されたセキュリティグループを設定する。
- Window Server のインスタンスには、インスタンスエンドポイントからのRDP(3389/tcp)を許可する。
- PC には AWS CLI をインストールする。
接続手順
- PCでトンネルを開始する。
C:\Users\user1>aws login ※アクセスキーの設定などでも可
C:\Users\user1>aws ec2-instance-connect open-tunnel --instance-id [インスタンスID] --remote-port 3389 --local-port 13389 --region ap-northeast-3
- PCのRDPクライアントで、localhost:13389を指定して接続し、OSのID/passwordを入力してログオンする。
- PCのRDPクライアントからログオンできる。
ログ
- トンネルを開始したログが、CloudTrailに記録される。
- トンネルを開始したIAMユーザ、時刻、SRCIPなどが記録される。トンネル確立後に実際にRDP接続をしたかどうか、VPC内に複数のサーバがある場合にどのサーバにRDPしたのか、サーバ内でどういう操作したのかなどは分からない。
5.3 Session Manager による接続: 1) PCのRDPクライアント
Instance Connectと同様、初めにトンネル的なもの(セッション)を確立した上で、PCのRDPクライアントを用いてRDP接続する。
接続に必要な設定
- VPC内にVPCエンドポイント (ssm, ssmmessages, ec2messages) を作成し、Inbound(インスタンスから)の443/tcpが許可されたセキュリティグループを設定する。
- 今回はS3/CloudWatch Logsへのログ出力もテストするため、S3/CloudWatch Logsのインターフェースエンドポイントも追加で作成する。「プライベートDNS名を有効化」にチェックする。
- 上記のVPCエンドポイントについては、NATGW経由などでのインターネット接続があればそれでも代替可。
- インスタンスにSession Manager Agentがない場合はインストールする。(Amazonが提供するAMIであれば基本プリインストールされているため今回は対応不要)
- インスタンスにSession Managerを使用するためのロールを付与する。ロールには許可ポリシー「AmazonSSMManagedInstanceCore」を含める。今回はさらにログ出力のため、CloudWatch 及び S3 への権限を追加する(今回は検証のためCloudWatchFullAccess、S3FullAccessを付与)。
- PC には AWS CLI と、Session Manager Plugin をインストールする。
- セッションマネージャーの設定画面でログに関する設定を追加することで、CloudWatchログ記録と、S3ログ記録を有効にすることができる。
接続手順
- PCでセッションを開始する。
C:\Users\user1>aws login ※アクセスキーの設定などでも可
C:\Users\user1>aws ssm start-session --target [インスタンスID] --document-name AWS-StartPortForwardingSession --parameters portNumber="3389",localPortNumber="13389" --region ap-northeast-3
- PCのRDPクライアントで、localhost:13389を指定して接続し、OSのID/passwordを入力してログオンする(画面はInstance Connectの場合と同じなので省略)。
ログ
- マネコンの「セッションマネージャー」-「セッション履歴」で、接続したIAMユーザ、接続先インスタンス、開始・終了時刻を確認することができる。(以下の画面は1回の接続の1行のログ。ログが横に長い)
5.4 Session Manager による接続: 2) Fleet ManagerのRDP接続
2)Fleet Manager 内のRDP接続では、ブラウザ(マネコン)の中でRDPを開いて接続する。1) PCのRDPクライアント の場合と異なり、PC側にAWS CLIやSession Manager Pluginは不要だが、ブラウザ内での操作となるため若干使いにくい。
接続手順
- Session Manager -> フリートマネージャー -> マネージドノード にて、接続したいインスタンスを選択し、ノードアクション -> 接続 -> リモートデスクトップで接続
- ユーザ名/パスワード、もしくはキーペアを用いて認証する。
- マネコンの中でRDPを行うことができる。
ログ
-
- PCのRDPクライアント からの接続の場合同様、マネコンの「セッションマネージャー」-「セッション履歴」で、接続したIAMユーザ、接続先インスタンス、開始・終了時刻を確認することができる。(以下の画面は1回の接続の1行のログ。ログが横に長い)
- CloudTrailでも同様のログを確認可能。
- フリートマネージャー - リモートデスクトップ - 接続履歴 でも、対象のインスタンスへの接続履歴の確認が可能。
5.5 Session Manager による接続: 3) ターミナル接続
Session Managerの機能として、RDPではなく、ターミナル接続(PowerShellだけが使える)を行うことが可能。その場合はGUIが使えず不便だが、実行したコマンドを記録できるメリットがある。
接続手順
- Session Manager -> フリートマネージャー -> マネージドノード にて、接続したいインスタンスを選択し、ノードアクション -> 接続 -> ターミナルセッションで接続
- ID/パスワードなどの入力なしに、PowerShellの画面を開くことができる。
ログ
- 1 ) PCのRDPクライアント、2) Fleet ManagerのRDP接続 の接続の場合同様、マネコンの「セッションマネージャー」-「セッション履歴」で、接続したIAMユーザ、接続先インスタンス、開始・終了時刻を確認することができる。(以下の画面は1回の接続のログ。ログが横に長い)
- CloudTrailにもRDPの時同様のログが出力される。
-
ターミナル接続の場合、事前にCloudWatch Logs/S3へのログ出力を有効な設定にしている場合、実行したコマンドがログ記録される。
-
CloudWatch Logs 出力のイメージ(pwdコマンドが記録されている部分)
- S3出力のイメージ (JSONではなくてテキストなので、人の目にはやさしい)
**********************
Windows PowerShell トランスクリプト開始
開始時刻: 20260206084308
ユーザー名: WORKGROUP\SYSTEM
RunAs ユーザー: WORKGROUP\SYSTEM
構成名:
コンピューター: EC2AMAZ-79HQQUB (Microsoft Windows NT 10.0.20348.0)
ホスト アプリケーション: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe
プロセス ID: 5912
PSVersion: 5.1.20348.4294
PSEdition: Desktop
PSCompatibleVersions: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.20348.4294
BuildVersion: 10.0.20348.4294
CLRVersion: 4.0.30319.42000
WSManStackVersion: 3.0
PSRemotingProtocolVersion: 2.3
SerializationVersion: 1.1.0.1
**********************
トランスクリプトが開始されました。出力ファイル: C:\ProgramData\Amazon\SSM\InstanceData\i-xxxxxxxxxxxxxxxx\session\orchestration\user-6cj2s97dh7iqbxn2veka73jei4\Standard_Stream\logTempFile.log
PS C:\Windows\system32> &'C:\Program Files\Amazon\SSM\ssm-session-logger.exe' C:\ProgramData\Amazon\SSM\InstanceData\i-xxxxxxxxxxxxxxxx\session\orchestration\user-6cj2s97dh7iqbxn2veka73jei4\Standard_Stream\ipcTempFile.log true
Initializing new seelog logger
New Seelog Logger Creation Complete
2026-02-06 08:43:13.4741 INFO [ssm-session-logger] ssm-session-logger - v3.3.3185.0
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
新�機�能�と�改�善�の�た�め�に�最�新�の� PowerShell を�イ�ン�ス�ト�ー�ル�し�て�く�だ�さ�い�!https://aka.ms/PSWindows
PS C:\Windows\system32> pwd
Path
----
C:\Windows\system32
PS C:\Windows\system32> cd c:\
PS C:\>
PS C:\Windows\system32> exit
**********************
Windows PowerShell トランスクリプト終了
終了時刻: 20260206084413
**********************
6. 所感
- 検証パターンが意外と多くなり、記事構成が複雑になってしまった。
- 今回の検証範囲(従来のInstace Connect / Session Manager)の場合、RDPで接続した場合に、RDPセッションの中でどういう操作をしたのかの記録は取れない。
- そこまでの対応が必要な場合、こちらの記事「AWS Systems Managerのリモートデスクトップ接続の内容を録画してみた」のように、「ジャストインタイムノードアクセス」を使えば可能になるようなので、こちらも検証してみたい。





















