はじめに
VPCブロックパブリックアクセスはインターネットへ出る時にブロックするのか、インターネット宛ての通信をブロックするのかがわからなかったので、検証してみました。
本記事は、筆者の備忘録も含んでいます。
VPCブロックパブリックアクセス(BPA)とは
BPAの詳しい話は以下が参考になります。
https://qiita.com/watany/items/ef2d1c83fd6cce3d5e87
また、AWS公式では以下のように記載されています。
VPC ブロックパブリックアクセス (BPA) は、AWS アカウント全体で VPC リソースに対するパブリックインターネットアクセスを厳然と防止できるようにする一元的なセキュリティ機能です。これにより、特定の例外や監査機能については柔軟に対応しながら、セキュリティ要件を確実に遵守できます。
VPC BPA 機能には次のモードがあります:
[双方向]: このリージョンのインターネットゲートウェイとエグレスのみのインターネットゲートウェイとの間のすべてのトラフィック (除外された VPC とサブネットを除く) がブロックされます。
[イングレスのみ]: このリージョンの VPC に対するすべてのインターネットトラフィック (除外される VPC またはサブネットを除く) がブロックされます。NAT ゲートウェイとエグレスのみのインターネットゲートウェイとの間のトラフィックのみが許可されます。なぜなら、これらのゲートウェイはアウトバウンド接続の確立のみを許可するからです。
引用元:https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/security-vpc-bpa.html
VPC BPAは意図しないインターネット通信を防止するサービスであり、インターネットゲートウェイ(IGW)やEgress-onlyインターネットゲートウェイ(EIGW)を利用したインターネット通信をブロックするサービスのようです。
気になったこと
IGWやEIGWを介した直接的なインターネット通信はブロックするという風に読み取れましたが、以下のような疑問が浮かびました。
- VPCの内外での境界線で作用するのか?IGWやEIGWで作用するのか?
- Transit Gateway(TGW)等を利用した別VPCを経由する間接的なインターネット通信はブロックしないのか?
先に結論
TGWを利用して他VPCのIGWを利用する場合は、IGWが属しているVPCのVPC BPAの設定に依存するようです。
つまり、VPC BPAによるインターネット接続のブロックは、IGWやEIGWを通る際に評価されるということになります。
検証してみた
本記事のVPC BPA設定は「双方向」で実施しています。
IGWを利用したインターネット通信
ブロックされるパターン
VPC BPAを設定することでインターネット通信がブロックされます。

通信可能なパターン
EC2が属するサブネットをVPC BPAの除外設定することでインターネット通信可能になります。

IGW+NATGWを利用したインターネット通信
ブロックされるパターン
VPC BPAを設定することでインターネット通信がブロックされます。

通信可能なパターン
NATGWが属するサブネットをVPC BPAの除外設定することでインターネット通信可能になります。

TGWを使用して別VPCのIGW+NATGWを利用した通信 (本題)
VPC BPAはリージョン内のVPCすべてに適用されるものであり、片方のVPCではオン、もう片方のVPCではオフという状況を作るために、東京リージョンと大阪リージョンにそれぞれVPCを構築し、各リージョンをTGWで接続しました。
ブロックされるパターン
どちらのVPCもVPC BPAを設定することでインターネット通信がブロックされます。

通信可能なパターン1
IGWが属するVPCはVPC BPA設定をオフ、インターネットを利用するEC2が属するVPCはVPC BPA設定をオンの場合は、インターネット通信可能になります。

通信可能なパターン2
どちらのVPCもVPC BPAを設定していても、NATGWが属するサブネットをVPC BPAの除外設定することでインターネット通信可能になります。
まとめ
VPC外に出るパブリックアクセスを一元的にブロックするのではなく、IGWやEIGWを通る際にパブリックアクセスをブロックするサービスであることは気を付けたほうがよさそうです。
VPCからパブリックアクセスを完全にブロックしたい場合は、VPC BPAをオンに設定するだけではなく、VPC外へTGWやDirectConnect、Site-to-Site VPN等で接続している先の経路設定も確認する必要があります。
参考
- Amazon Virtual Private Cloud ユーザーガイド - VPC BPA の基本
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/security-vpc-bpa-basics.html