コンテンツにスキップ

Cloud Armor ルールの管理方法

Cloud Armor のセキュリティポリシーを変更・追加する手順です。

現在のルール構成

modules/setup/loadbalancer.tf にルールが定義されています。

Priority 条件 アクション
5 メンテナンス中の developer_ip_ranges(指定時のみ) Allow(バイパス)
100 OWASP(XSS / Protocol Attack / LFI) Deny(403)
101 SQLi(/api/ 配下) Deny(403)(一部除外済み)
102 SQLi(/api/ 以外) Deny(403)(一部除外済み)
110 メンテナンス中の全トラフィック(メンテナンスモード時のみ) Deny(403)
200 allowed_ip_ranges のIP(IP制限あり時のみ Allow
350 日本以外のアクセス(IP制限なし時のみ Deny(403)
450 レートリミット超過 500回/分(IP制限なし時のみ Deny(429)
2147483647 デフォルト Deny(403)

誤検知(False Positive)の調査

WAF のログは polaris-dwh-project の BigQuery に集約されています。
以下のクエリで、日本からのアクセスのうち WAF ルールに引っかかったリクエストを確認できます(参考程度に)。

https://console.cloud.google.com/bigquery?ws=!1m5!1m4!4m3!1spolaris-dwh-project!2swaf_logs!3srequests

SELECT DISTINCT
  httpRequest.requestUrl,
  expr
FROM
  `polaris-dwh-project.waf_logs.requests`,
  UNNEST(jsonpayload_type_loadbalancerlogentry.enforcedsecuritypolicy.preconfiguredExprIds) AS expr
WHERE
  jsonpayload_type_loadbalancerlogentry.enforcedsecuritypolicy.priority IN (100, 101, 102, 103)
  AND jsonPayload_type_loadBalancerLogEntry.securityPolicyRequestData.remoteIpInfo.regionCode = "JP"
ORDER BY
  httpRequest.requestUrl;

expr に出てくるルールID(例: owasp-crs-v030001-id942200-sqli)が誤検知の候補です。


除外ルール(opt_out_rule_ids)の追加方法

誤検知と判断したルールは opt_out_rule_ids に追加して除外します。

modules/setup/loadbalancer.tf の該当 Priority を編集します。

例: Priority 101(/api/ 配下のSQLi)に除外ルールを追加する場合

expression = join("", [
  "request.path.startsWith('/api/') && ",
  "evaluatePreconfiguredWaf('sqli-stable', {'opt_out_rule_ids': [",
  "'owasp-crs-v030001-id942200-sqli',",
  "'owasp-crs-v030001-id942260-sqli',",
  "'owasp-crs-v030001-id942999-sqli'",  # ← 新たに追加
  "]})",
])

除外したルールとその理由は、コメントで残しておくと後から経緯がわかりやすくなります(既存ルールのコメントを参考にしてください)。

terraform apply で反映

cd environments/${NEWENV}/setup
terraform plan -var-file="terraform.tfvars"
terraform apply -var-file="terraform.tfvars"