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 ルールに引っかかったリクエストを確認できます(参考程度に)。
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"