yuj1osm's tech blog

クラウドやセキュリティなど

Session Managerのポートフォワーディング機能によるRDP接続

前回、「Fleet Managerを使用したEC2接続」をご紹介しましたが、Fleet Managerで見る画面は解像度はあまり高くなく、Windows上で細かい作業をしたいときには向きません。
もしRDP接続ができれば、解像度の調整もできるため作業しやすくなります。

そこで、Session Managerのポートフォワーディング機能を使うことで、ローカル端末の指定ポートで受けた通信をリモート端末のポートにフォワーディング(転送)させることが可能になります。
今回はこの、Session Managerのポートフォワーディング機能によるRDP接続の方法をご紹介します。

以下にイメージ図を掲載します。

AWSの設定

Session Managerでセッションを張るために、IAMユーザに権限を付与します。
今回は、IAMユーザ「testuser01」をIAMグループ「SessionAllowGroup」に所属させ、このグループにポリシーを付与します。

必要なポリシーは以下です。
リソースは要件に応じて制限すると良いでしょう。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Action": [
                "ssm:ResumeSession",
                "ssm:DescribeSessions",
                "ssm:TerminateSession",
                "ssm:StartSession"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}

続いて、このユーザのアクセスキーを作成します。

ローカル端末の準備

以下のドキュメントを参考に、AWS CLIとSSMプラグインをローカル端末にインストールします。

AWS CLIのインストール

docs.aws.amazon.com

SSMプラグインのインストール

docs.aws.amazon.com

続いて、コマンドプロンプトを開き、アクセスキーとシークレットを設定します。

>aws configure
AWS Access Key ID [None]: ****************ABCD
AWS Secret Access Key [None]: ****************abcd
Default region name [ap-northeast-1]:
Default output format [json]:

ポートフォワーディングでRDP接続してみる

コマンドプロンプトでポートフォワードのコマンドを実行します。
ここでは、ローカル端末のポート番号11111をリモート端末の3389に転送します。

>aws ssm start-session --target <インスタンスID> --document-name AWS-StartPortForwardingSession --parameters portNumber=3389,localPortNumber=11111

Starting session with SessionId: testuser01-xxxxxxxxxx
Port 11111 opened for sessionId testuser01-xxxxxxxxxx.
Waiting for connections...

「Waiting for connections...」と表示されたら、コネクションを待ち受けている状態です。
リモートデスクトップを開き、「localhost:11111」にadministratorで接続してみます。

ちなみに、先ほどのコマンドプロンプトで「Connection accepted for session」と表示され、通信が開始されたことが分かります。

Starting session with SessionId: testuser01-xxxxxxxxxx
Port 11111 opened for sessionId testuser01-xxxxxxxxxx.
Waiting for connections...

Connection accepted for session [testuser01-xxxxxxxxxx]

Administratorのパスワードを入力します。

接続が成功しました。

もちろん、ローカル端末のドライブとも共有が可能です。

まとめ

Session Managerのポートフォワーディング機能によるRDP接続の方法をご紹介しました。
Fleet Managerで十分であれば良いですが、要件によってはリモートデスクトップを使いたいときもあると思います。
Session Managerであれば、プライベートサブネットにあるインスタンスにもRDPで接続でき、さらにIAMによる制御も可能になります。
非常に便利な機能なので、ぜひ活用してみてください。