From 271d0ade8f08a36ecb6238859896d6bbfea891d9 Mon Sep 17 00:00:00 2001 From: Simon Thorpe Date: Tue, 17 Sep 2024 19:34:13 -0700 Subject: [PATCH 01/17] Securitypedant sase ra patch (#16901) * Update sase.mdx * Update sase.mdx * Update sase.mdx * Update sase.mdx --- .../docs/reference-architecture/architectures/sase.mdx | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/content/docs/reference-architecture/architectures/sase.mdx b/src/content/docs/reference-architecture/architectures/sase.mdx index f114dc170a29019..385a02dc663b1f4 100644 --- a/src/content/docs/reference-architecture/architectures/sase.mdx +++ b/src/content/docs/reference-architecture/architectures/sase.mdx @@ -1,12 +1,9 @@ --- -title: Secure Access Service Edge (SASE) +title: Reference Architecture Diagram - Securing data at rest pcx_content_type: reference-architecture sidebar: order: 1 -head: - - tag: title - content: "Reference Architecture: Evolving to a SASE architecture with Cloudflare" - + label: Secure Access Service Edge (SASE) --- import { Render } from "~/components" From 55fb6fde826c2e9acc902fa8b7feb69ef2964033 Mon Sep 17 00:00:00 2001 From: Rebecca Tamachiro <62246989+RebeccaTamachiro@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:24:54 +0100 Subject: [PATCH 02/17] [1.1.1.1] Remove unnecessary overview pages (#16894) * First pass and add hideIndex: true * Add sidebar labels to setup and dns-over-https indexes --- src/content/docs/1.1.1.1/encryption/dns-over-https/index.mdx | 3 ++- src/content/docs/1.1.1.1/infrastructure/index.mdx | 2 ++ src/content/docs/1.1.1.1/other-ways-to-use-1.1.1.1/index.mdx | 2 ++ src/content/docs/1.1.1.1/setup/index.mdx | 1 + 4 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/content/docs/1.1.1.1/encryption/dns-over-https/index.mdx b/src/content/docs/1.1.1.1/encryption/dns-over-https/index.mdx index 964c88c2c2da422..3d29acdca746c76 100644 --- a/src/content/docs/1.1.1.1/encryption/dns-over-https/index.mdx +++ b/src/content/docs/1.1.1.1/encryption/dns-over-https/index.mdx @@ -2,7 +2,8 @@ pcx_content_type: reference title: DNS over HTTPS slug: 1.1.1.1/encryption/dns-over-https - +sidebar: + label: About DoH --- import { DirectoryListing } from "~/components" diff --git a/src/content/docs/1.1.1.1/infrastructure/index.mdx b/src/content/docs/1.1.1.1/infrastructure/index.mdx index 4946f1a69c0b903..7ca2f3cbfb27541 100644 --- a/src/content/docs/1.1.1.1/infrastructure/index.mdx +++ b/src/content/docs/1.1.1.1/infrastructure/index.mdx @@ -3,6 +3,8 @@ pcx_content_type: navigation title: Infrastructure sidebar: order: 4 + group: + hideIndex: true slug: 1.1.1.1/infrastructure --- diff --git a/src/content/docs/1.1.1.1/other-ways-to-use-1.1.1.1/index.mdx b/src/content/docs/1.1.1.1/other-ways-to-use-1.1.1.1/index.mdx index d32a242c5cf07e0..e2112bc7ad9c3a3 100644 --- a/src/content/docs/1.1.1.1/other-ways-to-use-1.1.1.1/index.mdx +++ b/src/content/docs/1.1.1.1/other-ways-to-use-1.1.1.1/index.mdx @@ -3,6 +3,8 @@ pcx_content_type: navigation title: Other ways to use 1.1.1.1 sidebar: order: 5 + group: + hideIndex: true slug: 1.1.1.1/other-ways-to-use-1.1.1.1 --- diff --git a/src/content/docs/1.1.1.1/setup/index.mdx b/src/content/docs/1.1.1.1/setup/index.mdx index 094bc3c138aa143..4c8e21378711310 100644 --- a/src/content/docs/1.1.1.1/setup/index.mdx +++ b/src/content/docs/1.1.1.1/setup/index.mdx @@ -3,6 +3,7 @@ pcx_content_type: reference title: Set up sidebar: order: 2 + label: General head: - tag: title content: Set up Cloudflare 1.1.1.1 resolver From b3d2f54c5f7eb79d51ce6692f5123729ead1dafb Mon Sep 17 00:00:00 2001 From: Jun Lee Date: Wed, 18 Sep 2024 10:31:10 +0100 Subject: [PATCH 03/17] [D1] Get started workflow through Dashboard (#16856) * First half of creating a Get started workflow using the Dashboard. * Finishing the first pass for Dashboard Get started. * Minor word placement edit. * Update src/content/docs/d1/get-started.mdx Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Update src/content/docs/d1/get-started.mdx Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Update src/content/docs/d1/get-started.mdx Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Update src/content/docs/d1/get-started.mdx Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Update src/content/docs/d1/get-started.mdx Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Update src/content/docs/d1/get-started.mdx Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Update src/content/docs/d1/get-started.mdx Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Apply suggestions from code review Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> * Ensuring non-actionable buttons are not emboldened. * Fixing grammar for database name best practice. * Update src/content/docs/d1/get-started.mdx Co-authored-by: Lambros Petrou * Removing unnecessary install npm step from pre-req. * Using partials for prerequisite. * Using SQL workflow rather than manually entering each row. --------- Co-authored-by: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> Co-authored-by: Lambros Petrou --- src/content/docs/d1/get-started.mdx | 233 ++++++++++++++++++++++++---- 1 file changed, 205 insertions(+), 28 deletions(-) diff --git a/src/content/docs/d1/get-started.mdx b/src/content/docs/d1/get-started.mdx index 5a99000765c5cf6..6ad50bd209576e3 100644 --- a/src/content/docs/d1/get-started.mdx +++ b/src/content/docs/d1/get-started.mdx @@ -6,7 +6,7 @@ sidebar: order: 2 --- -import { Render, PackageManagers, Steps, FileTree } from "~/components"; +import { Render, PackageManagers, Steps, FileTree, Tabs, TabItem } from "~/components"; This guide instructs you through: @@ -14,20 +14,18 @@ This guide instructs you through: - Creating a schema and querying your database via the command-line. - Connecting a [Cloudflare Worker](/workers/) to your D1 database to query your D1 database programmatically. -## Prerequisites +You can perform these tasks through the CLI or through the Cloudflare dashboard. -To continue: +## Prerequisites - -1. Sign up for a [Cloudflare account](https://dash.cloudflare.com/sign-up/workers-and-pages) if you have not already. -2. Install [`npm`](https://docs.npmjs.com/getting-started). -3. Install [`Node.js`](https://nodejs.org/en/). Use a Node version manager like [Volta](https://volta.sh/) or [nvm](https://github.com/nvm-sh/nvm) to avoid permission issues and change Node.js versions. [Wrangler](/workers/wrangler/install-and-update/) requires a Node version of `16.17.0` or later. - + ## 1. Create a Worker Create a new Worker as the means to query your database. + + 1. Create a new project named `d1-tutorial` by running: @@ -40,7 +38,7 @@ Create a new Worker as the means to query your database. one: "Hello World example", two: "Hello World Worker", three: "TypeScript", - }} + }}z /> This creates a new `d1-tutorial` directory as illustrated below. @@ -73,12 +71,26 @@ For example: `CI=true npm create cloudflare@latest d1-tutorial --type=simple --g ::: + + + +1. Log in to your [Cloudflare dashboard](https://dash.cloudflare.com/) and select your account. +2. Go to your account > **Workers & Pages** > **Overview**. +3. Select **Create**. +4. Select **Create Worker**. +5. Name for your Worker. For this tutorial, name your Worker `d1-tutorial`. +6. Select **Deploy**. + + + ## 2. Create a database A D1 database is conceptually similar to many other databases: a database may contain one or more tables, the ability to query those tables, and optional indexes. D1 uses the familiar [SQL query language](https://www.sqlite.org/lang.html) (as used by SQLite). To create your first D1 database: + + 1. Change into the directory you just created for your Workers project: @@ -112,6 +124,20 @@ The `wrangler` command-line interface is Cloudflare's tool for managing and depl ::: + + + +1. Go to **Storage & Databases** > **D1**. +2. Select **Create**. +3. Name your database. For this tutorial, name your D1 database `prod-d1-tutorial`. +4. (Optional) Provide a location hint. Location hint is an optional parameter you can provide to indicate your desired geographical location for your database. Refer to [Provide a location hint](/d1/configuration/data-location/#provide-a-location-hint) for more information. +5. Select **Create**. + + + + + + :::note For reference, a good database name: @@ -124,11 +150,16 @@ For reference, a good database name: ## 3. Bind your Worker to your D1 database -You must create a binding for your Worker to connect to your D1 database. [Bindings](/workers/runtime-apis/bindings/) allow your Workers to access resources, like D1, on the Cloudflare developer platform. You create bindings by updating your `wrangler.toml` file. +You must create a binding for your Worker to connect to your D1 database. [Bindings](/workers/runtime-apis/bindings/) allow your Workers to access resources, like D1, on the Cloudflare developer platform. To bind your D1 database to your Worker: + + +You create bindings by updating your `wrangler.toml` file. + + 1. Copy the lines obtained from [step 2](/d1/get-started/#2-create-a-database) from your terminal. 2. Add them to the end of your `wrangler.toml` file. @@ -155,10 +186,33 @@ When you execute the `wrangler d1 create` command, the client API package (which You can also bind your D1 database to a [Pages Function](/pages/functions/). For more information, refer to [Functions Bindings for D1](/pages/functions/bindings/#d1-databases). + + +You create bindings by adding them to the Worker you have created. + + +1. Go to **Workers & Pages** > **Overview**. +2. Select the `d1-tutorial` Worker you created in [step 1](/d1/get-started/#1-create-a-worker). +3. Select **Settings**. +4. Scroll to **Bindings**, then select **Add**. +5. Select **D1 database**. +6. Name your binding in **Variable name**, then select the `prod-d1-tutorial` D1 database you created in [step 2](/d1/get-started/#2-create-a-database) from the dropdown menu. For this tutorial, name your binding `DB`. +7. Select **Deploy** to deploy your binding. When deploying, there are two options: + - **Deploy:** Immediately deploy the binding to 100% of your audience. + - **Save version:** Save a version of the binding which you can deploy in the future. + + For this tutorial, select **Deploy**. + + + + + ## 4. Run a query against your D1 database ### Configure your D1 database + + With `wrangler.toml` configured properly, set up your database. Use the example `schema.sql` file below to initialize your database. @@ -200,10 +254,36 @@ With `wrangler.toml` configured properly, set up your database. Use the example + + +Use the Dashboard to create a table and populate it with data. + + +1. Go to **Storage & Databases** > **D1**. +2. Select the `prod-d1-tutorial` database you created in [step 2](/d1/get-started/#2-create-a-database). +3. Select **Console**. +4. Paste the following SQL snippet. + + ```sql + DROP TABLE IF EXISTS Customers; + CREATE TABLE IF NOT EXISTS Customers (CustomerId INTEGER PRIMARY KEY, CompanyName TEXT, ContactName TEXT); + INSERT INTO Customers (CustomerID, CompanyName, ContactName) VALUES (1, 'Alfreds Futterkiste', 'Maria Anders'), (4, 'Around the Horn', 'Thomas Hardy'), (11, 'Bs Beverages', 'Victoria Ashworth'), (13, 'Bs Beverages', 'Random Name'); + ``` + +5. Select **Execute**. This creates a table called `Customers` in your `prod-d1-tutorial` database. +6. Select **Tables**, then select the `Customers` table to view the contents of the table. + + + + + + ### Write queries within your Worker After you have set up your database, run an SQL query from within your Worker. + + 1. Navigate to your `d1-tutorial` Worker and open the `index.ts` file. The `index.ts` file is where you configure your Worker's interactions with D1. 2. Clear the content of `index.ts`. @@ -249,31 +329,52 @@ After you have set up your database, run an SQL query from within your Worker. After configuring your Worker, you can test your project locally before you deploy globally. -## 5. Develop locally with Wrangler + -While in your project directory, test your database locally. +You can query your D1 database using your Worker. -1. Run `wrangler dev`: +1. Go to **Workers & Pages** > **Overview**. +2. Select the `d1-tutorial` Worker you created. +3. Select **Edit Code**. +4. Clear the contents of the `worker.js` file, then paste the following code: - ```sh - npx wrangler dev - ``` - - When you run `wrangler dev`, Wrangler provides a URL (most likely `localhost:8787`) to review your Worker. + ```js + export default { + async fetch(request, env) { + const { pathname } = new URL(request.url); -2. Navigate to the URL. + if (pathname === "/api/beverages") { + // If you did not use `DB` as your binding name, change it here + const { results } = await env.DB.prepare( + "SELECT * FROM Customers WHERE CompanyName = ?" + ) + .bind("Bs Beverages") + .all(); + return new Response(JSON.stringify(results), { + headers: { 'Content-Type': 'application/json' } + }); + } - The page displays `Call /api/beverages to see everyone who works at Bs Beverages`. + return new Response( + "Call /api/beverages to see everyone who works at Bs Beverages" + ); + }, + }; + ``` +5. Select **Save**. -3. Test your database is running successfully. Add `/api/beverages` to the provided Wrangler URL. For example, `localhost:8787/api/beverages`. + + -If successful, the browser displays your data. +## 5. Deploy your database + +Deploy your database on Cloudflare's global network. -## 6. Deploy your database + -To deploy your Worker to production, you must first repeat the [database bootstrapping](/d1/get-started/#configure-your-d1-database) steps after replacing the `--local` flag with the `--remote` flag to give your Worker data to read. This creates the database tables and imports the data into the production version of your database, running on Cloudflare's global network. +To deploy your Worker to production using Wrangler, you must first repeat the [database configuration](/d1/get-started/#configure-your-d1-database) steps after replacing the `--local` flag with the `--remote` flag to give your Worker data to read. This creates the database tables and imports the data into the production version of your database. 1. Bootstrap your database with the `schema.sql` file you created in step 4: @@ -297,26 +398,102 @@ To deploy your Worker to production, you must first repeat the [database bootstr ```sh output Outputs: https://d1-tutorial..workers.dev ``` + + You can now visit the URL for your newly created project to query your live database. + + For example, if the URL of your new Worker is `d1-tutorial..workers.dev`, accessing `https://d1-tutorial..workers.dev/api/beverages` sends a request to your Worker that queries your live database directly. + +4. Test your database is running successfully. Add `/api/beverages` to the provided Wrangler URL. For example, `https://d1-tutorial..workers.dev/api/beverages`. + + + + + + +1. Go to **Workers & Pages** > **Overview**. +2. Select your `d1-tutorial` Worker. +3. Select **Deployments**. +4. From the **Version History** table, select **Deploy version**. +5. From the **Deploy version** page, select **Deploy**. + + + +This deploys the latest version of the Worker code to production. + + + +## 6. (Optional) Develop locally with Wrangler + +If you are using D1 with Wrangler, you can test your database locally. While in your project directory: + + +1. Run `wrangler dev`: + + ```sh + npx wrangler dev + ``` + + When you run `wrangler dev`, Wrangler provides a URL (most likely `localhost:8787`) to review your Worker. + +2. Go to the URL. + + The page displays `Call /api/beverages to see everyone who works at Bs Beverages`. + +3. Test your database is running successfully. Add `/api/beverages` to the provided Wrangler URL. For example, `localhost:8787/api/beverages`. -You can now visit the URL for your newly created project to query your live database. +If successful, the browser displays your data. -For example, if the URL of your new Worker is `d1-tutorial..workers.dev`, accessing `https://d1-tutorial..workers.dev/api/beverages` sends a request to your Worker that queries your live database directly. +:::note +You can only develop locally if you are using Wrangler. You cannot develop locally through the Cloudflare dashboard. +::: ## 7. (Optional) Delete your database -To delete your database, run: +To delete your database: + + + +Run: ```sh npx wrangler d1 delete prod-d1-tutorial ``` -If you want to delete your Worker, run: + + + +1. Go to **Storages & Databases** > **D1**. +2. Select your `prod-d1-tutorial` D1 database. +3. Select **Settings**. +4. Select **Delete**. +5. Type the name of the database (`prod-d1-tutorial`) to confirm the deletion. + + + + +If you want to delete your Worker: + + + +Run: ```sh npx wrangler delete d1-tutorial ``` + + + +1. Go to **Workers & Pages** > **Overview**. +2. Select your `d1-tutorial` Worker. +3. Select **Settings**. +4. Scroll to the bottom of the page, then select **Delete**. +5. Type the name of the Worker (`d1-tutorial`) to confirm the deletion. + + + + ## Summary In this tutorial, you have: From 0ce3d2997fba5fe02871788bde8debbd405bb092 Mon Sep 17 00:00:00 2001 From: marciocloudflare <83226960+marciocloudflare@users.noreply.github.com> Date: Wed, 18 Sep 2024 10:48:02 +0100 Subject: [PATCH 04/17] [MWAN] Add details onm HA configs to vConn (#16907) * created ha configs partial * added ha partial to hardware connector * added ha configs to virtual conn * added params to ha partial * added params to hardware conn * added param to virt conn * corrected link * added numbers do hardware conn * corrected component * corrected links * created before begin partial * added partial to connectors * removed numbers from titles * corrected links * updated links * corrected title * corrected title * corrected link * changed language to reflect need of dhcp first boot * added not on static ip address to vconn * refined text * corrected quotes * corrected link * corrected title --- .../configure-hardware-connector/index.mdx | 72 +++---------------- .../connector/configure-virtual-connector.mdx | 59 ++++++++++++--- .../connector/troubleshooting.mdx | 3 +- .../magic-wan/connector/before-you-begin.mdx | 25 +++++++ .../magic-wan/connector/create-site.mdx | 2 +- .../magic-wan/connector/ha-configs.mdx | 45 ++++++++++++ 6 files changed, 130 insertions(+), 76 deletions(-) create mode 100644 src/content/partials/magic-wan/connector/before-you-begin.mdx create mode 100644 src/content/partials/magic-wan/connector/ha-configs.mdx diff --git a/src/content/docs/magic-wan/configuration/connector/configure-hardware-connector/index.mdx b/src/content/docs/magic-wan/configuration/connector/configure-hardware-connector/index.mdx index 988457c35a55227..6aaeb62fbc8a2e4 100644 --- a/src/content/docs/magic-wan/configuration/connector/configure-hardware-connector/index.mdx +++ b/src/content/docs/magic-wan/configuration/connector/configure-hardware-connector/index.mdx @@ -10,26 +10,7 @@ import { GlossaryTooltip, Render, Card } from "~/components"; ## Before you begin -You can install up to two Magic WAN Connectors for redundancy at each of your sites. If one of your Connectors fail, traffic will fail over to the other Connector ensuring that you never lose connectivity to that site. - -In this type of high availability (HA) configuration, you will choose a reliable LAN interface as the HA link which will be used to monitor the health of the peer connector. HA links can be dedicated links or can be shared with other LAN traffic. - -You must decide the type of configuration you want for your site from the beginning: no redundancy or with redundancy. You cannot add redundancy after finishing configuring your dashboard settings. If, at a later stage, you decide to enable redundancy, you will need to delete your site configuration in the Cloudflare dashboard, and start again. - - - -- If you need a high availability configuration for your premises, refer to - [About high availability configurations](#about-high-availability-configurations) for more information - and learn how to configure your Connector in this mode. - -- If you do not need a high availability configuration for you premises, proceed to [Configure - Cloudflare dashboard settings](#configure-cloudflare-dashboard-settings). - - - -:::caution[Warning] -You cannot enable high availability for an existing site. To add high availability to an existing site in the Cloudflare dashboard, you need to delete the site and start again. Plan accordingly to create a high availability configuration from the start if needed. -::: + --- @@ -51,7 +32,7 @@ Refer to [SFP+ port information](/magic-wan/configuration/connector/configure-ha --- -## Configure Cloudflare dashboard settings +## Set up Cloudflare dashboard **Add Connector**. -5. Back on the previous screen, select **Add secondary Connector**. -6. From the list, choose your second Connector > **Add Connector**. -7. Select **Next** to [Create a WAN](#2-create-a-wan). If you are configuring a static IP, configure the IP for the primary node as the static address, and the IP for the secondary node as the secondary static address. -8. To create a LAN, follow the steps mentioned above in [Create a LAN](#3-create-a-lan) up until step 4. -9. In **Static address**, enter the IP for the primary node in your site. For example, `192.168.10.1/24`. -10. In **Secondary static address**, enter the IP for the secondary node in your site. For example, `192.168.10.2/24`. -11. In **Virtual static address**, enter the IP that the LAN south of the Connector will forward traffic to. For example, `192.168.10.3/24`. -12. Select **Save**. -13. From the **High availability probing link** drop-down menu, select the port that should be used to monitor the node’s health. Cloudflare recommends you choose a reliable interface as the HA probing link. The primary and secondary node’s probing link should be connected over a switch, and cannot be a direct connection. -14. Follow the instructions in [Set up your Magic WAN Connector](#set-up-your-magic-wan-connector) and [Activate connector](#activate-connector) to finish setting up your Connectors. + --- diff --git a/src/content/docs/magic-wan/configuration/connector/configure-virtual-connector.mdx b/src/content/docs/magic-wan/configuration/connector/configure-virtual-connector.mdx index 9f6ef03708a6d08..4910badcab54490 100644 --- a/src/content/docs/magic-wan/configuration/connector/configure-virtual-connector.mdx +++ b/src/content/docs/magic-wan/configuration/connector/configure-virtual-connector.mdx @@ -3,16 +3,19 @@ pcx_content_type: how-to title: Configure virtual Connector sidebar: order: 4 - --- -import { Render } from "~/components" +import { Render } from "~/components"; Virtual Magic WAN Connector (Virtual Connector) is a virtual appliance alternative to the hardware based Magic WAN Connector appliance. These two versions of Connector are identical otherwise. +## Before you begin + + + ## Prerequisites -Before you can install Virtual Connector, you need an Enterprise account with Magic WAN enabled. Additionally, you need to have a VMware host with sufficient compute, memory, and storage to run the virtual machine with Virtual Connector. This includes: +Before you can install Virtual Connector, you need an Enterprise account with Magic WAN enabled. Additionally, you need to have a VMware host with sufficient compute, memory, and storage to run the virtual machine with Virtual Connector. This includes: - Intel x86 CPU architecture - ESXi hypervisor 7.0U1 or higher @@ -24,7 +27,7 @@ Before you can install Virtual Connector, you need an Enterprise account with Ma Refer to [VMware's documentation](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.esxi.install.doc/GUID-B2F01BF5-078A-4C7E-B505-5DFFED0B8C38.html) for more information on how to install ESXi and configure a virtual machine. -## 1. Obtain the Virtual Connector image +## Obtain the Virtual Connector image Contact your account team at Cloudflare to obtain the Virtual Connector [OVA package](https://docs.vmware.com/en/VMware-vSphere/7.0/com.vmware.vsphere.vm_admin.doc/GUID-AE61948B-C2EE-436E-BAFB-3C7209088552.html) and license keys. The OVA image includes the files required to install and configure the virtual machine (VM) for Virtual Connector with the appropriate settings. @@ -32,7 +35,7 @@ This image can be deployed multiple times to create several instances of a Virtu You will consume one license key for each instance created. For example, if you want to deploy 10 Virtual Connectors you should request 10 license keys, and your account team will create 10 Connector instances in your Cloudflare dashboard. -## 2. Deploy the Virtual Connector on VMware +## Deploy the Virtual Connector on VMware The following instructions assume you already have VMware ESXi hypervisor installed with sufficient resources. Refer to [Prerequisites](#prerequisites) for more information. @@ -73,6 +76,7 @@ Refer to [VMWare's documentation](https://kb.vmware.com/s/article/1003825) for m 7. Select where you want to save the files extracted from the OVA image > **Next**. 8. In **Networking mappings**, select assignments for your desired topology according to the port groups you set up previously: + 1. For example, map `eno1` port to `VM Network` to create your WAN, and `eno2` to `LAN0` to act as your LAN port. 2. Allocate any unused ports to the `null` port group. 3. Take note of your configuration. You will need this information to configure your network in the Cloudflare dashboard. @@ -93,17 +97,41 @@ You cannot use the same license key twice, or reuse a key once the virtual machi ::: 12. Select **Save** to finish configuring your Virtual Connector. -13. Continue set up in your [Cloudflare dashboard](#3-set-up-cloudflare-dashboard). +13. Continue set up in your [Cloudflare dashboard](#set-up-cloudflare-dashboard). + +## Set up Cloudflare dashboard + + -## 3. Set up Cloudflare dashboard +## Activate Connector - + -## 4. Activate Connector +### WAN with a static IP address - +After activating your Virtual Connector, you can use it in a network configuration with the WAN interface set to a static IP address — that is, an Internet configuration that is not automatically set by DHCP. -## 5. Boot your Virtual Connector +To use your Virtual Connector on a network configuration with a static IP: + +1. Wait 60 seconds after activating your Connector. +2. Modify your Port Groups as needed to change the source from which the WAN port obtains its IP address. +3. [Adjust the WAN settings](#2-create-a-wan) in the Cloudflare dashboard to reflect the new static IP address configuration. +4. Reboot your virtual machine. + +## Boot your Virtual Connector 1. Go to **Virtual Machines** in VMware, and boot up Virtual Connector's VM. 2. The Virtual Connector will make a request to Cloudflare. This is the step where Virtual Connector registers your provided license key and [downloads the site configuration](#1-create-a-site) for its connected site. @@ -113,6 +141,15 @@ You cannot use the same license key twice, or reuse a key once the virtual machi --- + + +--- + ## IP sec tunnels and static routes diff --git a/src/content/docs/magic-wan/configuration/connector/troubleshooting.mdx b/src/content/docs/magic-wan/configuration/connector/troubleshooting.mdx index 86e109c35a44da0..a0beafc6e442a5e 100644 --- a/src/content/docs/magic-wan/configuration/connector/troubleshooting.mdx +++ b/src/content/docs/magic-wan/configuration/connector/troubleshooting.mdx @@ -3,7 +3,6 @@ pcx_content_type: troubleshooting title: Troubleshooting sidebar: order: 10 - --- If you are experiencing difficulties with your Magic WAN Connector, refer to the following tips to troubleshoot what might be happening. @@ -14,7 +13,7 @@ Make sure that you have [activated your Connector](/magic-wan/configuration/conn ## I have tried to activate Magic WAN Connector, but it is still not working -Check if your Magic WAN Connector is connected to the Internet via a port that can serve DHCP. This is required the first time a Connector boots up so that it can reach the Cloudflare global network and download the required configurations that you set up in the Site configuration step. Refer to [Device activation](/magic-wan/configuration/connector/configure-hardware-connector/#activate-connector) for more details. +Check if your Magic WAN Connector is connected to the Internet via a port that can serve DHCP. This is required the first time a Connector boots up so that it can reach the Cloudflare global network and download the required configurations that you set up in the Site configuration step. Refer to [Activate Connector](/magic-wan/configuration/connector/configure-hardware-connector/#activate-connector) for more details. If you have a firewall deployed upstream of the Magic WAN Connector, [check your firewall settings](/magic-wan/configuration/connector/configure-hardware-connector/#firewall-settings-required). You might need to configure your firewall to allow traffic in specific ports for the Connector to work properly. diff --git a/src/content/partials/magic-wan/connector/before-you-begin.mdx b/src/content/partials/magic-wan/connector/before-you-begin.mdx new file mode 100644 index 000000000000000..bb0fec8ae28bfa1 --- /dev/null +++ b/src/content/partials/magic-wan/connector/before-you-begin.mdx @@ -0,0 +1,25 @@ +--- +{} +--- + +import { Card } from "~/components"; + +You can install up to two Magic WAN Connectors for redundancy at each of your sites. If one of your Connectors fail, traffic will fail over to the other Connector ensuring that you never lose connectivity to that site. + +In this type of high availability (HA) configuration, you will choose a reliable LAN interface as the HA link which will be used to monitor the health of the peer connector. HA links can be dedicated links or can be shared with other LAN traffic. + +You must decide the type of configuration you want for your site from the beginning: no redundancy or with redundancy. You cannot add redundancy after finishing configuring your dashboard settings. If, at a later stage, you decide to enable redundancy, you will need to delete your site configuration in the Cloudflare dashboard, and start again. + + + +- If you need a high availability configuration for your premises, refer to + [About high availability configurations](#about-high-availability-configurations) for more information + and learn how to configure your Connector in this mode. + +- If you do not need a high availability configuration for you premises, proceed to [Set up Cloudflare dashboard](#set-up-cloudflare-dashboard). + + + +:::caution[Warning] +You cannot enable high availability for an existing site. To add high availability to an existing site in the Cloudflare dashboard, you need to delete the site and start again. Plan accordingly to create a high availability configuration from the start if needed. +::: diff --git a/src/content/partials/magic-wan/connector/create-site.mdx b/src/content/partials/magic-wan/connector/create-site.mdx index 11a02245c2862e0..209b467acb5e5f1 100644 --- a/src/content/partials/magic-wan/connector/create-site.mdx +++ b/src/content/partials/magic-wan/connector/create-site.mdx @@ -78,7 +78,7 @@ Take note of the site `id` parameter, as you will need it to create WANs and LAN 3. **Interface number** 4. In **VLAN ID**, enter a number between `0` and `4094` to specify a [VLAN ID](/magic-wan/configuration/connector/reference/#vlan-id). 5. In **Priority**, choose the priority for your WAN. Lower numbers have higher priority. Refer to Traffic steering to learn more about how Cloudflare calculates priorities. -6. **Addressing**: Specify whether the WAN IP is fetched from a DHCP server or if it is a static IP. If you choose a static IP, you also need to specify the static IP and gateway addresses. +6. **Addressing**: If this is the first time you are setting up your Magic WAN Connector, select **DHCP**. After you activate your Connector, you can then choose to continue fetching the WAN IP address from a DHCP server, or change it to a static IP. If you choose a static IP, you also need to specify the static IP and gateway addresses.
diff --git a/src/content/partials/magic-wan/connector/ha-configs.mdx b/src/content/partials/magic-wan/connector/ha-configs.mdx new file mode 100644 index 000000000000000..91c01fc33ce4853 --- /dev/null +++ b/src/content/partials/magic-wan/connector/ha-configs.mdx @@ -0,0 +1,45 @@ +--- +inputParameters: finalInstructions +--- + +import { Markdown } from "~/components"; + +## About high availability configurations + +When you set up a site in high availability, the WANs and LANs in your Connectors have the same configuration but are replicated on two nodes. In case of failure of a Connector, the other Connector becomes the active node, taking over configuration of the LAN gateway IP and allowing traffic to continue without disruption. + +Because Connectors in high availability configurations share a single site, you need to set up: + +- **Static address**: The IP for the primary node in your site. +- **Secondary static address**: The IP for the secondary node in your site. +- **Virtual static address**: The IP that the LAN south of the Connector will forward traffic to, which is the LAN's gateway IP. + +Make sure all IPs are part of the same subnet. + +:::note + +- Failure conditions include Connector down or software restart, LAN or WAN link down, tunnel health down. +- High availability (HA) is run in non-preempt mode, which means either the primary or the secondary node can come up as active through an election process which includes node health parameters. +- In the case of a failover where a Connector is acting as a DHCP server, DHCP leases will be synchronized. + ::: + +### ​​Create a high availability configuration + +You cannot enable high availability for an existing site. To add high availability to an existing site in the Cloudflare dashboard, you need to delete the site and start again. + +To set up a high availability configuration: + +1. Follow the steps in [Create a site](#1-create-a-site) up until step 4. +2. After naming your site, select **Enable high availability**. +3. Under **Connector**, select **Add Connector**. +4. From the list, choose your first Connector > **Add Connector**. +5. Back on the previous screen, select **Add secondary Connector**. +6. From the list, choose your second Connector > **Add Connector**. +7. Select **Next** to [Create a WAN](#2-create-a-wan). If you are configuring a static IP, configure the IP for the primary node as the static address, and the IP for the secondary node as the secondary static address. +8. To create a LAN, follow the steps mentioned above in [Create a LAN](#3-create-a-lan) up until step 4. +9. In **Static address**, enter the IP for the primary node in your site. For example, `192.168.10.1/24`. +10. In **Secondary static address**, enter the IP for the secondary node in your site. For example, `192.168.10.2/24`. +11. In **Virtual static address**, enter the IP that the LAN south of the Connector will forward traffic to. For example, `192.168.10.3/24`. +12. Select **Save**. +13. From the **High availability probing link** drop-down menu, select the port that should be used to monitor the node's health. Cloudflare recommends you choose a reliable interface as the HA probing link. The primary and secondary node's probing link should be connected over a switch, and cannot be a direct connection. +14. From 318e1d8f5534eebbb7438404a5b8f56d2fa029a0 Mon Sep 17 00:00:00 2001 From: Nic <123965403+ngayerie@users.noreply.github.com> Date: Wed, 18 Sep 2024 12:20:12 +0200 Subject: [PATCH 05/17] [Speed] Update content-compression.mdx (#16908) --- .../speed/optimization/content/brotli/content-compression.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/speed/optimization/content/brotli/content-compression.mdx b/src/content/docs/speed/optimization/content/brotli/content-compression.mdx index 1fa2f65afcaea9f..8420da4c33a5fb7 100644 --- a/src/content/docs/speed/optimization/content/brotli/content-compression.mdx +++ b/src/content/docs/speed/optimization/content/brotli/content-compression.mdx @@ -36,7 +36,7 @@ linkStyle 1,2 stroke-width: 1px ``` :::note -Zstandard compression is enabled by default on Free plans. Customers in other plans can enable Zstandard compression through [Compression Rules](/rules/compression-rules/). +Customers can enable Zstandard compression through [Compression Rules](/rules/compression-rules/). ::: If supported by visitors' web browsers, Cloudflare will return Gzip, Brotli, or Zstandard-encoded responses for the following content types: From d75060865db842efd4d0bf7f9b7df67c04ffdf1d Mon Sep 17 00:00:00 2001 From: Simon Thorpe Date: Wed, 18 Sep 2024 05:06:10 -0700 Subject: [PATCH 06/17] Update sase.mdx (#16904) Correcting a mistake with the title --- src/content/docs/reference-architecture/architectures/sase.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/content/docs/reference-architecture/architectures/sase.mdx b/src/content/docs/reference-architecture/architectures/sase.mdx index 385a02dc663b1f4..7834e1cace8e92f 100644 --- a/src/content/docs/reference-architecture/architectures/sase.mdx +++ b/src/content/docs/reference-architecture/architectures/sase.mdx @@ -1,5 +1,5 @@ --- -title: Reference Architecture Diagram - Securing data at rest +title: Evolving to a SASE architecture with Cloudflare pcx_content_type: reference-architecture sidebar: order: 1 From 523f70b674b83cfb21444d315ad7f0002ee98b72 Mon Sep 17 00:00:00 2001 From: angelampcosta <92738954+angelampcosta@users.noreply.github.com> Date: Wed, 18 Sep 2024 13:47:28 +0100 Subject: [PATCH 07/17] [Analytics] Adds Sentinel to integration section (#16909) * Adds Sentinel to integration section * Apply suggestions from code review Co-authored-by: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> --------- Co-authored-by: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> --- src/assets/images/analytics/sentinel.png | Bin 0 -> 80358 bytes .../analytics-integrations/sentinel.mdx | 18 ++++++++++++++++++ 2 files changed, 18 insertions(+) create mode 100644 src/assets/images/analytics/sentinel.png create mode 100644 src/content/docs/analytics/analytics-integrations/sentinel.mdx diff --git a/src/assets/images/analytics/sentinel.png b/src/assets/images/analytics/sentinel.png new file mode 100644 index 0000000000000000000000000000000000000000..9d4215cfb2cb48547cc3b2f97c05bb374a4e5551 GIT binary patch literal 80358 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 Date: Wed, 18 Sep 2024 14:31:11 +0100 Subject: [PATCH 08/17] fixing typo in yaml (#16910) --- src/content/videos/index.yaml | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/src/content/videos/index.yaml b/src/content/videos/index.yaml index 9707210fdfa5cf8..418eb42e78d0c94 100644 --- a/src/content/videos/index.yaml +++ b/src/content/videos/index.yaml @@ -169,3 +169,29 @@ entries: difficulty: Intermediate content_type: 🎥 Video pcx_content_type: tutorial + - link: https://youtu.be/doKt9wWQF9A + title: AI meets Maps | Using Cloudflare AI, Langchain, Mapbox, Folium and Streamlit + description: Welcome to RouteMe, a smart tool that helps you plan the most efficient route between landmarks in any city. Powered by Cloudflare Workers AI, Langchain and Mapbox. This Streamlit webapp uses LLMs and Mapbox off my scripts API to solve the classic traveling salesman problem, turning your sightseeing into an optimized adventure! + tags: [Workers, Workers AI] + languages: [Python] + products: [Workers, Workers AI] + cloudflare: true + stream_id: f610dee9aa20ec843b0e451b3014540a + author: lizzie + updated: 2024-09-16 + difficulty: Intermediate + content_type: 🎥 Video + pcx_content_type: tutorial + - link: https://youtu.be/WhG5dfsOUtM + title: Welcome to the Cloudflare Developer Channel + description: Welcome to the Cloudflare Developers YouTube channel. We've got tutorials and working demos and everything you need to level up your projects. Whether you're working on your next big thing or just dorking around with some side projects, we've got you covered! So why don't you come hang out, subscribe to our developer channel and together we'll build something awesome. You're gonna love it. + tags: [Workers, AI, Vectorize, RAG, Hono, KV, D1, R2, AI Gateway] + languages: [TypeScript, JavaScript, Python] + products: [Workers, Workers AI, Vectorize, RAG, Hono, KV, D1, R2, AI Gateway] + cloudflare: true + stream_id: 0fe3acaf4dc09ba0285b75af6602c362 + author: craig + updated: 2024-09-18 + difficulty: Beginner + content_type: 🎥 Video + pcx_content_type: tutorial From 29741be9fa00f010a29abbe961bdefdd09dc54a4 Mon Sep 17 00:00:00 2001 From: angelampcosta <92738954+angelampcosta@users.noreply.github.com> Date: Wed, 18 Sep 2024 14:52:52 +0100 Subject: [PATCH 09/17] Fixes image not displaying in dark mode (#16915) --- .../images/analytics/sentinel-diagram.png | Bin 0 -> 118339 bytes src/assets/images/analytics/sentinel.png | Bin 80358 -> 0 bytes .../analytics-integrations/sentinel.mdx | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/assets/images/analytics/sentinel-diagram.png delete mode 100644 src/assets/images/analytics/sentinel.png diff --git a/src/assets/images/analytics/sentinel-diagram.png b/src/assets/images/analytics/sentinel-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..c1ab058b581096fe232bdc4856459e636aff74bb GIT binary patch literal 118339 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 QI&!F#14Xq?cqY8yUeH{ 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
5|3@y`KmqT{yLR^TYhvqd`Lwq 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 literal 0 HcmV?d00001 diff --git a/src/assets/images/analytics/sentinel.png b/src/assets/images/analytics/sentinel.png deleted file mode 100644 index 9d4215cfb2cb48547cc3b2f97c05bb374a4e5551..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 80358 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 Date: Wed, 18 Sep 2024 14:59:24 +0100 Subject: [PATCH 10/17] [Page Shield] Update availability (#16913) --- .../detection/monitor-connections-scripts.mdx | 67 ++- src/content/docs/page-shield/index.mdx | 59 ++- .../page-shield/reference/page-shield-api.mdx | 479 +++++++++--------- .../docs/page-shield/troubleshooting.mdx | 7 +- src/content/plans/index.json | 8 +- 5 files changed, 314 insertions(+), 306 deletions(-) diff --git a/src/content/docs/page-shield/detection/monitor-connections-scripts.mdx b/src/content/docs/page-shield/detection/monitor-connections-scripts.mdx index c1f92087a553be5..408fdbb20219df7 100644 --- a/src/content/docs/page-shield/detection/monitor-connections-scripts.mdx +++ b/src/content/docs/page-shield/detection/monitor-connections-scripts.mdx @@ -6,7 +6,6 @@ sidebar: head: - tag: title content: Monitor resources and cookies - --- Once you [activate Page Shield](/page-shield/get-started/), the **Monitors** dashboard will show which resources (scripts and connections) are running on your domain, as well as the cookies recently detected in HTTP traffic. @@ -15,7 +14,9 @@ If you notice unexpected scripts or connections on the dashboard, check them for :::note -If you recently activated Page Shield, you may see a delay in reporting. +- Users in Free and Pro plans only have access to the script monitor. +- If you recently activated Page Shield, you may see a delay in reporting. + ::: ## Use the Monitors dashboard @@ -28,13 +29,13 @@ To review the resources and cookies detected by Page Shield: 3. Under **Monitors**, review the list of scripts, connections, and cookies for your domain. To apply a filter, select **Add filter** and use one or more of the available options: - * **Script**: Filter scripts by their URL. - * **Connection**: Filter connections by their target URL. Depending on your [configuration](/page-shield/reference/settings/#connection-target-details), it may search only by target hostname. - * **Host**: Look for scripts appearing on specific hostnames, or connections made in a specific hostname. - * **Page** (requires a Business or Enterprise plan): Look for scripts appearing in a specific page, or for connections made in a specific page. Searches the first page where the script was loaded (or where the connection was made) and the latest occurrences list. - * **Status**: Filter scripts or connections by [status](/page-shield/reference/script-statuses/). - * **Type**: Filter cookies according to their type: first-party cookies or unknown. - * Cookie property: Filter by a cookie property such as **Name**, **Domain**, **Path**, **Same site**, **HTTP only**, and **Secure**. + - **Script**: Filter scripts by their URL. + - **Connection**: Filter connections by their target URL. Depending on your [configuration](/page-shield/reference/settings/#connection-target-details), it may search only by target hostname. + - **Host**: Look for scripts appearing on specific hostnames, or connections made in a specific hostname. + - **Page** (requires a Business or Enterprise plan): Look for scripts appearing in a specific page, or for connections made in a specific page. Searches the first page where the script was loaded (or where the connection was made) and the latest occurrences list. + - **Status**: Filter scripts or connections by [status](/page-shield/reference/script-statuses/). + - **Type**: Filter cookies according to their type: first-party cookies or unknown. + - Cookie property: Filter by a cookie property such as **Name**, **Domain**, **Path**, **Same site**, **HTTP only**, and **Secure**. 4. Depending on your plan, you may be able to [view the details of each item](#view-details). @@ -53,54 +54,52 @@ You can filter the data in these dashboards using different criteria, and print ## View details :::note - -Only available to customers on Business and Enterprise plans. +Only available to customers on Business and Enterprise plans. ::: To view the details of an item, select **Details** next to the item. The details of each connection or script include: -* **Last seen**: How long ago the resource was last detected (in the last 30 days). -* **First seen at**: The date and time when the resource was first detected. -* **Page URLs**: The most recent pages where the resource was detected (up to ten pages). -* **First page URL**: The page where the resource was first detected. -* **Host**: The host where the script is being loaded or the connection is being made. +- **Last seen**: How long ago the resource was last detected (in the last 30 days). +- **First seen at**: The date and time when the resource was first detected. +- **Page URLs**: The most recent pages where the resource was detected (up to ten pages). +- **First page URL**: The page where the resource was first detected. +- **Host**: The host where the script is being loaded or the connection is being made. The details of each cookie include: -* **Type**: A cookie can have the following types: +- **Type**: A cookie can have the following types: - * **First-party**: Cookies set by the origin server through a `set-cookie` HTTP response header. - * **Unknown**: All other detected cookies. + - **First-party**: Cookies set by the origin server through a `set-cookie` HTTP response header. + - **Unknown**: All other detected cookies. -* **Domain**: The value of the `Domain` cookie attribute. When not set or unknown, this value is derived from the host. +- **Domain**: The value of the `Domain` cookie attribute. When not set or unknown, this value is derived from the host. -* **Path**: The value of the `Path` cookie attribute. When not set or unknown, this value is derived from the most recent page where the cookie was detected. +- **Path**: The value of the `Path` cookie attribute. When not set or unknown, this value is derived from the most recent page where the cookie was detected. -* **Last seen**: How long ago the resource was last detected (in the last 30 days). +- **Last seen**: How long ago the resource was last detected (in the last 30 days). -* **First seen at**: The date and time when the cookie was first detected. +- **First seen at**: The date and time when the cookie was first detected. -* **Seen on host**: The host where the cookie was first detected. +- **Seen on host**: The host where the cookie was first detected. -* **Seen on pages**: The most recent pages where the cookie was detected (up to ten pages). +- **Seen on pages**: The most recent pages where the cookie was detected (up to ten pages). -* Additional cookie attributes (only available to Enterprise customers with a paid add-on): - * **Max age**: The value of the `Max-Age` cookie attribute. - * **Expires**: The value of the `Expires` cookie attribute. - * **Lifetime**: The approximate cookie lifetime, based on the `Max-Age` and `Expires` cookie attributes. - * **HTTP only**: The value of the `HttpOnly` cookie attribute. - * **Secure**: The value of the `Secure` cookie attribute. - * **Same site**: The value of the `SameSite` cookie attribute. +- Additional cookie attributes (only available to Enterprise customers with a paid add-on): + - **Max age**: The value of the `Max-Age` cookie attribute. + - **Expires**: The value of the `Expires` cookie attribute. + - **Lifetime**: The approximate cookie lifetime, based on the `Max-Age` and `Expires` cookie attributes. + - **HTTP only**: The value of the `HttpOnly` cookie attribute. + - **Secure**: The value of the `Secure` cookie attribute. + - **Same site**: The value of the `SameSite` cookie attribute. Except for **Domain** and **Path**, [standard cookie attributes](https://developer.mozilla.org/en-US/docs/Web/HTTP/Cookies) are only available for first-party cookies, where Cloudflare detected the `set-cookie` HTTP response header in HTTP traffic. ## Export data :::note - -Only available to Enterprise customers with a paid add-on. +Only available to Enterprise customers with a paid add-on. ::: Use this feature to extract data from Page Shield that you can review and annotate. The data in the exported file will honor any filters you configure in the dashboard. diff --git a/src/content/docs/page-shield/index.mdx b/src/content/docs/page-shield/index.mdx index 300ce1fa64e892e..d7fa1b7f7cec204 100644 --- a/src/content/docs/page-shield/index.mdx +++ b/src/content/docs/page-shield/index.mdx @@ -9,48 +9,75 @@ head: description: Page Shield is a comprehensive client-side security and privacy solution that allows you to ensure the safety of your website visitors' browsing environment. - --- -import { Description, Feature, FeatureTable, Plan } from "~/components" +import { Description, Feature, FeatureTable, Plan } from "~/components"; -Ensures the safety and privacy of your website visitors' browsing environment. +Ensures the safety and privacy of your website visitors' browsing environment. + - + Page Shield helps manage resources loaded by your website visitors — including scripts, their connections, and cookies — and triggers alert notifications when resources change or are considered malicious. Learn how to [get started](/page-shield/get-started/). -*** +--- ## Features - -Displays information about loaded scripts in your domain's pages and the connections they make. + + Displays information about loaded scripts in your domain's pages and the + connections they make. - -Find in which page a resource first appeared, and view a list of the latest occurrences of the resource in your pages. + + Find in which page a resource first appeared, and view a list of the latest + occurrences of the resource in your pages. - -Detects malicious scripts in your pages using threat intelligence and machine learning. + + Detects malicious scripts in your pages using threat intelligence and machine + learning. - -Detects any changes in the scripts loaded in your pages. + + Detects any changes in the scripts loaded in your pages. - -Receive notifications about newly detected scripts, scripts loaded from unknown domains, new scripts considered malicious, or code changes in your existing scripts. + + Receive notifications about newly detected scripts, scripts loaded from + unknown domains, new scripts considered malicious, or code changes in your + existing scripts. -Policies define allowed resources on your websites. Use policies to enforce an allowlist of resources, effectively blocking resources not included in your policies. + Policies define allowed resources on your websites. Use policies to enforce an + allowlist of resources, effectively blocking resources not included in your + policies. ## Availability diff --git a/src/content/docs/page-shield/reference/page-shield-api.mdx b/src/content/docs/page-shield/reference/page-shield-api.mdx index 443ff9cced90023..68a82bbd797f001 100644 --- a/src/content/docs/page-shield/reference/page-shield-api.mdx +++ b/src/content/docs/page-shield/reference/page-shield-api.mdx @@ -3,10 +3,9 @@ pcx_content_type: reference title: Page Shield API sidebar: order: 6 - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; You can enable and disable Page Shield, configure its settings, and fetch information about detected scripts and connections using the [Page Shield API](/api/operations/page-shield-get-settings). @@ -14,7 +13,7 @@ To authenticate API requests you need an [API token](/fundamentals/api/get-start :::note -Refer to [API deprecations](/fundamentals/api/reference/deprecations/#page-shield) for details on Page Shield API changes. +Refer to [API deprecations](/fundamentals/api/reference/deprecations/) for details on Page Shield API changes. ::: ## Endpoints @@ -50,36 +49,24 @@ The following table summarizes the available operations: | [Delete a Page Shield policy][13] | `DELETE zones/{zone_id}/page_shield/policies/{policy_id}` | Deletes an existing CSP policy. | [1]: /api/operations/page-shield-get-settings - [2]: /api/operations/page-shield-update-settings - [3]: /api/operations/page-shield-list-scripts - [4]: /api/operations/page-shield-get-script - [5]: /api/operations/page-shield-list-connections - [6]: /api/operations/page-shield-get-connection - [7]: /api/operations/page-shield-list-cookies - [8]: /api/operations/page-shield-get-cookie - [9]: /api/operations/page-shield-list-policies - [10]: /api/operations/page-shield-get-policy - [11]: /api/operations/page-shield-create-policy - [12]: /api/operations/page-shield-update-policy - [13]: /api/operations/page-shield-delete-policy ## API notes -* The malicious script classification (`Malicious` or `Not malicious`) is not directly available in the API. To determine this classification, compare the script's `js_integrity_score` value with the classification threshold, which is currently set to 50. Scripts with a score value lower than the threshold are considered malicious. +- The malicious script classification (`Malicious` or `Not malicious`) is not directly available in the API. To determine this classification, compare the script's `js_integrity_score` value with the classification threshold, which is currently set to 50. Scripts with a score value lower than the threshold are considered malicious. -* The API provides two separate properties for malicious script/connection categories: `malicious_domain_categories` and `malicious_url_categories`, related to the `domain_reported_malicious` and `url_reported_malicious` properties, respectively. The Cloudflare dashboard displays all the categories in a single **Malicious category** field. For more information, refer to [Malicious script and connection categories](/page-shield/how-it-works/malicious-script-detection/#malicious-script-and-connection-categories). +- The API provides two separate properties for malicious script/connection categories: `malicious_domain_categories` and `malicious_url_categories`, related to the `domain_reported_malicious` and `url_reported_malicious` properties, respectively. The Cloudflare dashboard displays all the categories in a single **Malicious category** field. For more information, refer to [Malicious script and connection categories](/page-shield/how-it-works/malicious-script-detection/#malicious-script-and-connection-categories). ## Common API calls @@ -94,15 +81,15 @@ curl "https://api.cloudflare.com/client/v4/zones/{zone_id}/page_shield" \ ```json title="Response" { - "result": { - "enabled": true, - "updated_at": "2023-05-14T11:47:55.677555Z", - "use_cloudflare_reporting_endpoint": true, - "use_connection_url_path": false - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "enabled": true, + "updated_at": "2023-05-14T11:47:55.677555Z", + "use_cloudflare_reporting_endpoint": true, + "use_connection_url_path": false + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -120,13 +107,13 @@ curl --request PUT \ ```json title="Response" { - "result": { - "enabled": true, - "updated_at": "2023-05-14T11:50:41.756996Z" - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "enabled": true, + "updated_at": "2023-05-14T11:50:41.756996Z" + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -143,38 +130,38 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/scripts?host ```json title="Response" { - "result": [ - { - "id": "8337233faec2357ff84465a919534e4d", - "url": "https://malicious.example.com/badscript.js", - "added_at": "2023-05-18T10:51:10.09615Z", - "first_seen_at": "2023-05-18T10:51:08Z", - "last_seen_at": "2023-05-22T09:57:54Z", - "host": "example.net", - "domain_reported_malicious": false, - "url_reported_malicious": true, - "malicious_url_categories": ["Malware"], - "first_page_url": "http://malicious.example.com/page_one.html", - "status": "active", - "url_contains_cdn_cgi_path": false, - "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", - "js_integrity_score": 10, - "obfuscation_score": 10, - "dataflow_score": 8, - "fetched_at": "2023-05-21T16:58:07Z" - }, - // (...) - ], - "success": true, - "errors": [], - "messages": [], - "result_info": { - "page": 1, - "per_page": 15, - "count": 15, - "total_count": 24, - "total_pages": 2 - } + "result": [ + { + "id": "8337233faec2357ff84465a919534e4d", + "url": "https://malicious.example.com/badscript.js", + "added_at": "2023-05-18T10:51:10.09615Z", + "first_seen_at": "2023-05-18T10:51:08Z", + "last_seen_at": "2023-05-22T09:57:54Z", + "host": "example.net", + "domain_reported_malicious": false, + "url_reported_malicious": true, + "malicious_url_categories": ["Malware"], + "first_page_url": "http://malicious.example.com/page_one.html", + "status": "active", + "url_contains_cdn_cgi_path": false, + "hash": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", + "js_integrity_score": 10, + "obfuscation_score": 10, + "dataflow_score": 8, + "fetched_at": "2023-05-21T16:58:07Z" + } + // (...) + ], + "success": true, + "errors": [], + "messages": [], + "result_info": { + "page": 1, + "per_page": 15, + "count": 15, + "total_count": 24, + "total_pages": 2 + } } ``` @@ -193,37 +180,37 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/scripts?stat ```json title="Response" { - "result": [ - { - "id": "83c8da2267394ce8465b74c299658fea", - "url": "https://scripts.example.com/anotherbadscript.js", - "added_at": "2023-05-17T13:16:03.419619Z", - "first_seen_at": "2023-05-17T13:15:23Z", - "last_seen_at": "2023-05-18T09:05:20Z", - "host": "example.net", - "domain_reported_malicious": false, - "url_reported_malicious": false, - "first_page_url": "http://malicious.example.com/page_one.html", - "status": "infrequent", - "url_contains_cdn_cgi_path": false, - "hash": "9245aad577e846dd9b990b1b32425a3fae4aad8b8a28441a8b80084b6bb75a45", - "js_integrity_score": 48, - "obfuscation_score": 49, - "dataflow_score": 45, - "fetched_at": "2023-05-18T03:58:07Z" - }, - // (...) - ], - "success": true, - "errors": [], - "messages": [], - "result_info": { - "page": 1, - "per_page": 15, - "count": 15, - "total_count": 17, - "total_pages": 2 - } + "result": [ + { + "id": "83c8da2267394ce8465b74c299658fea", + "url": "https://scripts.example.com/anotherbadscript.js", + "added_at": "2023-05-17T13:16:03.419619Z", + "first_seen_at": "2023-05-17T13:15:23Z", + "last_seen_at": "2023-05-18T09:05:20Z", + "host": "example.net", + "domain_reported_malicious": false, + "url_reported_malicious": false, + "first_page_url": "http://malicious.example.com/page_one.html", + "status": "infrequent", + "url_contains_cdn_cgi_path": false, + "hash": "9245aad577e846dd9b990b1b32425a3fae4aad8b8a28441a8b80084b6bb75a45", + "js_integrity_score": 48, + "obfuscation_score": 49, + "dataflow_score": 45, + "fetched_at": "2023-05-18T03:58:07Z" + } + // (...) + ], + "success": true, + "errors": [], + "messages": [], + "result_info": { + "page": 1, + "per_page": 15, + "count": 15, + "total_count": 17, + "total_pages": 2 + } } ``` @@ -242,40 +229,40 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/scripts/8337 ```json title="Response" { - "result": { - "id": "8337233faec2357ff84465a919534e4d", - "url": "https://malicious.example.com/badscript.js", - "added_at": "2023-05-18T10:51:10.09615Z", - "first_seen_at": "2023-05-18T10:51:08Z", - "last_seen_at": "2023-05-22T09:57:54Z", - "host": "example.net", - "domain_reported_malicious": false, - "url_reported_malicious": true, - "malicious_url_categories": ["Malware"], - "first_page_url": "http://malicious.example.com/page_one.html", - "status": "active", - "url_contains_cdn_cgi_path": false, - "hash": "9245aad577e846dd9b990b1b32425a3fae4aad8b8a28441a8b80084b6bb75a45", - "js_integrity_score": 48, - "obfuscation_score": 49, - "dataflow_score": 45, - "fetched_at": "2023-05-21T16:58:07Z", - "page_urls": [ - "http://malicious.example.com/page_two.html", - "http://malicious.example.com/page_three.html", - "http://malicious.example.com/page_four.html" - ], - "versions": [ - { - "hash": "9245aad577e846dd9b990b1b32425a3fae4aad8b8a28441a8b80084b6bb75a45", - "js_integrity_score": 50, - "fetched_at": "2023-05-21T16:58:07Z" - } - ] - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "8337233faec2357ff84465a919534e4d", + "url": "https://malicious.example.com/badscript.js", + "added_at": "2023-05-18T10:51:10.09615Z", + "first_seen_at": "2023-05-18T10:51:08Z", + "last_seen_at": "2023-05-22T09:57:54Z", + "host": "example.net", + "domain_reported_malicious": false, + "url_reported_malicious": true, + "malicious_url_categories": ["Malware"], + "first_page_url": "http://malicious.example.com/page_one.html", + "status": "active", + "url_contains_cdn_cgi_path": false, + "hash": "9245aad577e846dd9b990b1b32425a3fae4aad8b8a28441a8b80084b6bb75a45", + "js_integrity_score": 48, + "obfuscation_score": 49, + "dataflow_score": 45, + "fetched_at": "2023-05-21T16:58:07Z", + "page_urls": [ + "http://malicious.example.com/page_two.html", + "http://malicious.example.com/page_three.html", + "http://malicious.example.com/page_four.html" + ], + "versions": [ + { + "hash": "9245aad577e846dd9b990b1b32425a3fae4aad8b8a28441a8b80084b6bb75a45", + "js_integrity_score": 50, + "fetched_at": "2023-05-21T16:58:07Z" + } + ] + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -294,34 +281,34 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/connections? ```json title="Response" { - "result": [ - { - "id": "0a7bb628776f4e50a50d8594c4a01740", - "url": "https://malicious.example.com", - "added_at": "2022-09-18T10:51:10.09615Z", - "first_seen_at": "2022-09-18T10:51:08Z", - "last_seen_at": "2022-09-02T09:57:54Z", - "host": "example.net", - "domain_reported_malicious": true, - "malicious_domain_categories": ["Malware", "Spyware"], - "url_reported_malicious": false, - "malicious_url_categories": [], - "first_page_url": "https://example.net/one.html", - "status": "active", - "url_contains_cdn_cgi_path": false - }, - // (...) - ], - "success": true, - "errors": [], - "messages": [], - "result_info": { - "page": 1, - "per_page": 15, - "count": 15, - "total_count": 16, - "total_pages": 2 - } + "result": [ + { + "id": "0a7bb628776f4e50a50d8594c4a01740", + "url": "https://malicious.example.com", + "added_at": "2022-09-18T10:51:10.09615Z", + "first_seen_at": "2022-09-18T10:51:08Z", + "last_seen_at": "2022-09-02T09:57:54Z", + "host": "example.net", + "domain_reported_malicious": true, + "malicious_domain_categories": ["Malware", "Spyware"], + "url_reported_malicious": false, + "malicious_url_categories": [], + "first_page_url": "https://example.net/one.html", + "status": "active", + "url_contains_cdn_cgi_path": false + } + // (...) + ], + "success": true, + "errors": [], + "messages": [], + "result_info": { + "page": 1, + "per_page": 15, + "count": 15, + "total_count": 16, + "total_pages": 2 + } } ``` @@ -338,24 +325,24 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/connections/ ```json title="Response" { - "result": { - "id": "0a7bb628776f4e50a50d8594c4a01740", - "url": "https://malicious.example.com", - "added_at": "2022-09-18T10:51:10.09615Z", - "first_seen_at": "2022-09-18T10:51:08Z", - "last_seen_at": "2022-09-02T09:57:54Z", - "host": "example.net", - "domain_reported_malicious": true, - "malicious_domain_categories": ["Malware", "Spyware"], - "url_reported_malicious": false, - "malicious_url_categories": [], - "first_page_url": "https://example.net/one.html", - "status": "active", - "url_contains_cdn_cgi_path": false - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "0a7bb628776f4e50a50d8594c4a01740", + "url": "https://malicious.example.com", + "added_at": "2022-09-18T10:51:10.09615Z", + "first_seen_at": "2022-09-18T10:51:08Z", + "last_seen_at": "2022-09-02T09:57:54Z", + "host": "example.net", + "domain_reported_malicious": true, + "malicious_domain_categories": ["Malware", "Spyware"], + "url_reported_malicious": false, + "malicious_url_categories": [], + "first_page_url": "https://example.net/one.html", + "status": "active", + "url_contains_cdn_cgi_path": false + }, + "success": true, + "errors": [], + "messages": [] } ``` @@ -372,38 +359,36 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/cookies?page ```json title="Response" { - "result": [ - { - "id": "beee03ada7e047e79f076785d8cd8b8e", - "type": "first_party", - "name": "PHPSESSID", - "host": "example.net", - "domain_attribute": "example.net", - "expires_attribute": "2024-10-21T12:28:20Z", - "http_only_attribute": true, - "max_age_attribute": null, - "path_attribute": "/store", - "same_site_attribute": "strict", - "secure_attribute": true, - "first_seen_at": "2024-05-06T10:51:08Z", - "last_seen_at": "2024-05-07T11:56:01Z", - "first_page_url": "example.net/store/products", - "page_urls": [ - "example.net/store/products/1" - ] - }, - // (...) - ], - "success": true, - "errors": [], - "messages": [], - "result_info": { - "page": 1, - "per_page": 15, - "count": 15, - "total_count": 16, - "total_pages": 2 - } + "result": [ + { + "id": "beee03ada7e047e79f076785d8cd8b8e", + "type": "first_party", + "name": "PHPSESSID", + "host": "example.net", + "domain_attribute": "example.net", + "expires_attribute": "2024-10-21T12:28:20Z", + "http_only_attribute": true, + "max_age_attribute": null, + "path_attribute": "/store", + "same_site_attribute": "strict", + "secure_attribute": true, + "first_seen_at": "2024-05-06T10:51:08Z", + "last_seen_at": "2024-05-07T11:56:01Z", + "first_page_url": "example.net/store/products", + "page_urls": ["example.net/store/products/1"] + } + // (...) + ], + "success": true, + "errors": [], + "messages": [], + "result_info": { + "page": 1, + "per_page": 15, + "count": 15, + "total_count": 16, + "total_pages": 2 + } } ``` @@ -420,39 +405,37 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/cookies/beee ```json title="Response" { - "result": { - "id": "beee03ada7e047e79f076785d8cd8b8e", - "type": "first_party", - "name": "PHPSESSID", - "host": "example.net", - "domain_attribute": "example.net", - "expires_attribute": "2024-10-21T12:28:20Z", - "http_only_attribute": true, - "max_age_attribute": null, - "path_attribute": "/store", - "same_site_attribute": "strict", - "secure_attribute": true, - "first_seen_at": "2024-05-06T10:51:08Z", - "last_seen_at": "2024-05-07T11:56:01Z", - "first_page_url": "example.net/store/products", - "page_urls": [ - "example.net/store/products/1" - ] - }, - "success": true, - "errors": [], - "messages": [] + "result": { + "id": "beee03ada7e047e79f076785d8cd8b8e", + "type": "first_party", + "name": "PHPSESSID", + "host": "example.net", + "domain_attribute": "example.net", + "expires_attribute": "2024-10-21T12:28:20Z", + "http_only_attribute": true, + "max_age_attribute": null, + "path_attribute": "/store", + "same_site_attribute": "strict", + "secure_attribute": true, + "first_seen_at": "2024-05-06T10:51:08Z", + "last_seen_at": "2024-05-07T11:56:01Z", + "first_page_url": "example.net/store/products", + "page_urls": ["example.net/store/products/1"] + }, + "success": true, + "errors": [], + "messages": [] } ``` ### Create a policy -This `POST` request creates a Page Shield policy with *Log* action, defining the following scripts as allowed based on where they are hosted: +This `POST` request creates a Page Shield policy with _Log_ action, defining the following scripts as allowed based on where they are hosted: -* Scripts hosted in `myapp.example.com` (which does not include scripts in `example.com`). -* Scripts hosted in `cdnjs.cloudflare.com`. -* The Google Analytics script using its full URL. -* All scripts in the same origin (same HTTP or HTTPS scheme and hostname). +- Scripts hosted in `myapp.example.com` (which does not include scripts in `example.com`). +- Scripts hosted in `cdnjs.cloudflare.com`. +- The Google Analytics script using its full URL. +- All scripts in the same origin (same HTTP or HTTPS scheme and hostname). All other scripts would trigger a policy violation, but those scripts would not be blocked. @@ -460,7 +443,7 @@ For more information on Co :::note -For a list of CSP directives and keywords supported by Page Shield policies, refer to [CSP directives supported by policies](/page-shield/policies/csp-directives/). +For a list of CSP directives and keywords supported by Page Shield policies, refer to [CSP directives supported by policies](/page-shield/policies/csp-directives/). ::: ```bash title="Request" @@ -478,18 +461,18 @@ curl "https://api.cloudflare.com/api/v4/zones/{zone_id}/page_shield/policies" \ ```json title="Response" { - "success": true, - "errors": [], - "messages": [], - "result": { - "id": "", - "description": "My first policy in log mode", - "action": "log", - "expression": "http.host eq myapp.example.com", - "enabled": "true", - "value": "script-src myapp.example.com cdnjs.cloudflare.com https://www.google-analytics.com/analytics.js 'self'" - } + "success": true, + "errors": [], + "messages": [], + "result": { + "id": "", + "description": "My first policy in log mode", + "action": "log", + "expression": "http.host eq myapp.example.com", + "enabled": "true", + "value": "script-src myapp.example.com cdnjs.cloudflare.com https://www.google-analytics.com/analytics.js 'self'" + } } ``` -To create a policy with an *Allow* action instead of *Log*, use `"action": "allow"` in the request body. In the case of such policy, all scripts not allowed by the policy would be blocked. +To create a policy with an _Allow_ action instead of _Log_, use `"action": "allow"` in the request body. In the case of such policy, all scripts not allowed by the policy would be blocked. diff --git a/src/content/docs/page-shield/troubleshooting.mdx b/src/content/docs/page-shield/troubleshooting.mdx index 21c07fb0c20568b..6175aa61e78bced 100644 --- a/src/content/docs/page-shield/troubleshooting.mdx +++ b/src/content/docs/page-shield/troubleshooting.mdx @@ -4,10 +4,9 @@ source: https://support.cloudflare.com/hc/en-us/articles/360059485272-Troublesho title: Troubleshooting sidebar: order: 10 - --- -import { GlossaryTooltip } from "~/components" +import { GlossaryTooltip } from "~/components"; ## Why do I not see scripts after I activated Page Shield? @@ -39,7 +38,7 @@ You can safely ignore these warnings, since they are related to the reports that Policy violations reported via CSP's [report-only directive](/page-shield/reference/csp-header/) do not take into consideration any redirects or redirect HTTP status codes. This is [by design](https://www.w3.org/TR/CSP3/#create-violation-for-request) for security reasons. -Some third-party services you may want to cover in your Page Shield allow policies perform redirects. An example of such a service is Google Ads, which [does not work well with CSP policies](https://support.google.com/adsense/thread/102839782?hl=en\&msgid=103611259). +Some third-party services you may want to cover in your Page Shield allow policies perform redirects. An example of such a service is Google Ads, which [does not work well with CSP policies](https://support.google.com/adsense/thread/102839782?hl=en&msgid=103611259). For example, if you add the `adservice.google.com` domain to an allow policy, you could get policy violation reports for this domain due to redirects to a different domain (not present in your allow policy). In this case, the violation report would still mention the original domain, and not the domain of the redirected destination, which can cause some confusion. @@ -47,7 +46,7 @@ To try to solve this issue, add the domain of the redirected destination to your ## Do I have access to Page Shield? -Some customers do. For more details, refer to [Availability](/page-shield/#availability). +Yes, Page Shield is available on all plans. For details on the available features per plan, refer to [Availability](/page-shield/#availability). ### How do I set up Page Shield? diff --git a/src/content/plans/index.json b/src/content/plans/index.json index 07bc2b05de1e180..2bd55b857f3d57c 100644 --- a/src/content/plans/index.json +++ b/src/content/plans/index.json @@ -1676,8 +1676,8 @@ "properties": { "availability": { "title": "Availability", - "summary": "Pro and above", - "free": "No", + "summary": "Available on all plans", + "free": "Yes", "pro": "Yes", "biz": "Yes", "ent": "Yes", @@ -1685,8 +1685,8 @@ }, "b_script_monitor": { "title": "Script monitor", - "summary": "Pro and above", - "free": "No", + "summary": "Available on all plans", + "free": "Yes", "pro": "Yes", "biz": "Yes", "ent": "Yes", From 632a03be7d5e05b85d3ae39f67a7688e6a601f35 Mon Sep 17 00:00:00 2001 From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> Date: Wed, 18 Sep 2024 15:57:33 +0100 Subject: [PATCH 11/17] [Page Shield] Add changelog entries (#16914) * Changelog entry about audit log entries for policy changes * Changelog entry about script monitor for Free users --- src/content/changelogs/page-shield.yaml | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/content/changelogs/page-shield.yaml b/src/content/changelogs/page-shield.yaml index d35caf98f9677ec..de6a4d4bb3f0249 100644 --- a/src/content/changelogs/page-shield.yaml +++ b/src/content/changelogs/page-shield.yaml @@ -5,6 +5,16 @@ productLink: "/page-shield/" productArea: Application security productAreaLink: /fundamentals/reference/changelog/security/ entries: + - publish_date: "2024-09-18" + title: Page Shield's script monitor now available in Free plan + description: |- + The Page Shield's script monitor feature is now available to all users, including users in the Free plan. + + - publish_date: "2024-09-18" + title: Page Shield policy changes now available in audit logs + description: |- + Cloudflare [Audit Logs](/fundamentals/setup/account/account-security/review-audit-logs/) now include entries for any changes to Page Shield's policies. + - publish_date: "2024-06-18" title: Cookie Monitor now available description: |- From 943459fed292bca6462d28735823a3300e50b372 Mon Sep 17 00:00:00 2001 From: Kody Jackson Date: Wed, 18 Sep 2024 10:05:07 -0500 Subject: [PATCH 12/17] [Chore] Remove old link check logic (#16893) * [Chore] Remove old link check logic * Remove link --- bin/crawl.ts | 251 ------------------ .../redirects/best-practices.mdx | 2 +- .../manage-content/redirects/maintenance.mdx | 41 --- 3 files changed, 1 insertion(+), 293 deletions(-) delete mode 100644 bin/crawl.ts delete mode 100644 src/content/docs/docs-guide/manage-content/redirects/maintenance.mdx diff --git a/bin/crawl.ts b/bin/crawl.ts deleted file mode 100644 index cbe05d7d73ee6de..000000000000000 --- a/bin/crawl.ts +++ /dev/null @@ -1,251 +0,0 @@ -// @ts-nocheck TODO: refactor this for modern Astro, or remove -/** - * 1. Crawl the `/public` directory (HTML files) and assert: - * - all anchor tags () do not point to broken links - * - all images () do not have broken sources - * NOTE: Requires `npm run build` first! - */ -import * as http from "http"; -import * as https from "https"; -import { existsSync } from "fs"; -import * as fs from "fs/promises"; -import { join, resolve, extname } from "path"; -import { parse } from "node-html-parser"; - -let WARNS = 0; -let ERRORS = 0; -let REDIRECT_ERRORS: string[] = []; - -const ROOT = resolve("."); -const PUBDIR = join(ROOT, "public"); -const REDIRECT_FILE = join(ROOT, "content/_redirects"); -const VERBOSE = process.argv.includes("--verbose"); -const EXTERNALS = process.argv.includes("--externals"); - -async function walk(dir: string) { - let files = await fs.readdir(dir); - await Promise.all( - files.map(async (name) => { - let abs = join(dir, name); - if (name.endsWith(".html")) return task(abs); - let stats = await fs.stat(abs); - if (stats.isDirectory()) return walk(abs); - }), - ); -} - -let CACHE = new Map(); - -function HEAD(url: string): Promise { - let value = CACHE.has(url); - if (value != null) return Promise.resolve(value); - - let options: https.RequestOptions = { - method: "HEAD", - headers: { - "user-agent": "dev-docs", - }, - }; - - if (url.startsWith("http://")) { - options.agent = http.globalAgent; - } - - let req = https.request(url, options); - - return new Promise((r) => { - req.on("error", (err) => { - console.log(url, err); - CACHE.set(url, false); - return r(false); - }); - - req.on("response", (res) => { - let bool = res.statusCode > 199 && res.statusCode < 400; - console.log({ url, bool }); - CACHE.set(url, bool); - return r(bool); - }); - - req.end(); - }); -} - -interface Message { - type: "error" | "warn"; - html?: string; - value?: string; - text?: string; -} - -async function testREDIRECTS(file: string) { - const textPlaceholder = await fs.readFile(file, "utf-8"); - const destinationURLRegex = new RegExp(/\/.*\/*? (\/.*\/)/); - - for (const line of textPlaceholder.split(/[\r\n]+/)) { - let exists = false; - if (!line.startsWith("#")) { - const result = line.match(destinationURLRegex); - if (result !== null) { - const match = result[1]; - if (match.startsWith("/api/")) { - return; - } else { - let local = join(PUBDIR, match); - exists = existsSync(local); - - if (!exists) { - REDIRECT_ERRORS.push(`\n ✘ ${result[0]}`); - } - } - } - } - } -} - -async function task(file: string) { - let html = await fs.readFile(file, "utf8"); - - let document = parse(html, { - comment: false, - blockTextElements: { - script: false, - noscript: false, - style: false, - pre: false, - }, - }); - - let placeholder = "http://foo.io"; - // build this file's URL; without "index.html" at end - let self = file - .substring(PUBDIR.length, file.length - 10) - .replace(/\\+/g, "/"); - let url = new URL(self, placeholder); - - let messages: Message[] = []; - let items = document.querySelectorAll("a[href],img[src]"); - - await Promise.all( - items.map(async (item) => { - let content = item.outerHTML; - let target = item.getAttribute("src") || item.getAttribute("href"); - - if (!target && item.rawTagName === "a") { - // parsing error; this is actually ` - if (/logo-link/.test(item.classNames)) return; - return messages.push({ - type: "warn", - html: content, - text: `Missing "href" value`, - }); - } - - if (target && (target.startsWith("/api/") || target === "/api")) { - return; - } - - if (target && target.includes("discord.gg/cloudflaredev")) { - return messages.push({ - type: "error", - html: content, - text: "Use 'https://discord.cloudflare.com' instead of 'https://discord.gg/cloudflaredev'.", - }); - } - - let exists: boolean; - let external = false; - let resolved = new URL(target, url); - - if (!/https?/.test(resolved.protocol)) return; - - if ((external = resolved.origin !== placeholder)) { - // only fetch external URLs with `--externals` flag - exists = EXTERNALS ? await HEAD(target) : true; - } - - if (!external) { - let local = join(PUBDIR, resolved.pathname); - - // is this HTML page? eg; "/foo/" - if (extname(local).length === 0) { - // TODO? log warning about no trailing slash - if (!local.endsWith("/")) local += "/"; - local += "index.html"; - } - - exists = existsSync(local); - } - - if (!exists) { - messages.push({ - type: "error", - html: content, - value: target, - }); - } - }), - ); - - if (messages.length > 0) { - let output = file.substring(PUBDIR.length); - - messages.forEach((msg) => { - if (msg.type === "error") { - output += "\n ✘"; - ERRORS++; - } else { - output += "\n ⚠"; - WARNS++; - } - output += " " + (msg.text || msg.value); - if (VERBOSE) output += "\n " + msg.html; - }); - - console.log(output + "\n"); - } -} - -try { - await walk(PUBDIR); - - if (!ERRORS && !WARNS) { - console.log("\n~> Regular files DONE~!\n\n"); - } else { - let msg = "\n~> Regular files DONE with:"; - if (ERRORS > 0) { - process.exitCode = 1; - msg += "\n - " + ERRORS.toLocaleString() + " error(s)"; - } - if (WARNS > 0) { - msg += "\n - " + WARNS.toLocaleString() + " warning(s)"; - } - console.log(msg + "\n\n"); - } -} catch (err) { - console.error(err.stack || err); - process.exit(1); -} - -try { - await testREDIRECTS(REDIRECT_FILE); - if (REDIRECT_ERRORS.length == 0) { - console.log("\n~> /content/_redirects file DONE~!\n\n"); - } else { - let msg = "\n~> /content/_redirects file DONE with:"; - process.exitCode = 1; - msg += - "\n - " + - REDIRECT_ERRORS.length.toLocaleString() + - " error(s)" + - " (due to bad destination URLs)" + - "\n\n"; - for (let i = 0; i < REDIRECT_ERRORS.length; i++) { - msg += REDIRECT_ERRORS[i]; - } - console.log(msg + "\n\n"); - } -} catch (err) { - console.error(err.stack || err); - process.exit(1); -} diff --git a/src/content/docs/docs-guide/manage-content/redirects/best-practices.mdx b/src/content/docs/docs-guide/manage-content/redirects/best-practices.mdx index e54d65b473f1740..4cdea6b4ac4c7da 100644 --- a/src/content/docs/docs-guide/manage-content/redirects/best-practices.mdx +++ b/src/content/docs/docs-guide/manage-content/redirects/best-practices.mdx @@ -9,7 +9,7 @@ head: --- -Beyond [how Cloudflare uses redirects](/docs-guide/manage-content/redirects/process/) and having a [maintenance plan](/docs-guide/manage-content/redirects/maintenance/), we follow these best practices. +Beyond [how Cloudflare uses redirects](/docs-guide/manage-content/redirects/process/), we follow these best practices. ## Organize your redirects diff --git a/src/content/docs/docs-guide/manage-content/redirects/maintenance.mdx b/src/content/docs/docs-guide/manage-content/redirects/maintenance.mdx deleted file mode 100644 index c766abd73c05b09..000000000000000 --- a/src/content/docs/docs-guide/manage-content/redirects/maintenance.mdx +++ /dev/null @@ -1,41 +0,0 @@ ---- -pcx_content_type: how-to -title: Maintenance -sidebar: - order: 2 -head: - - tag: title - content: Redirects | Maintenance - ---- - -There are two parts to redirect maintenance, keeping current links up to date and cleaning up your redirects file. - -## Link maintenance - -In our main [Compiles check](https://github.com/cloudflare/cloudflare-docs/blob/production/.github/workflows/ci.yml), we call [a script](https://github.com/cloudflare/cloudflare-docs/blob/production/bin/crawl.ts) that makes sure all internal links exist in our current build. - -This means that the check will error if it encounters any broken links, even those that have redirects set. - -We highly recommend this approach because: - -* The behavior of each link is much clearer. -* You can troubleshoot issues more easily. -* It simplifies any future migration. - -## Redirect maintenance - -We prune unused redirects in our `_redirects` file every couple months. This process helps us stay under the [limit for Pages redirects](/pages/configuration/redirects/#surpass-_redirects-limits), as well as keeps our file cleaner and more navigable. - -1. We check out the `_redirects` file from 6 months ago, which helps us avoid deleting recently added redirects. - -2. Using a script, we extract all of the target paths from our `_redirects` file into a CSV. - -3. Using that CSV, we join together data from a [Logpush job](/logs/about/) that stores a sample of `301` and `404` requests to our docs site. - -4. Then, we evaluate redirects: - - * **Static redirects**: Compare to all `301` responses and - if the traffic threshold is low enough - remove that specific line from `_redirects`. - * **Dynamic redirects**: Using a `contains` operator, review the amount of traffic reaching all subpaths. If the traffic is minimal, remove the dynamic redirect entirely. If the traffic is just going to one or two paths, swap out for a static redirect. - -5. Afterwards, we monitor the `404` traffic to our docs site using the same Logpush job. This step helps us identify whether we need to re-add any of the redirects. From 3dd03fdad79b2663631a6530794dfd1ad15bdc03 Mon Sep 17 00:00:00 2001 From: James Ross Date: Wed, 18 Sep 2024 16:12:09 +0100 Subject: [PATCH 13/17] chore: format ts (#16838) Co-authored-by: kodster28 --- .github/actions/label-products/index.ts | 180 +++++++++--------- .github/actions/label-size/index.ts | 111 +++++------ src/content/docs/src/env.d.ts | 2 +- src/env.d.ts | 2 +- .../platform/build-configuration.json.ts | 10 +- src/util/container.ts | 2 +- src/util/description.ts | 2 +- src/util/sidebar.ts | 9 +- 8 files changed, 160 insertions(+), 158 deletions(-) diff --git a/.github/actions/label-products/index.ts b/.github/actions/label-products/index.ts index ad48385071a9dfc..bc42cc30abdd45f 100644 --- a/.github/actions/label-products/index.ts +++ b/.github/actions/label-products/index.ts @@ -1,115 +1,113 @@ // NOTE: This is the source file! // ~> Run `npm run build` to produce `index.js` -import * as github from '@actions/github'; -import * as core from '@actions/core'; +import * as github from "@actions/github"; +import * as core from "@actions/core"; function getTopLevelFolder(path: string): string { - const parts = path.split('/'); - return parts[2]; + const parts = path.split("/"); + return parts[2]; } - function getSubFolder(path: string): string { - const parts = path.split('/'); - return parts[3]; + const parts = path.split("/"); + return parts[3]; } function getChangedSubFolders(files: any[]): string[] { - const changedFolders = new Set(); + const changedFolders = new Set(); - for (const file of files) { - const path = file.filename; - const topLevelFolder = getTopLevelFolder(path); + for (const file of files) { + const path = file.filename; + const topLevelFolder = getTopLevelFolder(path); - // Check if the file is within the top-level /content folder - if (topLevelFolder === 'docs') { - const subFolder = getSubFolder(path); - changedFolders.add(subFolder); - } - } + // Check if the file is within the top-level /content folder + if (topLevelFolder === "docs") { + const subFolder = getSubFolder(path); + changedFolders.add(subFolder); + } + } - return Array.from(changedFolders); + return Array.from(changedFolders); } async function run(): Promise { - try { - const ctx = github.context; - const token = core.getInput('GITHUB_TOKEN', { required: true }); - const octokit = github.getOctokit(token); - const pr = ctx.payload.pull_request; - const prNumber = pr.number; - const files = await octokit.paginate(octokit.rest.pulls.listFiles, { - ...ctx.repo, - pull_number: pr.number, - per_page: 100, - }); - - // Get the changed sub-folders within the top-level /content folder - const changedFolders = getChangedSubFolders(files); - - // ... - - // Label the PR based on the changed sub-folders - await labelPRSubFolders(octokit, ctx.repo, prNumber, changedFolders); - - // ... - } catch (error) { - console.error('An error occurred:', error); - process.exit(1); - } + try { + const ctx = github.context; + const token = core.getInput("GITHUB_TOKEN", { required: true }); + const octokit = github.getOctokit(token); + const pr = ctx.payload.pull_request; + const prNumber = pr.number; + const files = await octokit.paginate(octokit.rest.pulls.listFiles, { + ...ctx.repo, + pull_number: pr.number, + per_page: 100, + }); + + // Get the changed sub-folders within the top-level /content folder + const changedFolders = getChangedSubFolders(files); + + // ... + + // Label the PR based on the changed sub-folders + await labelPRSubFolders(octokit, ctx.repo, prNumber, changedFolders); + + // ... + } catch (error) { + console.error("An error occurred:", error); + process.exit(1); + } } async function labelPRSubFolders( - octokit: any, - repo: any, - prNumber: number, - changedFolders: string[] + octokit: any, + repo: any, + prNumber: number, + changedFolders: string[], ): Promise { - const labelPrefix = 'product:'; - const labelsToRemove: string[] = []; - const labelsToAdd: string[] = []; - - for (const label of github.context.payload.pull_request.labels) { - if (label.name.startsWith(labelPrefix)) { - labelsToRemove.push(label.name); - } - } - - for (const folder of changedFolders) { - const label = labelPrefix + folder; - labelsToAdd.push(label); - } - - const currentLabels = new Set( - github.context.payload.pull_request.labels.map((label: any) => label.name) - ); - - for (const labelToRemove of labelsToRemove) { - if (!labelsToAdd.includes(labelToRemove)) { - await octokit.rest.issues.removeLabel({ - ...repo, - issue_number: prNumber, - name: labelToRemove, - }); - } - } - - let newLabels: string[] = []; - for (const labelToAdd of labelsToAdd) { - if (!currentLabels.has(labelToAdd)) { - newLabels.push(labelToAdd); - } - } - - if (newLabels.length > 0) { - await octokit.rest.issues.addLabels({ - ...repo, - issue_number: prNumber, - labels: newLabels, - }); - } + const labelPrefix = "product:"; + const labelsToRemove: string[] = []; + const labelsToAdd: string[] = []; + + for (const label of github.context.payload.pull_request.labels) { + if (label.name.startsWith(labelPrefix)) { + labelsToRemove.push(label.name); + } + } + + for (const folder of changedFolders) { + const label = labelPrefix + folder; + labelsToAdd.push(label); + } + + const currentLabels = new Set( + github.context.payload.pull_request.labels.map((label: any) => label.name), + ); + + for (const labelToRemove of labelsToRemove) { + if (!labelsToAdd.includes(labelToRemove)) { + await octokit.rest.issues.removeLabel({ + ...repo, + issue_number: prNumber, + name: labelToRemove, + }); + } + } + + let newLabels: string[] = []; + for (const labelToAdd of labelsToAdd) { + if (!currentLabels.has(labelToAdd)) { + newLabels.push(labelToAdd); + } + } + + if (newLabels.length > 0) { + await octokit.rest.issues.addLabels({ + ...repo, + issue_number: prNumber, + labels: newLabels, + }); + } } run(); - diff --git a/.github/actions/label-size/index.ts b/.github/actions/label-size/index.ts index 2f27ea7fb338f66..0b265ea53e808aa 100644 --- a/.github/actions/label-size/index.ts +++ b/.github/actions/label-size/index.ts @@ -1,67 +1,68 @@ -import * as core from '@actions/core'; -import * as github from '@actions/github'; +import * as core from "@actions/core"; +import * as github from "@actions/github"; async function run(): Promise { - try { - const ctx = github.context; - const token = core.getInput('GITHUB_TOKEN', { required: true }); - const octokit = github.getOctokit(token); - const pr = ctx.payload.pull_request; - const files = await octokit.paginate(octokit.rest.pulls.listFiles, { - ...ctx.repo, - pull_number: pr.number, - per_page: 100 - }); + try { + const ctx = github.context; + const token = core.getInput("GITHUB_TOKEN", { required: true }); + const octokit = github.getOctokit(token); + const pr = ctx.payload.pull_request; + const files = await octokit.paginate(octokit.rest.pulls.listFiles, { + ...ctx.repo, + pull_number: pr.number, + per_page: 100, + }); - const changes = files.reduce((total, file) => total + file.changes, 0); + const changes = files.reduce((total, file) => total + file.changes, 0); - let label: string | undefined; + let label: string | undefined; - switch (true) { - case changes <= 10: - label = 'size/xs'; - break; - case changes <= 100: - label = 'size/s'; - break; - case changes <= 500: - label = 'size/m'; - break; - case changes <= 1000: - label = 'size/l'; - break; - default: - label = 'size/xl'; - break; - } + switch (true) { + case changes <= 10: + label = "size/xs"; + break; + case changes <= 100: + label = "size/s"; + break; + case changes <= 500: + label = "size/m"; + break; + case changes <= 1000: + label = "size/l"; + break; + default: + label = "size/xl"; + break; + } - const currentLabels = pr.labels.map((label) => label.name); - const sizeLabels = ['size/xs', 'size/s', 'size/m', 'size/l', 'size/xl']; + const currentLabels = pr.labels.map((label) => label.name); + const sizeLabels = ["size/xs", "size/s", "size/m", "size/l", "size/xl"]; - // Remove previous size-related labels that are different from the current label - const labelsToRemove = currentLabels.filter( - (currentLabel) => sizeLabels.includes(currentLabel) && currentLabel !== label - ); + // Remove previous size-related labels that are different from the current label + const labelsToRemove = currentLabels.filter( + (currentLabel) => + sizeLabels.includes(currentLabel) && currentLabel !== label, + ); - for (const labelToRemove of labelsToRemove) { - await octokit.rest.issues.removeLabel({ - ...ctx.repo, - issue_number: pr.number, - name: labelToRemove - }); - } + for (const labelToRemove of labelsToRemove) { + await octokit.rest.issues.removeLabel({ + ...ctx.repo, + issue_number: pr.number, + name: labelToRemove, + }); + } - // Add the current label - if (!currentLabels.includes(label)) { - await octokit.rest.issues.addLabels({ - ...ctx.repo, - issue_number: pr.number, - labels: [label] - }); - } - } catch (error) { - core.setFailed(error.message); - } + // Add the current label + if (!currentLabels.includes(label)) { + await octokit.rest.issues.addLabels({ + ...ctx.repo, + issue_number: pr.number, + labels: [label], + }); + } + } catch (error) { + core.setFailed(error.message); + } } run(); diff --git a/src/content/docs/src/env.d.ts b/src/content/docs/src/env.d.ts index 9bc5cb41c24efc4..e16c13c6952a6ff 100644 --- a/src/content/docs/src/env.d.ts +++ b/src/content/docs/src/env.d.ts @@ -1 +1 @@ -/// \ No newline at end of file +/// diff --git a/src/env.d.ts b/src/env.d.ts index 9bc5cb41c24efc4..e16c13c6952a6ff 100644 --- a/src/env.d.ts +++ b/src/env.d.ts @@ -1 +1 @@ -/// \ No newline at end of file +/// diff --git a/src/pages/pages/platform/build-configuration.json.ts b/src/pages/pages/platform/build-configuration.json.ts index 209ed9351e625a6..0928b6786ee5d71 100644 --- a/src/pages/pages/platform/build-configuration.json.ts +++ b/src/pages/pages/platform/build-configuration.json.ts @@ -1,9 +1,11 @@ import { getEntry } from "astro:content"; export async function GET() { - const entries = await getEntry("pages-framework-presets", "index"); + const entries = await getEntry("pages-framework-presets", "index"); - const sorted = Object.fromEntries(Object.entries(entries.data.build_configs).sort()) + const sorted = Object.fromEntries( + Object.entries(entries.data.build_configs).sort(), + ); - return Response.json(sorted); -} \ No newline at end of file + return Response.json(sorted); +} diff --git a/src/util/container.ts b/src/util/container.ts index 746c77546d261c2..13262407b41e3bc 100644 --- a/src/util/container.ts +++ b/src/util/container.ts @@ -19,5 +19,5 @@ export async function entryToString(entry: CollectionEntry<"docs">) { params: { slug: entry.slug }, }); - return html; + return html; } diff --git a/src/util/description.ts b/src/util/description.ts index 658790d7fd2bc79..da762f7efa42fb4 100644 --- a/src/util/description.ts +++ b/src/util/description.ts @@ -1,6 +1,6 @@ import type { CollectionEntry } from "astro:content"; import { parse } from "node-html-parser"; -import { entryToString } from "./container" +import { entryToString } from "./container"; /* 1. If there is a `description` property in the frontmatter, return that. 2. If there is a `

...

` element in the HTML, return that. diff --git a/src/util/sidebar.ts b/src/util/sidebar.ts index f747c0b90377bfb..ab2cb411c0610c0 100644 --- a/src/util/sidebar.ts +++ b/src/util/sidebar.ts @@ -1,7 +1,8 @@ export function sortBySidebarOrder(a: any, b: any): number { - const collator = new Intl.Collator("en"); + const collator = new Intl.Collator("en"); - if (a.data.sidebar.order !== b.data.sidebar.order) return a.data.sidebar.order - b.data.sidebar.order; + if (a.data.sidebar.order !== b.data.sidebar.order) + return a.data.sidebar.order - b.data.sidebar.order; - return collator.compare(a.data.title, b.data.title); -} \ No newline at end of file + return collator.compare(a.data.title, b.data.title); +} From 7a97716d0ca4435531b4c2989feb0497829cc1ff Mon Sep 17 00:00:00 2001 From: Patricia Santa Ana <103445940+patriciasantaana@users.noreply.github.com> Date: Wed, 18 Sep 2024 08:14:43 -0700 Subject: [PATCH 14/17] [Turnstile] Google Firebase extension (#16870) * google firebase extension * fixes * formatting edits * typo * formatting * steps fix --- .../turnstile/extensions/google-firebase.mdx | 125 ++++++++++++++++++ .../docs/turnstile/tutorials/index.mdx | 1 + 2 files changed, 126 insertions(+) create mode 100644 src/content/docs/turnstile/extensions/google-firebase.mdx diff --git a/src/content/docs/turnstile/extensions/google-firebase.mdx b/src/content/docs/turnstile/extensions/google-firebase.mdx new file mode 100644 index 000000000000000..62eccaa6b9852b7 --- /dev/null +++ b/src/content/docs/turnstile/extensions/google-firebase.mdx @@ -0,0 +1,125 @@ +--- +pcx_content_type: how-to +title: Implement Turnstile with Google Firebase +sidebar: + order: 2 + label: Google Firebase + +--- + +Turnstile is [available as an extension](https://extensions.dev/extensions/cloudflare/cloudflare-turnstile-app-check-provider) with [Google's Firebase](https://firebase.google.com/) platform as an [App Check](https://firebase.google.com/docs/app-check) provider. You can leverage Cloudflare Turnstile's bot detection and challenge capabilities to ensure that requests to your Firebase backend services are verified and only authentic human visitors can interact with your application. + +Google Firebase is a comprehensive app development platform that provides a variety of tools and services to help developers build, improve, and grow their mobile and web applications. + +Firebase App Check helps protect Firebase resources like Cloud Firestore, Realtime Database, Cloud Storage, and Functions from abuse, such as automated fraud attacks and denial of service (DoS) attacks, by ensuring that incoming requests are from legitimate visitors and trusted sources. + +## Set up a Google Firebase project + +1. Create a Firebase project by going to the [Firebase Console](https://console.firebase.google.com/). +2. Select **Add Project** and follow the prompts to create a new project. +3. Add an app to your project by selecting your project. +4. In the project overview, select **Add App** and choose the platform: **Web**. +5. [Register your app](https://firebase.google.com/docs/web/setup?hl=en&authuser=0#register-app) and follow the guide to get your Firebase configuration. + +:::note + +It is important to register your web app first to connect it with Turnstile later. +::: + +## Set up Cloudflare Turnstile + +1. Create a Cloudflare Turnstile site by going to the [Cloudflare Turnstile dashboard](https://dash.cloudflare.com/?to=/:account/turnstile). +2. Create a new widget and get the [sitekey and secret key](/turnstile/get-started/#get-a-sitekey-and-secret-key). + - The domain you configure with the Turnstile widget should be the domain of your web app. + - The [widget mode](/turnstile/concepts/widget/) must be **Invisible**. + +## Integrate Firebase App Check with Turnstile + +### Enable App Check in Firebase + +1. Go to [Cloudflare Turnstile in the Firebase Extensions hub](https://extensions.dev/extensions/cloudflare/cloudflare-turnstile-app-check-provider). +2. Install the Cloudflare Turnstile extension to your Firebase project. +3. Enable [Cloud Functions](https://cloud.google.com/functions?hl=en), [Artifact Registry](https://cloud.google.com/artifact-registry), and [Secret Manager](https://cloud.google.com/security/products/secret-manager?hl=en). +4. Enter the secret key from Cloudflare Turnstile and your Firebase App ID. +5. Select **Install extension**. + +### Grant access to the Cloudflare extension + +1. Grant access to the Cloudflare extension under the IAM section of your project by selecting **Grant Access** under **View by Principals**. +2. Select `ext-cloudflare-turnstile` from the dropdown menu. +3. When filtering the token, select **Service Account Token Creator**. + +### Configure Firebase in your app with Turnstile + +1. Create an `index.ts` file. +2. Add your Firebase configuration. + +```js +import { initializeApp } from "firebase/app"; +import { getAppCheck, initializeAppCheck } from "firebase/app-check"; +import { + CloudflareProviderOptions, +} from '@cloudflare/turnstile-firebase-app-check'; + +const firebaseConfig = { +apiKey: "YOUR_API_KEY", +authDomain: "YOUR_PROJECT_ID.firebaseapp.com", +projectId: "YOUR_PROJECT_ID", +storageBucket: "YOUR_PROJECT_ID.appspot.com", +messagingSenderId: "YOUR_MESSAGING_SENDER_ID", +appId: "YOUR_APP_ID", +}; + +const app = initializeApp(firebaseConfig); + +// Initialize App Check +const siteKey = 'YOUR-SITEKEY'; +const HTTP_ENDPOINT = '${function:ext-cloudflare-turnstile-app-check-provider-tokenExchange.url}'; + +const cpo = new CloudflareProviderOptions(HTTP_ENDPOINT, siteKey); +const provider = new CustomProvider(cpo); + +initializeAppCheck(app, { provider }); + +// retrieve App Check token from Cloudflare Turnstile +cpo.getToken().then(({ token }) => { + document.getElementById('app-check-token').innerHTML = token; +}); + +``` + +### Verify the App Check token in your web application + +To verify the App Check token in your web application, refer to Firebase's [Token Verification guide](https://firebase.google.com/docs/app-check/custom-resource-backend?hl=en#verification). + +```js +import express from "express"; +import { initializeApp } from "firebase-admin/app"; +import { getAppCheck } from "firebase-admin/app-check"; + +const expressApp = express(); +const firebaseApp = initializeApp(); + +const appCheckVerification = async (req, res, next) => { + const appCheckToken = req.header("X-Firebase-AppCheck"); + + if (!appCheckToken) { + res.status(401); + return next("Unauthorized"); + } + + try { + const appCheckClaims = await getAppCheck().verifyToken(appCheckToken); + + // If verifyToken() succeeds, continue with the next middleware function in the stack. + return next(); + } catch (err) { + res.status(401); + return next("Unauthorized"); + } +} + +expressApp.get("/yourApiEndpoint", [appCheckVerification], (req, res) => { + // Handle request. +}); +``` \ No newline at end of file diff --git a/src/content/docs/turnstile/tutorials/index.mdx b/src/content/docs/turnstile/tutorials/index.mdx index 10c55da70ba60f3..411240246535bdf 100644 --- a/src/content/docs/turnstile/tutorials/index.mdx +++ b/src/content/docs/turnstile/tutorials/index.mdx @@ -1,6 +1,7 @@ --- title: Tutorials pcx_content_type: navigation +hideChildren: true sidebar: order: 5 From 34e731cbfa0387f366922cf408b51f07ed554e72 Mon Sep 17 00:00:00 2001 From: Pedro Sousa <680496+pedrosousa@users.noreply.github.com> Date: Wed, 18 Sep 2024 16:19:54 +0100 Subject: [PATCH 15/17] [WAF] Add dash operations for custom rulesets (#16912) --- .../custom-rulesets/create-api.mdx | 13 ++++----- .../custom-rulesets/create-dashboard.mdx | 29 +++++++++++++++++-- 2 files changed, 32 insertions(+), 10 deletions(-) diff --git a/src/content/docs/waf/custom-rules/custom-rulesets/create-api.mdx b/src/content/docs/waf/custom-rules/custom-rulesets/create-api.mdx index b187b39cb6c56c7..253ee53eddce69b 100644 --- a/src/content/docs/waf/custom-rules/custom-rulesets/create-api.mdx +++ b/src/content/docs/waf/custom-rules/custom-rulesets/create-api.mdx @@ -6,16 +6,17 @@ sidebar: head: - tag: title content: Work with custom rulesets using the API - --- Use the [Rulesets API](/ruleset-engine/rulesets-api/) to work with custom rulesets using an API. :::note -Account-level WAF configuration requires an Enterprise plan with a paid add-on. +Account-level WAF configuration requires an Enterprise plan with a paid add-on. ::: +## Deploy a custom ruleset using the API + To deploy a custom ruleset in your account, follow these general steps: 1. Create a custom ruleset, if it does not exist. @@ -23,12 +24,10 @@ To deploy a custom ruleset in your account, follow these general steps: For more information, refer to [Work with custom rulesets](/ruleset-engine/custom-rulesets/) in the Ruleset Engine documentation. -:::caution[Important] - - -* Deployed custom rulesets will only apply to incoming traffic of Enterprise domains. Regarding the expression of the rule deploying the custom ruleset, you must use parentheses to enclose any custom conditions and end your expression with `and cf.zone.plan eq "ENT"` or else the API operation will fail. +:::caution -* Currently, you can only deploy custom rulesets to a phase at the account level. +- Deployed custom rulesets will only apply to incoming traffic of Enterprise domains. Regarding the expression of the rule deploying the custom ruleset, you must use parentheses to enclose any custom conditions and end your expression with `and cf.zone.plan eq "ENT"` or else the API operation will fail. +- Currently, you can only deploy custom rulesets to a phase at the account level. ::: diff --git a/src/content/docs/waf/custom-rules/custom-rulesets/create-dashboard.mdx b/src/content/docs/waf/custom-rules/custom-rulesets/create-dashboard.mdx index 49c9811cb8254b6..14bc1ad7510c162 100644 --- a/src/content/docs/waf/custom-rules/custom-rulesets/create-dashboard.mdx +++ b/src/content/docs/waf/custom-rules/custom-rulesets/create-dashboard.mdx @@ -11,10 +11,9 @@ head: import { Render } from "~/components"; -Create and deploy custom rulesets in Account Home > **WAF** > **Custom rulesets**. +Custom rulesets are configured at the account level. To work with custom rulesets, go to Account Home > **WAF** > **Custom rulesets**. :::note - Account-level WAF configuration requires an Enterprise plan with a paid add-on. ::: @@ -36,7 +35,6 @@ Account-level WAF configuration requires an Enterprise plan with a paid add-on. - Select **Custom filter expression** to define a custom expression that defines when to execute the custom ruleset. Use the **Field** drop-down list to choose an HTTP property. For each request, the value of the property you choose for **Field** is compared to the value you specify for **Value** using the operator selected in **Operator**. Alternatively, select **Edit expression** to define your expression using the [Expression Editor](/ruleset-engine/rules-language/expressions/edit-expressions/#expression-editor). :::caution - Deployed custom rulesets will only apply to incoming traffic of Enterprise domains. The Expression Builder will automatically include this filter. If you define a custom expression for the ruleset using the Expression Editor, you must use parentheses to enclose any custom conditions and end your expression with `and cf.zone.plan eq "ENT"` so that the rule only applies to domains on an Enterprise plan. ::: @@ -56,6 +54,31 @@ Account-level WAF configuration requires an Enterprise plan with a paid add-on. 13. Select **Create**. +## Edit a custom ruleset + +1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/) and select your account. + +2. Go to Account Home > **WAF** > **Custom rulesets**. + + ![Custom rulesets page in the Cloudflare dashboard](~/assets/images/waf/account/custom-rulesets-dashboard.png) + +3. To edit a custom ruleset, select the three dots next to it > **Edit**. + +4. Make any desired changes to the ruleset by selecting **Edit** next to the items you want to change. + +5. When you are done, select **Back to rulesets list**. + +:::caution +Deployed custom rulesets will only apply to incoming traffic of Enterprise domains. The Expression Builder will automatically include this filter. If you define a custom expression for the ruleset using the Expression Editor, you must use parentheses to enclose any custom conditions and end your expression with `and cf.zone.plan eq "ENT"` so that the rule only applies to domains on an Enterprise plan. +::: + +## Delete a custom ruleset + +1. Log in to the [Cloudflare dashboard](https://dash.cloudflare.com/) and select your account. +2. Go to Account Home > **WAF** > **Custom rulesets**. +3. To delete a custom ruleset, select the three dots next to it > **Delete**. +4. To confirm the delete operation, select **Delete**. + ## Configure a custom response for blocked requests Date: Wed, 18 Sep 2024 17:21:12 +0200 Subject: [PATCH 16/17] [Vectorize] Complete Vectorize 2 limits (#16497) * [Vectorize] Complete Vectorize 2 limits * [Vectorize] Mention metadata limits in intro and Metadata docs --- src/content/docs/vectorize/get-started/intro.mdx | 10 +++++++++- src/content/docs/vectorize/platform/limits.mdx | 2 ++ .../docs/vectorize/reference/metadata-filtering.mdx | 12 +++++++++++- 3 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/content/docs/vectorize/get-started/intro.mdx b/src/content/docs/vectorize/get-started/intro.mdx index 882615729082e5d..fd54886f076d764 100644 --- a/src/content/docs/vectorize/get-started/intro.mdx +++ b/src/content/docs/vectorize/get-started/intro.mdx @@ -132,7 +132,7 @@ Specifically: ## 4. [Optional] Create metadata indexes -Vectorize allows you to add metadata along with vectors into your index, and also provides the ability to to filter on the vector metadata while querying vectors. To do so you would need to specify a metadata field as a "metadata index" for your Vectorize index. +Vectorize allows you to add up to 10KiB of metadata per vector into your index, and also provides the ability to filter on that metadata while querying vectors. To do so you would need to specify a metadata field as a "metadata index" for your Vectorize index. :::note[When to create metadata indexes?] @@ -168,6 +168,14 @@ npx wrangler vectorize list-metadata-index tutorial-index └──────────────┴────────┘ ``` +You can create up to 10 metadata indexes per Vectorize index. + +For metadata indexes of type `number`, the indexed number precision is that of float64. + +For metadata indexes of type `string`, each vector indexes the first 64B of the string data truncated on UTF-8 character boundaries to the longest well-formed UTF-8 substring within that limit, so vectors are filterable on the first 64B of their value for each indexed property. + +See [Vectorize Limits](/vectorize/platform/limits/) for a complete list of limits. + ## 5. Insert vectors Before you can query a vector database, you need to insert vectors for it to query against. These vectors would be generated from data (such as text or images) you pass to a machine learning model. However, this tutorial will define static vectors to illustrate how vector search works on its own. diff --git a/src/content/docs/vectorize/platform/limits.mdx b/src/content/docs/vectorize/platform/limits.mdx index 2801e2d34ad2663..0a6afded6547be5 100644 --- a/src/content/docs/vectorize/platform/limits.mdx +++ b/src/content/docs/vectorize/platform/limits.mdx @@ -27,6 +27,8 @@ The following limits apply to accounts, indexes and vectors (as specified): | Maximum namespaces per index | 1000 namespaces beta | | Maximum namespace name length | 64 bytes | | Maximum vectors upload size | 100 MB | +| Maximum metadata indexes per Vectorize index | 10 | +| Maximum indexed data per metadata index per vector | 64 bytes | beta This limit is beta only and is expected to increase over time. diff --git a/src/content/docs/vectorize/reference/metadata-filtering.mdx b/src/content/docs/vectorize/reference/metadata-filtering.mdx index ddfe160f9dde728..ae85af17c5ae8b3 100644 --- a/src/content/docs/vectorize/reference/metadata-filtering.mdx +++ b/src/content/docs/vectorize/reference/metadata-filtering.mdx @@ -9,7 +9,7 @@ import { Render, PackageManagers } from "~/components"; :::note[Enable metadata filtering] -Vectorize requires metadata indexes to be specified before vectors are inserted to support metadata filtering. Please refer to [Create metadata indexes](/vectorize/get-started/intro/#4-optional-create-metadata-indexes) for details. +Vectorize requires metadata indexes to be specified before vectors are inserted to support metadata filtering. `string`, `number` and `boolean` metadata indexes are supported. Please refer to [Create metadata indexes](/vectorize/get-started/intro/#4-optional-create-metadata-indexes) for details. Vectorize supports [namespace](/vectorize/best-practices/insert-vectors/#namespaces) filtering by default. @@ -19,6 +19,16 @@ In addition to providing an input vector to your query, you can also filter by [ By using metadata filtering to limit the scope of a query, you can filter by specific customer IDs, tenant, product category or any other metadata you associate with your vectors. +## Limits + +You can store up to 10KiB of metadata per vector, and create up to 10 metadata indexes per Vectorize index. + +For metadata indexes of type `number`, the indexed number precision is that of float64. + +For metadata indexes of type `string`, each vector indexes the first 64B of the string data truncated on UTF-8 character boundaries to the longest well-formed UTF-8 substring within that limit, so vectors are filterable on the first 64B of their value for each indexed property. + +See [Vectorize Limits](/vectorize/platform/limits/) for a complete list of limits. + ## Supported operations Optional `filter` property on `query()` method specifies metadata filter: From dda4a0aed734a2dd55f627cfb006556ea2db2b4e Mon Sep 17 00:00:00 2001 From: nenizera Date: Wed, 18 Sep 2024 16:23:24 +0100 Subject: [PATCH 17/17] [APO] Update faq.mdx (#16382) Per https://developers.cloudflare.com/cache/how-to/edge-browser-cache-ttl/set-browser-ttl/ --- .../automatic-platform-optimization/troubleshooting/faq.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/content/docs/automatic-platform-optimization/troubleshooting/faq.mdx b/src/content/docs/automatic-platform-optimization/troubleshooting/faq.mdx index 4046198fccab900..6b127b1abfc6ff0 100644 --- a/src/content/docs/automatic-platform-optimization/troubleshooting/faq.mdx +++ b/src/content/docs/automatic-platform-optimization/troubleshooting/faq.mdx @@ -15,7 +15,7 @@ No. APO ignores Origin Cache Control for caching on the Edge, but APO serves ori ## Why are my browser cache control headers missing with APO? -The browser cache control headers may be missing with APO if you set your browser to cache TTL to "respect existing headers." For example: +The browser cache control headers may be missing with APO if you set your **Browser Cache TTL** to **Respect Existing Headers**. For example: ```sh curl --silent --verbose --output /dev/null https://example.com/ --header 'Accept: text/html' 2>&1 | grep cache-control @@ -27,7 +27,7 @@ curl --silent --verbose --output /dev/null https://example.com/ --header 'Accept ## Is the stale-if-error directive still needed with APO? -No, the stale-if-error directive is not needed because the feature is built into APO. +No, the `stale-if-error` directive is not needed because the feature is built into APO. ## When I check the posts and homepage cache status, the response header shows `cf-cache-status: BYPASS`. Is APO working?