Macからプライベートサブネット配下に設置したSSM経由でWindowsインスタンスにRDPアクセスする

先日業務で初めてWindowsServerに触れる機会があり、その際にSSMを経由したRDP接続に関してアウトプットとして記事の投稿をしたいと思います。


## 構成図
![スクリーンショット 2022-05-29 14.34.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/0fa9b257-58fc-2e9e-fb42-797dccfdad9b.png)

VPC内のプライベートサブネット配下に設置したWindosServerにSSM経由でアクセスするものです。



# 1 事前準備
事前準備して以下のダウンロードが必要です。
- AWS CLI
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html
- Session Manager Plugin
https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-working-with-install-plugin.html#install-plugin-macos
-  MicroSoft Remote Desktop
https://apps.apple.com/jp/app/microsoft-remote-desktop/id1295203466?mt=12

※AWS CLIを使用する際にはAWS Configureの設定を実施してください。（以下記事参照）
https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-config


# 2 VPCを作成する
マネジメントコンソールから構成図の通りVPCを作成します。
今回はシンプルな構成のためVPCウィザードから作成しました。
以下のような構成で作成していきます。

![スクリーンショット 2022-05-29 12.10.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/4cc5b641-da6c-243a-1944-ab6dd2b25bcb.png)

![スクリーンショット 2022-05-29 12.11.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/86415558-c4cf-8538-c77a-d64dc82a05f2.png)

# 3 セキュリティグループの作成

今回セキュリティグループは2つ作成します。
- EC2用
- VPCエンドポイント


セキュリティグループは以下のとおり設定します。

■EC2用のセキュリティグループ
![スクリーンショット 2022-05-29 14.22.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/e7798100-237d-1eed-a964-b8dde329e325.png)
EC２にはVPCエンドポイント経由でアクセスするためEC2のインバウンド設定は不要です。

■VPCエンドポイント用のセキュリティグループ
![スクリーンショット 2022-05-29 14.29.51.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/b3712e99-87a3-92f1-8031-91aeb65725d3.png)
ソースの範囲はVPCエンドポイントを配置するサブネットのCIDRを指定しています。

※いずれのセキュリティグループもアウトバウンドルールはデフォルトでOKです。


# 3 EC2を起動する
続いてWindowsServerを作成していきます。
VPCの設定とセキュリティグループを今回作成したものに変更してパブリックIPアドレスは非有効にしておきます。
あとはデフォルトでOKなので割愛します。
（サーバーはWindowsServerを指定）


# 4 EC2にIAMロールをアタッチする

EC2でSystems Managerを利用するための権限としてのIAMロールを作成します。
以下IAMロールを作成し、先程作成したEC2にアタッチします。
![スクリーンショット 2022-05-29 12.42.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/ef0a3f3a-5303-9492-c66c-c0c5a7822627.png)
SSMを利用できるようにしたいので `AmazonSSMManagedInstanceCore`ポリシーをアタッチします。

作成後先程作成したEC2にアタッチします。

# 5 WindowServerのパスワードを取得

EC２インスタンスの「接続」→「RDPクライアント」から「パスワードを取得」を押下してEC2作成時に指定したキーペアをを参照してログイン用のパスワードを取得します。

あとでRDPする際に必要になりますのでメモ帳なのでコピペしておいてください。
![スクリーンショット 2022-05-30 20.51.11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/aee68081-dc89-ceb9-2c35-78f5e3fa7a60.png)


# 6 VPCエンドポイントの作成

今回プライベートサブネットに配置されているインスタンスに接続したいのでVPCエンドポイントを経由する必要があります。

以下3つのエンドポイントを今回作成したVPCのサブネットに配置します。
- com.amazonaws.ap-northeast-1.ssm
- com.amazonaws.ap-northeast-1.ssmmessages
- com.amazonaws.ap-northeast-1.ec2messages




# 6 接続テスト

ターミナルで以下コマンドでセッションを開始します。

```
aws ssm start-session --target i-xxxx --document-name AWS-StartPortForwardingSession --parameters "portNumber=3389, localPortNumber=13389"
```

ターミナル上で上記コマンドを実行し`Waiting for connections...`の文字が表示されたらセッションが確立された状態になっています。

続いてMicroSoft Remote DesktopでRDP接続していきます。

コンピュータ名に`localhost:13389`を入力します。
※13389はポートフォワーディングで開いたローカルポートです。
この設定をAddしてConnectするとログイン画面がでてきますので、先程メモしたパスワードでログインします。


![スクリーンショット 2022-05-29 14.02.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/9de9e2f5-f7e4-89cb-bcac-9ba065124356.png)

WindowsServerへのリモートデスクトップアクセスが成功しました。
![スクリーンショット 2022-05-29 14.04.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/626370/e7defbea-0e66-5ce1-7912-eecaebb22daf.png)




# うまくつながらないときは
接続がうまくいかない時は以下のポイントをチェックすると良いかもです。
- VPCエンドポイントの「プライベート DNS名」が有効になっているか
- EC2に適切なポリシーのIAMロールがアタッチされているか
- VPCエンドポイントセキュリティグループでHTTPSアクセスを許可しているか
- VPC の「DNS ホスト名」と「DNS 解決」が有効になっているか



SSM経由でインスタンスにアクセスできるようになるとEC2のポートを開かなくても良いのでセキュリティの向上につながって良いなと思いました。