AWS Systems ManagerでブラウザベースのWindowsデスクトップ接続

2021年11月23日にAWS Systems Manager (SSM)のFleet Managerで「コンソールベースのWindowsインスタンスへのアクセス」が発表されました。

https://aws.amazon.com/jp/about-aws/whats-new/2021/11/aws-systems-manager-console-windows-instances-security/

ブラウザベースでRDP接続ができるようになっています。SSM経由なので、マネージドインスタンス（SSMに接続されたEC2インスタンス）であればインターネットからのRDP接続ができる必要もありません。実際に試してみました。

# 手順

ドキュメントはこちら。まだ日本語版はありません。

https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-rdp.html

1. Systems Managerを開きます。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/a52e7c5d-5629-5320-76e6-c3786ab9697c.png)
2. 左のメニューペインから「フリートマネージャー」を開きます。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/e5d76917-71a3-068f-5f2b-5e64f700d00d.png)
3. 接続したいWindowsインスタンスを選択し、「Node actions」から「Connect with Remote Desktop」を開きます。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/c0ab6f2f-7dd1-5522-2530-5f0eb2c8d318.png)
4. ユーザー名とパスワードを入力して「Connect」をクリックします。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/8d1b1bfd-d9d0-aa77-830e-268ffc58398f.png)
5. リモートデスクトップ接続の確立が行われて…<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/25c357c4-3b41-796a-7893-aad620a192dc.png)
6. 接続されました！<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/ee8dd094-d555-74a7-0dfe-64ac27f1833f.png)
7. 個別のセッションタブ（i-xxxxxというEC2インスタンスIDのタブ）ではブラウザウィンドウサイズに合わせて大きくデスクトップが表示されます。<br/>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/a900b49c-d497-abad-e477-5da7f7d85a39.png)

# セキュリティ周り

## セッションの記録

実体はSSM経由でのRDPの様子です。Systems Manager Session Managerを見ると、セッション履歴もちゃんと記録されています。ドキュメント名が「AWS-StartPortForwardingSession」となっているので、ポートフォワーディングでRDP接続していたことが読み取れます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/5f2a715f-47d9-baa6-b381-9ae41d6adf9a.png)

## ネットワーク構成

このEC2インスタンスに適用しているセキュリティグループのインバウンドルール。外部からの接続は許可していません。

SSM経由での接続なので、必要なのは(a)EC2インスタンスから直接あるいはNAT経由でインターネット接続できるか、(b)EC2インスタンスの接続範囲内にSSMなどのエンドポイントが作成されていて、どちらかの方法でSSMに接続されていることです（参照：[AWS Systems Manager経由でssh不使用のOSリモートアクセスを試す - Qiita](https://qiita.com/tsukamoto/items/04a631ac3b5bf8dd0544)）。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/394eeb4c-9f07-240b-32a1-2b95d201b055.png)

## 認証

認証は、まずAWSのマネジメントコンソールにサインインできること、次にWindowsにサインインできることの2段階のようです。今回はAWSマネジメントコンソールをIAMロールで使用していました（IAMユーザーでサインイン後、強い権限のあるロールへ切り替え）が、問題ありませんでした。WindowsへはAdministratorアクセスであれば、キーペアファイルないしその内容を指定することでもサインインができそうです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/eac95b26-b4b4-1db6-eb12-a4fbf413f2b4.png)

しかし私が試した際には、管理者パスワードの復号に失敗しました。同じファイルでEC2の「接続 > RDP接続」画面からパスワードを復号・取得して、上のスクリーンショットのようにパスワード入力してサインインできましたし、RSAキーペアであることも確認しています。ファイルの問題ではなさそうな気がしますが、調べ切れていません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/55718/87667142-ae45-eaf2-50c7-76d41704d2ed.png)

## クリップボード

ローカルのファイルをコピーして、リモート（EC2上）のWindows環境にペーストできるか気になりましたが、これはできないようです。可能にする設定等があるものかはやはり調べ切れていませんが、とりあえず安全側なのでいいかなと。

# おわりに

これまではSSM経由でのRDP接続というと、(1)Administratorパスワードを取得し、(2)AWS CLIで `aws ssm start-session` してポートフォワーディングして、(3)RDPでローカルの転送ポートに接続、とわりと手間がかかる印象でした。今回のアップデートで、非常にSSM経由でのRDP接続が使いやすくなったと思います。

* すべてマネジメントコンソール（Webブラウザ）上で完結する。
* AWS CLIをインストールしていない環境からでも接続できる。

SSM経由でのRDP接続には、元々以下のような利点もあります。

* インターネットからのRDP接続を許す必要がない。
* プライベートサブネット内のEC2インスタンスにも接続できる（SSMエンドポイントなどを介してSSMに接続されていれば）。
* OSの認証に加え、AWSの認証を必要とする（多段認証になる、AWSの認証に多要素認証やSSOを使うこともできる）。

いくつか調べ切れていないところなど残っていますが、まずはファーストインプレッション的に。活用していきたいと思います。

# 参考

* [AWS Systems Manager Fleet Manager now provides console based access to Windows instances with enhanced security protocols](https://aws.amazon.com/jp/about-aws/whats-new/2021/11/aws-systems-manager-console-windows-instances-security/)
* [Connect using Remote Desktop - AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/fleet-rdp.html)
* [AWS Systems Manager経由でssh不使用のOSリモートアクセスを試す - Qiita](https://qiita.com/tsukamoto/items/04a631ac3b5bf8dd0544)