Windows起動のインスタンスをAWS Systems Managerのノード管理サービスFleet Managerを使ってGUI操作する方法

こんにちは、協栄情報のきおかです。

 

今回は、Windowsを実行しているEC2インスタンスをGUI操作する方法をご紹介します。

 

具体的な方法としては、AWS Systems Managerのノード管理サービスの一つであるFleet Managerを利用します。

 

 

 

背景

WindowsノードにSession Managerで接続すると、CUIがデフォルトになっています。CUI初心者や非技術者用にGUI操作を設定したいです。

 

 

 

WindowsをGUI操作するメリット

AWSのWindowsノードでGUI操作を使うと、直感的な操作でタスクやソフトウェアのインストール・管理を実行できます。
また、マルチタスクやシステムの状態・進行中のタスクの進行状況も視覚的に把握できます。

以上から、例えば初心者や非技術者が利用する際に、相対的にメリットが多そうです。
 

 

 

Fleet Managerを利用するメリット

WindowsノードをGUI操作する方法は、RDP(Remote Desktop Protocol)での接続とFleet Managerでの接続、そしてSession Managerのポートフォワードを利用したRDP接続の3つがあります。今回は前の2つに集中したいと思います。
 
大まかな違いは以下に記載しています。

RDP Fleet Manager
操作性 Windowsのリモートデスクトップ機能 (GUI操作する場合は)ブラウザ
設定 セキュリティグループで3389ポートのインバウンド通信を許可 ①SSM Agentのインストール
②IAMポリシーでAmazonSSMManagedInstanceCoreの許可
危険性 3389ポート露出や認証周りのセキュリティ対策不足によるブルートフォースアタックやパスワードスプレーのリスク AmazonSSMManagedInstanceCore(AWSマネージドポリシー)とSSM Agentに依存するため、直接的な接続リスクやアクセス権限周りのリスクが低い。

 

 

 

参考資料

こちらのAWS公式ドキュメントを参考にして、ハンズオンを作成しています。
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/fleet-rdp.html

 

 

 

下準備

今回の目的は、Windowsを実行しているEC2インスタンスをFleet ManagerでGUI操作することです。

なので構成はシンプルにパブリックサブネットにEC2インスタンスを配置するだけにします。
ちなみにプライベートサブネットに置いてFleet Managerでアクセスすることも可能ですが、VPCエンドポイントを設定する必要があります。今回の目的とは逸れるのでここでは割愛します。

 

 

VPC作成

まずVPCを作成します。

AZ パブリックサブネット プライベートサブネット
1個 1個 0個

 

 

セキュリティグループ作成

次にセキュリティグループ作成ですが、インバウンドの設定は不要です。

アウトバウンドですが、Fleet ManagerひいてはSystems ManagerではHTTPS通信が許可されている必要があります

 

今回はデフォルトのまま、全てのアウトバウンドを許可しておきます。

 

 

IAMの作成とアタッチ

次にIAMコンソール画面からロールを作成します。以下2つのポリシーをアタッチします。

ポリシー名 目的 設定方法
AmazonSSMManagedInstanceCore Systems Managerを使用するため(※)。 AmazonSSMManagedInstanceCoreはAWSマネージドポリシーなので、IAMポリシーの設定画面で検索すれば出てくるはずです。
任意の名前 リモートデスクトップ(GUI操作)を許可するため 下記で設定してください。詳しくはこちらのAWS公式ドキュメントをご参考ください。

 

リモートデスクトップを許可するポリシーの作成とアタッチ

以下はAWS公式ドキュメントが出している、「リモートデスクトップとのさまざまなタイプの対話を許可するためにユーザーまたはロールにアタッチできる IAM ポリシーの例」です。

 

下記コードのうち、SidSSMStartSessionResourceのarnのそれぞれのaccount-idをご自身のアカウントIDに変更してください。コンソール画面の右上にある12ケタの数字です。ハイフンは不要です。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "EC2",
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances",
                "ec2:GetPasswordData"
            ],
            "Resource": "*"
        },
        {
            "Sid": "SSM",
            "Effect": "Allow",
            "Action": [
                "ssm:DescribeInstanceProperties",
                "ssm:GetCommandInvocation",
                "ssm:GetInventorySchema"
            ],
            "Resource": "*"
        },
        {
            "Sid": "TerminateSession",
            "Effect": "Allow",
            "Action": [
                "ssm:TerminateSession"
            ],
            "Resource": "*",
            "Condition": {
                "StringLike": {
                    "ssm:resourceTag/aws:ssmmessages:session-id": [
                        "${aws:userid}"
                    ]
                }
            }
        },
        {
            "Sid": "SSMStartSession",
            "Effect": "Allow",
            "Action": [
                "ssm:StartSession"
            ],
            "Resource": [
                "arn:aws:ec2:*:account-id:instance/*",
                "arn:aws:ssm:*:account-id:managed-instance/*",
                "arn:aws:ssm:*::document/AWS-StartPortForwardingSession"
            ],
            "Condition": {
                "BoolIfExists": {
                    "ssm:SessionDocumentAccessCheck": "true"
                }
            }
        },
        {
            "Sid": "GuiConnect",
            "Effect": "Allow",
            "Action": [
                "ssm-guiconnect:CancelConnection",
                "ssm-guiconnect:GetConnection",
                "ssm-guiconnect:StartConnection"
            ],
            "Resource": "*"
        }
    ]
}

 

 

EC2インスタンス作成

普段通り、EC2インスタンス作成をしてください。その中で特に今回の検証に必要な設定を下記に記載しました。

設定項目 設定値 説明
AMI Microsoft Windows Server 2022 Base (64ビット(x86) 今回の検証対象です。AWS公式ドキュメント曰く、Windows Server 2012 RTM以降を実行しているインスタンスであればリモートデスクトップを使えるようです。
キーペア(ログイン) ご自身のキーペア キーペアがない方はこちらのAWS公式ドキュメントを参考に作成してください。
セキュリティグループ 先ほど作成したセキュリティグループか、もしくはセキュリティグループを作成するでインバウンドRDPを削除。 Fleet Managerはインバウンドのポート開放は必要ありません。
IAM 先ほど作成したロール SSM Agentとリモートデスクトップに必要な許可を付与したIAMロールです。

ここまで設定出来たら作成してください。

 

 

EC2インスタンスにSession Managerで接続

まずはSession ManagerでEC2インスタンスに接続します。作成後に時間をおくとSession Managerで接続できるようになります。
EC2インスタンスに接続

以下の画面で接続をクリックします。
Session Managerで接続
 

 

SSM Agent(AWS Systems Manager Agent)がインストールされているか確認

Fleet Managerを利用するにあたって、3.0.222.0 以降のバージョンのSSM Agentをインストールしている必要があります。

以下のコマンドを実行してください。

& "C:\Program Files\Amazon\SSM\amazon-ssm-agent.exe" -version

私の場合、以下が出力されました。

SSM Agent version: 3.2.985.0

3.0.222.0 以降であれば大丈夫です。
 

 

PSReadLine 2.2.2以上をインストール

PSReadlineとは、接続先のPowershellで接続元のキーボード入力を正しく機能させるために必要なモジュールです。
Windows Server 2022では2.2.2以降が必要みたいです。他の世代のものではどうなのかの検証はまた別の機会に行います。

以下のコマンドで、どのバージョンがインストールされているかを確認します。

ls 'C:\Program Files\WindowsPowerShell\Modules\PSReadline\'

私のインスタンスでの出力結果は以下です。2.0.0でした。

PS C:\> ls 'C:\Program Files\WindowsPowerShell\Modules\PSReadline\'

    Directory: C:\Program Files\WindowsPowerShell\Modules\PSReadline

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          5/8/2021   9:35 AM                2.0.0

 

それでは下記コマンドでPSReadlineモジュールの最新バージョンをインストールします。こちらのコマンドはMicrosoft公式ドキュメントより引用したものです。必要なリポジトリを聞かれたらYesと答えてインストールしてもらいます。

Install-Module -Name PSReadLine -AllowClobber -Force

 

インストール時の画面は以下です。

PS C:\Windows\system32> Install-Module -Name PSReadLine -AllowClobber -Force

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Windows\system32\config\systemprofile\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want
PowerShellGet to install and import the NuGet provider now?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): Y

 

ではインストールできたか確認します。

PS C:\> ls 'C:\Program Files\WindowsPowerShell\Modules\PSReadline\'

    Directory: C:\Program Files\WindowsPowerShell\Modules\PSReadline

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----          5/8/2021   9:35 AM                2.0.0
d-----         5/27/2023   6:12 AM                2.2.6

 

以上で下準備は完了です。上記までの条件を満たした上で、リモートデスクトップ接続を行っていきます。

 

 

 

手順

Fleet Managerで接続する

EC2の接続画面からRDPクライアントを選択して、Fleet Managerを使用して接続するを選択します(※)。

※ちなみにAWS Systems Managerコンソール画面のFleet Managerから対象のノードを選択するところからも接続可能です。今回は省略します。

 

では、Fleet Manager Remote Desktopをクリックしてください。新しいタブでリモートデスクトップ接続する画面が開かれます。
Fleet Managerで接続

 

 

Fleet Managerのキーペア設定

次に、キーペアを選択して、参照をクリックします。

指示に従ってキーペアを設定してください。設定したらConnectを押して接続します。

キーペア設定

 

 

リモートデスクトップ接続後の画面

接続が完了すると下記のような画面になります。
接続後画面

 

 

PowerShellの動作確認

最後に、PowerShellを開いてキーボード入力が認識されるか確認してください。確認できれば今回の検証は完了です。

 

 

 

まとめ

今回はWindowsを実行しているインスタンスに、WindowsをFleet Managerを使ってGUI操作する方法をご紹介しました。

今回の検証では、Fleet Managerを使えば、ポート開放せず安全な接続でWindowsノードをGUI操作できることがわかりました。

 

引き続きSSMは学んでいきたいです。

 

ではまた。
 

 

Last modified: 2023-05-29

Author