【AWS】セッションマネージャーからプライベートサブネットに接続する方法(VPCエンドポイント経由)

今回はセッションマネージャーからEC2インスタンスに接続する方法をやっていきます！

[前回](https://qiita.com/Yukimaru_Rutla/items/3094ece353677815a59c)の記事ではプライベートサブネットに置いてあるEC2インスタンスに
パブリックサブネットに配置したNATゲートウェイを経由して外部と通信できる
手法を取っていましたが、今回はVPCエンドポイントを設定して外部のインターネットに
出ることなくセッションマネージャーからEC2インスタンスにアクセスする方法になります。
セキュリティ的に考えるとインターネットに出ずにセッションマネージャーに
アクセスできることは大きなメリットになりますね！

ただ、パッケージのアップデートなどはインターネットを経由して更新する必要があるため
NATゲートウェイを経由した方がいいケースもあります。
セッションマネージャーを使用するためだけにNATゲートウェイを配置するのは
セキュリティ的に微妙なのとNATゲートウェイは結構高額なのでNATゲートウェイ経由で
アクセスするか、VPCエンドポイント経由でアクセスするか、
どちらが良いかはケースバイケースのようです。

今回の構成イメージです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/4e8aaa8a-df04-26de-ea6a-5d2d2f2a15b8.png)
セッションマネージャーからプライベートリンクを経由して各プライベートサブネット内の
EC2インスタンスにアクセスできるようにします。
AWS内だけで完結していますね。

【手順の流れ】
①対象のVPCの設定で、DNSホスト名とDNS解決が「有効」になっていることを確認
②プライベートサブネットに配置された各EC2インスタンスに
　AmazonSSMManagedInstanceCoreをポリシーに含むロールをアタッチする
③エンドポイント用のセキュリティグループを作成する
　VPCからのアクセスのみ許可し、アウトバウンドはすべての通信を許可する
④エンドパイントを3つ作成する(必要なエンドポイントは以下のとおり)
　com.amazonaws.[リージョン].ssm
　com.amazonaws.[リージョン].ssmmessages
　com.amazonaws.[リージョン].ec2messages
　セキュリティグループをアタッチして、エンドポイントに対象のEC2インスタンスのある
　プライベートサブネットを選択する

では、実際にやっていきます。
①VPCの設定確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/c6de8267-61df-af6f-89b9-fd563f307ab4.png)
VPC > お使いのVPC から事前に作成したVPCを選択し、
「DNSホスト名」と「DNS解決」が有効になっていることを確認します。
有効になっていないとエンドポイント作成でエラーになるので注意。

②EC2インスタンスにポリシーをアタッチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/bc56624a-a09a-7f21-6c56-90c86bdf8e46.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/87bda4da-fcde-a577-6d67-1f4450dbabf6.png)
EC2 > インスタンスから各プライベートサブネットに配置したインスタンスを選択し、
AmazonSSMManagedInstanceCoreが含まれているロールを作成してアタッチします。

③セキュリティグループの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/0a1655fc-4af4-c642-d9fe-331a38b5f89f.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/6c40916a-f0ed-b45d-ddbf-a91d736d786b.png)
VPCのIPアドレスとHTTPS通信のみをインバウンド通信に許可します。
アウトバウンドは特に制限不要のためすべての通信を許可しています。

④エンドポイントの作成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/ac2797b1-140b-4bcb-9912-cb3059258ca1.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/beb8e221-fed6-ba15-9a32-937b2a2d7c00.png)
VPC > エンドポイント > エンドポイントの作成からエンドポイントを作成していきます。
まずはサービス名：com.amazonaws.[リージョン].ssmから。
サブネットでEC2インスタンスの配置してあるプライベートサブネットを選択します。
セキュリティグループに③で作成したセキュリティグループを選択して作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/0ffc5105-de6d-1588-3bf6-18aaf5d5cc29.png)
同じようにサービス名だけ変更してcom.amaonaws.[リージョン].ssmmessagesの
エンドポイントも作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/0e35180f-f306-9aff-f548-2016af1b1851.png)
com.amazonaws.[リージョン].ec2messagesも同様の手順で作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/a4723b46-b132-bbc8-7ea0-2a059374ed80.png)
3つすべてのエンドポイントが作成できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3522793/43599956-8915-85d3-0fca-34ba295121c1.png)
各EC2インスタンスの「接続」ボタンから「セッションマネージャーから接続」タブに遷移して
「接続」ボタンを押すとインスタンスに接続できます！