מדריך קלאודפלייר בעברית

תיעוד 150

יצירה באמצעות Terraform

#הגדרת כללי WAF מותאמים אישית באמצעות Terraform

בדף זה יש דוגמאות ליצירת כללי WAF מותאמים אישית באזור או בחשבון באמצעות Terraform. הדוגמאות מכסות את התרחישים הבאים:

תיעוד ה-WAF כולל דוגמאות Terraform נוספות. ראו משאבים נוספים.

אם אתם משתמשים ב-API של Cloudflare, ראו את המשאבים הבאים בתיעוד ה-WAF:

למידע נוסף על פריסה והגדרה של ערכות כללים מותאמות אישית באמצעות Rulesets API, ראו עבודה עם ערכות כללים מותאמות אישית בתיעוד Ruleset Engine.

#לפני שמתחילים

#השגת מזהי החשבון או האזור הנדרשים

הגדרות Terraform שבדף זה זקוקות למזהה האזור (או למזהה החשבון) של האזור או החשבון שבו תפרסו ערכות כללים.

  • כדי לאחזר את רשימת החשבונות שיש לכם גישה אליהם, כולל המזהים שלהם, השתמשו בפעולה List accounts.
  • כדי לאחזר את רשימת האזורים שיש לכם גישה אליהם, כולל המזהים שלהם, השתמשו בפעולה List zones.

#ייבוא או מחיקה של ערכות כללים קיימות

Terraform מניח שיש לו שליטה מלאה על ערכות הכללים של החשבון ושל האזור. אם כבר מוגדרות ערכות כללים בחשבון או באזור, בצעו אחת מהאפשרויות הבאות:

  • ייבוא ערכות כללים קיימות אל Terraform באמצעות הכלי cf-terraforming. גרסאות עדכניות של הכלי יכולות ליצור הגדרות משאבים עבור ערכות כללים קיימות ולייבא את ההגדרה שלהן אל מצב Terraform.
  • התחלה מחדש על ידי מחיקת ערכות כללים קיימות (ערכות כללים של חשבון ושל אזור עם "kind": "root" ו-"kind": "zone", בהתאמה) ואחר כך הגדרת תצורת ערכות הכללים ב-Terraform.

#הוספת כלל מותאם אישית לאזור {#add-a-custom-rule-to-a-zone}

הדוגמה הבאה מגדירה כלל מותאם אישית בערכת כללי נקודת הכניסה של האזור עבור השלב http_request_firewall_custom, עבור אזור עם המזהה <ZONE_ID>. הכלל יחסום את כל התעבורה ביציאות HTTP(S) לא סטנדרטיות:

הרשאות נדרשות לאסימון API

נדרשת לפחות אחת מהרשאות האסימון הבאות:

  • Zone WAF Write

הגדירו את המשאב cloudflare_ruleset:

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"
  }
}

כדי ליצור כלל מותאם אישית נוסף, הוסיפו אובייקט rules חדש לאותו משאב cloudflare_ruleset.

#יצירה ופריסה של ערכת כללים מותאמת אישית {#create-and-deploy-a-custom-ruleset}

הערה

כל הלקוחות יכולים ליצור ערכות כללים מותאמות אישית ברמת האזור. ערכות כללים מותאמות אישית ברמת החשבון דורשות תוכנית Enterprise עם תוסף בתשלום.

הדוגמה הבאה יוצרת ערכת כללים מותאמת אישית בחשבון עם המזהה <ACCOUNT_ID> שמכילה כלל מותאם אישית יחיד. ערכת הכללים המותאמת אישית הזו נפרסת אחר כך באמצעות משאב Terraform נפרד מסוג cloudflare_ruleset. אם לא תפרסו ערכת כללים מותאמת אישית, היא לא תבוצע.

ההגדרה הבאה יוצרת ערכת כללים מותאמת אישית עם כלל יחיד:

הרשאות נדרשות לאסימון API

נדרשות כל הרשאות האסימון הבאות:

  • Account WAF Write
  • Account Rulesets Write

הגדירו את המשאב cloudflare_ruleset:

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"
  }
}

כדי ליצור כלל מותאם אישית נוסף בערכת הכללים המותאמת אישית, הוסיפו אובייקט rules חדש לאותו משאב cloudflare_ruleset.

ההגדרה הבאה פורסת את ערכת הכללים המותאמת אישית ברמת החשבון. היא מגדירה תלות במשאב account_firewall_custom_ruleset ומשתמשת במזהה של ערכת הכללים המותאמת אישית שנוצרה ב-action_parameters:

הרשאות נדרשות לאסימון API

נדרשות כל הרשאות האסימון הבאות:

  • Account WAF Write
  • Account Rulesets Write

הגדירו את המשאב cloudflare_ruleset:

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
    }
  }
}

למידע נוסף על הגדרה ופריסה של ערכות כללים מותאמות אישית, ראו עבודה עם ערכות כללים מותאמות אישית בתיעוד Ruleset Engine.

#משאבים נוספים {#more-resources}