INTEGRITY Документация

Настройка Transform Rules с помощью Terraform

На этой странице приведены примеры создания Transform Rules в зоне с помощью Terraform. Примеры охватывают следующие сценарии:

Если вы используете Cloudflare API, см. следующие ресурсы:

Прежде чем начать

Получите нужные идентификаторы аккаунта или зоны

Для конфигураций Terraform, приведённых на этой странице, требуется идентификатор зоны (или идентификатор аккаунта), в которой вы будете развёртывать наборы правил.

Импорт или удаление существующих наборов правил

Terraform исходит из того, что полностью контролирует наборы правил аккаунта и зоны. Если у вас уже настроены наборы правил в аккаунте или зоне, выполните одно из следующих действий:


Создание правила перезаписи URL

В следующем примере создаётся правило перезаписи URL, которое перезаписывает запросы к example.com/old-folder к example.com/new-folder:

Необходимые разрешения API-токена

Все перечисленные ниже права доступа токена обязательны:

  • Zone Transform Rules Write
  • Account Rulesets Read

Настройте cloudflare_ruleset ↗ ресурс:

resource "cloudflare_ruleset" "transform_url_rewrite" {
  zone_id     = var.cloudflare_zone_id
  name        = "Transform Rule performing a static URL rewrite"
  description = ""
  kind        = "zone"
  phase       = "http_request_transform"

  rules = [{
    ref         = "url_rewrite_old_folder"
    description = "Example URL rewrite rule"
    expression  = "(http.host eq \"example.com\" and http.request.uri.path eq \"/old-folder\")"
    action      = "rewrite"
    action_parameters = {
      uri = {
        path = {
          value = "/new-folder"
        }
      }
    }
  }]
}
resource "cloudflare_ruleset" "transform_url_rewrite" {
  zone_id     = "<ZONE_ID>"
  name        = "Transform Rule performing a static URL rewrite"
  description = ""
  kind        = "zone"
  phase       = "http_request_transform"

  rules {
    ref         = "url_rewrite_old_folder"
    description = "Example URL rewrite rule"
    expression  = "(http.host eq \"example.com\" and http.request.uri.path eq \"/old-folder\")"
    action      = "rewrite"
    action_parameters {
      uri {
        path {
          value = "/new-folder"
        }
      }
    }
  }
}

Чтобы создать ещё одно правило перезаписи URL, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.

Используйте ref поле, чтобы идентификаторы правил оставались стабильными при обновлениях в Terraform. Добавление этого поля не позволяет Terraform пересоздавать правило при изменениях. Дополнительную информацию см. в Устранение неполадок.


Дополнительную информацию о перезаписи URL-адресов см. в URL Rewrite Rules.

Создание правила преобразования заголовка запроса

Следующий пример конфигурации выполняет следующие изменения заголовков HTTP-запроса:

Необходимые разрешения API-токена

Все перечисленные ниже права доступа токена обязательны:

  • Zone Transform Rules Write
  • Account Rulesets Read

Настройте cloudflare_ruleset ↗ ресурс:

resource "cloudflare_ruleset" "transform_modify_request_headers" {
  zone_id     = var.cloudflare_zone_id
  name        = "Transform Rule performing HTTP request header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_request_late_transform"

  rules = [{
    ref         = "modify_request_headers"
    description = "Example request header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters = {
      headers = {
        "my-header-1" = {
          operation = "set"
          value     = "Fixed value"
        }
        "my-header-2" = {
          operation  = "set"
          expression = "cf.zone.name"
        }
        "existing-header" = {
          operation = "remove"
        }
      }
    }
  }]
}
resource "cloudflare_ruleset" "transform_modify_request_headers" {
  zone_id     = "<ZONE_ID>"
  name        = "Transform Rule performing HTTP request header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_request_late_transform"

  rules {
    ref         = "modify_request_headers"
    description = "Example request header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters {
      headers {
        name      = "my-header-1"
        operation = "set"
        value     = "Fixed value"
      }
      headers {
        name       = "my-header-2"
        operation  = "set"
        expression = "cf.zone.name"
      }
      headers {
        name      = "existing-header"
        operation = "remove"
      }
    }
  }
}

Чтобы создать ещё одно правило преобразования заголовков запроса, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.

Используйте ref поле, чтобы идентификаторы правил оставались стабильными при обновлениях в Terraform. Добавление этого поля не позволяет Terraform пересоздавать правило при изменениях. Дополнительную информацию см. в Устранение неполадок.

Дополнительную информацию об изменении заголовков запросов см. в Request Header Transform Rules.

Создание правила преобразования заголовка ответа

Следующий пример конфигурации выполняет следующие изменения заголовков HTTP-ответа:

Необходимые разрешения API-токена

Все перечисленные ниже права доступа токена обязательны:

  • Zone Transform Rules Write
  • Account Rulesets Read

Настройте cloudflare_ruleset ↗ ресурс:

resource "cloudflare_ruleset" "transform_modify_response_headers" {
  zone_id     = var.cloudflare_zone_id
  name        = "Transform Rule performing HTTP response header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_response_headers_transform"

  rules = [{
    ref         = "modify_response_headers"
    description = "Example response header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters = {
      headers = {
        "my-header-1" = {
          operation = "set"
          value     = "Fixed value"
        }
        "my-header-2" = {
          operation  = "set"
          expression = "cf.zone.name"
        }
        "existing-header" = {
          operation = "remove"
        }
      }
    }
  }]
}
resource "cloudflare_ruleset" "transform_modify_response_headers" {
  zone_id     = "<ZONE_ID>"
  name        = "Transform Rule performing HTTP response header modifications"
  description = ""
  kind        = "zone"
  phase       = "http_response_headers_transform"

  rules {
    ref         = "modify_response_headers"
    description = "Example response header transform rule"
    expression  = "true"
    action      = "rewrite"
    action_parameters {
      headers {
        name      = "my-header-1"
        operation = "set"
        value     = "Fixed value"
      }
      headers {
        name       = "my-header-2"
        operation  = "set"
        expression = "cf.zone.name"
      }
      headers {
        name      = "existing-header"
        operation = "remove"
      }
    }
  }
}

Чтобы создать ещё одно правило преобразования заголовков ответа, добавьте новый rules объект в тот же cloudflare_ruleset ресурс.

Используйте ref поле, чтобы идентификаторы правил оставались стабильными при обновлениях в Terraform. Добавление этого поля не позволяет Terraform пересоздавать правило при изменениях. Дополнительную информацию см. в Устранение неполадок.

Дополнительную информацию об изменении заголовков ответов см. в Response Header Transform Rules.

Настройка Managed Transforms

Необходимые разрешения API-токена

Все перечисленные ниже права доступа токена обязательны:

  • Managed headers Write
  • Account Rulesets Read

Настройте cloudflare_managed_transforms ↗ ресурс:

resource "cloudflare_managed_transforms" "tf_example" {
  zone_id = var.cloudflare_zone_id

  managed_request_headers = [{
    id      = "add_visitor_location_headers"
    enabled = true
  }]

  managed_response_headers = [{
    id      = "remove_x-powered-by_header"
    enabled = true
  }]
}
resource "cloudflare_managed_headers" "tf_example" {
  zone_id = "<ZONE_ID>"

  managed_request_headers {
    id      = "add_visitor_location_headers"
    enabled = true
  }

  managed_response_headers {
    id      = "remove_x-powered-by_header"
    enabled = true
  }
}

Убедитесь, что обновляемые Managed Transforms указаны в правильном объекте (managed_request_headers или managed_response_headers).

Дополнительную информацию об управляемых преобразованиях см. в Managed Transforms.