AWS PrivateLinkを利用してVMware Cloud on AWSからIPアドレス重複している別VPC環境にアクセスしてみる #2 (プライベートIPはユーザーで手動採番)

# 1. はじめに

VMware Cloud on AWS環境とネイティブAWS VPCのIPアドレス帯(CIDR)が重複している場合でも、AWS PrivateLinkを活用すればアクセスできるというのを試せたので備忘録として残しておきます。

前回の記事ではアクセス先EC2のプライベートIPアドレスはAWSが自動採番したIPを利用しましたが、今回の記事ではプライベートIPアドレスも手動採番したIPを利用します。
またアクセス先EC2は前回の記事ではWeb Server(Apache)でしたが、今回の記事ではDB Server(MySQL)としています。

## 今回の構成 (実現できた構成)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/479e79fd-93b3-8434-5357-db5645ad475b.png)


今回の記事では簡単に結果だけご紹介します。詳細なセットアップは前回の記事をご参考ください。
セットアップ手順については前回記事との差分(EC2へのプライベートIP手動採番とNLBターゲットの設定)にフォーカスして記載します。

:::note warn
今回の記事ではEC2にプライベートIPアドレスを手動採番していますが、あくまでその要件が必須である場合にだけ実施します。
 
手動でプライベートIPアドレスを採番する場合はユーザー側でIPアドレスを管理する必要がありますが、中にはAWSがサービス側で予約しているなど利用できないプライベートIPアドレスも存在するなどの制約もあり、大規模構成になってくるとIPアドレス管理が煩雑化する可能性があります。

特別な要件がない限りはAWSが自動採番するプライベートIPアドレスを利用することを推奨します。詳細についてはAWS公式ドキュメントもご参照ください。
:::

https://aws.amazon.com/jp/premiumsupport/knowledge-center/custom-private-primary-address-ec2/

https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/how-it-works.html

## (参考) 前回の構成
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/29d1a0e3-908b-d0af-e3d4-23deb41622c3.png)

https://qiita.com/sanjushi003/items/3e1351a06c93718fd063


# 2. まずは結果から

「VMC環境(192.168.0.0/20)」で稼働する「アクセス元Windows Server(192.168.15.10)」から、
「Connected VPC環境(10.0.0.0/16)」に存在する「VPC Endpoint Network Interface (10.0.3.57)」を経由して、
「アクセス先DB Server(192.168.15.251)」に対してTCP:3306(MySQL)へのアクセスができました。
> 文章だと長いので上図を参照ください。

アクセス確認には[MySQL Workbench](https://dev.mysql.com/downloads/workbench/)を利用しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/0d50eda3-f8f3-3c6a-5f26-62fa0d79b283.png)

SELECT文も実行できています。（成功！）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/149290c2-90f7-baa8-6361-152101dd96cb.png)

# 3. セットアップしてみる (概要)
前回の記事との差分にフォーカスして簡単に紹介します。詳細なセットアップ手順は前回の記事をご参考ください。

## 「アクセス先DB Server(192.168.15.251)」へのプライベートIP手動採番

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/0c785b45-84cf-a1ff-2c69-e3eaf1b0b345.png)

Amazon EC2の通常作成の際に、「高度なネットワーク設定」のオプションからプライマリIP(192.168.15.251)を手動で設定します。
今回インスタンスはt2.microを選択しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/58bb4eb1-88e2-a819-c7b7-8c16f5aeee05.png)

インスタンス作成完了すると、プライベートIPは手動で設定したとおり「192.168.1.251」となっていることが確認できます。
手動で設定したプライベートIPは、インスタンス再起動しても変更されません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/34463b58-6087-899f-89ce-1658b4b73ccf.png)

> (再掲・注意事項) 前述のとおりEC2にプライベートIPアドレスを手動採番することには注意点があります。

ちなみに[MySQL](https://dev.mysql.com/downloads/mysql/)自体は手組みでインストールして、[「world database」](https://dev.mysql.com/doc/index-other.html)という無償公開されているMySQL公式サンプルデータを利用しています。

## Network Load Balancer(NLB)とAWS Private Linkのセットアップ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/beb33590-f2df-efb2-5e03-a6b043c1deba.png)

手順は前回とほぼ同じですが、NLBターゲットの指定が「インスタンス」ではなく「IPアドレス」となる点に着目ください。

#### Network Load Balancer(NLB)のセットアップ
まずElastic Load Balancer (ELB)サービスからNLBを選択し、「作成」を進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/429214c1-b977-cc33-7b45-88a58224380d.png)

インターネットには公開しないので、スキームは「内部」を選択します。
ロードバランサーのプロトコルは今回は[MySQL Workbench](https://dev.mysql.com/downloads/workbench/)でアクセス確認したいので、TCP:3306(MySQL)を選択しています。
ロードバランサーは、「DB Server's VPC環境(192.168.0.0/20)」に作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/cb904329-4c24-4613-88cd-80c3c860ca7c.png)

セキュリティ設定の構成はデフォルトのままで作成を進めます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/481df339-ee54-53be-614c-8e9fce0b687c.png)

ターゲットの種類は「IP」を選択し、TCP:3306(MySQL)を選択しています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/851863ab-a700-47a0-4ef9-2b0cb72b4dea.png)

ターゲットには、「アクセス先DB Server(192.168.15.251)」のプライベートIPアドレス「192.168.15.251」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/c384dd2d-06cb-f7c3-b888-9959286c8c84.png)

最後に設定内容を確認し、NLBを作成します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/d0b3de1b-ee38-32cb-b639-cf58444bb8db.png)

#### 「アクセス先DB Server(192.168.15.251)」へのセキリュティグループ設定
　順番が前後しますがここで再度、NLBの挙動について確認します。
ターゲットの種類が「インスタンス」「IPアドレス」によってNLBの挙動が次のように異なります。
>(AWS公式ドキュメントから抜粋) ターゲットグループを作成するときは、そのターゲットの種類を指定します。ターゲットの種類は、ターゲットの登録方法を決定します。たとえば、インスタンス ID、IP アドレス、または Application Load Balancer を登録できます。ターゲットをインスタンス ID で登録すると、クライアントの送信元 IP アドレスが保持され、アプリケーションに提供されます。ターゲットを IP アドレスで登録する場合、送信元 IP アドレスはロードーバランサノードのプライベート IP アドレスとなります｡ ターゲットを Application Load Balancer として登録すると、クライアントの送信元 IP アドレスが保持され、アプリケーションに提供されます。詳細については、「クライアント IP の保存」を参照してください。

https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/network/introduction.html#network-load-balancer-overview

今回はターゲットを「(DB Serverの)IPアドレス」で登録しています。そのため、送信元 IP アドレスはロードーバランサノードのプライベート IP アドレスとなります｡
(前回の記事ではターゲットを「(Web Serverの」インスタンス)で登録)

「アクセス先DB Server(192.168.15.251)」のセキュリティグループでは、「192.168.0.0/20」からのTCP:3306(MySQL)アクセスを許可させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/1bbb1d45-5e61-e123-c353-d77baa8e17f2.png)

今回の環境では「VMC環境(192.168.0.0/20)」と「DB Server's VPC環境(192.168.0.0/20)」のCIDRが重複しているためわかりにくいですが、
このセキュリティグループはNLBのプライベートIPアドレスが存在する「DB Server's VPC環境(192.168.0.0/20)」からのアクセスを許可するためです。
(CIDR指定ではなくセキュリティグループでアクセス許可できそうな気もしますが、今回構成するNLBはどこのセキュリティグループにも所属していないことにご留意ください。)

> (念のため検証) 実際に再度192.168.0.0/20 (TCP:3306)からのアクセスを許可するインバウンドルールを削除した際には、「アクセス元Windows Server(192.168.15.10)」から「アクセス先DB Server(192.168.15.251)」へのMySQLアクセスもできなくなっています。

#### AWS Private Linkのセットアップ確認

手順は前回の記事と同じであるため省略し、セットアップ結果だけ確認します。

まず「VPC Endpoint Network Interface」のIPアドレスは「10.0.3.57」であると確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/5df38794-7278-6d57-8923-588ded4ec72d.png)

ここまででセットアップの全体構成は確認できました。詳細なセットアップ手順は前回の記事も合わせてご参考ください。

# 4. さいごに

AWS PrivateLinkを利用したVMware Cloud on AWSからIPアドレス重複している別VPC環境への接続について、前回と今回の記事の２本立てで確認してみました。

いずれも汎用的な活用シーンはなさそうなのですが、どうしても「CIDR重複環境同士で接続させたい」あるいは「オンプレミス環境のIPアドレスをVMC環境ネイティブAWS環境の両方で維持したい」というような場合に、このような構成もワークアラウンドとして実現できるかもしれないと思い出していただければ幸いです。

# 5. 参考記事

https://qiita.com/sanjushi003/items/3e1351a06c93718fd063