【ハンズオン】Route53 Resolver Inbound/Outbound Endpoint

# はじめに
AWS環境からAWS外にあるDNSサーバへ名前解決を行うために、Route53 Resolver Outbound Endpointを利用する機会がありました。
しかし、簡単に試せるハンズオンが見つからなかったので、ハンズオン手順を記事にしました。

今回、[Route53Inbound/OutboundEndpointと転送ルールを使用して別VPCを名前解決する](https://qiita.com/tonkatsu_oishi/items/b17393d1690c764b2b4d) を大いに参考にさせていただきました。
各リソースの詳細な作成手順などが記載されていますので、ご参照ください。

# 目次
<!-- タイトルとアンカー名を編集 -->
1. [構成の確認](#Chapter1)
1. [ハンズオン](#Chapter2)
1. [まとめ](#Chapter3)
1. [参考文献](#reference)

<!-- 各チャプター -->
<a id="#Chapter1"></a>
# 構成の確認
Route53Inbound/OutboundEndpointと転送ルールを使用して別VPCを名前解決することをゴールとします。

オハイオリージョン、大阪リージョンそれぞれに「VPC」「EC2」を用意します。また、System Manager経由でEC2にアクセスできるよう「VPCエンドポイント」を用意します。
オハイオVPC・大阪VPCを接続するために、VPCピアリングを設定します。

オハイオリージョンには、「Route53 Private Hosted Zone」「Route53 Resolver Inbound Endpoint」を用意します。
大阪リージョンには、「Route53 Resolver Outbound Endpoint」を用意します。

**構成図**
![構成図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/dc39b5fa-c8a5-4c6a-bc93-fa5f9e501ebf.png)


<a id="#Chapter2"></a>
# ハンズオン
各リソースの詳細な作成手順は[Route53Inbound/OutboundEndpointと転送ルールを使用して別VPCを名前解決する](https://qiita.com/tonkatsu_oishi/items/b17393d1690c764b2b4d) をご参照ください。
以下、ハンズオンの手順と設定の結果をメインに記載しています。

### VPCの作成
オハイオリージョン・大阪リージョンにVPCを作成します。
「DNS 解決」「DNS ホスト名」を有効化しておきます。

**オハイオ VPC**
![オハイオVPC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/ca8b5812-87c0-4ec2-8ca3-0148df468fa7.png)

**大阪 VPC**
![大阪VPC.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/f0233edd-659b-4d75-aab2-6a4efc5d2306.png)

### サブネットの作成
オハイオリージョン、大阪リージョンそれぞれに「EC2用」「Route53 Resolver Inobund/Outbound Endpoint用」のサブネットを作成します。
今回、VPCエンドポイントはEC2用サブネットに配置します。

**オハイオ サブネット**
![オハイオ_サブネット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/6b33d447-b0bf-41f0-9856-56655c6a1b7e.png)

**大阪 サブネット**
![大阪_サブネット.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/7d08f117-f7bb-4ff3-9f51-b7f6aba36a43.png)

### EC2の作成
EC2インスタンス作成の事前準備として、EC2インスタンスからSSMセッションマネージャーに接続するためのIAMロールの作成します。
許可ポリシーはAWS管理の「AmazonSSMManagedInstanceCore」を使用します。

**IAMロール**
![IAMロール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/db5c59ee-1252-44ef-a1d0-e0748dafb440.png)

次に、EC2インスタンスで使用するセキュリティグループを作成します。
この後オハイオEC2・大阪EC2間でpingが通るか確認するため、オハイオリージョンでは大阪EC2サブネットからのICMPの通信を許可、大阪リージョンではオハイオEC2サブネットからのICMPの通信を許可します。

**オハイオ EC2用セキュリティグループ**
![オハイオ_ec2_sg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/e7b75f80-b700-4641-a317-ed605c41fc1d.png)

**大阪 EC2用セキュリティグループ**
![大阪_ec2_sg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/69fd5ad6-8eb4-45c7-be6a-00200eba9eed.png)

準備が整ったので、オハイオ・大阪リージョンにEC2インスタンスを作成します。
AMIはAmazon Linux 2023、インスタンスタイプはt2.microを指定します。
ネットワーク設定で、先ほど作成したVPC、EC2用サブネット、セキュリティグループを指定します。高度な設定で、同じく先ほど作成したIAMロールを指定します。
他はデフォルトの設定でインスタンスを起動します。
EC２インスタンスにはSSMセッションマネージャーで接続するため、キーペアの作成は不要です。

**オハイオ EC2インスタンス（プライベートIP）**
![オハイオ_ec2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/aac5e5ef-79cf-4d18-93e2-83803d3e0d44.png)

**大阪 EC2インスタンス（プライベートIP）**
![大阪_ec2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/9cd22f19-7f85-4501-a9f5-dfbe3ad839e7.png)

### VPCエンドポイントの作成
オハイオ・大阪リージョンそれぞれで、2つのVPCエンドポイント「com.amazonaws.region.ssm」「com.amazonaws.region.ssmmessages」を作成します。

VPCエンドポイントにはセキュリティグループが必要なため、同じリージョンのEC2インスタンスからのインバウンドHTTPS通信を許可するセキュリティグループを作成します。

**オハイオ VPCエンドポイント用セキュリティグループ**
![オハイオ_vpcendpoint_sg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/a42e38a4-dfd2-43ba-99aa-8cab80d019e6.png)

**大阪 VPCエンドポイント用セキュリティグループ**
![大阪_vpcendpoint_sg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/f59f2d68-8afd-4f6a-8f64-5c17787fcdbf.png)

準備が整ったので、オハイオ・大阪リージョンにVPCエンドポイント「com.amazonaws.region.ssm」「com.amazonaws.region.ssmmessages」を作成します。VPCエンドポイントは各リージョンのECS用サブネットに配置します。

**オハイオ VPCエンドポイント**
![オハイオ_vpcendpoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/01f1e01d-93e5-43b7-ba61-4d81e32318d1.png)

**大阪 VPCエンドポイント**
![大阪_vpcendpoint.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/c2afc935-aabf-45ac-bd18-fb1c3f9fa45d.png)

オハイオEC2・大阪EC2 からSession Manager経由で接続できれば、EC2インスタンスの設定完了です。

**オハイオEC2 にSession Manager経由で接続（ルートユーザでログイン）**
![オハイオ_ec2_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/82a7ed4e-2853-411d-9a85-1f9b800e8d79.png)

**大阪EC2 にSession Manager経由で接続（ルートユーザでログイン）**
![大阪_ec2_login.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/a80b24a4-3fca-4cda-b452-f01655af9d43.png)

### VPCピアリングの作成
どちらのリージョンからでも問題ないですが、オハイオリージョンからVPCピアリングを作成します。
リクエスタとなるローカルVPCにオハイオVPC、アクセプタとなるVPCに大阪VPCを指定します。その後、大阪リージョンでVPCピアリングを承認します。
今回ピアリング接続したVPC間で名前解決する必要があるため、オハイオリージョン・大阪リージョンともにVPC ピアリングでの DNS 解決を許可します。

**VPCピアリング**
![vpc_peering.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/0faa2e05-1e0d-4309-a6eb-f641ab481576.png)

VPCピアリング設定の最後に、オハイオ・大阪リージョンのデフォルトルートテーブルでピアリング先VPCへのルートを設定します。

**オハイオ デフォルトルートテーブル**
![オハイオ_rt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/2d51e288-614f-498a-90b8-d2ba8910a274.png)

**大阪 デフォルトルートテーブル**
![大阪_rt.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/aec393a5-a614-4328-b7f4-be2ffc8e1d8f.png)

オハイオEC2・大阪EC2にSession Manager経由で接続し、EC2間でpingが通れば、VPCピアリングの設定完了です。

**オハイオEC2 → 大阪EC2 にping**
![オハイオ→大阪_ping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/cd06cc5d-4bda-4ab1-80c6-4c80057aa35f.png)

**大阪EC2 → オハイオEC2 にping**
![大阪→オハイオ_ping.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/04228846-3b87-4d4b-a334-c1900acda2de.png)

### Route53 Private Hosted Zoneの作成
ドメイン名を「https-demo.com」、関連付けるVPCをオハイオVPCとして、プライベートホストゾーンを作成します。
その後、Aレコード「web-test.https-demo.com」を作成します。値には、オハイオEC2のプライベートIPを指定します。

**Route53 Private Hosted Zone**
![プライベートホストゾーン.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/850c7210-7c50-4168-b37d-7c11b0ca206e.png)

### Route53 Resolver Inbound Endpoint の作成
やっと本題です。
オハイオリージョンで、Route53 Resolver Inbound Endpointを作成していきます。
まずは、エンドポイントに設定するセキュリティグループを作成します。セキュリティグループでは、オハイオVPC・大阪VPCからのDNS（UDP・TCP）通信を許可します。

**セキュリティグループ**
![リゾルバエンドポイント_sg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/7e66d420-1947-45f8-b0ec-15557b68a0f4.png)

Route53 Resolver Inbound Endpointの作成時、作成済みのサブネットを指定します。また、任意の独自IPアドレスを指定します。

**Route53 Resolver Inbound Endpoint**
![オハイオ_インバウンドエンドポイント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/213d20d7-01b3-47e4-9652-7613f0a43205.png)

### Route53 Resolver Outbound Endpoint の作成
大阪リージョンでRoute53 Resolver Outbound Endpointを作成していきます。
オハイオリージョン同様、エンドポイントに設定するセキュリティグループを作成します。セキュリティグループでは、オハイオVPC・大阪VPCからのDNS（UDP・TCP）通信を許可します。

**セキュリティグループ**
![リゾルバエンドポイント_sg.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/7e66d420-1947-45f8-b0ec-15557b68a0f4.png)

Route53 Resolver Outbound Endpointの作成時、作成済みのサブネットを指定します。また、任意の独自IPアドレスを指定します。

**Route53 Resolver Outbound Endpoint**
![大阪_アウトバウンドエンドポイント.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/d8708133-728e-468c-a8c1-605d59d14028.png)

次にRoute53 の転送ルールを作成します。
今回はオハイオVPCに紐づけたプライベートホストゾーンの名前解決ルールを設定するので、ドメイン名に「https-demo.com」を入力します。
大阪VPC及び先ほど作成したRoute53 Resolver Outbound Endpointにルールを紐づけます。
DNSクエリを転送する先のターゲットIPには、オハイオリージョンで作成したRoute53 Resolver Inbound EndpointのIPアドレスを指定します。

**Route53 の転送ルール**
![大阪_ルール.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/193d8a0a-5e72-4b8e-8ad7-4bf51a56d8a8.png)

### 動作確認
最後に、大阪リージョンのRoute53 Resolver Outbound Endpointを通って、オハイオリージョンのRoute53 Resolver Inbound Endpointを経由し、Route53 Private Hosted Zone に登録されたドメイン「web-test.https-demo.com」の名前解決ができるか確認します。

大阪EC2にSession Manager経由で接続し、「web-test.https-demo.com」にnslookupコマンドを実行後、オハイオEC2のIPアドレスが返ってこれば成功です。

![名前解決_動確.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3332470/79f21491-56ef-4d4c-88b1-6842997f1c6b.png)


<a id="#Chapter3"></a>
# まとめ
Route53 Resolver Inbound/Outbound Endpointのハンズオンとして、別VPCの名前解決を行いました。
Route53 Resolver Inbound/Outbound Endpoint を触ってみたいとい方の助けになれば幸いです。

※Route53 Resolver Inbound/Outbound Endpointは利用料が高額なので、作成後速やかに削除してください。

<a id="#reference"></a>
# 参考文献
- [Route53Inbound/OutboundEndpointと転送ルールを使用して別VPCを名前解決する](https://qiita.com/tonkatsu_oishi/items/b17393d1690c764b2b4d)