AWS事例002:AWS Network Firewall設定してみた02

KK
2023-07-28
2023-07-28

年三日坊主のKKです。

先日、nginxに複数ドメインで共用するためドキュメントルート外にphpMyAdminを設定したら、ログイン後に /index.php へリダイレクトされてしまう現象に陥って途方に暮れていたところ、同僚ガジュマル育ててる人nginxでドキュメントルート外にphpMyAdminを設置する際にはまったことという、そのものズバリの解答が書かれたブログを紹介してくれて一瞬で解決しました。
ありがとうガジュマル育ててる人!、ありがとうエンジニアブログ!


※本記事は「AWS事例001:AWS Network Firewall設定してみた01」の続きです。

前回はAWS Network Firewallのデプロイが完了したところまでご紹介しました。
今回はAWS Network Firewall設定の要と言って良いルーティング設定についてご紹介します。

参考:What is AWS Network Firewall?

前回のAWS Network Firewallのデプロイが完了した時点では以下のようにAWS Network Firewallのファイアウォールエンドポイントは存在していますが、トラフィックはAWS Network Firewallとは無関係に従来通りインターネットゲートウェイとパブリックサブネットの間を直接ルーティングされて流れています。

このままでは折角AWS Network Firewallをデプロイしても全く意味がありません。
インターネットゲートウェイとパブリックサブネットを行き来するすべてのトラフィックが必ずファイアウォールエンドポイントを通り、AWS Network Firewallによるチェックを受けるようにルーティングを変更してやる必要があります。

目指す姿は以下の図のようにInternet Gatewayと各アベイラブルゾーンのPublic Subnetの間を流れるトラフィックが必ずファイアウォールエンドポイントを通るようにすることです。

まず、以下の図のリボン矢印のように各AZごとにパブリックサブネットからインターネット(0.0.0.0/0)へのトラフィックを、それぞれのAZのAWS Network Firewallエンドポイントに向けるルートテーブルを作っていきます。

AZ(a)用とわかるような名前でルートテーブルを作ります。ルートテーブルが出来たら、「ルート」タブの「ルートを編集」から「ルートを追加」して、送信先をインターネット(0.0.0.0/0)、ターゲットに前回メモした当該AZのファイアウォールエンドポイントIDを入力し、変更を保存します。次に「サブネットの関連付け」タブで当該AZのパブリックサブネットを関連付けます。同じように他のAZ用のルートテーブルも作成します。

次に、以下の図のリボン矢印のように各AZのAWS Network Firewall専用サブネットからインターネット(0.0.0.0/0)へのトラフィックをインターネットゲートウェイに向けるルートテーブルを作成します。AZ(a)用とわかるような名前でルートテーブルを作ります。ルートテーブルが出来たら、「ルート」タブの「ルートを編集」から「ルートを追加」して、送信先をインターネット(0.0.0.0/0)、ターゲットにインターネットゲートウェイを指定し、変更を保存します。次に「サブネットの関連付け」タブで当該AZのAWS Network Firewall専用サブネットを関連付けます。

同じように他のAZ用のルートテーブルも作成します。

最後に、以下の図のリボン矢印のようにインターネットゲートウェイから各パブリックサブネットへのトラフィックをそれぞれのAZに対応するAWS Network Firewallエンドポイントに向けるルートテーブルを作成します。インターネットゲートウェイのイングレスルートとわかるような名前でルートテーブルを作ります。ルートテーブルが出来たら、「Edgeの関連付け」タブでインターネットゲートウェイを関連付けます。次に「ルート」タブの「ルートを編集」から「ルートを追加」して、送信先を各パブリックサブネット、ターゲットにそれぞれのパブリックサブネットに対応するAZのファイアウォールエンドポイントIDを指定し、変更を保存します。以上でAWS Network Firewallを有効に機能させるための最低限の設定は完了です。
これで以下のようにすべてのトラフィックがAWS Network Firewallでチェックされるようになります。

前回と今回でざっくりとAWS Network Firewallの設定について解説しました。
私は一番最後のインターネットゲートウェイから各セグメントへのイングレスルーティング設定の部分が概念としてしばらく理解できず苦労しました。
AWSのルートテーブル設定はサブネットを関連付けてルーティングするものと思い込んでいると、Edgeを関連付けてルーティング設定するという新しい概念がなかなか頭に入ってこないものですね。

なお、AWS Network Firewallの実装方式としては前回と今回でご紹介した「分散型の導入モデル」以外にも「集約型の導入モデル」や分散型と集約型を組み合わせた「複合型の導入モデル」もありますので、機会があればご紹介したいと思います。

・参考:AWS Network Firewallのデプロイモデル - Amazon Web Services ブログ

本記事の執筆にあたっては本文中に記載したサイトの他、以下のサイトを参考にさせて頂きました。

VPC向けファイアウォールのAWS Network Firewallをハンズオンで体感する | DevelopersIO
VPC Ingress Routingとは何かを噛み砕いて理解してみる | DevelopersIO

なお、表示される内容は利用状況やAWSの仕様変更ににより変化しますのでご注意ください。