パブリック IP アドレスなしで EC2 インスタンスの Windows Server に RDP 接続できる EC2 Instance Connect (EIC) Endpoint を試しました
コーヒーが好きな emi です。
2023/6/13、パブリック IP アドレスなしで SSH や RDP 接続ができる EC2 Instance Connect (EIC) Endpoint が発表されました。
本ブログでは EIC Endpoint を使って手元の端末から Windows Server に RDP 接続を試してみます。
検証
全体構成図
今回検証で作成する全体構成は以下のようになります。
VPC の作成
検証用の VPC を作成します。
詳細は記載しませんが、今回は検証用に 1 AZ で VPC とプライベートサブネットを作成しました。
Internet Gateway もアタッチせず、パブリックサブネットは無い構成です。
セキュリティグループの作成
EC2 Instance Connect (EIC) Endpoint 用セキュリティグループと、EC2 インスタンス(Windows Server)用セキュリティグループの二つを作成します。
EC2 コンソールから、以下のようにセキュリティグループを作成します。
EC2 Instance Connect (EIC) Endpoint 用セキュリティグループ:eic-endpoint-test-endpoint-sg
セキュリティグループ | タイプ | プロトコル | ポート範囲 | 送信先 | 説明 |
---|---|---|---|---|---|
インバウンド | なし | なし | なし | なし | なし |
アウトバウンド | RDP | TCP | 3389 | sg-xxx(EC2 インスタンス(Windows Server)用セキュリティグループ) | to eic-endpoint-test-ec2-win-sg |
EC2 インスタンス(Windows Server)用セキュリティグループ:eic-endpoint-test-ec2-win-sg
セキュリティグループ | タイプ | プロトコル | ポート範囲 | 送信先 | 説明 |
---|---|---|---|---|---|
インバウンド | RDP | TCP | 3389 | sg-xxx(EC2 Instance Connect (EIC) Endpoint 用セキュリティグループ) | from eic-endpoint-test-endpoint-sg |
アウトバウンド | すべてのトラフィック | すべて | すべて | 0.0.0.0/0 |
EC2 Instance Connect (EIC) Endpointの作成
VPC コンソールの Endpoints から「エンドポイントを作成」をクリックし、以下のように VPC エンドポイントを作成します。
項目 | 設定値 | 備考 |
---|---|---|
名前タグ - オプション | eic-endpoint-test | 任意のエンドポイント名 |
サービスカテゴリ | EC2 Instance Connect Endpoint | |
VPC | eic-endpoint-test-vpc | 作成した VPC を設定 |
追加設定 - Preserve Client IP(クライアント IP の保持) | チェックしない | オン(true)の場合、インスタンスのセキュリティグループはクライアント IP アドレスからの受信トラフィックを許可する必要がある |
セキュリティグループ | eic-endpoint-test-endpoint-sg | 作成しておいた EIC Endpoint 用セキュリティグループを設定 |
Subnet | 作成済みのプライベートサブネットを設定 | |
タグ | key:Name、value:eic-endpoint-test | 任意のタグを設定 |
EC2 インスタンス(Windows Server)の作成
EC2 コンソールから、以下のように Windows Server 2022 を作成します。
項目 | 設定値 | 備考 |
---|---|---|
名前 | eic-endpoint-test-ec2-win | 任意の EC2 名 |
AMI | ami-02e06112a2480834a | Microsoft Windows 2022 Datacenter edition [English] 2023/6/15 時点で最新の Windows Server 2022 AMI |
インスタンスタイプ | t3.medium | |
キーペア | 任意のキーペアを作成して設定 | |
サブネット | eic-endpoint-test-subnet-private1-ap-northeast-1a | 作成済みの VPC とプライベートサブネットを設定 |
セキュリティグループ | eic-endpoint-test-ec2-win-sg | 作成しておいた EC2 用セキュリティグループを設定 |
Windows Server への接続にはキーペアが必要になりますので、あわせて作成・設定してください。 IAM ロール(IAM インスタンスプロファイル)の設定は不要です。
接続元の端末で AWS CLI の設定
接続元とする手元の端末で AWS CLI のインストールとプロファイルの設定(IAM ユーザーのアクセスキーの設定)をします。
AWS CLI の最新バージョンをインストールまたは更新します。 を参考に AWS CLI を手元の端末にインストールします。
私の手元の端末は Windows 11 なので、Windows の手順を参考に設定しました。今回インストールした AWS CLI のバージョンは 2.12.0 です。
コマンドプロンプトで以下のようにバージョンを確認できます。
C:\Users\kitani.emi>aws --version aws-cli/2.12.0 Python/3.11.3 Windows/10 exe/AMD64 prompt/off C:\Users\kitani.emi>
AWS CLI 用の IAM ユーザーを作成し、アクセスキーを手元の端末に設定します。
EC2 Instance Connect Endpoint を使用するための IAM 権限は以下のドキュメントを参考にしました。
Allow users to use EC2 Instance Connect Endpoint to connect to instances
ec2-instance-connect:OpenTunnel
アクションを許可してやれば OK です。
今回私が設定した権限は以下になります。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "EC2InstanceConnect", "Action": "ec2-instance-connect:OpenTunnel", "Effect": "Allow", "Resource": "arn:aws:ec2:ap-northeast-1:123456789012:instance-connect-endpoint/eice-0d728cde724d6f675", "Condition": { "NumericEquals": { "ec2-instance-connect:remotePort": "3389" }, "IpAddress": { "ec2-instance-connect:privateIpAddress": "10.0.10.106/32" } } }, { "Sid": "Describe", "Action": [ "ec2:DescribeInstances", "ec2:DescribeInstanceConnectEndpoints" ], "Effect": "Allow", "Resource": "*" } ] }
10.0.10.106/32
は作成した Windows Server のプライベート IP アドレスです。
この権限を付与した IAM ユーザーのアクセスキーを発行し、aws configure で手元の端末に設定しておきます。
Windows Server に RDP 接続する
準備ができたので、作成した Windows Server に RDP 接続します。
① Windows Server のパスワードを発行しておく
RDP を使用した Windows インスタンスへの接続 を参考に、Windows Server のパスワードを発行しておきます。キーペアを使用してパスワードを発行したらメモしておきましょう。
② AWS CLI コマンドで Websocket トンネルを張る
手元の端末で以下構文のコマンドを実行し、Websocket トンネルを張ります。
aws ec2-instance-connect open-tunnel
手元の端末のコマンドプロンプトで実行したコマンド
aws ec2-instance-connect open-tunnel ^ --instance-id i-008b893fce3cdcf5b ^ --remote-port 3389 ^ --local-port 13389
実行結果
C:\Users\kitani.emi>aws ec2-instance-connect open-tunnel ^ More? --instance-id i-008b893fce3cdcf5b ^ More? --remote-port 3389 ^ More? --local-port 13389 Listening for connections on port 13389.
--remote-port
は RDP の 3389 番ポートを指定し、--local-port
には任意のポートを設定します。今回は 13389 を指定しています。
コマンドが成功すると Listening for connections on port 13389.
と表示され、指定されたポート番号(今回は 13389)で他のコンピューターやプロセスからの接続を待機している状態になります。
コマンドプロンプトはこの状態で開いたままにしておきます。
③ Windows Server に RDP 接続する
コマンドプロンプトは Listening for connections on port 13389.
の状態で開いたまま、Windows Server に RDP 接続します。
接続情報は以下です。
項目 | 設定値 |
---|---|
コンピューター | localhost:13389 |
ユーザー名 | Administrator |
パスワードを求められるので、先ほどキーペアを使って複合しておいたパスワードを入力します。
証明書エラーは「はい」をクリックして続行します。
Windows Server 2022 に RDP 接続できました。
終わりに
手元の端末に AWS CLI を導入しアクセスキーを設定する必要があり、SSM のポートフォワード機能に似ている感じがしました。
本アップデートに関して既に多くのブログが公開されていますので、あわせて参照ください。
EC2 Instance Connect エンドポイント登場!パブリックIPのないEC2にSSH・RDPできるようになりました
[アップデート]パブリック IP アドレスなしで、EC2インスタンスにSSH接続できる EC2 Instance Connect Endpointがリリースしました