From c9de6e9d47ce767e4e44db746fd9e52899c95ebc Mon Sep 17 00:00:00 2001 From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> Date: Tue, 15 Jul 2025 10:49:01 +0100 Subject: [PATCH 1/5] [WAF] Update upgrade guides --- .../waf/custom-rules/custom-rules-tab.png | Bin 55284 -> 0 bytes .../legacy/firewall-rules-upgrade.mdx | 33 ++++++++---------- .../legacy/old-rate-limiting/upgrade.mdx | 14 ++++---- .../legacy/old-waf-managed-rules/upgrade.mdx | 8 ++--- 4 files changed, 23 insertions(+), 32 deletions(-) delete mode 100644 src/assets/images/waf/custom-rules/custom-rules-tab.png diff --git a/src/assets/images/waf/custom-rules/custom-rules-tab.png b/src/assets/images/waf/custom-rules/custom-rules-tab.png deleted file mode 100644 index 69f8bc93eaa049a3f43fdff0b8151924b89401cb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 55284 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 d2F&RAXaAZxj%9(I*KUx **WAF** > **Custom rules**. +Cloudflare upgraded existing [firewall rules](/firewall/) into [custom rules](/waf/custom-rules/). With custom rules, you get the same level of protection and a few additional features. Custom rules are available in the Cloudflare dashboard in the following location: -:::caution[Deprecation notice] +- Old dashboard: **Security** > **WAF** > **Custom rules**. +- New security dashboard: **Security** > **Security rules**. -**Cloudflare Firewall Rules is now deprecated.** The Firewall Rules API and Filters API, as well as the `cloudflare_firewall_rule` and `cloudflare_filter` Terraform resources, will only be available until 2025-06-15. If you have any automation based on these APIs and resources, you must migrate to the new APIs and resources before 2025-06-15 to avoid any issues. +:::caution[Deprecation notice] -On 2025-06-15, the APIs and resources mentioned above will stop working. Any remaining active firewall rules will be disabled, and the **Firewall rules** tab in the dashboard will be removed. +**Cloudflare Firewall Rules is now deprecated.** The Firewall Rules API and Filters API, as well as the `cloudflare_firewall_rule` and `cloudflare_filter` Terraform resources, are no longer supported since 2025-06-15. If you have any automation based on these APIs and resources, you must migrate to the new APIs and resources to avoid any issues. If you have not upgraded to WAF custom rules yet, you may have some invalid configuration that prevents the upgrade from happening. In this case, contact your account team to get help with the upgrade to WAF custom rules. @@ -38,8 +39,7 @@ The default block response is a Cloudflare standard HTML page. If you need to se To define a custom response for a single rule, go to **Security** > **WAF** > [**Custom rules**](https://dash.cloudflare.com/?to=/:account/:zone/security/waf/custom-rules), edit the custom rule, and fill in the block-related options. :::note - -Custom block response configurations will not be returned by the Firewall Rules API. You must use the [Rulesets API](/waf/custom-rules/create-api/#example-b) to manage this new feature. +Custom block response configurations are not returned by the Firewall Rules API. You must use the [Rulesets API](/waf/custom-rules/create-api/#example-b) to manage this new feature. ::: ### Different error page for blocked requests @@ -104,7 +104,7 @@ For the custom rules converted from your existing firewall rules, Cloudflare wil ### Logs and events -Events logged by custom rules are shown in [Security Events](/waf/analytics/security-events/), available at **Security** > **Events**, with `Custom Rules` as their source. +Events logged by custom rules are shown in [Security Events](/waf/analytics/security-events/) with `Custom Rules` as their source. You may still find events generated by Firewall Rules in the Security Events page when you select a time frame including the days when the transition to custom rules occurred. Similarly, you may still find events with both _Skip_ and _Allow_ actions in the same view during the transition period. @@ -112,23 +112,21 @@ You may still find events generated by Firewall Rules in the Security Events pag The preferred API for managing WAF custom rules is the [Rulesets API](/waf/custom-rules/create-api/). The Rulesets API is used on all recent Cloudflare security products to provide a uniform user experience when interacting with our API. For more information on migrating to the Rulesets API, refer to [Relevant changes for API users](#relevant-changes-for-api-users). -The Firewall Rules API and Filters API will still work until 2025-06-15. There will be a single list of rules for both firewall rules and WAF custom rules, and this list contains WAF custom rules. Thanks to an internal conversion process, the Firewall Rules API and Filters API will return firewall rules/filters converted from these WAF custom rules. +The Firewall Rules API and Filters API are no longer supported since 2025-06-15. There is now a single list of rules for both firewall rules and WAF custom rules, and this list contains WAF custom rules. Thanks to an internal conversion process, the Firewall Rules API and Filters API return firewall rules/filters converted from these WAF custom rules until the APIs sunset date. -If you are using Terraform, the preferred way of configuring WAF custom rules is using [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) resources configured with the `http_request_firewall_custom` phase. For more information on updating your Terraform configuration, refer to [Relevant changes for Terraform users](#relevant-changes-for-terraform-users). +If you are using Terraform, you must update your configuration to use [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) resources with the `http_request_firewall_custom` phase to manage custom rules. For more information on updating your Terraform configuration, refer to [Relevant changes for Terraform users](#relevant-changes-for-terraform-users). ## Relevant changes for dashboard users -**The Firewall Rules tab in the Cloudflare dashboard is now deprecated**. Firewall rules are displayed as WAF custom rules in the Cloudflare dashboard at **Security** > **WAF** > **Custom rules**. +**The Firewall Rules tab in the Cloudflare dashboard is now deprecated**. Firewall rules are displayed as [custom rules](/waf/custom-rules/) in the Cloudflare dashboard. -![The Custom rules tab, available in the Cloudflare dashboard under Security > WAF.](~/assets/images/waf/custom-rules/custom-rules-tab.png) - -For users that still have access to both products, the **Firewall rules** tab will only be available until 2025-06-15. +For users that have access to both products, the **Firewall rules** tab is only available in the old dashboard in **Security** > **WAF**. ## Relevant changes for API users -**The [Firewall Rules API](/firewall/api/cf-firewall-rules/) and the associated [Cloudflare Filters API](/firewall/api/cf-filters/) are now deprecated.** These APIs will stop working on 2025-06-15. You must manually update any automation based on the Firewall Rules API or Cloudflare Filters API to the [Rulesets API](/waf/custom-rules/create-api/) before this date to prevent any issues. Rule IDs are different between firewall rules and custom rules, which may affect automated processes dealing with specific rule IDs. +**The [Firewall Rules API](/firewall/api/cf-firewall-rules/) and the associated [Cloudflare Filters API](/firewall/api/cf-filters/) are now deprecated.** These APIs are no longer supported since 2025-06-15. You must manually update any automation based on the Firewall Rules API or Cloudflare Filters API to the [Rulesets API](/waf/custom-rules/create-api/) to prevent any issues. Rule IDs are different between firewall rules and custom rules, which may affect automated processes dealing with specific rule IDs. -For the time being, all three APIs will be available (Firewall Rules API, Filters API, and Rulesets API). Cloudflare will internally convert your [Firewall Rules API](/firewall/api/cf-firewall-rules/) and [Filters API](/firewall/api/cf-filters/) calls into the corresponding [Rulesets API](/waf/custom-rules/create-api/) calls. The converted API calls between the Firewall Rules API/Filters API and the Rulesets API appear in audit logs as generated by Cloudflare and not by the actual user making the requests. There will be a single list of rules for both firewall rules and WAF custom rules. +Before the APIs sunset date, Cloudflare will internally convert your [Firewall Rules API](/firewall/api/cf-firewall-rules/) and [Filters API](/firewall/api/cf-filters/) calls into the corresponding [Rulesets API](/waf/custom-rules/create-api/) calls. The converted API calls between the Firewall Rules API/Filters API and the Rulesets API appear in audit logs as generated by Cloudflare and not by the actual user making the requests. There will be a single list of rules for both firewall rules and WAF custom rules. Some new features of WAF custom rules, like custom responses for blocked requests and the _Skip_ action, are not supported in the Firewall Rules API. To take advantage of these features, Cloudflare recommends that you use the custom rules page in the Cloudflare dashboard or the Rulesets API. @@ -141,9 +139,9 @@ Refer to the WAF documentation for [examples of managing WAF custom rules using - [`cloudflare_firewall_rule`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/firewall_rule) - [`cloudflare_filter`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/filter) -These resources will stop working on 2025-06-15. If you are currently using these resources to manage your Firewall Rules configuration, you must manually update any Terraform configuration to [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) resources before this date to prevent any issues. +These resources are no longer supported since 2025-06-15. If you are using these resources to manage your Firewall Rules configuration, you must manually update any Terraform configuration to [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) resources to prevent any issues. -For the time being, all three Terraform resources will be available (`cloudflare_firewall_rule`, `cloudflare_filter`, and `cloudflare_ruleset`). There will be a single list of rules for both firewall rules and WAF custom rules. +There will be a single list of rules for both firewall rules and WAF custom rules. Some new features of WAF custom rules are not supported in the deprecated Terraform resources. To take advantage of these features, Cloudflare recommends that you use the `cloudflare_ruleset` resource. @@ -215,7 +213,6 @@ The recommended steps for replacing your firewall rules (and filters) configurat :::caution You must remove firewall rules and filters from Terraform state before deleting their configuration from `.tf` configuration files to prevent issues. ::: - 1. Run the following command to find all resources related to firewall rules and filters: ```sh diff --git a/src/content/docs/waf/reference/legacy/old-rate-limiting/upgrade.mdx b/src/content/docs/waf/reference/legacy/old-rate-limiting/upgrade.mdx index 668ef4ca07c898e..a0103884dfb3f5e 100644 --- a/src/content/docs/waf/reference/legacy/old-rate-limiting/upgrade.mdx +++ b/src/content/docs/waf/reference/legacy/old-rate-limiting/upgrade.mdx @@ -18,7 +18,7 @@ The Cloudflare dashboard will now show all your rate limiting rules in a single **The [Rate Limiting API](/api/resources/rate_limits/) and the [`cloudflare_rate_limit`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/rate_limit) Terraform resource for the previous version of rate limiting rules are now deprecated.** -This API and Terraform resource will only be available until 2025-06-15. After this date you will need to use the [Rulesets API](/ruleset-engine/rulesets-api/) and the [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) Terraform resource to configure rate limiting rules. +This API and Terraform resource are no longer supported since 2025-06-15. You must use the [Rulesets API](/ruleset-engine/rulesets-api/) and the [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) Terraform resource to configure rate limiting rules. ::: @@ -60,18 +60,17 @@ For more details on the differences between old and new rate limiting rules, ref ### Relevant changes in the dashboard If you had access to the previous version of Cloudflare Rate Limiting, you will now find all rate limiting rules in the same list in **Security** > **WAF** > **Rate limiting rules**. - -If you are using the new [application security dashboard](/security/) (currently in beta), all the rate limiting rules for your zone will be available at **Security** > **Security rules**. - -Rate limiting rules created in the previous version will be tagged with `Previous version` in the Cloudflare dashboard. +Rate limiting rules created in the previous version are tagged with `Previous version` in the Cloudflare dashboard. ![Rate limiting rules user interface showing two rules created in the previous version.](~/assets/images/waf/reference/rate-limiting-rules-upgrade-ui.png) +If you are using the new [application security dashboard](/security/) (currently in beta), only the rate limiting rules that have been upgraded to the new version will be shown at **Security** > **Security rules**. + If you edit a rule with this tag in the dashboard, you will no longer be able to edit the rule using the API and Terraform resource for the previous version of rate limiting rules. In this case, you will need to start using the [Rulesets API](/ruleset-engine/rulesets-api/) or the [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) Terraform resource for this purpose. Refer to [Relevant changes for API users](#relevant-changes-for-api-users) and [Relevant changes for Terraform users](#relevant-changes-for-terraform-users) for more information. ### Relevant changes for API users -**The previous Rate Limiting API is deprecated.** You will not be able to invoke any operations of this API after 2025-06-15. You must update any automation based on the [previous Rate Limiting API](/api/resources/rate_limits/) to the [Rulesets API](/waf/rate-limiting-rules/create-api/) before this date to prevent any issues. +**The previous Rate Limiting API is deprecated.** The API is no longer supported since 2025-06-15. You must update any automation based on the [previous Rate Limiting API](/api/resources/rate_limits/) to the [Rulesets API](/waf/rate-limiting-rules/create-api/) to prevent any issues. The new rate limiting rules are based on the [Ruleset Engine](/ruleset-engine/). To configure these rate limiting rules via the API you must use the [Rulesets API](/ruleset-engine/rulesets-api/). Since rate limiting rules created in the previous version were upgraded to the new version, this API will also return these rules created in the new version. @@ -81,7 +80,7 @@ Until the API sunset date, you can use the [previous Rate Limiting API](/api/res ### Relevant changes for Terraform users -**The `cloudflare_rate_limit` Terraform resource is deprecated.** You will not be able to perform configuration updates via Terraform using this resource after 2025-06-15. You must manually update your rate limiting configuration in Terraform from [`cloudflare_rate_limit`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/rate_limit) resources to [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) resources before the sunset date to prevent any issues. +**The `cloudflare_rate_limit` Terraform resource is deprecated.** The resource is no longer supported since 2025-06-15. You must manually update your rate limiting configuration in Terraform from [`cloudflare_rate_limit`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/rate_limit) resources to [`cloudflare_ruleset`](https://registry.terraform.io/providers/cloudflare/cloudflare/latest/docs/resources/ruleset) resources to prevent any issues. The new rate limiting rules are based on the [Ruleset Engine](/ruleset-engine/). To configure these rate limiting rules with Terraform you must use the `cloudflare_ruleset` Terraform resource. @@ -155,7 +154,6 @@ The recommended steps for replacing your old rate limiting configuration in Terr :::caution[Important] You must remove rate limiting rules configured through the `cloudflare_rate_limit` resource from Terraform state before deleting their configuration from `.tf` configuration files to prevent issues. ::: - 1. Run the following command to find all resources related to rate limiting rules (previous version): ```sh diff --git a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx index 201967d7b8d9cac..5f04b343f74f15d 100644 --- a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx +++ b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx @@ -15,7 +15,7 @@ Once the upgrade finishes, the **Managed rules** tab in the Cloudflare dashboard :::caution[Deprecation notice] -**The APIs and Terraform resources related to the previous version of WAF managed rules are deprecated.** The [APIs for managing the previous version of WAF managed rules](#api-changes) will stop working on 2025-06-15. The same applies to [Terraform resources](#terraform-changes) related to the previous version of WAF managed rules. You must migrate before this date to avoid any issues. +**The APIs and Terraform resources related to the previous version of WAF managed rules are deprecated.** The [APIs for managing the previous version of WAF managed rules](#api-changes) are no longer supported since 2025-06-15. The same applies to [Terraform resources](#terraform-changes) related to the previous version of WAF managed rules. You must migrate your configuration to avoid any issues. Refer to [Possible upgrade errors](#possible-upgrade-errors) if you are having issues upgrading. @@ -30,7 +30,6 @@ The new version of WAF Managed Rules provides the following benefits over the pr - **Updated Managed Rulesets** – The Cloudflare OWASP Core Ruleset, one of WAF's Managed Rulesets, is based on the latest version of the OWASP Core Ruleset (v3.x), which adds paranoia levels and improves false positives rates compared to the version used in WAF managed rules (2.x). You also have more control over the sensitivity score, with a clear indication of how much each rule contributes to the score and what was the total score of a triggered request. - **Better rule browsing and configuration** – Deploy Managed Rulesets with a single click to get immediate protection. Override the behavior of entire rulesets, or customize a single rule. Apply overrides to all rules with a specific tag to adjust rules applicable to a given software or attack vector. You can deploy configurations like the following: - - Deploy the Cloudflare Managed Ruleset across all my zones. - Deploy the Cloudflare OWASP Core Ruleset on all traffic that does not contain `/api/*` in the path. - Disable Managed Rulesets across my account for traffic coming from my IP. @@ -147,12 +146,10 @@ In phase 2 all zones are eligible for upgrade. The exact upgrade procedure varie In phase 1 the upgrade became available to a subset of eligible zones, which had to meet the following requirements: - The zone has: - - WAF disabled, or - WAF enabled and only the Cloudflare Managed Ruleset is enabled (the OWASP ModSecurity Core Rule Set must be disabled). - The zone has no [firewall rules](/firewall/cf-dashboard/) or [Page Rules](/rules/page-rules/) bypassing, enabling, or disabling WAF managed rules: - - Firewall rules configured with _Bypass_ > _WAF Managed Rules_. - Page Rules configured with _Disable Security_. - Page Rules configured with _Web Application Firewall: Off_ or _Web Application Firewall: On._ @@ -274,7 +271,7 @@ The upgrade process can take up to an hour. During this period you may observe s The returned configuration in the example above, which would match the existing configuration for the previous WAF version, contains: - A rule that executes the Cloudflare Managed Ruleset (ruleset ID efb7b8c949ac4650a09736fc376e9aee). -- A single override for the rule `Apache Struts - Open Redirect - CVE:CVE-2013-2248` (rule ID 23ee7cebe6e8443e99ecf932ab579455) in the same ruleset, setting the action to `log` and disabling the rule. +- A single override for the rule `Apache Struts - Open Redirect - CVE:CVE-2013-2248` (rule ID `23ee7cebe6e8443e99ecf932ab579455`) in the same ruleset, setting the action to `log` and disabling the rule. 3. (Optional, for Enterprise customers only) If you are upgrading an Enterprise zone to WAF Managed Rules, you can enter validation mode before finishing the upgrade. In this mode, both WAF implementations will be enabled. Use the [Update a zone entry point ruleset](/api/resources/rulesets/subresources/phases/methods/update/) operation, making sure you include the `waf_migration=validation&phase_two=1` query string parameters: @@ -484,7 +481,6 @@ terraform import cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa44308 :::caution You must remove WAF packages, groups, and rules from Terraform state before deleting their configuration from `.tf` configuration files to prevent issues. ::: - 1. Run the following command to find all resources related to the previous version of WAF managed rules: ```sh From 2d72d795adb4ad2130ecdb572459a674544089cd Mon Sep 17 00:00:00 2001 From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:32:21 +0100 Subject: [PATCH 2/5] Update intro --- .../docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx index 5f04b343f74f15d..00310191da5fd5d 100644 --- a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx +++ b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx @@ -9,7 +9,7 @@ import { GlossaryTooltip } from "~/components"; On 2022-05-04, Cloudflare started the upgrade from the [previous version of WAF managed rules](/waf/reference/legacy/old-waf-managed-rules/) to the new [WAF Managed Rules](/waf/managed-rules/), allowing a first set of eligible zones to migrate. Currently, all zones can upgrade to WAF Managed Rules, including partner accounts. -You can start the upgrade process for a zone in the Cloudflare dashboard or via API. Currently, this process is always started by you. **The upgrade is irreversible** — once you upgrade to the new WAF Managed Rules, you cannot go back to using WAF managed rules. +Cloudflare is gradually upgrading all rules created in the previous version of WAF managed rules. You can also start the upgrade process manually for a zone in the Cloudflare dashboard or via API. **The upgrade is irreversible** — once you upgrade to the new WAF Managed Rules, you cannot go back to using WAF managed rules. Once the upgrade finishes, the **Managed rules** tab in the Cloudflare dashboard (available in **Security** > **WAF** > **Managed rules**) will display a new interface, and the WAF managed rules APIs will stop working. From 572b9263e0ea072e898f7897c2a3d5c986c9e986 Mon Sep 17 00:00:00 2001 From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:38:49 +0100 Subject: [PATCH 3/5] Adjust sentence (SME review) --- .../docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx index 00310191da5fd5d..4d85962301076d9 100644 --- a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx +++ b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx @@ -9,7 +9,7 @@ import { GlossaryTooltip } from "~/components"; On 2022-05-04, Cloudflare started the upgrade from the [previous version of WAF managed rules](/waf/reference/legacy/old-waf-managed-rules/) to the new [WAF Managed Rules](/waf/managed-rules/), allowing a first set of eligible zones to migrate. Currently, all zones can upgrade to WAF Managed Rules, including partner accounts. -Cloudflare is gradually upgrading all rules created in the previous version of WAF managed rules. You can also start the upgrade process manually for a zone in the Cloudflare dashboard or via API. **The upgrade is irreversible** — once you upgrade to the new WAF Managed Rules, you cannot go back to using WAF managed rules. +Cloudflare is gradually upgrading all zones to the new version of WAF Managed Rules. You can also start the upgrade process manually for a zone in the Cloudflare dashboard or via API. **The upgrade is irreversible** — once you upgrade to the new WAF Managed Rules, you cannot go back to using the previous version. Once the upgrade finishes, the **Managed rules** tab in the Cloudflare dashboard (available in **Security** > **WAF** > **Managed rules**) will display a new interface, and the WAF managed rules APIs will stop working. From 7abb75020756e8ca2a08fc9f68155a15c361c632 Mon Sep 17 00:00:00 2001 From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:40:58 +0100 Subject: [PATCH 4/5] Remove word --- .../docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx index 4d85962301076d9..43f20da3a87a8fc 100644 --- a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx +++ b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx @@ -9,7 +9,7 @@ import { GlossaryTooltip } from "~/components"; On 2022-05-04, Cloudflare started the upgrade from the [previous version of WAF managed rules](/waf/reference/legacy/old-waf-managed-rules/) to the new [WAF Managed Rules](/waf/managed-rules/), allowing a first set of eligible zones to migrate. Currently, all zones can upgrade to WAF Managed Rules, including partner accounts. -Cloudflare is gradually upgrading all zones to the new version of WAF Managed Rules. You can also start the upgrade process manually for a zone in the Cloudflare dashboard or via API. **The upgrade is irreversible** — once you upgrade to the new WAF Managed Rules, you cannot go back to using the previous version. +Cloudflare is gradually upgrading all zones to the new version of WAF Managed Rules. You can also start the upgrade process manually for a zone in the Cloudflare dashboard or via API. **The upgrade is irreversible** — once you upgrade to the new WAF Managed Rules, you cannot go back to the previous version. Once the upgrade finishes, the **Managed rules** tab in the Cloudflare dashboard (available in **Security** > **WAF** > **Managed rules**) will display a new interface, and the WAF managed rules APIs will stop working. From 9ef1cd0f86fb2df1d0199b0af2722efabedde251 Mon Sep 17 00:00:00 2001 From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> Date: Wed, 16 Jul 2025 11:45:36 +0100 Subject: [PATCH 5/5] Fix indentation --- .../legacy/old-waf-managed-rules/upgrade.mdx | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx index 43f20da3a87a8fc..ce9cbae60ab62ec 100644 --- a/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx +++ b/src/content/docs/waf/reference/legacy/old-waf-managed-rules/upgrade.mdx @@ -445,21 +445,21 @@ The recommended steps for replacing your old WAF managed rules configuration in 3. Import the `cloudflare_ruleset` resource you previously identified into Terraform state using the `terraform import` command. For example: -```sh -terraform import cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31 zone//3c0b456bc2aa443089c5f40f45f51b31 -``` + ```sh + terraform import cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31 zone//3c0b456bc2aa443089c5f40f45f51b31 + ``` -```txt output - cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Importing from ID "zone//3c0b456bc2aa443089c5f40f45f51b31"... - cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Import prepared! - Prepared cloudflare_ruleset for import - cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Refreshing state... [id=3c0b456bc2aa443089c5f40f45f51b31] + ```txt output + cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Importing from ID "zone//3c0b456bc2aa443089c5f40f45f51b31"... + cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Import prepared! + Prepared cloudflare_ruleset for import + cloudflare_ruleset.terraform_managed_resource_3c0b456bc2aa443089c5f40f45f51b31: Refreshing state... [id=3c0b456bc2aa443089c5f40f45f51b31] - Import successful! + Import successful! - The resources that were imported are shown above. These resources are now in - your Terraform state and will henceforth be managed by Terraform. -``` + The resources that were imported are shown above. These resources are now in + your Terraform state and will henceforth be managed by Terraform. + ``` 4. Run `terraform plan` to validate that Terraform now checks the state of the new `cloudflare_ruleset` resource, in addition to other existing resources already managed by Terraform. For example: