← Poskytovatel Cloudflare Terraform / terraform / additional-configurations
Konfigurace WAF Managed Rules pomocí Terraformu
Tato stránka obsahuje příklady nasazování a konfigurace WAF Managed Rules ve vaší zóně nebo účtu pomocí Terraformu. Pokrývá tyto konfigurace:
- Nasazení spravovaných sad pravidel na úrovni zóny
- Nasazení spravovaných sad pravidel na úrovni účtu
- Nastavte výjimky
- Konfigurace protokolování payloadu
- Konfigurace přepisů
- Konfigurace úrovně paranoia OWASP, prahové hodnoty skóre a akce
Pokud používáte Cloudflare API, podívejte se na následující zdroje:
- Nasazení spravované sady pravidel WAF pomocí API
- Nasazení spravované sady pravidel WAF přes API (účet)
Další informace o nasazení a konfiguraci spravovaných sad pravidel pomocí Rulesets API najdete v Práce se spravovanými sadami pravidel v dokumentaci k Ruleset Engine.
Než začnete
Získejte potřebná ID účtu, zóny a spravované sady pravidel
Konfigurace Terraformu uvedené na této stránce vyžadují ID zóny (nebo ID účtu) zóny či účtu, do kterého budete nasazovat spravované rulesety.
- Chcete-li získat seznam účtů, ke kterým máte přístup, včetně jejich ID, použijte Výpis účtů operace.
- Chcete-li získat seznam zón, ke kterým máte přístup, včetně jejich ID, použijte Výpis zón operace.
Nasazení spravovaných rulesetů přes Terraform vyžaduje použití ID rulesetů. Chcete-li zjistit ID spravovaných rulesetů, použijte Seznam sad pravidel na úrovni účtu operaci. Odpověď bude obsahovat popis a ID existujících spravovaných sad pravidel.
ID spravovaných rulesetů WAF najdete také v WAF Managed Rules stránce.
Import nebo odstranění existujících sad pravidel
Terraform předpokládá, že má nad rulesety účtu a zóny úplnou kontrolu. Pokud již máte v účtu nebo zóně rulesety nakonfigurované, postupujte jedním z následujících způsobů:
- Import existujících sad pravidel do Terraformu pomocí
cf-terraformingnástroje. Novější verze tohoto nástroje umí vygenerovat definice prostředků pro existující rulesety a importovat jejich konfiguraci do stavu Terraformu. - Začněte od začátku tím, že odstraňování stávajících rulesetů (sady pravidel účtu a zóny s
"kind": "root"a"kind": "zone", v tomto pořadí) a poté nadefinujete konfiguraci svých rulesetů v Terraformu.
Nasazení spravovaných sad pravidel na úrovni zóny
Následující příklad nasazuje dva spravované rulesety do zóny s ID <ZONE_ID> pomocí Terraformu, konkrétně pomocí cloudflare_ruleset prostředek se dvěma pravidly, která spouštějí spravované sady pravidel.
Požadovaná oprávnění API tokenu
Alespoň jeden z následujících oprávnění tokenu je povinné:
Zone WAF Write
Nakonfigurujte cloudflare_ruleset ↗ prostředek:
# Configure a ruleset at the zone level for the "http_request_firewall_managed" phase
resource "cloudflare_ruleset" "zone_level_managed_waf" {
zone_id = var.cloudflare_zone_id
name = "Managed WAF entry point ruleset"
description = "Zone-level WAF Managed Rules config"
kind = "zone"
phase = "http_request_firewall_managed"
rules = [
{
# Execute Cloudflare Managed Ruleset
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters = {
id = "efb7b8c949ac4650a09736fc376e9aee"
}
},
{
# Execute Cloudflare OWASP Core Ruleset
ref = "execute_cloudflare_owasp_core_ruleset"
description = "Execute Cloudflare OWASP Core Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters = {
id = "4814384a9e5d4991b9815dcfc25d2f1f"
}
},
]
}# Configure a ruleset at the zone level for the "http_request_firewall_managed" phase
resource "cloudflare_ruleset" "zone_level_managed_waf" {
zone_id = "<ZONE_ID>"
name = "Managed WAF entry point ruleset"
description = "Zone-level WAF Managed Rules config"
kind = "zone"
phase = "http_request_firewall_managed"
# Execute Cloudflare Managed Ruleset
rules {
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters {
id = "efb7b8c949ac4650a09736fc376e9aee"
}
}
# Execute Cloudflare OWASP Core Ruleset
rules {
ref = "execute_cloudflare_owasp_core_ruleset"
description = "Execute Cloudflare OWASP Core Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters {
id = "4814384a9e5d4991b9815dcfc25d2f1f"
}
}
}Nasazení spravovaných sad pravidel na úrovni účtu
Následující příklad nasazuje dva spravované rulesety do účtu s ID <ACCOUNT_ID> pomocí Terraformu, konkrétně pomocí cloudflare_ruleset prostředek se dvěma pravidly, která spouštějí spravované sady pravidel pro dva hostnames patřící do zón Enterprise.
Požadovaná oprávnění API tokenu
Všechny následující oprávnění tokenu jsou povinné:
Account WAF WriteAccount Rulesets Write
Nakonfigurujte cloudflare_ruleset ↗ prostředek:
resource "cloudflare_ruleset" "account_level_managed_waf" {
account_id = var.cloudflare_account_id
name = "Managed WAF entry point ruleset"
description = "Account-level WAF Managed Rules config"
kind = "root"
phase = "http_request_firewall_managed"
rules = [
{
# Execute Cloudflare Managed Ruleset
ref = "execute_cloudflare_managed_ruleset_api_store"
description = "Execute Cloudflare Managed Ruleset on my account-level phase entry point ruleset"
expression = "http.host in {\"api.example.com\" \"store.example.com\"} and cf.zone.plan eq \"ENT\""
action = "execute"
action_parameters = {
id = "efb7b8c949ac4650a09736fc376e9aee"
}
},
{
# Execute Cloudflare OWASP Core Ruleset
ref = "execute_owasp_core_ruleset_api_store"
description = "Execute Cloudflare OWASP Core Ruleset on my account-level phase entry point ruleset"
expression = "http.host in {\"api.example.com\" \"store.example.com\"} and cf.zone.plan eq \"ENT\""
action = "execute"
action_parameters = {
id = "4814384a9e5d4991b9815dcfc25d2f1f"
}
},
]
}resource "cloudflare_ruleset" "account_level_managed_waf" {
account_id = "<ACCOUNT_ID>"
name = "Managed WAF entry point ruleset"
description = "Account-level WAF Managed Rules config"
kind = "root"
phase = "http_request_firewall_managed"
# Execute Cloudflare Managed Ruleset
rules {
ref = "execute_cloudflare_managed_ruleset_api_store"
description = "Execute Cloudflare Managed Ruleset on my account-level phase entry point ruleset"
expression = "http.host in {\"api.example.com\" \"store.example.com\"} and cf.zone.plan eq \"ENT\""
action = "execute"
action_parameters {
id = "efb7b8c949ac4650a09736fc376e9aee"
}
}
# Execute Cloudflare OWASP Core Ruleset
rules {
ref = "execute_owasp_core_ruleset_api_store"
description = "Execute Cloudflare OWASP Core Ruleset on my account-level phase entry point ruleset"
expression = "http.host in {\"api.example.com\" \"store.example.com\"} and cf.zone.plan eq \"ENT\""
action = "execute"
action_parameters {
id = "4814384a9e5d4991b9815dcfc25d2f1f"
}
}
}Nastavte výjimky
Následující příklad přidává dva výjimky pro spravovanou sadu pravidel Cloudflare:
- První pravidlo přeskočí provedení celého Cloudflare Managed Ruleset (s ID
) pro konkrétní adresy URL podle výrazu pravidla. - Druhé pravidlo přeskočí provedení dvou pravidel patřících do Cloudflare Managed Ruleset pro konkrétní adresy URL, a to podle výrazu pravidla.
Přidejte obě výjimky do cloudflare_ruleset prostředek před pravidlo, které nasazuje spravovanou sadu pravidel Cloudflare:
resource "cloudflare_ruleset" "zone_level_managed_waf" {
# (...)
rules = [
{
# Skip execution of the entire Cloudflare Managed Ruleset for specific URLs
ref = "skip_cloudflare_managed_ruleset_example_com"
description = "Skip Cloudflare Managed Ruleset"
expression = "(http.request.uri.path eq \"/status\" and http.request.uri.query contains \"skip=rulesets\")"
action = "skip"
action_parameters = {
rulesets = ["efb7b8c949ac4650a09736fc376e9aee"]
}
},
{
# Skip execution of two rules in the Cloudflare Managed Ruleset for specific URLs
ref = "skip_wordpress_sqli_rules_example_com"
description = "Skip WordPress and SQLi rules"
expression = "(http.request.uri.path eq \"/status\" and http.request.uri.query contains \"skip=rules\")"
action = "skip"
action_parameters = {
rules = {
# Format: "<RULESET_ID>" = ["<RULE_ID_1>", "<RULE_ID_2>"]
"efb7b8c949ac4650a09736fc376e9aee" = ["5de7edfa648c4d6891dc3e7f84534ffa", "e3a567afc347477d9702d9047e97d760"]
}
}
},
{
# Execute Cloudflare Managed Ruleset
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters = {
id = "efb7b8c949ac4650a09736fc376e9aee"
}
},
# (...)
]
}resource "cloudflare_ruleset" "zone_level_managed_waf" {
# (...)
# Skip execution of the entire Cloudflare Managed Ruleset for specific URLs
rules {
ref = "skip_cloudflare_managed_ruleset_example_com"
description = "Skip Cloudflare Managed Ruleset"
expression = "(http.request.uri.path eq \"/status\" and http.request.uri.query contains \"skip=rulesets\")"
action = "skip"
action_parameters {
rulesets = ["efb7b8c949ac4650a09736fc376e9aee"]
}
}
# Skip execution of two rules in the Cloudflare Managed Ruleset for specific URLs
rules {
ref = "skip_wordpress_sqli_rules_example_com"
description = "Skip WordPress and SQLi rules"
expression = "(http.request.uri.path eq \"/status\" and http.request.uri.query contains \"skip=rules\")"
action = "skip"
action_parameters {
rules = {
# Format: "<RULESET_ID>" = "<RULE_ID_1>,<RULE_ID_2>,..."
"efb7b8c949ac4650a09736fc376e9aee" = "5de7edfa648c4d6891dc3e7f84534ffa,e3a567afc347477d9702d9047e97d760"
}
}
}
# Execute Cloudflare Managed Ruleset
rules {
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters {
id = "efb7b8c949ac4650a09736fc376e9aee"
}
}
# (...)
}Konfigurace přepisů
Následující příklad přidává tři přepisy pro spravovanou sadu pravidel Cloudflare:
- Přepsání pravidla s ID
5de7edfa648c4d6891dc3e7f84534ffaa akci nastaví nalog. - Přepsání pravidla s ID
75a0060762034a6cb663fd51a02344cbdeaktivující pravidlo. - Přepsání značky pro
wordpressznačky a nastaví akci všech pravidel s touto značkou najs_challenge.
Následující konfigurace obsahuje tři overridy v pravidle, které spouští Cloudflare Managed Ruleset:
# (...)
# Execute Cloudflare Managed Ruleset
rules = [{
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters = {
id = "efb7b8c949ac4650a09736fc376e9aee"
overrides = {
rules = [
{
id = "5de7edfa648c4d6891dc3e7f84534ffa"
action = "log"
enabled = true
},
{
id = "75a0060762034a6cb663fd51a02344cb"
enabled = false
},
]
categories = [{
category = "wordpress"
action = "js_challenge"
enabled = true
}]
}
}
}]
# (...) # (...)
# Execute Cloudflare Managed Ruleset
rules {
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters {
id = "efb7b8c949ac4650a09736fc376e9aee"
overrides {
rules {
id = "5de7edfa648c4d6891dc3e7f84534ffa"
action = "log"
enabled = true
}
rules {
id = "75a0060762034a6cb663fd51a02344cb"
enabled = false
}
categories {
category = "wordpress"
action = "js_challenge"
enabled = true
}
}
}
}
# (...)Konfigurace protokolování payloadu
Tento příklad povoluje protokolování payloadu pro odpovídající pravidla spravované sady pravidel Cloudflare, čímž se nastaví veřejný klíč použitý k šifrování zaznamenaného payloadu.
Na pravidlo nasazující Cloudflare Managed Ruleset navazuje následující konfigurace pravidla, která přidává matched_data objekt s veřejným klíčem použitým k šifrování payloadu:
# (...)
# Execute Cloudflare Managed Ruleset
rules = [{
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters = {
id = "efb7b8c949ac4650a09736fc376e9aee"
matched_data = {
public_key = "Ycig/Zr/pZmklmFUN99nr+taURlYItL91g+NcHGYpB8="
}
}
}]
# (...) # (...)
# Execute Cloudflare Managed Ruleset
rules {
ref = "execute_cloudflare_managed_ruleset"
description = "Execute Cloudflare Managed Ruleset on my zone-level phase entry point ruleset"
expression = "true"
action = "execute"
action_parameters {
id = "efb7b8c949ac4650a09736fc376e9aee"
matched_data {
public_key = "Ycig/Zr/pZmklmFUN99nr+taURlYItL91g+NcHGYpB8="
}
}
}
# (...)Konfigurace úrovně paranoia OWASP, prahové hodnoty skóre a akce
Spravovaný ruleset OWASP podporuje následující konfigurace:
-
Povolte všechna pravidla až po určitou úroveň paranoia vytvořením přepisů značek, které zakážou všechna pravidla patřící vyšším úrovním paranoia.
-
Nastavte akci, která se provede, pokud je vypočítané skóre hrozby vyšší než prahová hodnota skóre, vytvořením přepisu pravidla pro poslední pravidlo v sadě Cloudflare OWASP Core Ruleset (pravidlo s ID
), včetně actionvlastnost. -
Nastavte prahovou hodnotu skóre vytvořením přepisu pravidla pro poslední pravidlo v sadě Cloudflare OWASP Core Ruleset (pravidlo s ID
), včetně score_thresholdvlastnost.
Další informace o dostupných konfiguračních hodnotách najdete v Cloudflare OWASP Core Ruleset stránku v dokumentaci WAF.
Následující příklad pravidla typu cloudflare_ruleset prostředek Terraform provede tuto konfiguraci:
- Nasadí spravovanou sadu pravidel OWASP.
- Nastaví úroveň paranoje OWASP na PL2.
- Nastaví prahovou hodnotu skóre na
60(Low). - Nastaví akci sady pravidel na
log.
# (...)
# Execute Cloudflare OWASP Core Ruleset
rules = [{
ref = "execute_owasp_core_ruleset"
description = "Execute Cloudflare OWASP Core Ruleset"
expression = "true"
action = "execute"
action_parameters = {
id = "4814384a9e5d4991b9815dcfc25d2f1f"
overrides = {
# By default, all PL1 to PL4 rules are enabled.
# Set the paranoia level to PL2 by disabling rules with
# tags "paranoia-level-3" and "paranoia-level-4".
categories = [
{
category = "paranoia-level-3"
enabled = false
},
{
category = "paranoia-level-4"
enabled = false
},
]
rules = [{
id = "6179ae15870a4bb7b2d480d4843b323c"
action = "log"
score_threshold = 60
}]
}
}
}]
# (...) # (...)
# Execute Cloudflare OWASP Core Ruleset
rules {
ref = "execute_owasp_core_ruleset"
description = "Execute Cloudflare OWASP Core Ruleset"
expression = "true"
action = "execute"
action_parameters {
id = "4814384a9e5d4991b9815dcfc25d2f1f"
overrides {
# By default, all PL1 to PL4 rules are enabled.
# Set the paranoia level to PL2 by disabling rules with
# tags "paranoia-level-3" and "paranoia-level-4".
categories {
category = "paranoia-level-3"
enabled = false
}
categories {
category = "paranoia-level-4"
enabled = false
}
rules {
id = "6179ae15870a4bb7b2d480d4843b323c"
action = "log"
score_threshold = 60
}
}
}
}
# (...)