WindowsインスタンスにSSM Session Manager経由でアクセスする構成
WindowsインスタンスにSSM Session Manager経由でアクセスする構成を確認します。
Session Manager は完全マネージド型の AWS Systems Manager 機能です。ブラウザベースのインタラクティブなワンクリックシェルまたは AWS CLI を介して Amazon EC2 インスタンスを管理できます。Session Manager を使用して、アカウント内のインスタンスとのセッションを開始できます。セッションの開始後、他の接続タイプと同様、bash コマンドを実行できます。
Session Manager を使用した Linux インスタンスへの接続
SSM Session Managerを使用したインスタンスへのアクセスは、一般的なリモートデスクトップ接続でのアクセスと比べてさまざまなメリットがあります。特に注目すべきポイントは、リモートアクセス用のポート開放が不要になる点と、踏み台サーバも不要になる点です。
インスタンスでインバウンド SSH ポートとリモート PowerShell ポートを開いたままにすると、エンティティが許可されていないコマンドや、悪意のあるコマンドをインスタンス上で実行するリスクが大幅に増加します。Session Manager は、これらの着信ポートを閉じることにより、SSH キーと証明書、踏み台ホスト、およびジャンプボックスの管理からユーザーを解放して、セキュリティ体制を向上させるのに役立ちます。
AWS Systems Manager Session Manager
今回は、一般的なリモートデスクトップ接続でのアクセスと比較しつつ確認します。具体的には以下の2パータンを構築します。
- リモートデスクトップ接続でアクセス ※ ①パターン
- SSM Session Manager経由でアクセス ※ ②パターン
SSM Session Managerでのアクセスの場合、さらに2パターンに分かれます。
- PowerShellでのCLIアクセス
- SSM Session Managerでトンネリングアクセスしてリモートデスクトップ接続でアクセス
なお本ページはWindowsインスタンスを対象とした内容ですが、LinuxインスタンスにSession Manager経由でアクセスする方法については、以下のページをご確認ください。
構築する環境

環境構築用のCloudFormationテンプレートファイル
上記の構成をCloudFormationで構築します。
以下のURLにCloudFormationテンプレートを配置します。
テンプレートファイルのポイント解説
構成的には、ほとんどLinux版と同様ですので、そちらをご確認ください。
ただしインスタンス①が許可するインバウンド通信は、SSHではなくRDP(3389/tcp)である点だけが異なります。
なお今回作成するインスタンスはWindows Server 2019ベースですが、デフォルトでSSMエージェントがインストールされているため、特別な対応は不要です。
AWS Systems Manager Agent (SSM Agent) は、以下の Amazon Machine Images (AMIs) にデフォルトでプレインストールされています。
2016 年 11 月以降に公開された Windows Server 2008-2012 R2 AMIs
Windows Server 2016 および 2019
SSM Agent の EC2 インスタンスで Windows Server をインストールして設定する
環境構築
CloudFormationを使用して、本環境を構築し、実際の挙動を確認します。
CloudFormationスタックを作成し、スタック内のリソースを確認する
CloudFormationスタックを作成します。
スタックの作成および各スタックの確認方法については、以下のページをご確認ください。
各スタックのリソースを確認した結果、今回作成された主要リソースの情報は以下の通りです。
- インスタンス1のID:i-02c150dd6e9b0a456
- インスタンス2のID:i-06440942b19c01cc6
追加でインスタンス1の詳細を確認します。
$ aws ec2 describe-instances \
--instance-ids i-02c150dd6e9b0a456
Code language: Bash (bash)
インスタンス①のパブリックDNS名を確認したところ、今回は「ec2-54-248-20-39.ap-northeast-1.compute.amazonaws.com」でした。
RDP接続のために管理者アカウントのパスワードを確認する
リモートデスクトップ接続を行う場合、管理者アカウントに設定された初期パスワードを確認する必要があります。
管理者のアカウント名は、言語によりますが、通常はAdministratorです。
管理者アカウントの名前は、オペレーティングシステムで使用する言語によって異なります。たとえば、英語の場合は Administrator、フランス語の場合は Administrateur、ポルトガル語の場合は Administrador となります。
Windows インスタンスに接続する
Administratorのパスワードを確認する方法は2通りあります。順番に確認します。
AWS Management ConsoleからRDPパスワードを確認する
AWS Management Consoleにログイン後、対象のEC2インスタンスのページにアクセスします。

上部の「Connect(接続)」を押下します。

「RDP client(RDP クライアント)」タブを選択後、「Get password(パスワードを取得)」を押下します。

インスタンスに関連付けたキーペアのプライベートキーをテキストエリアに貼り付け、「Decrypt Password(パスワードを復号化)」を押下します。

「Password(パスワード)」の項目に表記されている文字列がAdministratorのパスワードです。
AWS CLIからRDPパスワードを確認する
インスタンスIDとキーペアのプライベートキーを指定することで、パスワードを取得することができます。
$ aws ec2 get-password-data \
--instance-id i-02c150dd6e9b0a456 \
--priv-launch-key MyKeyPair.pem
{
"InstanceId": "i-02c150dd6e9b0a456",
"PasswordData": "XXXXXXXXXXXXXXXXXXXXXX",
"Timestamp": "2021-10-27T07:46:31+00:00"
}
Code language: Bash (bash)
「PasswordData」の値がAdministratorのパスワードです。
挙動確認1:リモートデスクトップ接続でインスタンスにアクセスする
準備が整いましたので、実際に挙動を確認します。
まずリモートデスクトップ接続でインスタンスにアクセスする方法を確認します。
リモートデスクトップクライアントを起動し、アクセスを開始します。

上図はMacOS用のWindows Remote Desktopアプリの画像です。新規でアクセス先を追加し、「PC name」の項目に、アクセス先のインスタンスのパブリックDNS名か、IPアドレスを入力後、「Add」を押下します。
「Username」に「Administrator」を、「Password」に先ほど確認したパスワードを入力し、「Continue」を押下します。

しばらく待つと、デスクトップ画面が表示されます。

リモートデスクトップ接続で、正常にインスタンスにアクセスすることができました。
挙動確認2:SSM Session Managerを使用してPowerShell接続でインスタンスにアクセスする
次にSSM Session Managerを使用してインスタンスにアクセスします。
先述の通り、SSM Session Managerを使用したアクセスには2パターンありますが、最初にPowerShell接続を確認します。
AWS CLIを使用して、インスタンスにアクセスします。
$ aws ssm start-session \
--target i-06440942b19c01cc6
Starting session with SessionId: root-07a25a576dc266a07
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.
PS C:\Windows\system32>
Code language: Bash (bash)
PowerShellのインタプリタモードが表示されました。PowerShellコマンドを使用してインスタンスを操作することができます。
このようにSSM Session Managerを使用することで、PowerShell接続でインスタンスにアクセスすることができました。
SSM Session Managerを使用してトンネリングアクセスしてモートデスクトップ接続でアクセスする
最後にSSM Session Managerのもう1つのアクセス方法である、トンネリングアクセスでモートデスクトップ接続によって、インスタンスにアクセスする方法を確認します。
まずクライアント側で以下のコマンドを実行し、インスタンスに対してトンネリングアクセスを行います。
% aws ssm start-session \
--target i-06440942b19c01cc6 \
--document-name AWS-StartPortForwardingSession \
--parameters "portNumber=3389, localPortNumber=13389"
Starting session with SessionId: root-07afa4c0f225a1c3a
Port 13389 opened for sessionId root-07afa4c0f225a1c3a.
Waiting for connections...
Code language: Bash (bash)
コマンドの内容ですが、クライアント端末の13389ポートでリッスンし、SSM Session Managerの3389ポートにフォワーディングするというものです。
準備が整いましたら、クライアントのリモートデスクトップクライアントを起動します。

流れは先ほどと同じですが、「PC name」の値は「localhost:13389」とします。
インスタンスのユーザー名とパスワードを入力後、しばらく待つとインスタンスのデスクトップ画面が表示されます。

このようにSSM Session Managerでも、トンネリングアクセスの設定を行うことで、リモートデスクトップ接続でインスタンスにアクセスすることができました。
まとめ
WindowsタイプのEC2インスタンスへのアクセス方法を確認しました。
アクセス方法は2種類に大別され、リモートデスクトップ接続か、SSM Session Managerを使用する方法があります。
また後者はさらに2種類あり、PowerShell接続と、トンネリングアクセスでのリモートデスクトップ接続があります。