1
1

プライベートサブネットのWindowsServerにリモートデスクトップ接続

Last updated at Posted at 2024-08-31

今回は久しぶりにAWSについてのお話です。

Problem

VPC内でWindowsServerが稼働中。
当該サーバーにリモートデスクトップ接続したいが、プライベートサブネット内にある上、仮にこれをパブリックサブネット内に移したとしてもインターネット経由の接続は組織のポリシーで禁止。
AWSCLIとIAMユーザー・アクセスキーを使用したリモートデスクトップ接続の手法はあるが、アクセスキーの作成も組織のポリシーで禁止。

Solution

AWS管理コンソールからフリートマネージャー(Fleet Manager)でリモートデスクトップ接続する。

ポイント

  • WindowsServerが起動するEC2インスタンスには AmazonSSMManagedInstanceCore許可ポリシーを含むIAMロールをアタッチ
  • 3つのVPCエンドポイント com.amazonaws.[region].ssmcom.amazonaws.[region].ssmmessagescom.amazonaws.[region].ec2messages を作成
  • EC2インスタンスとVPCエンドポイントの間でHTTPS(ポート443)の通信が可能になるようセキュリティグループを設定
  • インスタンスのキーペアを使いAWS管理コンソールからフリートマネージャー(Fleet Manager)で接続

今回はEC2インスタンスを起動するにあたってWindowsServer2022のAMIを使用しているのでSSM Agentが初期インストールされていますが、OSバージョン/エディションによってはユーザー開発者自身でインストールしなくてはならないものもあるそうです。ご注意ください。

設定の例

まずは手順を説明するための例としてWindowsServerを起動します:
image.png

適当なOSバージョン/エディションを選んで・・・:
image.png

例示用なのでインスタンスタイプは最小で・・・:
image.png

キーペアを作成。リモートデスクトップ接続時に必要になります:
image.png

VPCやサブネットに想定通りのものが選ばれているか確認しつつ(もちろん想定と異なっていたら設定変更)、「からのRDPトラフィックを許可」はOFFに:
image.png

ページ最下部右下の「インスタンスを起動」をクリック。

ここからがリモートデスクトップ接続のための設定手順。まずはWindowsServerのEC2インスタンスにアタッチするロールを作成します:
image.png

ユースケースとして「EC2 Role for AWS Systems Manager」を選択:
image.png

それ以外はデフォルトの内容で、適当な名前をつけて作成:
image.png

作成されるロールは AmazonSSMManagedInstanceCore許可ポリシーを含み、以下の信頼関係を持つものになります(ec2.amazonaws.comサービスによるAssumeRoleが可能なもの):

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "",
            "Effect": "Allow",
            "Principal": {
                "Service": "ec2.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}

作成したIAMロールをEC2インスタンスにアタッチします:
image.png

続いて、VPCエンドポイントを作成していきます:

image.png

3つのエンドポイント ssmssmmessagesec2messagesを作成します:
image.png

もちろんEC2インスタンスと同じサブネットに作成します:
image.png

セキュリティグループについては今回は設定の手間を少なくするためにEC2インスタンス用に自動で作成されたものを流用することに・・・:
image.png

セキュリティグループのインバウンドルールに同じグループ内のIPアドレスからの接続を許可するルールを追加します。今回はEC2インスタンスとVPCエンドポイントを1つのグループに入れてしまっているのでソースには以下のように同じグループのIDを指定:
image.png

AWSの記事(前掲)にはEC2インスタンスにアタッチするセキュリティグループの設定に関して「[ソース] で、VPC CIDR を選択します」とありますが、何もそこまで広範囲で通信を許可する必要はないはず・・・ということで上記のような設定にしています。

SystemsManagerのメニューで「フリートマネージャー」をクリック。表示された「マネージドノード」の一覧にはセキュリティグループの設定後しばらく(数十秒から数分)するとEC2インスタンスが表示されるはずです:
image.png

フリートマネージャーの「ノードのアクション」→「接続」→「リモートデスクトップで接続」をクリック:
image.png

キーペアを指定してログインしてみます:
image.png

ここではキーペアを指定してログインをしていますが、「ユーザー認証情報」(ようするにユーザー名とパスワード)を使用してログインすることもできます。認証情報を使う場合はそれをまず入手してくる必要があり・・・ここではより簡単なキーペアを利用する方法をとりました。

あとは待っているとリモートデスクトップセッションが開始します:
image.png

VPCエンドポイントやセキュリティグループの設定が終わった後、フリートマネージャーから接続が可能になるまでに数十秒から数分の時間差があるようです。少なくとも私の場合はそうでした。
フロートマネージャーの「マネージドノード」一覧にEC2インスタンスが表示されなかったり、「ノードのアクション」からリモートデスクトップ接続を試みてもタイムアウトエラーになったり・・・
そうした時は設定内容はチェックしつつも、あれこれコロコロ設定変更して試すよりも「まずは数分待ってからリトライしてみる」というが良いかもしれません。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1