クラウドインテグレーション部 技術2課の山下です。
今回は、AWS Network Firewall の Rule Group Capacity(以下、キャパシティ)の計算方法を解説します。
なお、AWS Network Firewall の各ルールグループの概要については、以下ブログをご参照ください。
前提
本ブログでは2022年1月17日時点の調査に基づき解説しています。キャパシティの計算方法はAWSにより予告なく変更される場合がありますので、予めご了承ください。
ステートレスルールグループ
1つのルールにおけるキャパシティ計算方法
以下の式で計算します。
プロトコル数 × 送信元IPアドレス範囲(行数) × 送信元ポート範囲(行数) × 送信先IPアドレス範囲(行数) × 送信先ポート範囲(行数)
例えば、下図の設定では、必要なキャパシティは「2 × 2 × 1 × 3 × 3 = 36」です。
アクションの種別(パス or ドロップ or 転送)はキャパシティに影響しません。
なお、キャパシティの消費はあくまで行数なので、IPアドレス範囲やポート範囲は可能な限りまとめて記載した方がキャパシティの消費を抑えることができます。
例えば、上図の送信元IP「10.0.0.0/24」「10.0.1.0/24」を「10.0.0.0/23」に集約することで、必要なキャパシティ数を36から18に減らすことができます。
複数のルールがあるルールグループのキャパシティ計算方法
複数のルールがあるルールグループのキャパシティは、個々のルールのキャパシティの合計値となります。
例えば、下図のような4つのルールがある場合、Rule Group 全体のキャパシティは「36 + 6 + 36 + 6 = 84」となります。
ステートフルルールグループ
5-tuple
ステートフルルールグループの 5-tuple のキャパシティ計算方法は、単純に「1ルール = 1キャパシティ」のため、「ルール数 = キャパシティ」となります。
ステートレスルールグループと違い、1つのルールに複数のIPアドレス範囲やポート範囲が設定されていても、キャパシティ数に影響しません。
Domain list
Domain list のキャパシティ計算方法は少々ややこしく、以下のように場合分けされます。
アクションが「許可」の場合
プロトコルがHTTPSのみの場合
キャパシティ = ( ドメイン数 + 1 ) * プロトコル数
プロトコルにHTTPを含む場合
キャパシティ = { ( ドメイン数 + 1 ) * プロトコル数 } + 1
アクションが「拒否」の場合
プロトコルがHTTPSのみの場合
キャパシティ = ドメイン数 * プロトコル数
プロトコルにHTTPを含む場合
キャパシティ = ( ドメイン数 * プロトコル数 ) + 1
具体例
いくつか具体例を挙げると、下表のようになります。
なお、送信元IPの数はキャパシティに影響しません。
Suricata compatible IPS rules
Suricata compatible IPS rules の場合、5-tuple と同様に「1ルール = 1キャパシティ」のため、「ルール数 = キャパシティ」となります。
なお、「Suricataって何?」という方は、以下ブログもご参照ください。
Firewall policy
Firewall policy は、1つ以上のルールグループを関連付けて作成します。
Firewall policy のキャパシティは、関連付けた各ルールグループのキャパシティの合計値となります。(ステートレスグループとステートフルグループ の値は別々に計算されます。)
注意事項
Rule group 作成時に割り当てたキャパシティは、後から変更することができません。そのため、後からルールが追加されることも考慮し、少し余裕をもたせた値を設定することをおすすめします。
まとめ
以上、AWS Network Firewall のキャパシティの計算方法でした。
前述通り、一度設定したRule Groupのキャパシティは後から変更できないため、設計時には上記計算方法も加味し、将来的なキャパシティがどの程度増えそうかザックリ見積もっておくと良いかと思います。
この記事が少しでも参考になれば幸いです。
山下 祐樹(執筆記事の一覧)
2021年11月中途入社。前職では情シスとして社内ネットワークの更改や運用に携わっていました。 2023 Japan AWS All Certifications Engineers。