View a markdown version of this page

動的ラベル補間 - AWS WAF、 AWS Firewall Manager AWS Shield Advanced、および AWS Shield ネットワークセキュリティディレクター

の新しいコンソールエクスペリエンスの紹介 AWS WAF

更新されたエクスペリエンスを使用して、 コンソールの任意の場所で AWS WAF 機能にアクセスできるようになりました。詳細については、「コンソールの使用」を参照してください。

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

動的ラベル補間

動的ラベル補間を使用すると、${namespace:}構文を使用してカスタムリクエストヘッダー、カスタムレスポンスヘッダー、カスタムレスポンス本文にラベル値を直接埋め込むことができます。 は、評価時に各プレースホルダーをリクエストにアタッチされたラベルに対して AWS WAF 解決するため、ラベル値ごとに個別のルールを記述する必要はありません。

補間は既存の AWS WAF API 内で機能し、新しいフィールドや設定ステップはありません。プレースホルダー構文は、既存の文字列値で使用します。既存の静的ヘッダー値は引き続き変更されません。補間は、値に ${namespace:}句が含まれている場合にのみアクティブ化されます。

補間がサポートされている場所

${namespace:}間は、次の場所で使用できます。

  • カスタムリクエストヘッダー – オリジンに転送されたヘッダーに解決済みラベル値を挿入します。ヘッダー値フィールドで ${namespace:}構文を使用します。

  • カスタムレスポンス本文 – ブロックページ、チャレンジページ、およびその他のカスタムレスポンスにラベル値と合成ラベルを埋め込みます。レスポンス本文のコンテンツフィールドで ${namespace:}構文を使用します。

  • カスタムレスポンスヘッダー – リダイレクトのヘッダーなど、レスポンスLocationヘッダーにラベル値を挿入します。レスポンスヘッダー値フィールドで ${namespace:}構文を使用します。

補間構文と解決

補間を使用するには、ヘッダー値またはカスタムレスポンス本文コンテンツに ${namespace:}句を含めます。末尾のコロンは重要です。1 つのラベルを文字通り一致させるのではなく、その名前空間内のすべてのラベルを解決 AWS WAF するように に指示します。

AWS WAF は、次のルールを使用して、評価時に各句を解決します。

  1. 単一ラベル一致 – 句はラベルのターミナル値に解決されます。たとえば、リクエストにラベル がある場合awswaf:managed:aws:bot-control:bot:category:scraping、 句は に${awswaf:managed:aws:bot-control:bot:category:}解決されますscraping

  2. 複数のラベル – 複数のラベルが名前空間に一致する場合、値はカンマ区切りリストとして返され、名前空間プレフィックスは削除されます。例えば、scraping,advertising

  3. 一致なし – 句は空の文字列に解決されます。

注記

単一の文字列値は、最大 10 個の${namespace:}プレースホルダーをサポートします。値に 10 個を超えるプレースホルダーが含まれている場合、 は最初の 10 個を AWS WAF 解決し、出力に追加のプレースホルダーをリテラル${namespace:}テキストとして残します。この制限は、各リクエストではなく、各文字列値に適用されます。複数のヘッダーごとに最大 10 個のプレースホルダーを問題なく使用できます。

重要

カスタムラベルは、 で短縮名を使用しますruleLabels。例えば、app:tier:enterprise。ただし、 は短縮名に保護パック (ウェブ ACL) コンテキスト AWS WAF を自動的にプレフィックスし、完全修飾ラベルを生成します。例えば、awswaf:ACCOUNT_ID:webacl:WEBACL_NAME:app:tier:enterprise。ラベル一致ステートメントは短い名前空間で機能しますが、補間参照は常に完全修飾名前空間を使用する必要があります。

合成ラベル

補間は合成ラベルもサポートしています。これらは、ラベルストアからではなくリクエストコンテキストから解決される AWS WAF 組み込み値です。合成ラベルを同じ値文字列内の名前空間ベースのラベルと組み合わせることができます。

合成ラベル 説明
${awswaf:request_id:} 一意の AWS WAF リクエスト識別子。
${awswaf:ip:} クライアントの IP アドレス。
${awswaf:ja3:} JA3 TLS フィンガープリント。
${awswaf:ja4:} JA4 TLS フィンガープリント。

動的ラベル補間の例

動的ヘッダーを使用したアプリケーションシグナリング

次のルールは、複数の Bot Control シグナル名前空間を個別のヘッダーとしてオリジンに転送します。1 つのルールは名前空間全体を対象とするため、マネージドルールグループが新しいラベルを追加するときにルールを更新する必要はありません。

{ "Name": "forward-waf-signals", "Statement": { "LabelMatchStatement": { "Scope": "NAMESPACE", "Key": "awswaf:managed:aws:bot-control:bot:category:" } }, "RuleAction": { "Count": { "CustomRequestHandling": { "InsertHeaders": [ { "Name": "bot-category", "Value": "${awswaf:managed:aws:bot-control:bot:category:}" }, { "Name": "bot-name", "Value": "${awswaf:managed:aws:bot-control:bot:name:}" }, { "Name": "bot-signals", "Value": "${awswaf:managed:aws:bot-control:signal:}" }, { "Name": "client-ip", "Value": "${awswaf:ip:}" } ] } } } }

bot-signals ヘッダー (出力: x-amzn-waf-bot-signals) は、複数値の解決を示します。signal: 名前空間には、カンマ区切りリストに解決される などnon_browser_user_agent,automated_browser、複数のラベルを含めることができます。client-ip ヘッダー (出力: x-amzn-waf-client-ip) は合成ラベルを使用します。

デバッグ情報を含むカスタムブロックページ

合成ラベルを使用すると、リクエスト固有のコンテキストを含むブロックページを構築できます。クライアントの IP アドレスと AWS WAF リクエスト ID をレスポンス本文に直接埋め込み、ユーザーが誤検出をレポートしたときに共有する内容を提供します。

{ "CustomResponseBodies": { "BlockPage": { "Content": "Your request was blocked.\n\nIP: ${awswaf:ip:}\nRequest ID: ${awswaf:request_id:}\n\nIf you believe this is an error, contact support with the Request ID above.", "ContentType": "TEXT_PLAIN" } } }
カスタムラベル補間

補間は、独自のルールで定義したカスタムラベルなど、任意のラベル名前空間で機能します。次の例では、API キーでリクエストを分類し、階層値をオリジンに転送します。

ルール 1: API キーに基づいて階層を分類する

このルールは、リクエストをエンタープライズ API キーと照合し、カスタムラベルを適用します。

{ { "Name": "classify-tier", "Priority": 100, "Statement": { "ByteMatchStatement": { "SearchString": "pk_enterprise_", "FieldToMatch": { "SingleHeader": { "Name": "x-api-key" } }, "PositionalConstraint": "STARTS_WITH", "TextTransformations": [{ "Priority": 0, "Type": "NONE" }] } }, "RuleLabels": [{ "Name": "app:tier:enterprise" }], "Action": { "Count": {} } } }
ルール 2: 解決された階層値を転送

このルールは、app:tier名前空間内の任意のラベルに一致し、解決された値をヘッダーとして転送します。

{ { "Name": "forward-tier", "Priority": 200, "Statement": { "LabelMatchStatement": { "Scope": "NAMESPACE", "Key": "app:tier:" } }, "Action": { "Count": { "CustomRequestHandling": { "InsertHeaders": [{ "Name": "customer-tier", "Value": "${awswaf:ACCOUNT_ID:webacl:WEBACL_NAME:app:tier:}" }] } } } }

最初のルールはラベル を適用しますapp:tier:enterprise。2 番目のルールは、app:tier名前空間内の任意のラベルに一致し、解決された値を customer-tierヘッダーとして転送します。出力ヘッダー名は ですx-amzn-waf-customer-tierapp:tier:standard や など、他の階層の分類ルールを追加できますapp:tier:trial。転送ルールは、変更なしでそれらを取得します。

これらのパターンをすべて示すデプロイ可能なサンプルについては、GitHub のAWS WAF 「動的ラベル補間サンプル」を参照してください。