CR課の前田です。久しぶりにNetwork Firewallについてのブログを書かせていただきます。
結論
Network Firewallを経由する通信にはTransit Gatewayのセキュリティグループ参照が適用されない
各セキュリティグループではCIDRベースで許可設定をしてあげましょう
Transit Gatewayセキュリティグループ参照とは?
Transit Gatewayで接続している別VPCのセキュリティグループを参照できる機能です。
詳細についてはAWS Transit Gateway でのセキュリティグループ参照の導入をご確認下さい。
無条件で利用できるわけではなく、アウトバウンドルールでは参照不可…等色々と制限があるのですが、その中の一つに標題の制限がございました。
上記ドキュメントにさらっと書かれていたのですが、結構罠だな…と感じたので今回筆をとりました。
検査 VPC がある場合、Transit Gateway を介して参照するセキュリティグループは、 AWS Gateway Load Balancer または AWS Network Firewall 全体では機能しません。
略語について
本ブログ中では下記の略語を使用します。
NFW … Network Firewall
NFWe…Nework Firwall Endpoint
TGW … Transit Gateway
TGWatt … Transit Gatewayアタッチメント
TGWrtb … Transit Gatewayルートテーブル
SG … セキュリティグループ
TGWSG参照 … Transit Gatewayセキュリティグループ参照
検証方法
Network Firewall検証環境を作成するためのCloudFormationテンプレート作ってみたで作成できる検証環境を使用して3段階の検証を実施します。
1段階目
NFWを経由しないルートで、各EC2のSGインバウンドルールにおいて、通信相手のSG参照した状態で通信を行い、通信出来ることを確認します。
2段階目
NFWを経由するようルート更新し、SG参照した状態では通信出来なくなることを確認します。
3段階目
各SGインバウンドルールにおいて、SG参照ではなくCIDRベースで制御するよう更新し、通信出来るようになることを確認します。
事前準備
SG参照設定有効化
TGWおよび各TGWattのSG参照設定を有効化します。
■TGW本体
■vpc-NwMngのTGWatt
■vpc-Spoke1のTGWatt
■vpc-Spoke2のTGWatt
各SGインバウンドルールにて通信先SGの参照
vpc-Spoke1、vpc-Spoke2それぞれのEC2に紐づくSGのインバウンドルールにて、通信相手のSG IDを送信元とする通信を許可します。
■vpc-Spoke1上EC2のSG
■vpc-Spoke2上EC2のSG
検証_1段階目
VPCルートテーブル設定
vpc-Spoke1、vpc-Spoke2間の通信がTGWサブネットで折り返すようにルート設定し、NFWを通らないようにします。
実際の設定画面は下記のようになります。
疎通検証
vpc-Spoke1のEC2(10.0.1.68)→vpc-Spoke2のEC2(10.0.2.84)
vpc-Spoke2のEC2(10.0.2.84)→vpc-Spoke2のEC2(10.0.1.68)
上記のようにお互いに疎通できることが確認できました。NFWを挟まなければ、検査用VPCを経由してもTGWSG参照は有効に働くようです。
検証_2段階目
VPCルートテーブル設定変更
vpc-Spoke1、vpc-Spoke2間の通信がNFWを通るようにします。
実際の設定画面は下記のようになります。
疎通検証
vpc-Spoke1のEC2(10.0.1.68)→vpc-Spoke2のEC2(10.0.2.84)
vpc-Spoke2のEC2(10.0.2.84)→vpc-Spoke2のEC2(10.0.1.68)
上記の通り、お互いに疎通出来なくなることが確認できました。
検証_3段階目
SG設定変更
vpc-Spoke1、vpc-Spoke2それぞれのEC2に紐づくSGのインバウンドルールにて、SG IDではなく互いのVPC CIDRを許可するようにします。
■vpc-Spoke1上EC2のSG
■vpc-Spoke1上EC2のSG
疎通検証
vpc-Spoke1のEC2(10.0.1.68)→vpc-Spoke2のEC2(10.0.2.84)
vpc-Spoke2のEC2(10.0.2.84)→vpc-Spoke2のEC2(10.0.1.68)
お互い、疎通出来るようになることが確認できました。
結論(再掲)
Network Firewallを経由する通信にはTransit Gatewayのセキュリティグループ参照が適用されない
各セキュリティグループではCIDRベースで許可設定をしてあげましょう
余談
検証_1段階目において、vpc-Spoke-1、vpc-Spoke-2間の通信はvpc-NwMngを経由するようになっていました。(※NFWは経由しない)
この時、vpc-NwMngのTGWattのセキュリティグループ参照が無効だとvpc-Spoke-1とvpc-Spoke-2間の通信は互いのSG参照が出来ず通信に失敗します。
1段階目の検証を実施した直後、vpc-Spoke1上EC2とvpc-Spoke2上EC2がお互いのSGを参照して疎通可能な状態で tgw-attach-NwMngのセキュリティグループ参照のみを無効にしてみます。
vpc-Spoke1のEC2(10.0.1.68)→vpc-Spoke2のEC2(10.0.2.84)
vpc-Spoke2のEC2(10.0.2.84)→vpc-Spoke2のEC2(10.0.1.68)
上記の通り、お互いのSGを参照できず疎通不可になってしまいました。
NFWやアプライアンスを挟まず、VPC内のみを経由させたい状況があるかは分かりませんが、セキュリティグループ参照はTGWatt単位でも全てのVPCで有効化しておくのが良さそうです。
感想
ドキュメントに書いてある通りのことが分かっただけでしたが、実際にイメージを知りたい方の一助となれば幸いです。