Firewall ManagerでWAF用ポリシーを一元管理してみた
こんにちは、つくぼし(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 action
、Sample requests configuration
は、全てデフォルトのままにします。
またLogging configuration
、Policy 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を通過する通信に対して一番最後に適用されます。
Rules
のAdd rules
をクリックする事で、アカウントごとに異なるルールを設定できます。
この場合、First rule groups, from AWS Firewall Manager
→Rules
→Last 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 action
のEdit
をクリックします。
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 rules
のEdit
をクリックします。
Logging Configuration
をEnabled
に切り替えます。
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 groups
→Rules
→Last 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の使用を検討している方はぜひご確認ください。
以上、つくぼしでした!