書くこと
パブリックサブネットに存在するWindowsのEC2インスタンスに、RDP接続するときの方法を記載します。
ここでは3つのRDP接続方法を取り上げて、それぞれについて見ていきたいと思います。
以下の方法があると考えます。
- Systems Managerのフリートマネージャー(Fleet Manager)でRDP接続する。(新しいやり方)
- Systems ManagerでポートフォワードしてRDPクライアントで接続する。(ちょっと古いやり方)
3389
ポートを開放してRDPクライアントで接続する。(古いやり方)
❶が一番セキュアで一番簡単な方法となります。なぜなら、WindowsにRDPポート(3389
)を開放せずに、AWSコンソールからブラウザですぐにアクセスできるからです。
❷はフリートマネージャーほど簡単ではありませんが、Windowsに3389
ポートを開放しなくてよいことは同じです。しかし、ポートフォワードを実行する手間があります。また、アクセスはRDPクライアントを使用します。
❸はWindowsに3389
ポートの穴を開ける必要があります。その上でRDPクライアントで接続する、一番古いやり方となります。AWSの過去を見ることも大切だと感じたので、今回書いてみることにしました。
フリートマネージャー
フリートマネージャーでの接続の仕方から見ていきます。
構成図
ユーザーはWEBブラウザでアクセスし、Systems Manager経由でEC2にアクセスします。
インスタンスプロファイル
フリートマネージャーはSystems Managerの機能の一部なので、EC2がSystems Managerを使用できる必要があります。
そのため、AmazonSSMManagedInstanceCore
のポリシーがアタッチされたIAMロールを、インスタンスプロファイルとしてEC2に付与しておく必要があります。
ここでは、「EC2InstanceProfile」という名前でロールを作成しました。
EC2作成
作成したインスタンスプロファイルをアタッチして、WindowsのEC2インスタンスを作成しました。
以下はセキュリティグループの画面ですが、インバウンドでは何も許可をしていません。
アウトバウンドは443ポートのみ全宛先に許可しています。これは、Systems Managerに対して443通信をするからです。
接続してみる
作成したEC2にチェックを入れて、「接続」ボタンをクリックします。
「RDPクライアント」タブをクリックして、「Fleet Managerを使用して接続する」にチェックを入れます。
「Fleet Manager Remote Desktop」ボタンをクリックします。
今回はキーペアで接続します。(ユーザー名とパスワードでも接続できます。パスワード取得にはキーペアが必要になります)
EC2を作成したときに作ったキーペアを指定します。
「Connect」ボタンを押します。
接続することができました。
Systems Managerポートフォワード
次はSystems Managerのポートフォワードを使用して、WindowsのEC2にRDP接続してみたいと思います。
構成図
ユーザーはRDPクライアントでlocalhost:任意のポート
を指定し、接続します。ポートフォワードされてEC2に接続されます。
前提
Systems Managerでポートフォワードする際も、AmazonSSMManagedInstanceCore
ポリシーがアタッチされたEC2インスタンスプロファイルが必要です。
また、セキュリティグループのルールは変更していません。インバウンドでは何も許可しておらず、443
のアウトバウンドのみ全宛先に許可しています。
AWS CLIとSession Managerプラグインのインストール
ポートフォワードをするために、ローカルの作業端末にAWS CLIとSession Managerプラグインが必要になります。
以下を参照してインストールしていただければと思います。
AWS CLI の最新バージョンをインストールまたは更新します。
AWS CLI 用の Session Manager プラグインをインストールする
ポートフォワード実行
以下のコマンドでは、ローカルの3389
ポートをEC2の3389
ポートにフォワーディングしています。
% aws ssm start-session --target i-XXXXXXXXXXXXXXXXX \
--document-name AWS-StartPortForwardingSession \
--parameters portNumber=3389,localPortNumber=3389
Starting session with SessionId: Atsushi-090933956fa2debed
Port 3389 opened for sessionId Atsushi-090933956fa2debed.
Waiting for connections...
Administratorのパスワード取得
接続にはパスワードが必要になるため、AWSコンソールで取得します。
先ほどフリートマネージャーで接続を行ったときの画面の、「RDPクライアント」タブをクリックします。
「パスワードを取得」ボタンをクリックします。
キーペアをアップロードして、「パスワードを復号化」をクリックします。
パスワードが復号されて表示されるので、メモ帳などにコピーします。
接続してみる
Macを使っているので、ここでは「Microsoft Remote Desktop」というアプリで接続します。
接続先をlocalhost
として作成します。(localhost:3389
がEC2インスタンスの3389
ポートにフォワードされるため)
- Microsoft Remote Desktopアプリはデフォルトで
3389
ポートを使用します。
接続先を追加して接続を試みると、UsernameとPasswordを聞かれます。
UsernameはAdministratorで、Passwordは先ほど復号したパスワードです。
接続できました。
ポートフォワードを行っているコンソールを見てみると、「Connection accepted for session…」という表示が現れています。
% aws ssm start-session --target i-XXXXXXXXXXXXXXXXX \
--document-name AWS-StartPortForwardingSession \
--parameters portNumber=3389,localPortNumber=3389
Starting session with SessionId: Atsushi-090933956fa2debed
Port 3389 opened for sessionId Atsushi-090933956fa2debed.
Waiting for connections...
Connection accepted for session [Atsushi-090933956fa2debed]
3389ポート開放してRDP接続
最後は、セキュリティグループに3389
ポートを開放してRDP接続するやり方です。
構成図
Systems Managerがいなくなり、ユーザーからEC2に直接アクセスするので、EC2のセキュリティグループに3389
ポートを開ける必要があります。
セキュリティグループに3389
を許可
EC2インスタンスに紐付いているセキュリティグループのルールを変更します。
インバウンドに3389
ポートを許可しました。
また、アウトバウンドの443
ポート許可は削除しました。(Systems Managerを使用しないので必要なくなった)
接続してみる
EC2インスタンスに接続する画面から、同じく「RDPクライアント」タブを選択します。
そして、「リモートデスクトップファイルのダウンロード」をクリックします。
ダウンロードしたRDPファイルをダブルクリックします。
UsernameとPasswordが聞かれます。
ポートフォワードのときに確認した、Administratorのパスワードを入力します。
接続できました。
まとめ
簡単にまとめてみます。
- フリートマネージャーの場合
- セキュリティグループのインバウンドに
3389
ポートを開放しなくて良い。 - セキュリティグループのアウトバウンドに
443
ポートの開放は必要。 - RDPクライアントも不要。ブラウザでアクセスできる。
- セキュリティグループのインバウンドに
- Systems Managerのポートフォワード
- セキュリティグループのインバウンドに
3389
ポートを開放しなくて良い。 - セキュリティグループのアウトバウンドに
443
ポートの開放は必要。
- RDPクライアントが必要。
- セキュリティグループのインバウンドに
3389
ポートを開放してRDP接続- セキュリティグループのインバウンドに
3389
ポートの開放が必要。
- セキュリティグループのアウトバウンドにポート開放は不要。
- RDPクライアントが必要。
- セキュリティグループのインバウンドに
フリートマネージャーかSystems Managerのポートフォワードの2択なのではないかと個人的には感じました。
要望が無いならフリートマネージャー。ブラウザでのアクセスに抵抗があるならポートフォワードかと思いました。
コメント