From cd46e0ca75ece9a0e62bde14f0f2edde88021f3b Mon Sep 17 00:00:00 2001 From: Rowena Date: Thu, 26 Jun 2025 10:38:31 +0200 Subject: [PATCH 1/4] feat(waf): prepare doc for ga --- pages/edge-services/faq.mdx | 4 +- pages/edge-services/how-to/configure-waf.mdx | 6 +- .../how-to/subscribe-edge-services.mdx | 4 +- pages/edge-services/index.mdx | 2 +- pages/edge-services/quickstart.mdx | 4 +- .../understanding-pricing.mdx | 101 ++++++++++++++++-- .../reference-content/understanding-waf.mdx | 7 +- 7 files changed, 101 insertions(+), 27 deletions(-) diff --git a/pages/edge-services/faq.mdx b/pages/edge-services/faq.mdx index 3bbc4b3e74..a071521279 100644 --- a/pages/edge-services/faq.mdx +++ b/pages/edge-services/faq.mdx @@ -5,7 +5,7 @@ meta: content: h1: Edge Services FAQ dates: - validation: 2025-05-14 + validation: 2025-06-26 category: network productIcon: EdgeServicesProductIcon --- @@ -36,7 +36,7 @@ Yes, if you choose to [customize your Edge Services endpoint with your own subdo ## What is WAF? -**W**eb **A**pplication **F**irewall is a feature available via Edge Services. It is currently in Public Beta. When enabled, WAF filters requests to your origin to determine whether they are potentially malicious. You can choose the [paranoia level](/edge-services/concepts/#paranoia-level) to be used when evaluating requests, and set [exclusions](/edge-services/concepts/#exclusions) to define traffic that shouldn't be filtered by WAF. Requests that are judged to be malicious are blocked or logged, depending on the settings you choose. Find out more about WAF in our [detailed documentation](/edge-services/reference-content/understanding-waf/). +**W**eb **A**pplication **F**irewall is a feature available via Edge Services. When enabled, WAF filters requests to your origin to determine whether they are potentially malicious. You can choose the [paranoia level](/edge-services/concepts/#paranoia-level) to be used when evaluating requests, and set [exclusions](/edge-services/concepts/#exclusions) to define traffic that shouldn't be filtered by WAF. Requests that are judged to be malicious are blocked or logged, depending on the settings you choose. Find out more about WAF in our [detailed documentation](/edge-services/reference-content/understanding-waf/). ## How can I use WAF with a different type of Scaleway resource? diff --git a/pages/edge-services/how-to/configure-waf.mdx b/pages/edge-services/how-to/configure-waf.mdx index 7cc4a8dce1..1bca5e02cb 100644 --- a/pages/edge-services/how-to/configure-waf.mdx +++ b/pages/edge-services/how-to/configure-waf.mdx @@ -6,17 +6,13 @@ content: h1: How to configure Edge Services Web Application Firewall paragraph: Learn how to configure a Web Application Firewall (WAF) for Edge Services. Protect your Load Balancer origin from threats and malicious requests, and fine tune your settings to pick the right paranoia level and exclusions for your use case. dates: - validation: 2025-03-03 + validation: 2025-06-26 posted: 2024-07-24 tags: object-storage edge-services cdn network waf paranoia block exclusions categories: - network --- - -Edge Services WAF is currently in [Public Beta](https://www.scaleway.com/en/betas/). - - An Edge Services **W**eb **A**pplication **F**irewall (WAF) evaluates requests to your Load Balancer origin to determine whether they are potentially malicious. You can choose the [paranoia level](/edge-services/concepts/#paranoia-level) to be used when evaluating requests, and set [exclusions](/edge-services/concepts/#exclusions) to define traffic that shouldn't be filtered by WAF. Requests that are judged to be malicious are blocked or logged, depending on the settings you choose. This page walks you through the process of enabling and configuring WAF to protect your Load Balancer origin. diff --git a/pages/edge-services/how-to/subscribe-edge-services.mdx b/pages/edge-services/how-to/subscribe-edge-services.mdx index dbf5a3e78e..7444bef635 100644 --- a/pages/edge-services/how-to/subscribe-edge-services.mdx +++ b/pages/edge-services/how-to/subscribe-edge-services.mdx @@ -6,7 +6,7 @@ content: h1: How to subscribe to Edge Services paragraph: Find out how to take your first steps with Scaleway Edge Services by subscribing to a pricing plan. Learn how to choose the best plan for your needs and change your plan at the click of a button. dates: - validation: 2025-05-14 + validation: 2025-06-26 posted: 2024-10-15 tags: object-storage edge-services subscription-plan subscribe billing pricing categories: @@ -25,7 +25,7 @@ To use Edge Services, you must subscribe to a [pricing plan](https://www.scalewa - A certain amount of WAF requests (the number of requests that can be filtered through WAF across all your pipelines) -WAF is currently in Public Beta, and free of charge. Additional charges for exceeding your plan's WAF requests will only come into effect once the feature goes into General Availability. +Note that the Starter plan does not include any WAF requests. Nonetheless, you can purchase an add-on that gives you a certain amount of requests for a fixed monthly price. The option to purchase the add-on will be displayed when you enable WAF on a pipeline. If you create more pipelines than are included in your plan, or your pipelines' caches egress more data than is included, or you make more WAF requests than are included, you will be charged additionally for this. The rates per pipeline/GB of data are indicated on the [pricing](https://www.scaleway.com/en/pricing/network/#edge-services) page. diff --git a/pages/edge-services/index.mdx b/pages/edge-services/index.mdx index f6311c4e9f..01a807d50c 100644 --- a/pages/edge-services/index.mdx +++ b/pages/edge-services/index.mdx @@ -8,7 +8,7 @@ meta: sentiment="info" title="Edge Services WAF now available in the Scaleway console!" > - Edge Services now offers a Web Application Firewall (WAF) service, currently in Public Beta. Activate and manage WAF in the Scaleway console or API / developer tools. Find out more in our [dedicated documentation](/edge-services/reference-content/understanding-waf/). + Edge Services now offers a Web Application Firewall (WAF) service. Activate and manage WAF in the Scaleway console or API / developer tools. Find out more in our [dedicated documentation](/edge-services/reference-content/understanding-waf/). -WAF is currently in Public Beta and therefore **free of charge**. When WAF enters General Availability, the free pricing model will end. See [below](#waf) for details on how it will be billed in the future. +The Starter plan does not include WAF. To use WAF on this plan, you must may an additional monthly add-on charge (see [below](#waf-add-on)). If you subscribe to a plan, and exceed its monthly limits for pipelines, cache data, or WAF requests you will incur additional charges that month. -Essentially, your Edge Services monthly bill is made up of your **monthly subscription plan price** + **any additional pipeline charges incurred** + **any additional cache charges incurred**. +Essentially, your Edge Services monthly bill is made up of your **monthly subscription plan price** + **any additional pipeline charges incurred** + **any additional cache charges incurred** + **optional WAF add-on** (Started plan only) + **any additional WAF charges incurred**. For full details of the price and limits of each plan, refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services). Subscription plans are scoped to a single Scaleway [Project](/organizations-and-projects/concepts/#project). ## Keeping track of your Edge Services consumption -You can check the number of pipelines you have at any one time in the **Pipelines** tab of the Edge Services dashboard in the Scaleway console. [Scaleway Cockpit](/edge-services/how-to/monitor-cockpit/) can be used to monitor the data egressing from your Edge Services caches. +We provide a number of ways to keep track of your Edge Services consumption: -## WAF +- View, in relation to your plan's limit, how many pipelines you currently have and how much cache data you have consumed so far this month, in the **Pipelines** tab of your [Edge Services dashboard](https://console.scaleway.com/edge-services) -Although WAF is currently in Public Beta and available free of charge, read on to find out more about how it will be charged once in General Availability + -Each plan (except Starter plan) will include a fixed amount of WAF requests to use across all your pipelines. If you exceed the amount of WAF requests in a month that is allowed on your plan (or by the Starter add-on), you will be charged a fee per million additional requests. +- View the details of your current plan, your last monthly invoice, and the costs accumulated so far for Edge Services this month, in the **Plans** tab of your [Edge Services dashboard](https://console.scaleway.com/edge-services) -The **Starter** plan will be the only plan that does not include a set amount of WAF requests. To use WAF on this plan, you must pay an additional monthly add-on charge. This add-on will then let you enable WAF on all your pipelines, and use a fixed amount of WAF requests for that month across all pipelines.A ny WAF requests that exceed this amount will be charged additionally. + + +- Use [Scaleway Cockpit](/network/edge-services/how-to/monitor-cockpit/) to monitor the data egressing from your Edge Services caches. + +## WAF add-on + +The Starter plan is the only plan that does not include WAF. To use WAF on this plan, you must pay an additional monthly add-on charge (see [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services)). + +To add the WAF add-on to your Starter plan, simply [enable WAF](/edge-services/how-to/configure-waf/) on a pipeline. You are then prompted to accept the add-on. You must pay the add-on charge in order to use WAF on the Starter plan. + + + +This add-on then lets you enable WAF on all your pipelines, and use a fixed amount of WAF requests for that month across all pipelines. Any WAF requests that exceed this amount will be charged additionally, as described below. ## Included usage vs additional charges @@ -57,6 +69,7 @@ Additional charges apply when you either: - Have more pipelines in existence (at any given time) than the limit of your monthly plan - Egress more data from all your pipelines' caches combined, than the limit of your monthly plan +- Filter more requests through WAF, for all of your pipelines combined, than the limit of your monthly plan or add-on. Read on to understand more about how additional charges are applied. @@ -105,6 +118,30 @@ You consumed 200 GB of cache data that was not included within your monthly plan `{Fee per GB of additional cache} * 200 GB`
e.g. `0.0135 * 200 = €2.70` +### Additional WAF charges + +WAF consumption is based on the number of requests processed by all your Edge Services pipelines' Web Application Firewalls combined, in a given month. Requests that are served by the cache are **not** processed by WAF, as WAF protects only your origin. + +For every million requests processed by Edge Services WAF in a month, **beyond** the limit of your monthly plan (or add-on, in the case of the Starter plan), an additional charge applies. + +For example: + + +The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up to date information. + + +- For the entire month of November, you are subscribed to the **Professional** plan, which has a limit of 5M WAF requests. +- Over the course of the month, a total of 8M requests were processed by WAF across all your Edge Services pipelines. + +You used 3M extra WAF requests that were not included within your monthly plan. Your November Edge Services billing, in terms of additional WAF charges, is therefore calculated as follows: + +`{Fee per additional 1M WAF requests} * 3`
+e.g. `0.5 * 3 = €1.50` + + +You are charged proportionally for additional WAF requests, even though the price is set per million. If, for example, you only make 500,000 additional WAF requests in a month, you will be charged `{Fee per additional 1M WAF requests} / 2`. + + ## Changing your subscription plan You can upgrade or downgrade your subscription plan at any time. Read on to understand how changing plan mid-month affects your billing. @@ -173,4 +210,50 @@ The example prices and limits used below are subject to change. You should alway You consumed 200 GB of cache data that was not included within your monthly Starter plan, between November 1-10. For the rest of the month, you were within the limits of your new Professional plan. Your November Edge Services billing, in terms of the additional cache charges, is therefore calculated as follows: `{Fee per GB of additional cache} * 200 GB`
-e.g. `0.0135 * 200 = €2.70` \ No newline at end of file +e.g. `0.0135 * 200 = €2.70` + +### WAF charges + +Any additional WAF request charges accumulated when you exceeded your previous plan's limit will remain on your monthly bill. From the moment you change your plan, your WAF request consumption resets to 0. During the rest of the month, you can consume WAF requests up to the new plan's limit without being charged. + + +- If you **downgrade** your plan, all the WAF requests made within the hour of changing plans will count towards the WAF request consumption of the new plan. +- If you **upgrade** your plan, all the WAF requests made within the hour of changing plans will count towards the cache consumption of the old plan. + + +For example: + + +The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up to date information. + + +- From November 1-10 you are subscribed to the **Professional** plan, which has a limit of 5M WAF requests. +- From November 1-10 you make 10M WAF requests. +- On November 11, you upgrade to the **Advanced** plan, which has a limit of 50M WAF requests. Your WAF request usage resets to 0. +- Between November 11 and the end of the month, you make 50M WAF requests. + +You made 5M WAF requests that were not included within your monthly Professional plan, between November 1-10. For the rest of the month, you were within the limits of your new Advanced plan. Your November Edge Services billing, in terms of the additional cache charges, is therefore calculated as follows: + +`{Fee per additional 1M WAF requests} * 5`
+e.g. `0.5* 5 = €2.50` + +### WAF add-on + +This scenario applies to a user who is subscribed to the Starter plan and pays the WAF add-on price, then upgrades to a higher level plan. + +You will be billed pro-rata for the add-on charge, based on how long you were subscribed Starter with an add-on before upgrading, during the billing month. + +For example: + + +The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up to date information. + + +- From November 1-10 you are subscribed to the **Starter** plan and **WAF add-on** +- On November 11, you switch to the **Professional** plan. +- You remain subscribed to the **Professional** plan for the rest of the month (ending November 30) + +There are 30 days in the month of November, and you spent 10 of them subscribed to the Starter plan with the WAF add-on. When you upgrade to the Professional plan, the WAF add-on was no longer applicable because WAF was automatically included in your subscription plan. Your November Edge Services billing, in terms of the WAF add-on, is therefore calculated as follows: + +`({Monthly price for WAF add-on} / 30 days) * 10 days`
+e.g. `(4 / 30) * 10 = 1.33` \ No newline at end of file diff --git a/pages/edge-services/reference-content/understanding-waf.mdx b/pages/edge-services/reference-content/understanding-waf.mdx index da534a9d48..fb4c0d06de 100644 --- a/pages/edge-services/reference-content/understanding-waf.mdx +++ b/pages/edge-services/reference-content/understanding-waf.mdx @@ -7,16 +7,12 @@ content: paragraph: Learn how to protect your web applications with Edge Services Web Application Firewall (WAF). Discover the principles, paranoia levels, and limitations of WAF, and find out how to define exclusions for optimal security and performance. tags: edge-services web-application-firewall waf paranoia-levels exclusions dates: - validation: 2025-05-14 + validation: 2025-06-26 creation: 2025-03-03 categories: - network --- - -WAF is currently in Public Beta. - - You can choose to enable the **W**eb **A**pplication **F**irewall (WAF) feature on your Edge Services pipeline, for added protection. This documentation page gives a detailed overview of WAF, and the different settings, modes and functionalities available. ## WAF overview @@ -91,7 +87,6 @@ Each exclusion can consist of: ## WAF limitations -- WAF is currently in Public Beta. - WAF protects your origin only, and not your cache. - You can add a maximum of 100 WAF exclusions - You cannot currently specify exclusions at the individual rule level. Requests matching exclusion filters bypass WAF entirely. From 4f07001fb194bc32bd402a96914ef0d6c65aeff5 Mon Sep 17 00:00:00 2001 From: Rowena Jones <36301604+RoRoJ@users.noreply.github.com> Date: Thu, 26 Jun 2025 10:51:06 +0200 Subject: [PATCH 2/4] Apply suggestions from code review Co-authored-by: Benedikt Rollik --- pages/edge-services/faq.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pages/edge-services/faq.mdx b/pages/edge-services/faq.mdx index a071521279..87e8adb869 100644 --- a/pages/edge-services/faq.mdx +++ b/pages/edge-services/faq.mdx @@ -36,7 +36,7 @@ Yes, if you choose to [customize your Edge Services endpoint with your own subdo ## What is WAF? -**W**eb **A**pplication **F**irewall is a feature available via Edge Services. When enabled, WAF filters requests to your origin to determine whether they are potentially malicious. You can choose the [paranoia level](/edge-services/concepts/#paranoia-level) to be used when evaluating requests, and set [exclusions](/edge-services/concepts/#exclusions) to define traffic that shouldn't be filtered by WAF. Requests that are judged to be malicious are blocked or logged, depending on the settings you choose. Find out more about WAF in our [detailed documentation](/edge-services/reference-content/understanding-waf/). +**W**eb **A**pplication **F**irewall is a feature available via Edge Services. When enabled, WAF filters requests to your origin to determine whether they are potentially malicious. You can choose the [paranoia level](/edge-services/concepts/#paranoia-level) to be used when evaluating requests, and set [exclusions](/edge-services/concepts/#exclusions) to define traffic that should not be filtered by WAF. Requests that are judged to be malicious are blocked or logged, depending on the settings you choose. Find out more about WAF in our [detailed documentation](/edge-services/reference-content/understanding-waf/). ## How can I use WAF with a different type of Scaleway resource? From 2113ce8352e310b12f79d0d8b8130a206ee28fe7 Mon Sep 17 00:00:00 2001 From: Rowena Date: Thu, 26 Jun 2025 11:11:02 +0200 Subject: [PATCH 3/4] fix(waf): fix images --- .../assets/scaleway-current-conso.webp | Bin 13032 -> 14068 bytes .../understanding-pricing.mdx | 8 ++------ 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/pages/edge-services/reference-content/assets/scaleway-current-conso.webp b/pages/edge-services/reference-content/assets/scaleway-current-conso.webp index 4ef75bb663385f656e3382090218177bbf0446e5..47d9e793621998f140220ff8fb68d94f2304095e 100644 GIT binary patch literal 14068 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 jxpPuI=H1yi~;`#F+1}M literal 13032 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 z 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 N`X7bPHkk - - View the details of your current plan, your last monthly invoice, and the costs accumulated so far for Edge Services this month, in the **Plans** tab of your [Edge Services dashboard](https://console.scaleway.com/edge-services) - + - Use [Scaleway Cockpit](/network/edge-services/how-to/monitor-cockpit/) to monitor the data egressing from your Edge Services caches. @@ -59,7 +55,7 @@ The Starter plan is the only plan that does not include WAF. To use WAF on this To add the WAF add-on to your Starter plan, simply [enable WAF](/edge-services/how-to/configure-waf/) on a pipeline. You are then prompted to accept the add-on. You must pay the add-on charge in order to use WAF on the Starter plan. - + This add-on then lets you enable WAF on all your pipelines, and use a fixed amount of WAF requests for that month across all pipelines. Any WAF requests that exceed this amount will be charged additionally, as described below. From e94798f9c78e9eb7e1af3eaf18c06c36e191504a Mon Sep 17 00:00:00 2001 From: Rowena Jones <36301604+RoRoJ@users.noreply.github.com> Date: Fri, 27 Jun 2025 08:37:26 +0200 Subject: [PATCH 4/4] Apply suggestions from code review MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Néda <87707325+nerda-codes@users.noreply.github.com> Co-authored-by: Jessica <113192637+jcirinosclwy@users.noreply.github.com> --- .../reference-content/understanding-pricing.mdx | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pages/edge-services/reference-content/understanding-pricing.mdx b/pages/edge-services/reference-content/understanding-pricing.mdx index 3b2f9f9849..7f2d4e66e7 100644 --- a/pages/edge-services/reference-content/understanding-pricing.mdx +++ b/pages/edge-services/reference-content/understanding-pricing.mdx @@ -30,7 +30,7 @@ When you subscribe to a plan, you are billed its flat monthly fee, which allows - Filter a fixed maximum amount of requests through [WAF](/edge-services/concepts/#waf) -The Starter plan does not include WAF. To use WAF on this plan, you must may an additional monthly add-on charge (see [below](#waf-add-on)). +The Starter plan does not include WAF. To use WAF on this plan, you must pay an additional monthly add-on charge (see [below](#waf-add-on)). If you subscribe to a plan, and exceed its monthly limits for pipelines, cache data, or WAF requests you will incur additional charges that month. @@ -123,7 +123,7 @@ For every million requests processed by Edge Services WAF in a month, **beyond** For example: -The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up to date information. +The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up-to-date information. - For the entire month of November, you are subscribed to the **Professional** plan, which has a limit of 5M WAF requests. @@ -220,7 +220,7 @@ Any additional WAF request charges accumulated when you exceeded your previous p For example: -The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up to date information. +The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up-to-date information. - From November 1-10 you are subscribed to the **Professional** plan, which has a limit of 5M WAF requests. @@ -237,19 +237,19 @@ e.g. `0.5* 5 = €2.50` This scenario applies to a user who is subscribed to the Starter plan and pays the WAF add-on price, then upgrades to a higher level plan. -You will be billed pro-rata for the add-on charge, based on how long you were subscribed Starter with an add-on before upgrading, during the billing month. +You will be billed pro-rata for the add-on charge, based on how long you were subscribed to the Starter plan with an add-on before upgrading, during the billing month. For example: -The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up to date information. +The example prices and limits used below are subject to change. You should always refer to the [pricing page](https://www.scaleway.com/en/pricing/network/#edge-services) for the most up-to-date information. - From November 1-10 you are subscribed to the **Starter** plan and **WAF add-on** - On November 11, you switch to the **Professional** plan. - You remain subscribed to the **Professional** plan for the rest of the month (ending November 30) -There are 30 days in the month of November, and you spent 10 of them subscribed to the Starter plan with the WAF add-on. When you upgrade to the Professional plan, the WAF add-on was no longer applicable because WAF was automatically included in your subscription plan. Your November Edge Services billing, in terms of the WAF add-on, is therefore calculated as follows: +There are 30 days in the month of November, and you spent 10 of them subscribed to the Starter plan with the WAF add-on. When you upgraded to the Professional plan, the WAF add-on was no longer applicable because WAF was automatically included in your subscription plan. Your November Edge Services billing, in terms of the WAF add-on, is therefore calculated as follows: `({Monthly price for WAF add-on} / 30 days) * 10 days`
e.g. `(4 / 30) * 10 = 1.33` \ No newline at end of file