Firewall ManagerでWAF用ポリシーを一元管理してみた

2022.07.27

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、つくぼし(tsukuboshi0755)です!
最近Firewall Managerを用いたWAFポリシーの設定方法を検証する機会があったので、ご紹介します。

Firewall Managerとは?

AWS Firewall Manager は、AWS WAF、AWS Shield Advanced、Amazon VPC セキュリティグループ、AWS Network Firewall、Amazon Route 53 Resolver DNS Firewall など、さまざまな保護のために、複数のアカウントとリソースにおける管理とメンテナンスのタスクを簡素化します。Firewall Manager を使用すると、保護を 1 回設定するだけで、アカウントとリソースに (追加する新しいアカウントとリソースにも) その保護が自動的に適用されます。

上記の通り、AWSにおける様々なサービスのセキュリティルールを、複数の環境ごとにまとめて管理する事ができます。
特にOrganazationsを用いたマルチアカウント環境において、特定のOU配下のメンバーアカウントに対して、共通のセキュリティルールを設定/管理する際に非常に有用です。

2022年7月時点では、Firewall Managerを使用する事で、以下のAWSサービスのポリシーを一元管理で操作する事ができます。

  • AWS WAF(v1/v2)
  • Security Group
  • AWS Shield Advanced
  • AWS Network Firewall
  • Amazon Route 53 Resolvers DNS Firewall

今回は以上の内、AWS WAF(v2)のポリシーをFirewall Managerで設定してみたいと思います!

Firewall ManagerでのWAFポリシー設定方法

Firewall Managerの開始

初めにFirewall Manager管理者のアカウントにおいて、WAF&Shieldコンソール画面で、左ペインのGetting startedにある、Get Startedをクリックします。

Administrator Account IDにFirewall Manager管理者のAWSアカウントIDを入力し、Set Administrator Accountをクリックする事で、Firewall Managerが開始されます。

WAFポリシーの作成

次に、Firewall Manager準拠のWAFポリシーを作成します。
Firewall Manager準拠のWAFポリシーを作成すると、管理者アカウント及び適用対象のアカウントに対して、WebACLが新規で作成されます。

WAF&Shieldコンソール画面で、左ペインのSecurity policiesにある、Create policyをクリックします。

AWS servicesでは、今回のポリシー作成対象であるAWS WAFを選択します。
Regionでは、対象リージョンを選択します。
設定内容に問題がなければ、Nextをクリックします。

Policy Nameでは、今回作成するポリシーの名前を入力します。

Policy rulesでは、今回作成するポリシーで使用するルールを選択します。
Add rule groupsで、ルールグループを追加します。

First rule groupsには、例としてAWSマネージドルールであるCore rule set及びAdmin protectionを追加します。
対象ルールにて、Add to web ACLを有効化します。

Last rule groupsには、例としてAWSマネージドルールであるAmazon IP reputation listを追加します。
対象ルールにて、Add to web ACLを有効化します。

以下の通り、ルールが設定されます。
必要に応じて、ルールの適用順序をMove up及びMove downで変更してください。

Default web ACL actionSample requests configurationは、全てデフォルトのままにします。
またLogging configurationPolicy actionについては、今回はポリシー作成後に有効化するため、一旦デフォルトのままでスキップします。

設定内容に問題がなければ、Nextをクリックします。

Policy scopeでは、ポリシーの適用範囲を設定します。
今回は、Include only the specified accounts and organizational unitsを選択する事で、特定のアカウントまたはOUに対してポリシーを適用します。
Included organaizational unitsのEditをクリックし、適用したいOUを選択し追加します。

Resource TypeはApplication Load Balancerを選択します。 またResourcesにてタグごとに適用範囲を設定できますが、今回は使用しないためデフォルトのままにします。

設定内容に問題がなければ、Nextをクリックします。

Policy tagsでは、タグを設定します。
今回は設定しないため、Nextをクリックします。

最後に設定内容一覧が表示されます。 設定内容に問題がなければ、Create policyをクリックする事で、ポリシーが作成されます。

Policy scopeで指定したOUに所属するアカウントのWAF&Shieldコンソール画面を見ると、新規でFirewall Managerポリシー準拠のWebACLが作成されている事がわかります。
なお新規で作成されるWebACLは、以下の形で名前が付けられます。

FMManagedWebACLV2-policy name-timestamp

First rule groupsで追加したルールは、WebACLを通過する通信に対して一番初めに適用されます。
一方で、Last rule groupsで追加したルールは、WebACLを通過する通信に対して一番最後に適用されます。

RulesAdd rulesをクリックする事で、アカウントごとに異なるルールを設定できます。
この場合、First rule groups, from AWS Firewall ManagerRulesLast rule groups, from AWS Firewall Managerの順で、WebACLを通過する通信に対してルールが適用されるようになります。

WAFポリシーの自動修復(2022/8/4追記)

Firewall Managerの自動修復を有効化する事で、作成されたFirewall Manager準拠のWebACLが既存リソースに紐付けられます。
既存リソースに対する変更が入るため、作業内容に問題がない事を確認してから実施しましょう。

今回は自動修復の検証用に、Firewall Managerとは別で、対象OU所属アカウント配下に事前に以下の通りALB及びWebACLを作成し、ALBに対してWebACLを紐づけておきます。

初めにFirewall Manager管理者のアカウントにおいて、WAF&Shieldコンソール画面で、左ペインのSecurity policiesにある、作成したポリシーをクリックします。

Overviewを見ると、自動修復がDisabledになってます。
またAccounts and resourcesタブでは、ポリシー対象のアカウントのStatusがNoncompliantとなっており、Firewall Manager非準拠のリソースが存在する事が分かります。

アカウントIDをクリックすると、Firewall Manager非準拠のリソース一覧が表示されます。
今回は、先ほど作成したALBが表示されました。

自動修復を有効化する事で、ここに表示されているリソースに対してFirewall Manager準拠のWebACLが紐づけられます。

Accounts and resourcesタブに戻り、Policy detailsタブに切り替えた後、Policy actionEditをクリックします。

Identify resources that don't comply with the policy rules, but don't auto remediateのままの場合、自動修復は無効化され、Firewall Managerポリシー非準拠のリソースの検出のみ実行されます。

Auto remediate any noncompliant resourcesを選択する事で、自動修復が有効化され、Firewall Manager準拠のWebACLを紐付けしてくれます。

また、Replace web ACLs that are currently associated with in-scope resources with the web ACLs created by this policyにチェックを入れる事で、Firewall Manager非準拠のWebACLの紐付けを自動的に解除してくれます。

内容に問題がなければ、Saveをクリックします。

Overviewを見ると、自動修復がEnabledになってます。 またAccounts and resourcesタブを確認すると、ポリシー対象のアカウントのStatusがCompliantとなっており、全てのALBがFirewall Manager準拠となりました。

対象OU所属アカウントにおいてWebACLを確認すると、以下の通りFirewall Manager非準拠のWebACLからは紐付け解除され、Firewall Manager準拠のWebACLに紐付けされている事が分かります。

WAFログの集約化

Firewall Managerでは、Kinesis Data Firehoseと連携する事で、各WebACLのWAFログを集約する事ができます。
今回はS3を用いて、Firewall Manager→Kinesis Data Firehose→S3の順で、単一のバケットにWAFログを集約するよう設定してみます。

ログの集約化を実施するにあたり、Firewall Manager管理者のアカウント配下で、事前に以下のようなKinesis Data Firehose配信ストリーム及びS3バケットが必要となります。

なおWAFログの集約化でKinesis Data Firehoseを指定する場合、ストリームの名前がaws-waf-logs-から始まる必要があるので注意してください。

Kinesis Data Firehose配信ストリーム及びS3バケットの設定方法の詳細については、以下のブログをご参照ください。

事前作業が完了した後、Firewall Manager管理者のアカウントにおいて、WAF&Shieldコンソール画面で、左ペインのSecurity policiesにある、作成したポリシーをクリックします。

Policy detailsタブに切り替えた後、Policy rulesEditをクリックします。

Logging ConfigurationEnabledに切り替えます。
Amazon Kinesis Data Firehose delivery streamにて、事前作業で作成したKinesis Data Firehose配信ストリームを選択します。

なおRedacted fieldsでは、チェックを付けた項目についてログに記録しないようにします。 またLog Filtersでは、保持対象のログを特定の条件でフィルタリングできます。
必要に応じて使用して下さい。

設定内容に問題がなければ、Nextをクリックします。

最後に設定内容一覧が表示されます。 設定内容に問題がなければ、Saveをクリックする事で、ポリシーが変更されます。

Policy scopeで指定したOUに所属するアカウントのWebACLのLogging and metricsタブを見てみると、指定したKinesis Data Firehose配信ストリーム宛で、ログ設定が有効化されている事がわかります。

(以下2022/8/4追記)
S3バケットには以下のような形で、集約化されたWAFログが日付単位で保存されます。

例えばアカウント毎にS3バケットのパーティションを分けたいというような場合は、以下のブログのようなKinesis FirehoseとLambdaを用いた構成変更が必要になるためご注意ください。

WAFポリシー設定のポイント(2022/8/4追記)

ルールの適用順

前述の通り、各アカウントで作成されたFirewall Manager準拠のWebACLは、First rule groupsRulesLast rule groupsの順で、通信に対してルールが適用されるようになります。

そのため、どの順番で一元管理対象のルールを適用するか、事前に検討しておきましょう。

自動修復のタイミング

自動修復は、ポリシー作成時、またはポリシー作成後に有効化する事が可能です。

自動修復を無効化している場合、Firewall Manager非準拠のリソースを検出する事が可能となります。

そのため一旦は自動修復は無効化(デフォルト)のままポリシーのみ作成し、Firewall Managerポリシー非準拠のリソースを検出してから、必要に応じて自動修復を有効化するのが良いでしょう。

集約されたログの出力先

Firewall Managerでログを集約化する場合、現状S3やCloudWatch Logsに直接出力する事ができず Kinesis Data Firehoseを介する必要があります。

Kinesis Data Firehoseを経由すると追加料金がかかってしまうので、アップデートが待ち遠しいですね。

利用料金(2022/8/4追記)

Firewall Managerを有効化する事でかかる料金は以下の通りです。

・AWS Firewall Manager 保護ポリシー – リージョンごとの月額料金
・AWS WAF WebACL またはルール – Firewall Manager により作成されたものは、現行の料金に基づき課金されます。詳細については、AWS WAF の料金をご参照ください。
・AWS Config ルール – Firewall Manager で作成された、リソース設定の変更をモニタリングするためのルールは、現行の料金に基づき課金されます。詳細については、AWS Config の料金表をご参照ください。

具体的には、リージョン別で、Firewall ManagerのWAFポリシー1つにつき月額100USD(日割計算)かかります。

またFirewall Managerにより作成されるWebACL、及びリソース変更の監視を記録するAWS Configに対してもそれぞれ料金がかかるため、全ての使用料金を合わせると結構な金額になります。

ポリシー適用対象のアカウント数が少ない場合、使用料金に対してポリシーを一元管理するメリットが得にくいため、個別にポリシー管理する方が良い場面もありそうです。

逆にポリシー適用対象のアカウント数が膨大な場合、ポリシー管理が非常に煩雑になりがちなため、Firewall Managerによりポリシーを一元管理するメリットは大きいです。

以上のように、ポリシー適用対象のアカウント数を基準に、Firewall Managerの採用可否を検討すると良いでしょう。

最後に

Firewall Managerが出た当時と比べると、コンソールの設定画面が大きく変わってますね。

Firewall Managerを用いる事で、Organizations環境でのセキュリティルールを柔軟に制御できるようになるため、マルチアカウントを使用している方は一度試してみると良さそうです。

またマルチアカウントにおけるFirewall Managerに関するBlackBeltも出ているので、Firewall Managerの使用を検討している方はぜひご確認ください。

以上、つくぼしでした!