AWS Firewall Manager で AWS WAF の共通デフォルトアクションに対するカスタムリクエスト/カスタムレスポンスの設定が出来るようになりました

2022.09.12

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

いわさです

AWS Firewall Manager で AWS Organizations 利用時に指定した OU に対して統制的に WAF ポリシーを一括で管理することが出来ます。

これまでは Firewall Manager 上ではセキュリティポリシーに含めたそれぞれのルールグループで Allow/Block の際のカスタムアクションを設定することが出来ていましたが、セキュリティポリシー自体のデフォルトアクションでは Allow か Block までしか設定出来ませんでした。

今回のアップデートでデフォルトアクションに加えて、Allow 時のカスタムリクエストと Block 時のカスタムレスポンスが設定出来るようになりました。

どのような設定が出来るか実際に設定しながら確認してみましたので紹介したいと思います。

設定方法

まず AWS Firewall Manager を使った、Organizations 内の WAF の一元管理方法については以下にて詳しく紹介されているのでご参照ください。

こちらのルール設定の部分を見て頂くとわかるのですが、以前まではDefault web ACL action for requests that don't match any rules in the web ACLの部分が Allow か Block が設定出来るだけでした。
ここで設定した選択肢によってその次の設定可能な内容が変わります。

Allow を選択

Allow を選択した場合は カスタムリクエストヘッダーを最大 10 件までオプションで設定することが出来ます。
いずれの Web ACL にも該当しなかった場合にデフォルト動作として Allow となり、更にここで追加したキーがx-amzn-waf-というプレフィックスを付与した上でリクエストヘッダーとして追加されます。

対象アカウントに自動配布された Web ACL を確認してみると同じデフォルトアクションが設定されていますね。

こちらを API Gateway に設定してルールに該当しないようにリクエストを送信してみましょう。

リクエスト後に API Gateway へのリクエストログを確認してみると、x-amzn-waf-fugaという形でリクエストヘッダーが追加されていますね。

(35337048-9d5e-4c94-8264-b690a1f09485) Method request headers: {x-amzn-waf-fuga=fugavalue, User-Agent=curl/7.79.1, X-Forwarded-Proto=https, X-Forwarded-For=203.0.113.100, Host=md9d32y751.execute-api.ap-northeast-1.amazonaws.com, X-Forwarded-Port=443, X-Amzn-Trace-Id=Root=1-631eccfb-6a17dd6f38f9b9f70927c876, accept=/}

Block を選択

では次に Block アクション時の設定内容を確認してみます。

Block の場合はまずカスタムレスポンス自体の有効化/無効化が選択出来ます。
Block のみでカスタムレスポンスを設定しないことも出来ます。

有効化した場合は以下が設定可能です。

  • レスポンスコード
  • レスポンスヘッダー
  • レスポンスボディ

以下のような形で設定してみます。

先程と同じように Web ACL にも反映されていますね。

既に API Gateway に設定済みなのでこのままリクエストを送信してみます。

% curl -i https://md9d32y751.execute-api.ap-northeast-1.amazonaws.com/hoge
HTTP/2 503 
date: Mon, 12 Sep 2022 06:29:49 GMT
content-type: application/json
content-length: 17
x-amzn-requestid: aafc48ad-fb7e-46ea-89eb-58b5f2963aa0
x-amzn-errortype: ForbiddenException
piyo: piyovalue
x-amz-apigw-id: YVW6qFC9tjMFS5A=

{"hoge": "iwasa"}

設定したカスタムレスポンスが返却されましたね。
Block 時のカスタムレスポンスの場合は Allow 時のカスタムリクエストヘッダーのようなプレフィックスは付与されずにそのまま設定した内容が出力されるので気をつけましょう。

さいごに

本日は AWS Firewall Manager で AWS WAF の共通デフォルトアクションに対するカスタムアクションの詳細な挙動を設定することが出来るようになったので試してみました。

まず組織内のアカウントを一元管理出来る Firewall Manager ですが Web ACL の全ての機能がサポートされているわけではないのだなというのを今回のアップデートで改めて知りました。そういったケースで採用を見送っていたケースがあるかもしれませんね。
今まで Firewall Manager で管理をしたかったがカスタムレスポンスが設定できないからなということで見送っていた方などは改めてご検討頂ければと思います。