[アップデート] AWS WAF でログ上の特定データフィールドを保護できるオプションが追加されました

[アップデート] AWS WAF でログ上の特定データフィールドを保護できるオプションが追加されました

Clock Icon2025.02.15

いわさです。

AWS WAF ではコンソール上やログなどに受信されたデータが出力されます。
先日のアップデートで、特定のデータフィールドを保護する機能が登場しました。

What's New AWS のアナウンスがまだでていませんが、マネジメントコンソールや各種ドキュメントからは更新通知がされています。

57F0C407-9BA6-42D1-81B2-30C2CE2279BE.png

この機能を使うと、Web ACL のログやコンソール上のサンプルリクエストなど、受信したデータに関する様々な出力上で、表示される一部のフィールドを保護することができます。
これによってコンソールやログ上で、リクエストに含まれる秘匿情報を隠すことができます。

実際に設定して試してみたのでその様子を紹介します。

設定できる内容

冒頭の画像のとおり、Web ACL のログ構成タブにてデータ保護のためのエリア「Data protection settings」が追加されています。
こちらで「Enable」を有効化していきます。

AD4FB311-92FD-401D-92A4-179E083FB07B.png

まず、スコープの設定があって全ての出力に対して保護するか、特定のログ送信先のみ保護するかを選択できます。
全ての出力先には Security Lake やサンプルリクエストが含まれています。

1A2EAD7C-3383-434C-856F-CD5493352CAD.png

特定のログ送信先については CloudWatch Logs や S3 など既存のログ出力先を指しています。
ただ、私が今朝試した時点ではなぜかこちらの設定はマネジメントコンソールからは有効化が出来ませんでした。API 経由あるいはマネジメントコンソールが更新されるのを待つ必要がありそうです。

144F8E7E-D560-4E56-9CEC-5C2FA886022B.png

ということで今回は All logging で設定をしていこうかなと思います。
スコープを決めたら次にデータ保護フィールドを指定する必要があります。

3AFAEBB0-8584-41EA-9D4A-5D1B764E0647.png

指定できるフィールドは Body、クエリ文字列、クッキー、ヘッダーなどのフィールドタイプをまず指定します。

846E494C-E223-4AA3-9AAC-14C62CDCBFE8.png

指定されたフィールドタイプごとに対象フィールドの指定方法は異なるのですが、以下はクッキーの場合です。
クッキー名以外は全フィールドタイプで共通の設定項目となっていまして、フィールドをハッシュ化するか置換するかを選択できます。置換文字列は設定できずシステム既定の値で置換されるようです。後ほど実際の出力を見ていただきます。

57DA52AC-45CC-41B0-BFCC-4858751C42A0.png

Field retention によってそのデータを含めないようするか、あるいは例外的にそのフィールドをデータ保護の対象外とするかを設定できます。
トラブルシューティングなどの目的でデータ保護の例外を構成するシナリオが想定されているようです。

4D8CC955-D037-4E9F-B8B6-3DF5E887839C.png

設定してみる

今回は CloudFront に Web ACL をアタッチし、そちらに適当なヘッダーやクエリ文字列を送信するケースを試してみます。
まず、データ保護の設定を追加せずにリクエストを送信してみます。

iwasa.takahito@HL01200 hoge0215waf % curl -I "https://d2gc6lupy67eup.cloudfront.net/?hoge-iwasa3=ccc" -H "hoge-iwasa1:aaa" -H "hoge-iwasa2:bbb"
HTTP/2 200 
content-type: text/html; charset=UTF-8

:

サンプルリクエストをコンソールで確認すると次のような内容が確認できます。
ヘッダーもクエリ文字列も出力されていますね。

9B6E8FC7-81CF-4CAB-8EEC-7F2E73939282.png

上記のフィールドを保護してみます。
ログ構成タブから次のようにデータ保護フィールドを指定しました。

9D93499B-8A22-4D0E-A03D-5F8E8FB933AB.png

同じようにリクエストを送信して同じようにサンプルリクエストを確認してみると...

B36C67F5-FB5A-4F49-8B48-FB5DD6A25975.png

おっ、指定したクエリ文字列やヘッダーが保護されていますね!
クエリ文字列とヘッダー「hoge-iwasa1」はハッシュ化を指定しました。
「hoge-iwasa2」については置換を指定しました。置換文字列は「REDACTED」になるようです。

なお、データ保護されるのはログ上の話で、CloudFront 側のログ情報からはデータ保護される前の情報を確認することができます。データ保護によってアプリケーション上の挙動がおかしくなることはなさそうですね。

DDC3085E-5B1B-425D-A2EB-1FA93E754175.png

制限事項や注意事項

フィールドタイプによって指定可能な項目が異なっているのですが、本日時点で以下の制限があります。[1]

  • クエリ文字列は全ての引数が対象となる
  • 各設定値の条件によって RuleMatch と RateBased の適用条件が異なる

また、本機能について以下のように注意書きがされています。
トラブルシューティングに影響を及ぼし予期しない検出や緩和動作が発生する可能性があるとのことで、必要なものへのみ使うようにしましょうとのことです。[2]

Warning
The data protection feature may potentially affect troubleshooting AWS WAF capabilities. These settings can cause unexpected detection and mitigation behaviors. Limit data protection for specific parameters to only those that are absolutely necessary.

さいごに

本日は AWS WAF でログ上の特定データフィールドを保護できるオプションが追加されたので試してみました。

ログ上に表示される秘匿情報をどうにか保護したいなというシーンは多いので、特定フィールドを指定する形ですが役に立ちそうな機能だと思います。
注意事項に気をつけて採用してみましょう。

脚注
  1. Data protection limitations - AWS WAF, AWS Firewall Manager, and AWS Shield Advanced ↩︎

  2. Data protection exceptions - AWS WAF, AWS Firewall Manager, and AWS Shield Advanced ↩︎

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.