← Poskytovatel Cloudflare Terraform / terraform / additional-configurations
Konfigurace vlastních pravidel WAF pomocí Terraformu
Tato stránka obsahuje příklady vytváření WAF custom rules v zóně nebo účtu pomocí Terraformu. Příklady pokrývají tyto scénáře:
Dokumentace WAF obsahuje další příklady pro Terraform, viz Další zdroje.
Pokud používáte Cloudflare API, podívejte se na následující zdroje v dokumentaci WAF:
Další informace o nasazení a konfiguraci vlastních sad pravidel pomocí Rulesets API najdete v Práce s vlastními sadami pravidel v dokumentaci k Ruleset Engine.
Než začnete
Získejte potřebná ID účtu nebo zóny
Konfigurace Terraformu uvedené na této stránce vyžadují ID zóny (nebo ID účtu) zóny či účtu, do kterého budete rulesety nasazovat.
- 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.
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.
Přidání vlastního pravidla do zóny
Následující příklad konfiguruje vlastní pravidlo ve vstupním rulesetu zóny pro http_request_firewall_custom fázi pro zónu s ID <ZONE_ID>. Pravidlo zablokuje veškerý provoz na nestandardních portech HTTP(S):
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:
resource "cloudflare_ruleset" "zone_custom_firewall" {
zone_id = var.cloudflare_zone_id
name = "Phase entry point ruleset for custom rules in my zone"
description = ""
kind = "zone"
phase = "http_request_firewall_custom"
rules = [{
ref = "block_non_default_ports"
description = "Block ports other than 80 and 443"
expression = "(not cf.edge.server_port in {80 443})"
action = "block"
}]
}resource "cloudflare_ruleset" "zone_custom_firewall" {
zone_id = "<ZONE_ID>"
name = "Phase entry point ruleset for custom rules in my zone"
description = ""
kind = "zone"
phase = "http_request_firewall_custom"
rules {
ref = "block_non_default_ports"
description = "Block ports other than 80 and 443"
expression = "(not cf.edge.server_port in {80 443})"
action = "block"
}
}Chcete-li vytvořit další vlastní pravidlo, přidejte nové rules objekt do stejného cloudflare_ruleset prostředek.
Vytvoření a nasazení vlastní sady pravidel
Následující příklad vytváří vlastní sada pravidel v účtu s ID <ACCOUNT_ID> obsahující jedno vlastní pravidlo. Tato vlastní sada pravidel se poté nasadí pomocí samostatného cloudflare_ruleset prostředek Terraform. Pokud vlastní sadu pravidel nenasadíte, nespustí se.
Následující konfigurace vytvoří vlastní ruleset s jedním pravidlem:
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_firewall_custom_ruleset" {
account_id = var.cloudflare_account_id
name = "Custom ruleset blocking traffic in non-standard HTTP(S) ports"
description = ""
kind = "custom"
phase = "http_request_firewall_custom"
rules = [{
ref = "block_non_default_ports"
description = "Block ports other than 80 and 443"
expression = "(not cf.edge.server_port in {80 443})"
action = "block"
}]
}resource "cloudflare_ruleset" "account_firewall_custom_ruleset" {
account_id = "<ACCOUNT_ID>"
name = "Custom ruleset blocking traffic in non-standard HTTP(S) ports"
description = ""
kind = "custom"
phase = "http_request_firewall_custom"
rules {
ref = "block_non_default_ports"
description = "Block ports other than 80 and 443"
expression = "(not cf.edge.server_port in {80 443})"
action = "block"
}
}Chcete-li ve vlastním rulesetu vytvořit další vlastní pravidlo, přidejte nové rules objekt do stejného cloudflare_ruleset prostředek.
Následující konfigurace nasadí vlastní ruleset na úrovni účtu. Definuje závislost na account_firewall_custom_ruleset prostředek a použije ID vytvořené vlastní sady pravidel v action_parameters:
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_firewall_custom_entrypoint" {
account_id = var.cloudflare_account_id
name = "Account-level entry point ruleset for the http_request_firewall_custom phase deploying a custom ruleset"
description = ""
kind = "root"
phase = "http_request_firewall_custom"
depends_on = [cloudflare_ruleset.account_firewall_custom_ruleset]
rules = [{
ref = "deploy_custom_ruleset_example_com"
description = "Deploy custom ruleset for example.com"
expression = "(cf.zone.name eq \"example.com\") and (cf.zone.plan eq \"ENT\")"
action = "execute"
action_parameters = {
id = cloudflare_ruleset.account_firewall_custom_ruleset.id
}
}]
}resource "cloudflare_ruleset" "account_firewall_custom_entrypoint" {
account_id = "<ACCOUNT_ID>"
name = "Account-level entry point ruleset for the http_request_firewall_custom phase deploying a custom ruleset"
description = ""
kind = "root"
phase = "http_request_firewall_custom"
depends_on = [cloudflare_ruleset.account_firewall_custom_ruleset]
rules {
ref = "deploy_custom_ruleset_example_com"
description = "Deploy custom ruleset for example.com"
expression = "(cf.zone.name eq \"example.com\") and (cf.zone.plan eq \"ENT\")"
action = "execute"
action_parameters {
id = cloudflare_ruleset.account_firewall_custom_ruleset.id
}
}
}Další informace o konfiguraci a nasazení vlastních sad pravidel najdete v Práce s vlastními sadami pravidel v dokumentaci k Ruleset Engine.