はじめに
- AWS上で、NetworkFirewallの構築をした際に気を付けるポイントについて共有します
対象者
- AWSでNetworkFirewallをMSR構成で構築予定の方
前提条件
- MSRとは
- ルートテーブルでVPCのサブネット宛てのルートを設定できる機能
- 参考:https://d1.awsstatic.com/webinars/jp/pdf/services/202110_AWS_Black_Belt_Network_Firewall_advanced01.pdf
アーキテクチャ構成
以下の構成を例に解説します。
Networkfirewallを利用した構成は大きく以下の2パターンがあります。
パターン①(本構成):EC2→Networkfirewall→Nat/ALB
パターン② :EC2→Nat/ALB→Networkfirewall
以下構成図の構成はMSR機能を利用することでNetworkFirewallエンドポイントをALBとEC2の間に配置しています。この構成を取るメリットとして、networkfirewallでブロックする通信がある分Nat Gatewayのコストが小さいことと、Networkfirewall目線で接続元のEC2のアドレスが見えることが考えられます。
発生した事象と注意点
EC2に対する通信をALBのみに制限したい際に以下の図のセキュリティグループのように接続元をセキュリティグループIDで指定する設定をしていました。
以下の状態の場合、ALBからEC2に対するヘルスチェックが通りません。
正しくは、以下の図のように、セキュリティグループIDではなく、サブネットのCIDRを明示的に許可してあげる必要があります。
以下のAWSのセキュリティグループに関するページに以下の記載があるのですが、本構成のNetworkfirewallのようなミドルボックスアプライアンスを使用する場合はセキュリティグループIDを指定することができません。
ミドルボックスアプライアンスを介して異なるサブネット内の 2 つのインスタンス間のトラフィックを転送するようにルートを設定するには、両方のインスタンスのセキュリティグループでインスタンス間のトラフィックがフローできるようにする必要があります。各インスタンスのセキュリティグループは、他のインスタンスのプライベート IP アドレス、または他のインスタンスを含むサブネットの CIDR 範囲を送信元として参照される必要があります。他のインスタンスのセキュリティグループを送信元として参照する場合、インスタンス間のトラフィックは許可されません。
調べても見つかりにくい情報だったため、ご参考になれば幸いです。
おわりに
- ヘルスチェックの疎通確認で、VPCのReachability Analyzerを使ったのですが、通信経路をトレースできて事象解決に役立ちました。