AWSのマネジメントコンソールでSystems ManagerのSession Manager用のVPCエンドポイントを作成する

こんにちは。
本日はもう1つ、AWSのマネジメントコンソールでSystems Managerのセッションマネージャー用のVPCエンドポイントを作成する手順を記載します。

# 1. セッションマネージャーとVPCエンドポイントの関わり

## 1-1. セッションマネージャーの前提条件
Systems Managerの機能の1つ、セッションマネージャーは、AWSのマネジメントコンソールから仮想サーバーにシェルアクセスできるサービスです。

セッションマネージャーを利用するには以下の準備が必要です。

1. 仮想サーバーを立ち上げるためのAmazon Machine Image（AMI）で、
Systems ManagerのSSM Agentが含まれるAMIを用意している
2. 仮想サーバーでセッションマネージャーを使うために必要な、
IAMロールを作成している
3. <b>仮想サーバーから、
セッションマネージャーのエンドポイントへのアクセス経路を用意している
4. 仮想サーバーに設定するセキュリティグループで、
0.0.0.0/0に対するhttpsのアウトバウンドの許可ルールを含むセキュリティグループを
用意している


:::note info
前提条件の詳細はユーザーガイドの以下の箇所を参照してください。
AWS Systems Manager ユーザーガイド > Session Manager > Session Managerのセットアップ > ステップ 1: Session Manager の前提条件を満たす
[https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-prerequisites.html](https://docs.aws.amazon.com/ja_jp/systems-manager/latest/userguide/session-manager-prerequisites.html "Session Managerの前提条件")
:::

ここで、<b>アクセス経路</b>について記載します。

Internet Gatewayが存在するVPCでは、VPC内の仮想サーバーから、セッションマネージャーで利用する複数のマネージドサービスのエンドポイントにアクセスする経路があります。NAT Gatewayが用意されていれば、プライベートサブネットの仮想サーバーもエンドポイントにアクセス可能です。

しかしながら、Internet Gatewayが無い完全閉域のVPCでは、デフォルトではVPC内の仮想サーバーからセッションマネージャーのエンドポイントにアクセスができません。

そこで、Internet Gatewayが無い完全閉域のVPC内から、直接マネージドサービスのエンドポイントにアクセスする経路として利用できる、VPCエンドポイントというリソースを作成します。


## 1-2. VPCエンドポイントについて

VPCエンドポイントは、VPCの中から、Internet Gatewayを介さずに直接AWSのマネージドサービスのエンドポイントにアクセスするためのリソースです。

VPCエンドポイントは、以下の2種類があります。

<table>
<tr>
  <td>タイプ</td>
  <td>特徴</td>
  <td>アクセス先の<br>エンドポイントの<br>IPアドレス</td>
  <td>利用できる<br>サービス</td>
</tr>
<tr>
  <td>Gateway型</td>
  <td>
  <ul>
  <li>ルーターのように挙動
  <li>VPCに対して1つ
  </ul>
  </td>
  <td>パブリック<br>IPアドレス</td>
  <td>
  <ul>
  <li>S3
  <li>DynamoDB
  </ul>
  ※2つのみ
  </td>
</tr>
<tr>
</tr>
<tr>
  <td>Interface型</td>
  <td>
  <ul>
  <li>サブネット内に<br>IPアドレスで設定される
  <li>AZ内のサブネットに対して1つ
  <li>セキュリティグループで<br>アクセス制御できる
  </ul>
  </td>
  <td>プライベート<br>IPアドレス</td>
  <td>各種あり<br>※S3もあり</td>
</tr>
</table>

<br>

完全閉域のVPCでの利用を前提とする場合、セッションマネージャーでは、以下のマネージドサービスのVPCエンドポイントが必要です。

<table>
<tr>
  <td>VPCエンドポイント</td>
  <td>必須？</td>
</tr>
<tr>
  <td>ec2messages.region.amazonaws.com</td>
  <td>必須</td>
</tr>
<tr>
</tr>
<tr>
  <td>ssm.region.amazonaws.com</td>
  <td>必須</td>
</tr>
<tr>
</tr>
<tr>
  <td>ssmmessages.region.amazonaws.com</td>
  <td>必須</td>
</tr>
<tr>
</tr>
<tr>
  <td>その他</td>
  <td>必要に応じて</td>
</tr>
</table>



# 2. AWSのマネジメントコンソールでSystems ManagerのSession Manager用のVPCエンドポイントを作成する手順

## 2-1. 前提

### (1) VPC
AWSのマネジメントコンソールでVPC作成時に、以下の条件で作成しているものとします。

* 自動生成のタグに「PoC-20240105」を設定
* 東京リージョンでAZを1つ作成
* パブリックサブネット無し
* プライベートサブネットを1つ作成
* NAT Gateway無し
* S3ゲートウェイ（＝Gateway型のS3のエンドポイント）あり

:::note info
VPCの作成については、以下の記事をご参照ください。
[AWSのマネジメントコンソールでVPCを簡単に作成する](https://qiita.com/h_horiguchi/items/e585acd5aa5cb6f2797b "")
:::

### (2) セキュリティグループ
以下の条件で事前に作成しているものとします。

* セキュリティグループ「<b>Common</b>」
仮想サーバーに設定するセキュリティグループです。<br>以下の記事で作成しているものと同じ内容とします。<br>

:::note info
Commonセキュリティグループは、作成されていない場合は、
以下の記事と同じ内容で作成してください。
[AWSのマネジメントコンソールでセキュリティグループを作成する](https://qiita.com/h_horiguchi/items/6dcf633448dbc5f37b7b "")
:::

* セキュリティグループ「<b>VPCEndPoint</b>」
VPCエンドポイントに設定するセキュリティグループです。<br>以下の内容とします。

<table>
<tr>
  <td>方向</td>
  <td>通信種別</td>
  <td>通信相手</td>
  <td>プロトコル</td>
</tr>
<tr>
  <td>インバウンド</td>
  <td>ソース</td>
  <td>Commonセキュリティグループ</td>
  <td>HTTPS</td>
</tr>
</table>

:::note info
VPCEndPointセキュリティグループは、以下の記事を参考に作成してください。
[AWSのマネジメントコンソールでセキュリティグループを作成する](https://qiita.com/h_horiguchi/items/6dcf633448dbc5f37b7b "")
:::

VPCEndPointセキュリティグループを設定したVPCエンドポイントでは、以下ができるようになります。

* Commonセキュリティグループを設定した仮想サーバーから、<br>HTTPSの受信ができる


## 2-2. VPCエンドポイントを作成する

以下のリンクにアクセスします。

* 東京リージョンでVPCエンドポイントを作成する
[https://ap-northeast-1.console.aws.amazon.com/vpcconsole/home?region=ap-northeast-1#CreateVpcEndpoint:](https://ap-northeast-1.console.aws.amazon.com/vpcconsole/home?region=ap-northeast-1#CreateVpcEndpoint: "VPCエンドポイントを作成")

<br>

それでは、以下のVPCエンドポイントを順番に作成していきます。

* ec2messages.region.amazonaws.com
* ssm.region.amazonaws.com
* ssmmessages.region.amazonaws.com

<br>

### (1) ec2messagesのVPCエンドポイントを作成する

まず、ec2messagesのVPCエンドポイントを作成します。
以下の内容を入力/設定していってください。


#### ▼エンドポイントの設定

「<b>名前タグ</b>」を入力します。
「<b>サービスカテゴリ</b>」は、デフォルトの「<b>AWSのサービス</b>」でOKです。

<table>
<tr>
  <td>項目</td>
  <td>入力の仕方</td>
  <td>入力値</td>
</tr>
<tr>
  <td>名前タグ</td>
  <td>テキスト</td>
  <td>PoC-20240105-vpce-ec2messages</td>
</tr>
<tr>
</tr>
<tr>
  <td>サービス<br>カテゴリ</td>
  <td>セレクト<br>ボックス</td>
  <td>AWSの<br>サービス</td>
</tr>
</table>

![VPCE-20240109-01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/41fccffc-59ff-8d52-28dc-9eca81552c88.png)

<br>

#### ▼サービス

「<b>サービス</b>」を入力します。
入力すると、VPCエンドポイントの候補が表示されます。

「<b>ec2messages</b>」のVPCエンドポイントが表示されたら、ラジオボタンで選択します。


<table>
<tr>
  <td>項目</td>
  <td>入力の仕方</td>
  <td>入力値</td>
</tr>
<tr>
  <td>サービス</td>
  <td>テキスト</td>
  <td>ec2messages</td>
</tr>
<tr>
</tr>
<tr>
  <td>サービス名</td>
  <td>ラジオ<br>ボタン</td>
  <td>com.amazonaws.ap-northeast-1.ec2messages<br>※チェックする</td>
</tr>
</table>

![VPCE-20240109-02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/2e4e8e2a-c68a-0540-8eb9-74812edb2f62.png)

<br>

#### ▼VPC

「<b>VPC</b>」は、あらかじめ作成しているVPCを選択します。

<table>
<tr>
  <td>項目</td>
  <td>入力の仕方</td>
  <td>入力値</td>
</tr>
<tr>
  <td>VPC</td>
  <td>セレクト<br>ボックス</td>
  <td>PoC-20240105-vpc</td>
</tr>
</table>

![VPCE-20240109-03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/74bd5a57-5144-bceb-ac73-a899b73b794b.png)

<br>

#### ▼サブネット

VPCエンドポイントを作成する「<b>アベイラビリティゾーン</b>」を選択します。
選択すると、VPCエンドポイントを作成できるサブネットの候補が表示されます。

VPCエンドポイントを作成する「<b>サブネット</b>」を選択します。

<table>
<tr>
  <td>項目</td>
  <td>入力の仕方</td>
  <td>入力値</td>
</tr>
<tr>
  <td>アベイラビリティゾーン</td>
  <td>チェック<br>ボックス</td>
  <td>ap-northeast-1a (apne1-az4)<br>※チェックする</td>
</tr>
<tr>
</tr>
<tr>
  <td>サブネット</td>
  <td>セレクト<br>ボックス</td>
  <td>該当するサブネット1つ</td>
</tr>
</table>

![VPCE-20240109-04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/2f65dab6-ac10-3b57-3810-3c3d38bbc2db.png)

:::note warn
VPCエンドポイントは、AZごとに1つのサブネットを設定します。
ここではシングルAZで設定していますが、実際の構築では可用性の要件に合わせて複数のAZを選択してください。
:::

<br>

#### ▼セキュリティグループ

「<b>セキュリティグループ</b>」は、準備のところで作成した「<b>VPCEndPoint</b>」を選択します。

<table>
<tr>
  <td>項目</td>
  <td>入力の仕方</td>
  <td>入力値</td>
</tr>
<tr>
  <td>セキュリティグループ</td>
  <td>チェック<br>ボックス</td>
  <td>VPCEndPoint<br>※チェックする</td>
</tr>
</table>


![VPCE-20240109-05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/a56163da-939a-fdd0-98e7-c282f9f54f68.png)

<br>

#### ▼ポリシー

この記事では、この項目はデフォルトの「<b>フルアクセス</b>」のままとします。

![VPCE-20240109-06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/69abe804-e1ac-162c-6b92-c2c7de71a835.png)

:::note warn
VPCエンドポイントへのアクセスを制限したい場合は、「<b>カスタム</b>」を選択して、アクセス権限のポリシーを入力します。
:::

<br>

#### ▼タグの確認とエンドポイントの作成

最後にタグを確認します。
タグは、最初の「<b>名前</b>タグ」に入れた内容がNameタグの値として転記されます。

タグを確認したら、「<b>エンドポイントを作成</b>」を押下します。

![VPCE-20240109-07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/3c4b3394-0041-2c38-95ca-e6f105bddddd.png)

<br>

「<b>エンドポイントを作成</b>」を押下すると、VPCエンドポイント一覧の画面に遷移し、
「<b>VPCエンドポイントが正常に作成されました</b>」と表示されます。

![VPCE-20240109-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/8963804a-06aa-de1c-c09a-15d42e5e286f.png)

<br>

VPCエンドポイントを作成した直後は、VPCエンドポイントのステータスが「<b>保留状態</b>」です。
この「<b>保留状態</b>」が、「<b>使用可能</b>」というステータスに変わったら、VPCエンドポイントが使用可能になります。

![VPCE-20240109-09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622796/202da01a-270d-0f5f-d7b2-cd7633e17182.png)

<br>

### (2) ssm、ssmmessagesのVPCエンドポイントを作成する

手順は (1) ec2messagesの手順と同じです。
同じ手順で作成してください。

<br>

VPCエンドポイントの作成は以上で終わりです。
どなたかのお役に立てれば幸いです。