AWS VPC（プレフィックスリスト）を振り返ってみた。

こんにちは。

VPCにはいつもお世話になっています。
なんだかんだ定義数が多くなりがちなVPC関連の設定ですが、プレフィックスリストによってグルーピングできるようです。

2020年6月にリリースされた機能ですので、使っている方は多いとは思います。その後のリリースでは、2022年4月に大阪リージョンで使用できるようになり、2022年7月にNetwork Firewallで使用できるようになりました。

Amazon Virtual Private Cloud (VPC) で、お客様独自のプレフィックスリストを使用して、セキュリティグループとルートテーブルの設定の簡素化が可能に
https://aws.amazon.com/jp/about-aws/whats-new/2020/06/amazon-virtual-private-cloud-customers-use-prefix-lists-simplify-configuration-security-groups-route-tables/

Amazon Virtual Private Cloud (VPC) プレフィックスリストが AWS アジアパシフィック (大阪) リージョンで利用可能に
https://aws.amazon.com/jp/about-aws/whats-new/2022/04/amazon-vpc-prefix-list-osaka-region/

AWS Network Firewall が VPC プレフィックスリストのサポートを開始
https://aws.amazon.com/jp/about-aws/whats-new/2022/07/aws-network-firewall-vpc-prefix-lists/

はじめに
---
複数のリージョンに同じCIDRを設定する必要が出ましたので、プレフィックスリストでできることを再確認することになりました。リソースを共有したり、コピーをしてAWSマネジメントコンソールから簡単に構築をしたいという目的があります。

・知っていること。
　プレフィックスリストにCIDRを登録することで、セキュリティグループやルートテーブルの定義にCIDRを1つずつ定義することなく、簡潔になる。
　システム分離を目的にAWSアカウントを分ける場合でもアカウント間の共有は可能である。
　※他の方がわかりやすく整理していましたので、こちらの検証は割愛します。

・知らないこと。
　（細かいですが）ネットワークACLには使えるのか。
　東京リージョンで定義したプレフィックスリストを大阪リージョンにコピーできるのか。
　東京リージョンで定義したプレフィックスリストを大阪リージョンに共有できるのか。
　NetworkFirewallでプレフィックスリストを使ったことがない。

ということで知らないことを試していきます。

試してみる
---
①ネットワークACLにプレフィックスリストを指定してみる。
②-1東京リージョンで定義したプレフィックスリストを大阪リージョンにコピーできるのか。
②-2東京リージョンで定義したプレフィックスリストを大阪リージョンに共有できるのか。
③NetworkFirewallでプレフィックスリストを使ってみる。

### ①ネットワークACLにプレフィックスリストを指定してみる。
ダメでした。エラーになります。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/78561164-7faa-e36f-5a3f-c28f9eff6373.png)

### ②東京リージョンで定義したプレフィックスリストを他リージョンにコピーする。
確認観点は2点です。
②-1　東京リージョンで定義したプレフィックスリストを大阪リージョンにコピーできるのか。
②-2　東京リージョンで定義したプレフィックスリストを大阪リージョンに共有できるのか。

ダメでした。
アクションメニューにコピーはありません。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/eab0f888-9539-0c72-5326-197da54483fb.png)

プレフィックスリストのリソース共有は、RAMを使用して他AWSアカウントと共有するものです。異なるリージョンに対する共有の機能はありませんでした。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/7101c2bc-6dbe-4045-1f2d-79ee5d3622d1.png)
※物理的なロケーションが違うので、当たり前といえば当たり前な気がします。

同じ定義を複数リージョンに配置したい場合、素直にCloudFormationを使いましょう。
ちなみに、同一リージョン内のリソース共有は大阪リージョンでも行えました。
RAMの簡単な設定になるので割愛します。


### ③NetworkFirewallでプレフィックスリストを使ってみる。
ネットワークファイアウォールのルールグループでプレフィックスリストを使用します。
試すために新しいネットワークファイアウォールのルールグループを作成します。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/ddfdeeed-d1f1-516c-8945-a719107f72d8.png)

「IPセット参照 - オプション」にプレフィックスリストを登録します。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/f19d5861-cfc4-bddb-b1a4-fe39965c96c4.png)
※プレフィックスリストの最大エントリ数がCIDRの使用数になりました。使っていなくても予約されるようです。

ルールに追加します。
IPセット参照で定義した変数名に、先頭@を付けることで定義できます。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/2217e820-23df-ec5b-dd3a-a734d7b79585.png)

無事に追加できました。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/ca3cd98a-e344-5a6a-d541-66ac81cd2691.png)

余談
---
NetworkFirewallでは、ルール変数もありますが、プレフィックスリストは設定することができません。プレフィックスリストを読み込めませんのでご注意ください。
![21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/3aca3169-6ab5-1851-b782-19f9eb297266.png)


同様にルールに直接プレフィックスリストは設定できません。
IPセットを経由しましょう。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/513ed6a7-e793-9024-a923-32559df09d69.png)
設定しようとしても以下のエラーがでます。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2606412/775b22d7-4e91-68aa-58d2-5ec628b0e31f.png)


まとめ
---
・プレフィックスリストを使用することでセキュリティグループやルートテーブルの管理が簡潔に行えるので積極的に使う。（既存の定義も直したい。）
・プレフィックスリストの最大エントリが大きすぎるとセキュリティグループのServiceQuotesによりはじかれます。またネットワークファイアウォールのキャパシティユニットも過剰に取られます。適切な値を設計しましょう。
・複数のリージョンで同じような設定をするときは、CloudFormationやCLI等を活用します。