セキュリティ ポリシー ルールを調整する

評価からリクエスト フィールドを除外してルールを調整し、誤検出を減らすことができます。

ルールの除外を構成するときに、次のフィールドを検査から除外できます。

ルール評価からリクエスト フィールドを除外する

ルールのリクエスト フィールドの除外を構成するには、構成をセキュリティ ポリシー ルールに関連付けます。

これらのルールではルール ID は使用されません。代わりに、--target-rule-set フラグを次のいずれかの値に構成できます。

  • cel(--target-rule-set "cel"): そのセキュリティ ポリシー ルールのカスタム CEL ルールにのみ除外を適用します。
  • *(--target-rule-set "*"、グローバル除外): そのセキュリティ ポリシーに接続されているすべてのルール(カスタム CEL ルールと evaluatePreconfiguredWaf() を使用するルールの両方)に除外を適用します。

バックエンド セキュリティ ポリシー(グローバルとリージョンの両方)では、ターゲット(cel または *)ごとに次の各項目を最大 100 個構成できます。

  • リクエスト ヘッダー
  • リクエスト Cookie
  • リクエスト クエリ パラメータ
  • リクエストの URI
  • リクエスト本文

使用できるフィールド演算子は次のとおりです。

  • EQUALS: 指定された値とフィールド値が等しい場合に一致します。
  • STARTS_WITH: フィールド値が指定された値で始まる場合に一致します。
  • ENDS_WITH: 指定された値でフィールド値が終わる場合に一致します。
  • CONTAINS: 指定された値がフィールド値に含まれている場合に一致します。
  • EQUALS_ANY: フィールド値がなんらかの値と一致する場合に一致します。

リクエスト ヘッダー

除外フィールドにヘッダー名を使用することで、ルール評価中に特定のリクエスト ヘッダーを検査から除外できます。

リクエスト ヘッダーが除外と一致すると、ルールの評価前にヘッダー エントリ全体(名前と値の両方)が request.headers マップから削除されます。

例

次の例では、PRIORITY のセキュリティ ポリシー POLICY_NAME のルールを更新し、abc で始まるリクエスト ヘッダーまたは xyz で終わるリクエスト ヘッダーをルール評価(cel)から除外します。

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc" \
    --request-header-to-exclude "op=ENDS_WITH,val=xyz"

次のように置き換えます。

  • PRIORITY: ルールの優先度
  • POLICY_NAME: セキュリティ ポリシーの名前

リクエスト Cookie

除外フィールドで Cookie 名を使用すると、ルールの評価中に特定のリクエスト Cookie を検査から除外できます。

リクエスト Cookie が除外と一致すると、ルール評価の前に、Cookie エントリ全体(名前と値の両方)がリクエスト属性から除外されます。

例

次の例では、PRIORITY のセキュリティ ポリシー POLICY_NAME のルールを更新し、session_ で始まるリクエスト Cookie をルール評価(cel)から除外します。

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-cookie-to-exclude "op=STARTS_WITH,val=session_"

次のように置き換えます。

  • PRIORITY: ルールの優先度
  • POLICY_NAME: セキュリティ ポリシーの名前

リクエスト クエリ パラメータ

除外フィールドでパラメータ名を使用すると、ルールの評価中に特定のリクエスト パラメータを検査から除外できます。--request-query-param-to-exclude フラグは、URL クエリ パラメータと解析されたリクエスト本文パラメータ(JSON、フォームデータ、GraphQL)の両方に適用されます。

パラメータが除外に一致すると、ルール評価の前にパラメータ エントリ全体(キーと値の両方)が request.params から削除されるため、has(request.params.param_name) は false と評価されます。

解析されたリクエスト本文では、ドット表記を使用して、ネストされたフィールドと配列アイテムをターゲットに設定できます。

  • 最上位フィールド: val=user
  • ネストされたフィールド: val=user.name
  • 配列項目: val=items.0.name

例

次の例では、PRIORITY のセキュリティ ポリシー POLICY_NAME のルールを更新して、URL クエリ パラメータ bad-param、ネストされた JSON フィールド user.name、JSON 配列項目フィールド items.0.name をルール評価(cel)から除外します。

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-query-param-to-exclude "op=EQUALS,val=bad-param" \
    --request-query-param-to-exclude "op=EQUALS,val=user.name" \
    --request-query-param-to-exclude "op=EQUALS,val=items.0.name"

次のように置き換えます。

  • PRIORITY: ルールの優先度
  • POLICY_NAME: セキュリティ ポリシーの名前

リクエストの URI

ルール評価中に、リクエスト行の URI(クエリ文字列データを除く)を検査から除外できます。

URI を除外すると、URI フィールド全体が検査から除外されます。

例

次の例では、PRIORITY のセキュリティ ポリシー POLICY_NAME のルールを更新し、/bad-path を含むリクエスト URI をルール評価(cel)から除外します。

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-uri-to-exclude "op=CONTAINS,val=/bad-path"

次のように置き換えます。

  • PRIORITY: ルールの優先度
  • POLICY_NAME: セキュリティ ポリシーの名前

リクエスト本文

ルールの評価中に、特定のリクエスト本文の値を検査から除外できます。

リクエスト本文が除外と一致すると、request.body 属性はルール評価から除外されます。

例

次の例では、PRIORITY のセキュリティ ポリシー POLICY_NAME のルールを更新し、bad-body-value を含むリクエスト本文をルール評価(cel)から除外します。

gcloud compute security-policies rules add-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-body-to-exclude "op=CONTAINS,val=bad-body-value"

次のように置き換えます。

  • PRIORITY: ルールの優先度
  • POLICY_NAME: セキュリティ ポリシーの名前

フィールド値

EQUALS_ANY 以外のフィールド演算子を使用する場合は、フィールド値を指定する必要があります。

リクエスト ヘッダー、リクエスト Cookie、リクエスト クエリ パラメータのフィールド値に使用できる文字セットは、次のとおりです。

  • !、#、$、%、&、*、+、-、.、^、_、`、|、~
  • A~Z の英数字(大文字と小文字の両方)
  • 0~9 の数字

リクエスト本文の場合、フィールド値に使用できる文字セットには、'、\`,(, and)を除く、印刷可能なすべての ASCII 文字が含まれます。

  • スペース()と特殊文字: !、"、#、$、%、&、*、+、,、-、.、/、:、;、<、=、>、?、@、[、]、^、_、`、{、|、}、~
  • A~Z の英数字(大文字と小文字の両方)
  • 0~9 の数字

これらのリクエスト フィールドの除外を適用すると、構成フィールドの値(val=)と次の値が比較され(変換後は大文字と小文字が区別されない)、検査から除外するエンティティが決定されます。

  • リクエスト ヘッダー: ヘッダー名(キー)と照合して、ヘッダー全体(名前と値の両方)を除外します。
  • リクエスト Cookie: Cookie 名と照合して、Cookie 全体(名前と値の両方)を除外します。
  • リクエスト クエリ パラメータ: パラメータ名またはネストされた JSON パス(キー)と照合して、パラメータ全体(キーと値の両方)を除外します。
  • リクエスト本文: リクエスト本文のコンテンツ文字列と照合して、request.body 属性全体を除外します。

許可された文字セットに含まれていない特定の文字を除外する場合、追加のエンコードを実行する必要はありません。

リクエスト URI の場合、フィールド値は、次のコンポーネント制限がある URI 形式で指定する必要があります。

コンポーネント 制限
Scheme 許可されていますが、http または https に制限されています
ホスト 使用可能(IP アドレスを指定可能)
ポート 許可
パス 許可
クエリ 禁止
Fragment 禁止

リクエスト URI の除外を適用すると、構成フィールドの値とリクエスト行の URI(変換後は大文字と小文字が区別されない)が比較されます(クエリ文字列は除きます)。リクエスト行の URI は、相対 URI の場合と絶対 URI の場合があります。リクエスト URI の除外を構成する場合は、この点に注意してください。

除外を削除する

セキュリティ ポリシー ルールからリクエスト フィールドの除外を削除するには、remove-preconfig-waf-exclusion コマンドを使用します。対応するフィールド除外フラグを指定して特定のフィールド除外を削除することも、フィールド フラグを省略して、そのターゲット ルールセット(cel または *)のすべての除外を削除することもできます。

例

次の例では、PRIORITY のセキュリティ ポリシー POLICY_NAME のルールを更新し、abc で始まるリクエスト ヘッダーの除外をルール評価(cel)から削除します。

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel" \
    --request-header-to-exclude "op=STARTS_WITH,val=abc"

次の例では、フィールド フラグを省略して、PRIORITY のルールでルール評価(cel)用に構成されたすべてのリクエスト フィールドの除外を削除します。

gcloud compute security-policies rules remove-preconfig-waf-exclusion PRIORITY \
    --security-policy POLICY_NAME \
    --target-rule-set "cel"

次のように置き換えます。

  • PRIORITY: ルールの優先度
  • POLICY_NAME: セキュリティ ポリシーの名前