- {visibleResources.map((page) => {
- const href =
- page.collection === "stream"
- ? `/videos/${page.data.url}/`
- : `/${page.id}/`;
-
- // title can either be set directly in title or added as a meta.title property when we want something different for sidebar and SEO titles
- let title;
-
- if (page.collection === "docs") {
- const titleItem = page.data.head.find(
- (item) => item.tag === "title",
- );
- title = titleItem ? titleItem.content : page.data.title;
- } else {
- title = page.data.title;
- }
+ {filterPlacement === "left" && visibleResources.length === 0 && (
+
);
diff --git a/src/components/overrides/Head.astro b/src/components/overrides/Head.astro
index 492d92e8de06301..26708cc9b81d09d 100644
--- a/src/components/overrides/Head.astro
+++ b/src/components/overrides/Head.astro
@@ -3,8 +3,9 @@ import Default from "@astrojs/starlight/components/Head.astro";
import { differenceInCalendarDays } from "date-fns";
import "tippy.js/dist/tippy.css";
-import { getEntry } from "astro:content";
+import { getEntry, getEntries } from "astro:content";
import { getOgImage } from "~/util/og";
+import { formatContentType } from "~/util/content-type";
import type { CollectionEntry } from "astro:content";
const DEFAULT_TITLE_DELIMITER = "|";
@@ -36,8 +37,9 @@ if (currentSection) {
// if entry for changelog, grab the first product value (which corresponds to the folder the entry is in) and use as the primary "product"
if (currentSection === "changelog") {
const products = frontmatter.products;
- if (products) {
- product = await getEntry("products", products[0]);
+ if (products && products.length > 0) {
+ const primaryProduct = products[0];
+ product = await getEntry("products", primaryProduct.id);
}
}
@@ -131,12 +133,7 @@ if (
if (frontmatter.pcx_content_type) {
["pcx_content_type", "algolia_content_type"].map((name) => {
const contentType = frontmatter.pcx_content_type;
- const updatedName = contentType
- ? (contentType.charAt(0).toUpperCase() + contentType.slice(1)).replace(
- "-",
- " ",
- )
- : "";
+ const updatedName = contentType ? formatContentType(contentType) : "";
metaTags.push({
name,
content: updatedName,
@@ -145,9 +142,14 @@ if (frontmatter.pcx_content_type) {
}
if (frontmatter.products) {
+ const additionalProducts = await getEntries(frontmatter.products);
+ const additionalProductsNames = additionalProducts.map(
+ (product) => product.data.name,
+ );
+
metaTags.push({
name: "pcx_additional_products",
- content: frontmatter.products.toString(),
+ content: additionalProductsNames.toString(),
});
}
@@ -168,7 +170,10 @@ if (lastUpdated) {
}
if (frontmatter.reviewed) {
- const daysBetween = differenceInCalendarDays(new Date(), frontmatter.reviewed);
+ const daysBetween = differenceInCalendarDays(
+ new Date(),
+ frontmatter.reviewed,
+ );
metaTags.push({
name: "pcx_last_reviewed",
diff --git a/src/content/docs/ai-gateway/demos.mdx b/src/content/docs/ai-gateway/demos.mdx
index 2262f8229823450..30bf54e2f3dba6f 100644
--- a/src/content/docs/ai-gateway/demos.mdx
+++ b/src/content/docs/ai-gateway/demos.mdx
@@ -21,5 +21,5 @@ Explore the following reference a
"design-guide",
"reference-architecture-diagram",
]}
- products={["AI Gateway"]}
+ products={["ai-gateway"]}
/>
diff --git a/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx b/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx
index b0bbe48edfc993c..126411f5ebfb349 100644
--- a/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx
+++ b/src/content/docs/ai-gateway/tutorials/deploy-aig-worker.mdx
@@ -6,8 +6,6 @@ tags:
- AI
- JavaScript
title: Deploy a Worker that connects to OpenAI via AI Gateway
-products:
- - Workers
description: Learn how to deploy a Worker that makes calls to OpenAI through AI Gateway
---
diff --git a/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx b/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx
index 0bc60957fb0db3a..978577cd270eb80 100644
--- a/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx
+++ b/src/content/docs/analytics/graphql-api/tutorials/querying-workers-metrics.mdx
@@ -1,9 +1,7 @@
---
title: Querying Workers Metrics with GraphQL
pcx_content_type: example
-products:
- - Workers
-
+products: [workers]
---
In this example, we are going to use the GraphQL Analytics API to query for Workers Metrics over a specified time period. We can query up to one month of data for dates up to three months ago.
@@ -127,4 +125,4 @@ https://api.cloudflare.com/client/v4/graphql \
#=> }
```
-[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions.
\ No newline at end of file
+[^1]: Refer to [Configure an Analytics API token](/analytics/graphql-api/getting-started/authentication/api-token-auth/) for more information on configuration and permissions.
diff --git a/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx b/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx
index 1e033a6185c7da5..d63af63ba3d59bb 100644
--- a/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx
+++ b/src/content/docs/browser-rendering/workers-bindings/browser-rendering-with-DO.mdx
@@ -1,10 +1,7 @@
---
pcx_content_type: tutorial
title: Deploy a Browser Rendering Worker with Durable Objects
-products:
- - Workers
- - Durable Objects
- - R2
+products: [workers, durable-objects, r2]
difficulty: Beginner
reviewed: 2023-09-28
tags:
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx b/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx
index 4d0ebe4c65d03e2..c74842883ecc376 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/browser-cache-ttl.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Browser Cache TTL
title: Browser Cache TTL
description: Browser Cache TTL
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx b/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx
index f3d553f0ecce9de..c4e3ec1411c642b 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/bypass-cache-on-cookie.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Bypass Cache on Cookie
title: Bypass Cache on Cookie
description: Bypass Cache on Cookie
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx
index 5133556ee814fd4..201885951f2a31e 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-deception-armor.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Cache Deception Armor
title: Cache Deception Armor
description: Cache Deception Armor
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx
index d74194de4d01b88..a2ad8d3d518f7ba 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-device-type.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Cache by Device Type
title: Cache by Device Type
description: Cache by Device Type
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx
index 217f2f62ee6e0a2..f19e11fafe53d69 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything-ignore-query-strings.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Cache Everything while ignoring query strings
title: Cache Everything while ignoring query strings
description: Cache Everything while ignoring query strings
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx
index 12fce7add2da7d1..a4c5038bc75ee8e 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-everything.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Cache Level (Cache Everything)
title: Cache Level (Cache Everything)
description: Cache Level (Cache Everything)
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx b/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx
index 286fbbf987c5c32..5ed964d7abad1c3 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/cache-ttl-by-status-code.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Cache TTL by status code
title: Cache TTL by status code
description: Cache TTL by status code
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx b/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx
index c6cbd798c1c0187..4faad884c6a3d0d 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/custom-cache-key.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Custom Cache Key
title: Custom Cache Key
description: Custom Cache Key
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example, Render } from "~/components";
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx b/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx
index 8aba528a6491c7d..acc87d4f9f0a576 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/edge-ttl.mdx
@@ -3,26 +3,25 @@ pcx_content_type: example
summary: Edge Cache TTL
title: Edge Cache TTL
description: Edge Cache TTL
-products:
- - Cache Rules
+products: [cache-rules]
---
-import { Example } from "~/components"
+import { Example } from "~/components";
[Create a cache rule](/cache/how-to/cache-rules/create-dashboard/) to adjust edge cache TTL for caching resources on Cloudflare edge to one day, for any hostname containing `example.com`:
-* **When incoming requests match**: Custom filter expression
- * Using the Expression Builder:
+- **When incoming requests match**: Custom filter expression
+ - Using the Expression Builder:
`Hostname contains "example.com"`
- * Using the Expression Editor:
+ - Using the Expression Editor:
`(http.host contains "example.com")`
-* **Then**:
- * **Cache eligibility**: Eligible for cache
- * **Setting**: Edge TTL
- * Ignore cache-control header and use this TTL
- * **Input time-to-live (TTL)**: *1 day*
+- **Then**:
+ - **Cache eligibility**: Eligible for cache
+ - **Setting**: Edge TTL
+ - Ignore cache-control header and use this TTL
+ - **Input time-to-live (TTL)**: _1 day_
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx b/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx
index beba8b4035afa18..cc378b3275b3924 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/origin-cache-control.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Origin Cache Control
title: Origin Cache Control
description: Origin Cache Control
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example } from "~/components"
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx b/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx
index 237d093d0d6bf2d..ac878c378846af9 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/query-string-sort.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Query String Sort
title: Query String Sort
description: Query String Sort
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example } from "~/components"
diff --git a/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx b/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx
index f94fd5b34194c98..eb6de19a9bc87a7 100644
--- a/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx
+++ b/src/content/docs/cache/how-to/cache-rules/examples/respect-strong-etags.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Respect Strong ETags
title: Respect Strong ETags
description: Respect Strong ETags
-products:
- - Cache Rules
+products: [cache-rules]
---
import { Example } from "~/components"
diff --git a/src/content/docs/cloudflare-one/tutorials/access-workers.mdx b/src/content/docs/cloudflare-one/tutorials/access-workers.mdx
index 7912434ceb64757..bc6077b4467429d 100644
--- a/src/content/docs/cloudflare-one/tutorials/access-workers.mdx
+++ b/src/content/docs/cloudflare-one/tutorials/access-workers.mdx
@@ -4,9 +4,7 @@ category: 🔐 Access
difficulty: Intermediate
pcx_content_type: tutorial
title: Create custom headers for Cloudflare Access-protected origins with Workers
-products:
- - Workers
- - Access
+products: [workers, access]
tags:
- JavaScript
description: >-
diff --git a/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx b/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx
index 71d673f38e0e1be..96594f6ccfef4eb 100644
--- a/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx
+++ b/src/content/docs/cloudflare-one/tutorials/r2-logs.mdx
@@ -4,8 +4,7 @@ category: 🔐 Zero Trust
difficulty: Beginner
pcx_content_type: tutorial
title: Use Cloudflare R2 as a Zero Trust log destination
-products:
- - R2
+products: [r2]
description: >-
This tutorial covers how to build a Cloudflare R2 bucket to store Zero Trust logs. It also shows how to connect the bucket to the Zero Trust Logpush service.
---
diff --git a/src/content/docs/d1/demos.mdx b/src/content/docs/d1/demos.mdx
index 77f1b1974c17ccb..ffbe12dd4e5fce1 100644
--- a/src/content/docs/d1/demos.mdx
+++ b/src/content/docs/d1/demos.mdx
@@ -32,4 +32,4 @@ Explore the following demo applications
Explore the following reference architectures that use D1:
-
+
diff --git a/src/content/docs/d1/tutorials/build-a-comments-api.mdx b/src/content/docs/d1/tutorials/build-a-comments-api.mdx
index 90347f7a837e31c..e28c82cee296883 100644
--- a/src/content/docs/d1/tutorials/build-a-comments-api.mdx
+++ b/src/content/docs/d1/tutorials/build-a-comments-api.mdx
@@ -3,8 +3,7 @@ reviewed: 2024-10-01
difficulty: Intermediate
pcx_content_type: tutorial
title: Build a Comments API
-products:
- - Workers
+products: [workers]
tags:
- Hono
- JavaScript
diff --git a/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx b/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx
index b9e4a0c8777f622..7abf77bdd5a6442 100644
--- a/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx
+++ b/src/content/docs/d1/tutorials/build-a-staff-directory-app.mdx
@@ -3,8 +3,7 @@ reviewed: 2024-03-21
difficulty: Intermediate
pcx_content_type: tutorial
title: Build a Staff Directory Application
-products:
- - Pages
+products: [pages]
tags:
- Hono
- TypeScript
diff --git a/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx b/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx
index c22790318e3d956..f7cbcde3de8a411 100644
--- a/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx
+++ b/src/content/docs/d1/tutorials/build-an-api-to-access-d1.mdx
@@ -3,8 +3,7 @@ reviewed: 2024-09-20
difficulty: Intermediate
pcx_content_type: tutorial
title: Build an API to access D1 using a proxy Worker
-products:
- - Workers
+products: [workers]
tags:
- Hono
- TypeScript
diff --git a/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx b/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx
index ca7679a12ab4ad0..710a1574a6b276b 100644
--- a/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx
+++ b/src/content/docs/d1/tutorials/d1-and-prisma-orm.mdx
@@ -4,8 +4,7 @@ difficulty: Beginner
content_type: Tutorial
pcx_content_type: tutorial
title: Query D1 using Prisma ORM
-products:
- - Workers
+products: [workers]
tags:
- TypeScript
- SQL
diff --git a/src/content/docs/durable-objects/demos.mdx b/src/content/docs/durable-objects/demos.mdx
index 3471e8c472fc10d..e4ad94cb8b2ad0c 100644
--- a/src/content/docs/durable-objects/demos.mdx
+++ b/src/content/docs/durable-objects/demos.mdx
@@ -20,4 +20,4 @@ Explore the following demo applications
Explore the following reference architectures that use Durable Objects:
-
+
diff --git a/src/content/docs/hyperdrive/demos.mdx b/src/content/docs/hyperdrive/demos.mdx
index 8c0fa5218e3ed9a..e4623c3ebd3c753 100644
--- a/src/content/docs/hyperdrive/demos.mdx
+++ b/src/content/docs/hyperdrive/demos.mdx
@@ -20,4 +20,4 @@ Explore the following demo applications
Explore the following reference architectures that use Hyperdrive:
-
+
diff --git a/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx b/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx
index 7e23448d7130ef7..bd4dc32710b6f5d 100644
--- a/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx
+++ b/src/content/docs/hyperdrive/tutorials/serverless-timeseries-api-with-timescale.mdx
@@ -3,8 +3,7 @@ reviewed: 2023-10-30
difficulty: Beginner
pcx_content_type: tutorial
title: Create a serverless, globally distributed time-series API with Timescale
-products:
- - Workers
+products: [workers]
tags:
- PostgreSQL
- TypeScript
diff --git a/src/content/docs/images/demos.mdx b/src/content/docs/images/demos.mdx
index dcb75b8c17b6dd2..982d233e26bc064 100644
--- a/src/content/docs/images/demos.mdx
+++ b/src/content/docs/images/demos.mdx
@@ -20,4 +20,4 @@ Explore the following demo applications
Explore the following reference architectures that use Images:
-
+
diff --git a/src/content/docs/kv/demos.mdx b/src/content/docs/kv/demos.mdx
index d9218868cc49d5b..2cba1d26f1ae0be 100644
--- a/src/content/docs/kv/demos.mdx
+++ b/src/content/docs/kv/demos.mdx
@@ -20,4 +20,4 @@ Explore the following demo applications
Explore the following reference architectures that use KV:
-
+
diff --git a/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx b/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx
index 94e2959a2ed9ebd..9a88e2fb0c1c6a6 100644
--- a/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx
+++ b/src/content/docs/load-balancing/pools/cloudflare-pages-origin.mdx
@@ -3,8 +3,7 @@ pcx_content_type: tutorial
title: Use Pages as an origin for Load Balancing
reviewed: 2024-07-03
difficulty: Beginner
-products:
- - Pages
+products: [pages]
sidebar:
order: 3
description: >-
diff --git a/src/content/docs/pages/demos.mdx b/src/content/docs/pages/demos.mdx
index df1fbab567b613c..1df1895119aab06 100644
--- a/src/content/docs/pages/demos.mdx
+++ b/src/content/docs/pages/demos.mdx
@@ -29,5 +29,5 @@ Explore the following reference a
"design-guide",
"reference-architecture-diagram",
]}
- products={["Pages"]}
+ products={["pages"]}
/>
diff --git a/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx b/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx
index 926ce8b16cb099d..1d545076868b994 100644
--- a/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx
+++ b/src/content/docs/pages/framework-guides/deploy-a-hono-site.mdx
@@ -83,7 +83,7 @@ For more tutorials involving Hono and Cloudflare Pages, refer to the following r
### Demo apps
diff --git a/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx b/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx
index 8ad3c20f28d6d7d..269ccb7a2276d4b 100644
--- a/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx
+++ b/src/content/docs/pages/tutorials/use-r2-as-static-asset-storage-for-pages.mdx
@@ -3,8 +3,7 @@ reviewed: 2024-07-22
difficulty: Intermediate
pcx_content_type: tutorial
title: Use R2 as static asset storage with Cloudflare Pages
-products:
- - R2
+products: [r2]
tags:
- Hono
- JavaScript
diff --git a/src/content/docs/pulumi/tutorial/hello-world.mdx b/src/content/docs/pulumi/tutorial/hello-world.mdx
index f66d2bfcd936a58..9a86eca6fabd167 100644
--- a/src/content/docs/pulumi/tutorial/hello-world.mdx
+++ b/src/content/docs/pulumi/tutorial/hello-world.mdx
@@ -1,8 +1,7 @@
---
title: Deploy a Worker
pcx_content_type: tutorial
-products:
- - Workers
+products: [workers]
reviewed: 2024-09-13
difficulty: Beginner
tags:
diff --git a/src/content/docs/queues/demos.mdx b/src/content/docs/queues/demos.mdx
index 4884d342d4693fa..175930a9fed89a8 100644
--- a/src/content/docs/queues/demos.mdx
+++ b/src/content/docs/queues/demos.mdx
@@ -14,10 +14,10 @@ Learn how you can use Queues within your existing application and architecture.
Explore the following demo applications for Queues.
-
+
## Reference architectures
Explore the following reference architectures that use Queues:
-
+
diff --git a/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx b/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx
index 0f60cf29551954f..e06083052edf513 100644
--- a/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx
+++ b/src/content/docs/queues/tutorials/handle-rate-limits/index.mdx
@@ -4,9 +4,7 @@ difficulty: Beginner
title: Handle rate limits of external APIs
summary: Example of how to use Queues to handle rate limits of external APIs.
pcx_content_type: tutorial
-products:
- - Workers
- - Queues
+products: [workers]
tags:
- TypeScript
sidebar:
diff --git a/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx b/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx
index 21a298af749aa24..6c1d4dd8de18885 100644
--- a/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx
+++ b/src/content/docs/queues/tutorials/web-crawler-with-browser-rendering/index.mdx
@@ -4,10 +4,7 @@ difficulty: Intermediate
title: Build a web crawler with Queues and Browser Rendering
summary: Example of how to use Queues and Browser Rendering to power a web crawler.
pcx_content_type: tutorial
-products:
- - Workers
- - Browser Rendering
- - KV
+products: [workers, queues, browser-rendering]
tags:
- TypeScript
sidebar:
diff --git a/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx b/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx
index 24db47baa77c84a..d8224fd11ea7e77 100644
--- a/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx
+++ b/src/content/docs/r2-sql/tutorials/end-to-end-pipeline.mdx
@@ -2,11 +2,7 @@
title: Build an end to end data pipeline
summary: Learn how to create an end-to-end data pipeline using Cloudflare Pipelines, R2 Data Catalog, and R2 SQL for real-time transaction analysis.
pcx_content_type: tutorial
-products:
- - R2
- - R2 Data Catalog
- - R2 SQL
- - Pipelines
+products: [pipelines, r2, r2-sql, r2-data-catalog]
description: >-
This tutorial demonstrates how to build a complete data pipeline using Cloudflare Pipelines, R2 Data Catalog, and R2 SQL.
---
diff --git a/src/content/docs/r2/demos.mdx b/src/content/docs/r2/demos.mdx
index 8bc6ecf4e982a71..b4137d5ffcc2186 100644
--- a/src/content/docs/r2/demos.mdx
+++ b/src/content/docs/r2/demos.mdx
@@ -29,5 +29,5 @@ Explore the following reference a
"design-guide",
"reference-architecture-diagram",
]}
- products={["R2"]}
+ products={["r2"]}
/>
diff --git a/src/content/docs/r2/tutorials/summarize-pdf.mdx b/src/content/docs/r2/tutorials/summarize-pdf.mdx
index 6cb3d113c505c30..f4444125bf860fc 100644
--- a/src/content/docs/r2/tutorials/summarize-pdf.mdx
+++ b/src/content/docs/r2/tutorials/summarize-pdf.mdx
@@ -1,10 +1,7 @@
---
title: Use event notification to summarize PDF files on upload
pcx_content_type: tutorial
-products:
- - Queues
- - Workers
- - Workers AI
+products: [workers, queues, workers-ai]
difficulty: Intermediate
reviewed: 2024-10-11
tags:
diff --git a/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx b/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx
index 2e0f434e2517682..c761ab1319dd02d 100644
--- a/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx
+++ b/src/content/docs/r2/tutorials/upload-logs-event-notifications.mdx
@@ -1,9 +1,7 @@
---
title: Log and store upload events in R2 with event notifications
pcx_content_type: tutorial
-products:
- - Queues
- - Workers
+products: [queues, workers]
difficulty: Beginner
reviewed: 2024-04-02
tags:
diff --git a/src/content/docs/reference-architecture/architectures/cdn.mdx b/src/content/docs/reference-architecture/architectures/cdn.mdx
index a5b0370aa818ac1..c54c1d88496ebcb 100644
--- a/src/content/docs/reference-architecture/architectures/cdn.mdx
+++ b/src/content/docs/reference-architecture/architectures/cdn.mdx
@@ -1,9 +1,7 @@
---
title: Content Delivery Network (CDN) Reference Architecture
pcx_content_type: reference-architecture
-products:
- - Cache
- - CDN
+products: [cache]
sidebar:
order: 1
label: Content Delivery Network (CDN)
diff --git a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx
index 116c023309d51f7..aaabfc766461ef8 100644
--- a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx
+++ b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-microsoft.mdx
@@ -1,11 +1,7 @@
---
title: Reference Architecture using Cloudflare SASE with Microsoft
pcx_content_type: reference-architecture
-products:
- - Access
- - Gateway
- - CASB
- - Email Security
+products: [access, casb, gateway, email-security-cf1]
sidebar:
order: 1
label: Cloudflare SASE with Microsoft
diff --git a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx
index 8cb327e5a1228a8..644779f2325b807 100644
--- a/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx
+++ b/src/content/docs/reference-architecture/architectures/cloudflare-sase-with-sentinelone.mdx
@@ -1,10 +1,7 @@
---
title: Enhancing security posture with SentinelOne and Cloudflare One
pcx_content_type: reference-architecture
-products:
- - Access
- - Gateway
- - Zero Trust WARP Client
+products: [access, gateway, zero-trust-warp]
sidebar:
order: 1
label: Cloudflare SASE with SentinelOne
diff --git a/src/content/docs/reference-architecture/architectures/load-balancing.mdx b/src/content/docs/reference-architecture/architectures/load-balancing.mdx
index b863974906d3660..889d37150babac1 100644
--- a/src/content/docs/reference-architecture/architectures/load-balancing.mdx
+++ b/src/content/docs/reference-architecture/architectures/load-balancing.mdx
@@ -1,8 +1,7 @@
---
title: Load Balancing Reference Architecture
pcx_content_type: reference-architecture
-products:
- - Load Balancing
+products: [load-balancing]
sidebar:
order: 1
label: Load Balancing
diff --git a/src/content/docs/reference-architecture/architectures/magic-transit.mdx b/src/content/docs/reference-architecture/architectures/magic-transit.mdx
index d97d087538a7336..b20cd33a86b247c 100644
--- a/src/content/docs/reference-architecture/architectures/magic-transit.mdx
+++ b/src/content/docs/reference-architecture/architectures/magic-transit.mdx
@@ -1,9 +1,7 @@
---
title: Magic Transit Reference Architecture
pcx_content_type: reference-architecture
-products:
- - Magic Transit
- - Network Interconnect
+products: [magic-transit, network-interconnect]
sidebar:
order: 1
label: Magic Transit
diff --git a/src/content/docs/reference-architecture/architectures/multi-vendor.mdx b/src/content/docs/reference-architecture/architectures/multi-vendor.mdx
index c64a319f577fcfd..83dea1175acdb07 100644
--- a/src/content/docs/reference-architecture/architectures/multi-vendor.mdx
+++ b/src/content/docs/reference-architecture/architectures/multi-vendor.mdx
@@ -1,9 +1,7 @@
---
title: Multi-vendor Application Security and Performance Reference Architecture
pcx_content_type: reference-architecture
-products:
- - DNS
- - Network Interconnect
+products: [dns, network-interconnect]
sidebar:
order: 1
label: Multi-Vendor Architecture
diff --git a/src/content/docs/reference-architecture/architectures/sase.mdx b/src/content/docs/reference-architecture/architectures/sase.mdx
index ae84376b102cd70..f13248355718e78 100644
--- a/src/content/docs/reference-architecture/architectures/sase.mdx
+++ b/src/content/docs/reference-architecture/architectures/sase.mdx
@@ -1,17 +1,7 @@
---
title: Evolving to a SASE architecture with Cloudflare
pcx_content_type: reference-architecture
-products:
- - Access
- - Gateway
- - CASB
- - Email Security
- - Digital Experience Monitoring
- - Browser Isolation
- - Data Loss Prevention
- - Magic WAN
- - Magic Firewall
- - Magic Transit
+products: [access, gateway, casb, email-security-cf1, dex, browser-isolation, dlp, magic-wan, magic-firewall, magic-transit]
sidebar:
order: 1
label: Secure Access Service Edge (SASE)
diff --git a/src/content/docs/reference-architecture/architectures/security.mdx b/src/content/docs/reference-architecture/architectures/security.mdx
index b7423f3f1ce94be..c584cb8152e1870 100644
--- a/src/content/docs/reference-architecture/architectures/security.mdx
+++ b/src/content/docs/reference-architecture/architectures/security.mdx
@@ -1,28 +1,7 @@
---
title: Cloudflare Security Architecture
pcx_content_type: reference-architecture
-products:
- - Workers
- - Turnstile
- - Access
- - Gateway
- - CASB
- - Email Security
- - Data Loss Prevention
- - Magic WAN
- - Magic Firewall
- - Magic Transit
- - API Shield
- - Bots
- - Data Localization Suite
- - DDoS Protection
- - DNS Firewall
- - Page Shield
- - SSL/TLS
- - Spectrum
- - Security Center
- - Turnstile
- - WAF
+products: [access, casb, dlp, gateway, email-security-cf1, workers, turnstile, magic-wan, magic-firewall, magic-transit, api-shield, bots, ddos-protection, dns-firewall, page-shield, ssl, spectrum, security-center, waf]
sidebar:
order: 1
label: Security Architecture
diff --git a/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx b/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx
index 3ad17db8be2d499..8f49299f3c10551 100644
--- a/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx
+++ b/src/content/docs/reference-architecture/design-guides/designing-ztna-access-policies.mdx
@@ -1,9 +1,7 @@
---
title: Designing ZTNA access policies for Cloudflare Access
pcx_content_type: design-guide
-products:
- - Gateway
- - Access
+products: [gateway, access]
sidebar:
label: "Designing ZTNA access policies"
reviewed: 2024-11-27
diff --git a/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx b/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx
index a439a67d80a02bb..15e338952081f94 100644
--- a/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx
+++ b/src/content/docs/reference-architecture/design-guides/extending-cloudflares-benefits-to-saas-providers-end-customers.mdx
@@ -1,12 +1,7 @@
---
title: Extend Cloudflare's benefits to SaaS providers' end-customers
pcx_content_type: design-guide
-products:
- - Cloudflare for SaaS
- - Cloudflare Tunnel
- - Load Balancing
- - Data Localization Suite
-weight: null
+products: [cloudflare-tunnel, cloudflare-for-saas, load-balancing, data-localization]
sidebar:
order: 1
label: Cloudflare's benefits for SaaS providers
diff --git a/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx b/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx
index a52df99e85e1eef..412199dd1d99a27 100644
--- a/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx
+++ b/src/content/docs/reference-architecture/design-guides/leveraging-cloudflare-for-your-saas-applications.mdx
@@ -1,12 +1,7 @@
---
title: Leveraging Cloudflare for your SaaS applications
pcx_content_type: design-guide
-products:
- - Cloudflare for SaaS
- - Cloudflare Tunnel
- - Load Balancing
- - Data Localization Suite
-weight: null
+products: [cloudflare-for-saas, cloudflare-tunnel, load-balancing, data-localization]
sidebar:
order: 1
label: Leveraging Cloudflare for your SaaS applications
diff --git a/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx b/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx
index 0ebad4ab1968f06..e99a995eb3a6b42 100644
--- a/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx
+++ b/src/content/docs/reference-architecture/design-guides/network-vpn-migration.mdx
@@ -1,11 +1,7 @@
---
title: Network-focused migration from VPN concentrators to Zero Trust Network Access
pcx_content_type: design-guide
-products:
- - Magic WAN
- - Gateway
- - Access
- - Network Interconnect
+products: [access, gateway, magic-wan, network-interconnect]
sidebar:
label: "Network-focused VPN migration"
reviewed: 2024-09-17
diff --git a/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx b/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx
index b05be4b8d08f338..3cdd17a2dac95f1 100644
--- a/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx
+++ b/src/content/docs/reference-architecture/design-guides/secure-application-delivery.mdx
@@ -1,8 +1,7 @@
---
title: Securely deliver applications with Cloudflare
pcx_content_type: design-guide
-products:
- - Network Interconnect
+products: [network-interconnect]
sidebar:
label: Secure application delivery
reviewed: 2023-12-18
diff --git a/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx b/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx
index 46cad4e7d396f43..9c027f55d1e45e8 100644
--- a/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx
+++ b/src/content/docs/reference-architecture/design-guides/securing-guest-wireless-networks.mdx
@@ -1,9 +1,7 @@
---
title: Securing guest wireless networks
pcx_content_type: design-guide
-products:
- - Gateway
- - Magic WAN
+products: [gateway, magic-wan]
tags:
- IPv6
sidebar:
diff --git a/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx b/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx
index 49d08f90faf0092..54f985e33bf652c 100644
--- a/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx
+++ b/src/content/docs/reference-architecture/design-guides/streamlined-waf-deployment-across-zones-and-applications.mdx
@@ -1,8 +1,7 @@
---
title: Streamlined WAF deployment across zones and applications
pcx_content_type: design-guide
-products:
- - Account Level WAF
+products: [waf]
sidebar:
label: Streamlined WAF deployment across zones and applications
reviewed: 2024-12-11
diff --git a/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx b/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx
index f6d86c843b242a1..6a19d541882219b 100644
--- a/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx
+++ b/src/content/docs/reference-architecture/design-guides/zero-trust-for-saas.mdx
@@ -1,15 +1,7 @@
---
title: Using a zero trust framework to secure SaaS applications
pcx_content_type: design-guide
-products:
- - Cloudflare One
- - Cloudflare Access
- - Cloudflare Gateway
- - Data Loss Prevention
- - Cloud Access Security Broker
- - Remote Browser Isolation
- - Cloud Email Security
- - Magic WAN
+products: [access, browser-isolation, cloudflare-one, casb, dlp, email-security-cf1, gateway, magic-wan]
sidebar:
order: 1
label: Zero Trust for SaaS applications
diff --git a/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx b/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx
index 6f47bf7e1916c73..738f5c2730c5f43 100644
--- a/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx
+++ b/src/content/docs/reference-architecture/design-guides/zero-trust-for-startups.mdx
@@ -1,17 +1,7 @@
---
title: Building zero trust architecture into your startup
pcx_content_type: design-guide
-products:
- - Access
- - Gateway
- - CASB
- - Email Security
- - Digital Experience Monitoring
- - Browser Isolation
- - Data Loss Prevention
- - Magic WAN
- - Magic Firewall
- - Magic Transit
+products: [access, browser-isolation, casb, dlp, email-security-cf1, gateway, magic-firewall, magic-transit, magic-wan]
sidebar:
label: Zero trust architecture for startups
reviewed: 2024-04-25
diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx
index 004c132e8a1d18d..1562d5e6fc719ec 100644
--- a/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx
+++ b/src/content/docs/reference-architecture/diagrams/ai/ai-asset-creation.mdx
@@ -1,8 +1,7 @@
---
title: "Content-based asset creation"
pcx_content_type: reference-architecture-diagram
-products:
- - Workers AI
+products: [workers-ai]
tags:
- AI
sidebar:
diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx
index 73010d4ec0ed708..9a7b25664538380 100644
--- a/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx
+++ b/src/content/docs/reference-architecture/diagrams/ai/ai-composable.mdx
@@ -1,12 +1,7 @@
---
title: Composable AI architecture
pcx_content_type: reference-architecture-diagram
-products:
- - Workers AI
- - Workers
- - Vectorize
- - D1
- - R2
+products: [d1, r2, vectorize, workers, workers-ai]
tags:
- AI
sidebar:
diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx
index 382863c1ec6a232..63ff49939b091ab 100644
--- a/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx
+++ b/src/content/docs/reference-architecture/diagrams/ai/ai-multivendor-observability-control.mdx
@@ -1,9 +1,7 @@
---
title: Multi-vendor AI observability and control
pcx_content_type: reference-architecture-diagram
-products:
- - Workers AI
- - AI Gateway
+products: [ai-gateway, workers-ai]
tags:
- AI
sidebar:
diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx
index 8450f35d84285e7..517e4484ca0729e 100644
--- a/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx
+++ b/src/content/docs/reference-architecture/diagrams/ai/ai-rag.mdx
@@ -3,13 +3,7 @@ title: "Retrieval Augmented Generation (RAG)"
pcx_content_type: reference-architecture-diagram
tags:
- AI
-products:
- - AI Search
- - Workers AI
- - Workers
- - Queues
- - Vectorize
- - D1
+products: [ai-search, d1, queues, vectorize, workers, workers-ai]
sidebar:
order: 1
label: Retrieval Augmented Generation (RAG)
diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx
index 60e0d2735e1e375..619f217e14ef3d6 100644
--- a/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx
+++ b/src/content/docs/reference-architecture/diagrams/ai/ai-vibe-coding-platform.mdx
@@ -1,9 +1,7 @@
---
title: AI Vibe Coding Platform
pcx_content_type: reference-architecture-diagram
-products:
- - Workers for Platforms
- - AI Gateway
+products: [ai-gateway, workers-for-platforms]
sidebar:
order: 0
label: AI Vibe Coding Platform
diff --git a/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx b/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx
index f07e8650ca414e5..f8cfb36d84c54c5 100644
--- a/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx
+++ b/src/content/docs/reference-architecture/diagrams/ai/ai-video-caption.mdx
@@ -3,11 +3,7 @@ title: Automatic captioning for video uploads
pcx_content_type: reference-architecture-diagram
tags:
- AI
-products:
- - Workers AI
- - Workers
- - Cache / CDN
- - R2
+products: [cache, r2, workers, workers-ai]
sidebar:
order: 1
label: Automatic captioning for video uploads
diff --git a/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx b/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx
index fbc83385608e326..447b51f4b1c1251 100644
--- a/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx
+++ b/src/content/docs/reference-architecture/diagrams/ai/bigquery-workers-ai.mdx
@@ -3,13 +3,7 @@ title: "Ingesting BigQuery Data into Workers AI"
pcx_content_type: reference-architecture-diagram
tags:
- AI
-products:
- - Workers AI
- - Workers
- - R2
- - Vectorize
- - D1
- - Workers KV
+products: [d1, kv, r2, vectorize, workers, workers-ai]
sidebar:
order: 1
label: Ingesting BigQuery Data into Workers AI
diff --git a/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx b/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx
index 17eb73988821b47..9239538b18254c1 100644
--- a/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx
+++ b/src/content/docs/reference-architecture/diagrams/bots/bot-management.mdx
@@ -1,8 +1,7 @@
---
title: Bot management
pcx_content_type: reference-architecture-diagram
-products:
- - Bots
+products: [bots]
sidebar:
order: 1
label: Bot management
diff --git a/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx b/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx
index 09cf95c6a3bf58e..e7501f2098e2ec3 100644
--- a/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx
+++ b/src/content/docs/reference-architecture/diagrams/content-delivery/optimizing-image-delivery-with-cloudflare-image-resizing-and-r2.mdx
@@ -1,11 +1,7 @@
---
title: Optimizing image delivery with Cloudflare image resizing and R2
pcx_content_type: reference-architecture-diagram
-products:
- - Images
- - R2
- - Cache / CDN
- - Transform Rules
+products: [cache, images, r2, transform-rules]
sidebar:
order: 1
label: Optimizing image delivery
diff --git a/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx b/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx
index 815b7dfac2630e5..0e82981e3eafb7b 100644
--- a/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx
+++ b/src/content/docs/reference-architecture/diagrams/iot/optimizing-and-securing-connected-transportation-systems.mdx
@@ -1,23 +1,7 @@
---
title: Optimizing and securing connected transportation systems
pcx_content_type: reference-architecture-diagram
-products:
- - Access
- - Gateway
- - Workers
- - DDoS Protection
- - DNS Firewall
- - SSL/TLS
- - WAF
- - KV
- - D1
- - Durable Objects
- - Workers AI
- - R2
- - WAF
- - Load Balancing
- - Cache
- - CDN
+products: [argo-smart-routing, api-shield, cache, ddos-protection, dns-firewall, load-balancing, r2, workers, ssl, waf, workers-ai]
sidebar:
order: 1
label: Connected transportation systems
diff --git a/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx b/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx
index a0891a9ece36544..88d3fcf2d7ac9a1 100644
--- a/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx
+++ b/src/content/docs/reference-architecture/diagrams/network/bring-your-own-ip-space-to-cloudflare.mdx
@@ -1,9 +1,7 @@
---
title: Bring your own IP space to Cloudflare
pcx_content_type: reference-architecture-diagram
-products:
- - DDoS Protection
- - BYOIP
+products: [byoip, ddos-protection]
sidebar:
order: 1
label: BYOIP to Cloudflare
diff --git a/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx b/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx
index f32ead808ec265e..1791161bac874a2 100644
--- a/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx
+++ b/src/content/docs/reference-architecture/diagrams/network/optimizing-roaming-experience-with-geolocated-ips.mdx
@@ -1,9 +1,7 @@
---
title: Optimizing device roaming experience with geolocated IPs
pcx_content_type: reference-architecture-diagram
-products:
- - Magic WAN
- - Gateway
+products: [gateway, magic-wan]
sidebar:
order: 1
label: Device roaming with geolocated IPs
diff --git a/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx b/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx
index 84153a11d6d12ca..b6765ab5e2740cb 100644
--- a/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx
+++ b/src/content/docs/reference-architecture/diagrams/network/protect-data-center-networks.mdx
@@ -1,13 +1,7 @@
---
title: Protect data center networks
pcx_content_type: reference-architecture-diagram
-products:
- - Magic Firewall
- - Network Interconnect
- - DDoS Protection
- - Magic Transit
- - Magic WAN
- - Gateway
+products: [ddos-protection, gateway, magic-firewall, magic-transit, magic-wan, network-interconnect]
sidebar:
order: 1
label: Protect data center networks
diff --git a/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx b/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx
index 80641ffc3857cee..b4b14f00dee8dea 100644
--- a/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx
+++ b/src/content/docs/reference-architecture/diagrams/network/protect-hybrid-cloud-networks-with-cloudflare-magic-transit.mdx
@@ -1,12 +1,7 @@
---
title: Protect hybrid cloud networks with Cloudflare Magic Transit
pcx_content_type: reference-architecture-diagram
-products:
- - Magic Firewall
- - Network Interconnect
- - DDoS Protection
- - Magic Transit
- - BYOIP
+products: [byoip, ddos-protection, magic-firewall, magic-transit, network-interconnect]
sidebar:
order: 1
label: Protect hybrid cloud networks
diff --git a/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx b/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx
index 5bf3170716792cb..2fc1525e66718fc 100644
--- a/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx
+++ b/src/content/docs/reference-architecture/diagrams/network/protect-public-networks-with-cloudflare.mdx
@@ -1,12 +1,7 @@
---
title: Protect public networks with Cloudflare
pcx_content_type: reference-architecture-diagram
-products:
- - Magic Firewall
- - Network Interconnect
- - DDoS Protection
- - Magic Transit
- - Gateway
+products: [ddos-protection, gateway, magic-firewall, magic-transit, network-interconnect]
sidebar:
order: 1
label: Protect public networks
diff --git a/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx b/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx
index 6f1995efb06648a..0814631ec033c2d 100644
--- a/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx
+++ b/src/content/docs/reference-architecture/diagrams/network/protecting-sp-networks-from-ddos.mdx
@@ -1,9 +1,7 @@
---
title: Protect ISP and telecommunications networks from DDoS attacks
pcx_content_type: reference-architecture-diagram
-products:
- - Magic Transit
- - Network Interconnect
+products: [magic-transit, network-interconnect]
sidebar:
order: 1
label: Protect ISP and telecommunications networks from DDoS attacks
diff --git a/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx b/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx
index 1e9d8f45ebcfb0d..3fd20b3998dc239 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/augment-access-with-serverless.mdx
@@ -1,9 +1,7 @@
---
title: Extend ZTNA with external authorization and serverless computing
pcx_content_type: reference-architecture-diagram
-products:
- - Access
- - Workers
+products: [access, workers]
sidebar:
order: 1
label: ZTNA with external authorization
diff --git a/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx b/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx
index 72e83b83eb48a2f..69c3a3ba3d7d12f 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/deploying-self-hosted-VoIP-services-for-hybrid-users.mdx
@@ -1,9 +1,7 @@
---
title: Deploy self-hosted VoIP services for hybrid users
pcx_content_type: reference-architecture-diagram
-products:
- - Access
- - Gateway
+products: [access, gateway]
sidebar:
order: 1
label: Self-hosted VoIP for hybrid users
diff --git a/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx b/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx
index 525f6c5dba971af..872ef24d7aa8a07 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/gateway-dns-for-isp.mdx
@@ -1,8 +1,7 @@
---
title: DNS filtering solution for Internet service providers
pcx_content_type: reference-architecture-diagram
-products:
- - Gateway
+products: [gateway]
sidebar:
order: 1
label: DNS filtering solution for Internet service providers
diff --git a/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx b/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx
index 08ae8155ad0e780..43c793bdeb8231b 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/gateway-for-protective-dns.mdx
@@ -1,8 +1,7 @@
---
title: Protective DNS for governments
pcx_content_type: reference-architecture-diagram
-products:
- - Cloudflare Gateway
+products: [gateway]
sidebar:
order: 1
label: Protective DNS for governments
diff --git a/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx b/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx
index 67edbe541dc59ce..f303e4fea50292f 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/magic-wan-connector-deployment.mdx
@@ -1,8 +1,7 @@
---
title: Magic WAN Connector deployment options
pcx_content_type: reference-architecture-diagram
-products:
- - Magic WAN
+products: [magic-wan]
sidebar:
order: 1
label: Magic WAN Connector deployment
diff --git a/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx b/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx
index 462176b69548505..b742f44a9e40055 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/sase-clientless-access-private-dns.mdx
@@ -1,10 +1,7 @@
---
title: Access to private apps without having to deploy client agents
pcx_content_type: reference-architecture-diagram
-products:
- - Access
- - Browser Isolation
- - Gateway
+products: [access, browser-isolation, gateway]
sidebar:
order: 1
label: Access to private apps without having to deploy client agents
diff --git a/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx b/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx
index f685983868e9bb5..5174a741fb4e1fe 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/secure-access-to-saas-applications-with-sase.mdx
@@ -1,10 +1,7 @@
---
title: Secure access to SaaS applications with SASE
pcx_content_type: reference-architecture-diagram
-products:
- - Access
- - Browser Isolation
- - Gateway
+products: [access, browser-isolation, gateway]
sidebar:
order: 1
label: Secure access to SaaS applications
diff --git a/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx b/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx
index ebe443433dd51d2..3212e60ff333587 100644
--- a/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx
+++ b/src/content/docs/reference-architecture/diagrams/sase/zero-trust-and-virtual-desktop-infrastructure.mdx
@@ -1,9 +1,7 @@
---
title: Zero Trust and Virtual Desktop Infrastructure
pcx_content_type: reference-architecture-diagram
-products:
- - Gateway
- - Access
+products: [access, gateway]
sidebar:
order: 1
label: Zero Trust and Virtual Desktop Infrastructure
diff --git a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx
index e22618dd084eb7e..791e5f098d397c3 100644
--- a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx
+++ b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-transit.mdx
@@ -8,8 +8,7 @@ head:
- tag: title
content: "Reference Architecture Diagram: Securing data in transit"
reviewed: 2024-05-01
-products:
- - DLP
+products: [dlp]
description: >-
Data in transit is often considered vulnerable to interception or tampering during transmission. Data Loss Prevention (DLP) technologies can be used to inspect the contents of network traffic and block sensitive data from going to a risky destination.
---
diff --git a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx
index 7cb152162ffc2f5..a13fa6827898f23 100644
--- a/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx
+++ b/src/content/docs/reference-architecture/diagrams/security/securing-data-in-use.mdx
@@ -5,8 +5,7 @@ sidebar:
order: 1
label: Securing data in use
reviewed: 2024-05-01
-products:
- - Browser Isolation
+products: [browser-isolation]
description: >-
Learn how Cloudflare's Remote Browser Isolation (RBI) works and secures data in use.
---
diff --git a/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx b/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx
index 2ccb30df84dc8e8..4d4d529cbaad94b 100644
--- a/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx
+++ b/src/content/docs/reference-architecture/diagrams/serverless/a-b-testing-using-workers.mdx
@@ -1,9 +1,7 @@
---
title: A/B-testing using Workers
pcx_content_type: reference-architecture-diagram
-products:
- - Workers
- - KV
+products: [workers, kv]
sidebar:
order: 1
label: A/B-testing using Workers
diff --git a/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx b/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx
index 3ecd7f7cfc94620..be169cd2360397e 100644
--- a/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx
+++ b/src/content/docs/reference-architecture/diagrams/serverless/fullstack-application.mdx
@@ -1,30 +1,7 @@
---
title: Fullstack applications
pcx_content_type: reference-architecture-diagram
-products:
- - Workers
- - KV
- - D1
- - Durable Objects
- - Workers AI
- - Pages
- - Logs
- - R2
- - Stream
- - Images
- - Realtime
- - WAF
- - Bots
- - SSL/TLS
- - DDoS protection
- - API Shield
- - Workflows
- - Queues
- - Pipelines
- - Agents
- - Vectorize
- - AI Gateway
- - Containers
+products: [ai-gateway, agents, api-shield, bots, containers, d1, ddos-protection, durable-objects, images, kv, logs, pages, pipelines, queues, r2, realtime, ssl, stream, vectorize, waf, workflows, workers, workers-ai]
sidebar:
order: 1
label: Fullstack applications
diff --git a/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx b/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx
index 9d7ff5facb20dc4..accc85b65956e4f 100644
--- a/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx
+++ b/src/content/docs/reference-architecture/diagrams/serverless/programmable-platforms.mdx
@@ -1,9 +1,7 @@
---
title: Programmable Platforms
pcx_content_type: reference-architecture-diagram
-products:
- - workers-for-platforms
- - KV
+products: [workers-for-platforms, kv]
sidebar:
order: 1
label: Programmable Platforms
diff --git a/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx b/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx
index 96359f81e2cef87..ffee80fd3505850 100644
--- a/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx
+++ b/src/content/docs/reference-architecture/diagrams/serverless/serverless-etl.mdx
@@ -1,10 +1,7 @@
---
title: Serverless ETL pipelines
pcx_content_type: reference-architecture-diagram
-products:
- - Workers
- - Queues
- - R2
+products: [queues, r2, workers]
sidebar:
order: 1
label: Serverless ETL pipelines
diff --git a/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx b/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx
index 94526ca9296caf2..431b43b31e7223c 100644
--- a/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx
+++ b/src/content/docs/reference-architecture/diagrams/serverless/serverless-global-apis.mdx
@@ -1,11 +1,7 @@
---
title: Serverless global APIs
pcx_content_type: reference-architecture-diagram
-products:
- - Workers
- - KV
- - D1
- - Hyperdrive
+products: [d1, hyperdrive, kv, workers]
sidebar:
order: 1
label: Serverless global APIs
diff --git a/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx b/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx
index 8c4e593e992038f..3e33274e72cc633 100644
--- a/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx
+++ b/src/content/docs/reference-architecture/diagrams/serverless/serverless-image-content-management.mdx
@@ -1,14 +1,7 @@
---
title: Serverless image content management
pcx_content_type: reference-architecture-diagram
-products:
- - KV
- - R2
- - Workers AI
- - WAF
- - DDoS protection
- - Workers
- - Bots
+products: [bots, ddos-protection, kv, r2, waf, workers, workers-ai]
sidebar:
order: 1
label: Serverless image content management
diff --git a/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx b/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx
index d92af0d1725d447..a3e851995d1d6b4 100644
--- a/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx
+++ b/src/content/docs/reference-architecture/diagrams/storage/durable-object-control-data-plane-pattern.mdx
@@ -1,8 +1,7 @@
---
title: "Control and data plane architectural pattern for Durable Objects"
pcx_content_type: reference-architecture-diagram
-products:
- - Durable Objects
+products: [durable-objects]
sidebar:
order: 1
label: Control and data plane architectural pattern for Durable Objects
diff --git a/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx b/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx
index a3451d5e17c843e..b9d9ef9eef10086 100644
--- a/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx
+++ b/src/content/docs/reference-architecture/diagrams/storage/egress-free-storage-multi-cloud.mdx
@@ -1,9 +1,7 @@
---
title: Egress-free object storage in multi-cloud setups
pcx_content_type: reference-architecture-diagram
-products:
- - Workers
- - R2
+products: [r2, workers]
sidebar:
order: 1
label: Egress-free object storage in multi-cloud setups
diff --git a/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx b/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx
index f5fc9164dcdcaa5..7efac66d646f149 100644
--- a/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx
+++ b/src/content/docs/reference-architecture/diagrams/storage/event-notifications-for-storage.mdx
@@ -1,9 +1,7 @@
---
title: Event notifications for storage
pcx_content_type: reference-architecture-diagram
-products:
- - R2
- - Workers
+products: [r2, workers]
sidebar:
order: 1
label: Event notifications for storage
diff --git a/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx b/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx
index b3db2636dfabec5..28ba08a8f7cb524 100644
--- a/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx
+++ b/src/content/docs/reference-architecture/diagrams/storage/on-demand-object-storage-migration.mdx
@@ -1,8 +1,7 @@
---
title: On-demand Object Storage Data Migration
pcx_content_type: reference-architecture-diagram
-products:
- - R2
+products: [r2]
sidebar:
order: 1
label: On-demand Object Storage Data Migration
diff --git a/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx b/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx
index 0ae877ccf7cce78..e66553044d14ebf 100644
--- a/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx
+++ b/src/content/docs/reference-architecture/diagrams/storage/storing-user-generated-content.mdx
@@ -1,10 +1,7 @@
---
title: Storing user generated content
pcx_content_type: reference-architecture-diagram
-products:
- - R2
- - Workers AI
- - Workers
+products: [r2, workers, workers-ai]
sidebar:
order: 1
label: Storing user generated content
diff --git a/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx b/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx
index 4ea42eb81ad2ab5..bd84c48543b3404 100644
--- a/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx
+++ b/src/content/docs/rules/cloud-connector/examples/route-images-to-aws-s3-using-terraform.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket with Cloud Connector using Terraform.
-products:
- - Cloud Connector
+products: [cloud-connector]
title: Route /images to an S3 Bucket using Terraform
description: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket with Cloud Connector using Terraform.
---
diff --git a/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx b/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx
index 2ed4dcffbabd107..cbd5efa21554d97 100644
--- a/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx
+++ b/src/content/docs/rules/cloud-connector/examples/route-images-to-s3.mdx
@@ -3,8 +3,7 @@ title: Route /images to an S3 Bucket
pcx_content_type: example
summary: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket using Cloud Connector.
description: Route requests with a URI path starting with `/images` to a specific AWS S3 bucket using Cloud Connector.
-products:
- - Cloud Connector
+products: [cloud-connector]
---
import { Steps, DashButton } from "~/components";
diff --git a/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx b/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx
index f3e54389c6bc98d..454d707cd23c7b7 100644
--- a/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx
+++ b/src/content/docs/rules/cloud-connector/examples/send-eu-visitors-to-gcs.mdx
@@ -3,8 +3,7 @@ title: Send EU visitors to a Google Cloud Storage bucket
pcx_content_type: example
summary: Route all traffic from EU visitors to a Google Cloud Storage bucket using Cloud Connector.
description: Route all traffic from EU visitors to a Google Cloud Storage bucket using Cloud Connector.
-products:
- - Cloud Connector
+products: [cloud-connector]
---
import { Steps, DashButton } from "~/components";
diff --git a/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx b/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx
index 698eb5dd4bd6823..a2708e1f4d72ed7 100644
--- a/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx
+++ b/src/content/docs/rules/cloud-connector/examples/serve-static-assets-from-azure.mdx
@@ -3,8 +3,7 @@ title: Serve /static-assets from Azure Blob Storage
pcx_content_type: example
summary: Route requests with a URI path starting with `/static-assets` to an Azure Blob Storage container using Cloud Connector.
description: Route requests with a URI path starting with `/static-assets` to an Azure Blob Storage container using Cloud Connector.
-products:
- - Cloud Connector
+products: [cloud-connector]
---
import { Steps, DashButton } from "~/components";
diff --git a/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx b/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx
index 30edde95da3e3c7..199e9946c7fdba8 100644
--- a/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx
+++ b/src/content/docs/rules/compression-rules/examples/disable-all-brotli.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a compression rule to turn off Brotli compression for all
incoming requests of a given zone.
-products:
- - Compression Rules
+products: [compression-rules]
title: Disable Brotli compression
description: Create a compression rule to turn off Brotli compression for all
incoming requests of a given zone.
diff --git a/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx b/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx
index 908bc0c408d8c7b..e5e2d698d3444f2 100644
--- a/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx
+++ b/src/content/docs/rules/compression-rules/examples/disable-compression-avif.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Create a compression rule to turn off compression for AVIF images,
based on either the content type or the file extension specified in the
request.
-products:
- - Compression Rules
+products: [compression-rules]
title: Disable compression for AVIF images
description: Create a compression rule to turn off compression for AVIF images,
based on either the content type or the file extension specified in the
diff --git a/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx b/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx
index ba03e68ddeb79e2..774012cdbbee064 100644
--- a/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx
+++ b/src/content/docs/rules/compression-rules/examples/enable-zstandard.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a compression rule to turn on Zstandard compression for response content types where Cloudflare applies compression by default.
-products:
- - Compression Rules
+products: [compression-rules]
title: Enable Zstandard compression for default content types
description: Create a compression rule to turn on Zstandard compression for response content types where Cloudflare applies compression by default.
---
diff --git a/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx b/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx
index 951999d14727273..53cf5c768557895 100644
--- a/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx
+++ b/src/content/docs/rules/compression-rules/examples/gzip-for-csv.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a compression rule to set Gzip compression as the preferred
compression method for CSV files.
-products:
- - Compression Rules
+products: [compression-rules]
title: Use Gzip compression for CSV files
description: Create a compression rule to set Gzip compression as the preferred
compression method for CSV files.
diff --git a/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx b/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx
index dcaf12bef48ac7a..e65c39be45c73e6 100644
--- a/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx
+++ b/src/content/docs/rules/compression-rules/examples/only-brotli-url-path.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a compression rule to set Brotli as the only supported
compression algorithm for a specific URI path.
-products:
- - Compression Rules
+products: [compression-rules]
title: Use only Brotli compression for a specific path
description: Create a compression rule to set Brotli as the only supported
compression algorithm for a specific URI path.
diff --git a/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx b/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx
index 695530b37820372..9fb42cb12bf8dff 100644
--- a/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx
+++ b/src/content/docs/rules/configuration-rules/examples/define-single-configuration-terraform.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a configuration rule using Terraform to turn off Email
Obfuscation and Browser Integrity Check for API requests in a given zone.
-products:
- - Configuration Rules
+products: [configuration-rules]
title: Define a single configuration rule using Terraform
description: Create a configuration rule using Terraform to turn off Email
Obfuscation and Browser Integrity Check for API requests in a given zone.
diff --git a/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx b/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx
index 612e210490bd33f..670bc66aa187ae4 100644
--- a/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx
+++ b/src/content/docs/rules/origin-rules/examples/change-http-host-header.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create an origin rule to change the HTTP `Host` header and DNS record.
-products:
- - Origin Rules
+products: [origin-rules]
title: Change the HTTP Host header and DNS record
description: Create an origin rule to change the HTTP `Host` header and the resolved DNS record.
---
diff --git a/src/content/docs/rules/origin-rules/examples/change-port.mdx b/src/content/docs/rules/origin-rules/examples/change-port.mdx
index 42fbd79fc09603c..66c812e9ff8e201 100644
--- a/src/content/docs/rules/origin-rules/examples/change-port.mdx
+++ b/src/content/docs/rules/origin-rules/examples/change-port.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create an origin rule to change the destination port.
-products:
- - Origin Rules
+products: [origin-rules]
title: Change the destination port
description: Create an origin rule to change the destination port.
---
diff --git a/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx b/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx
index 3b9d01e05a21e2f..1e6c2fd5a976517 100644
--- a/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx
+++ b/src/content/docs/rules/origin-rules/examples/define-single-origin-terraform.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create an origin rule using Terraform to override the `Host` header,
the resolved hostname, and the destination port of API requests.
-products:
- - Origin Rules
+products: [origin-rules]
title: Define a single origin rule using Terraform
description: Create an origin rule using Terraform to override the `Host`
header, the resolved hostname, and the destination port of API requests.
diff --git a/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx b/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx
index bc6deb8c841b26f..7a4a68ef2d09222 100644
--- a/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx
+++ b/src/content/docs/rules/origin-rules/tutorials/change-uri-path-and-host-header.mdx
@@ -3,9 +3,7 @@ reviewed: 2025-02-26
difficulty: Beginner
pcx_content_type: tutorial
title: Change URI path and Host header
-products:
- - Transform Rules
- - Origin Rules
+products: [transform-rules, origin-rules]
description: >-
This tutorial shows you how to modify both the URI path and the Host header of incoming requests using Transform Rules and Origin Rules.
---
diff --git a/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx b/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx
index 06387a4f173cb9e..978ad5ff5c4d4c7 100644
--- a/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx
+++ b/src/content/docs/rules/origin-rules/tutorials/point-to-pages-with-custom-domain.mdx
@@ -3,9 +3,7 @@ reviewed: 2025-04-12
difficulty: Beginner
pcx_content_type: tutorial
title: Point to Pages with a custom domain
-products:
- - Pages
- - Origin Rules
+products: [pages, origin-rules]
description: >-
This tutorial will instruct you how to configure an origin rule and a DNS record to point to a Pages deployment with a custom domain.
---
diff --git a/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx b/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx
index ab95f6e579dc313..6eda6067db6c6b3 100644
--- a/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx
+++ b/src/content/docs/rules/origin-rules/tutorials/point-to-r2-bucket-with-custom-domain.mdx
@@ -3,9 +3,7 @@ reviewed: 2025-04-12
difficulty: Beginner
pcx_content_type: tutorial
title: Point to R2 bucket with a custom domain
-products:
- - R2
- - Origin Rules
+products: [r2, origin-rules]
description: >-
This tutorial will instruct you how to configure an origin rule and a DNS record to point to an R2 bucket configured with a custom domain.
---
diff --git a/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx b/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx
index 155a8942f43411d..7e885bda23f31a6 100644
--- a/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx
+++ b/src/content/docs/rules/snippets/examples/ab-testing-same-url.mdx
@@ -4,8 +4,7 @@ tags:
- A/B testing
- Cookies
- URL rewrite
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: A/B testing with same-URL direct access
description: Set up an A/B test by controlling what response is served based on cookies.
diff --git a/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx b/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx
index 3c930455366cb02..eee507aef49bd22 100644
--- a/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx
+++ b/src/content/docs/rules/snippets/examples/append-dates-to-cookies.mdx
@@ -3,8 +3,7 @@ summary: Dynamically set a cookie expiration and test group.
tags:
- A/B testing
- Cookies
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Append dates to cookies to use with A/B testing
description: Dynamically set a cookie expiration and test group.
diff --git a/src/content/docs/rules/snippets/examples/auth-with-headers.mdx b/src/content/docs/rules/snippets/examples/auth-with-headers.mdx
index 86de059b11588b7..99d4481bfd58bba 100644
--- a/src/content/docs/rules/snippets/examples/auth-with-headers.mdx
+++ b/src/content/docs/rules/snippets/examples/auth-with-headers.mdx
@@ -5,8 +5,7 @@ summary: Allow or deny a request based on a known pre-shared key in a header.
tags:
- Authentication
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Auth with headers
description: Allow or deny a request based on a known pre-shared key in a
diff --git a/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx b/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx
index 003caa8f536df0b..a101345fa75cb57 100644
--- a/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx
+++ b/src/content/docs/rules/snippets/examples/bot-data-to-origin.mdx
@@ -5,8 +5,7 @@ summary: Send [Bots](/bots/) information to your origin. Refer to [Bot
tags:
- Headers
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Send Bot Management information to origin
description: Send [Bots](/bots/) information to your origin. Refer to [Bot
diff --git a/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx b/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx
index 7b3d413c8cb5a8f..afea4f4f009dd4b 100644
--- a/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx
+++ b/src/content/docs/rules/snippets/examples/bots-to-honeypot.mdx
@@ -4,8 +4,7 @@ summary: Use the [bot score
bots to a honeypot.
tags:
- Redirects
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Send suspect bots to a honeypot
description: Use the [bot score
diff --git a/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx b/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx
index 1a11aa49a3d3bee..56ca5e62ae826bc 100644
--- a/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx
+++ b/src/content/docs/rules/snippets/examples/bulk-redirect-map.mdx
@@ -3,8 +3,7 @@ summary: Redirect requests to certain URLs based on a mapped object to the
request's URL.
tags:
- Redirects
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Bulk redirect based on a map object
description: Redirect requests to certain URLs based on a mapped object to the
diff --git a/src/content/docs/rules/snippets/examples/country-code-redirect.mdx b/src/content/docs/rules/snippets/examples/country-code-redirect.mdx
index 1a3de77de39a3d9..0f323b7bdc746c2 100644
--- a/src/content/docs/rules/snippets/examples/country-code-redirect.mdx
+++ b/src/content/docs/rules/snippets/examples/country-code-redirect.mdx
@@ -3,8 +3,7 @@ summary: Redirect a response based on the country code in the header of a visito
tags:
- Localization
- Redirects
-products:
- - Snippets
+products: [snippets]
preview:
- true
pcx_content_type: example
diff --git a/src/content/docs/rules/snippets/examples/custom-cache.mdx b/src/content/docs/rules/snippets/examples/custom-cache.mdx
index 96efb294a9d4072..68a003bf02f30a6 100644
--- a/src/content/docs/rules/snippets/examples/custom-cache.mdx
+++ b/src/content/docs/rules/snippets/examples/custom-cache.mdx
@@ -2,8 +2,7 @@
summary: Control cache programmatically. Use this template to optimize performance and implement custom caching strategies.
tags:
- Caching
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Custom cache
description: Store, retrieve, and remove assets from cache programmatically. Use this template to optimize performance and implement custom caching strategies.
diff --git a/src/content/docs/rules/snippets/examples/debugging-logs.mdx b/src/content/docs/rules/snippets/examples/debugging-logs.mdx
index d02fdfc623da67d..e2a8b4944a47f53 100644
--- a/src/content/docs/rules/snippets/examples/debugging-logs.mdx
+++ b/src/content/docs/rules/snippets/examples/debugging-logs.mdx
@@ -3,8 +3,7 @@ summary: Send debugging information in an errored response to a logging service.
tags:
- Logging
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Debugging logs
description: Send debugging information in an errored response to a logging service.
diff --git a/src/content/docs/rules/snippets/examples/define-cors-headers.mdx b/src/content/docs/rules/snippets/examples/define-cors-headers.mdx
index 37c28457ee3315b..ac834f50d418670 100644
--- a/src/content/docs/rules/snippets/examples/define-cors-headers.mdx
+++ b/src/content/docs/rules/snippets/examples/define-cors-headers.mdx
@@ -6,8 +6,7 @@ tags:
- Headers
- Request modification
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Define CORS headers
description: Adjust [Cross-Origin Resource Sharing
diff --git a/src/content/docs/rules/snippets/examples/follow-redirects.mdx b/src/content/docs/rules/snippets/examples/follow-redirects.mdx
index 445af1754b78f0d..f50d98b55445657 100644
--- a/src/content/docs/rules/snippets/examples/follow-redirects.mdx
+++ b/src/content/docs/rules/snippets/examples/follow-redirects.mdx
@@ -2,8 +2,7 @@
summary: Modify the fetch request to follow redirects from the origin, ensuring the client receives the final response.
tags:
- Redirects
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Follow redirects from the origin
description: Modify the fetch request to follow redirects from the origin, ensuring the client receives the final response.
diff --git a/src/content/docs/rules/snippets/examples/hex-timestamp.mdx b/src/content/docs/rules/snippets/examples/hex-timestamp.mdx
index c04e1624b03d465..6f796c89eb1cc48 100644
--- a/src/content/docs/rules/snippets/examples/hex-timestamp.mdx
+++ b/src/content/docs/rules/snippets/examples/hex-timestamp.mdx
@@ -3,8 +3,7 @@ summary: Add a custom header to requests sent to the origin server with the curr
tags:
- Headers
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Add HEX timestamp to a request header
description: Add a custom header to requests sent to the origin server with the current timestamp in hexadecimal format for debugging, tracking, or custom routing purposes.
diff --git a/src/content/docs/rules/snippets/examples/jwt-validation.mdx b/src/content/docs/rules/snippets/examples/jwt-validation.mdx
index b2f24d71051aac7..fd6864a84a63d6f 100644
--- a/src/content/docs/rules/snippets/examples/jwt-validation.mdx
+++ b/src/content/docs/rules/snippets/examples/jwt-validation.mdx
@@ -4,8 +4,7 @@ summary: Extract the JWT token from a header, decode it, and implement
tags:
- Authentication
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Validate JSON web tokens (JWT)
description: Extract the JWT token from a header, decode it, and implement
diff --git a/src/content/docs/rules/snippets/examples/maintenance.mdx b/src/content/docs/rules/snippets/examples/maintenance.mdx
index 097250156c8c806..3c6e431df13e834 100644
--- a/src/content/docs/rules/snippets/examples/maintenance.mdx
+++ b/src/content/docs/rules/snippets/examples/maintenance.mdx
@@ -2,8 +2,7 @@
summary: Serve a custom maintenance page. Ideal for downtime notifications, planned maintenance, or emergency messages.
tags:
- Redirects
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Maintenance page
description: Serve a custom maintenance page instead of fetching content from the origin server or cache. Ideal for downtime notifications, planned maintenance, or emergency messages.
diff --git a/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx b/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx
index 3a8b4958ff411e0..57aa47f5ce9d721 100644
--- a/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx
+++ b/src/content/docs/rules/snippets/examples/override-set-cookies-value.mdx
@@ -4,8 +4,7 @@ tags:
- Headers
- Cookies
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Override a Set-Cookie header with a certain value
description: Get a specific `Set-Cookie` header and update it with a certain value.
diff --git a/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx b/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx
index 34280fa18811b7b..4c54e3ea846bc81 100644
--- a/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx
+++ b/src/content/docs/rules/snippets/examples/redirect-forbidden-status.mdx
@@ -3,8 +3,7 @@ summary: If origin responded with `403 Forbidden` error code, redirect to
different page.
tags:
- Redirects
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Redirect 403 Forbidden to a different page
description: If origin responded with `403 Forbidden` error code, redirect to
diff --git a/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx b/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx
index 53bf112aaf690c7..e2b586a9814aad8 100644
--- a/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx
+++ b/src/content/docs/rules/snippets/examples/redirect-replaced-domain.mdx
@@ -2,8 +2,7 @@
summary: Redirect all requests from one domain to another domain.
tags:
- Redirects
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Redirect from one domain to another
description: Redirect all requests from one domain to another domain.
diff --git a/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx b/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx
index 90ee8eebf033834..c6ee059dea5a022 100644
--- a/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx
+++ b/src/content/docs/rules/snippets/examples/remove-fields-api-response.mdx
@@ -3,8 +3,7 @@ summary: If origin responds with `JSON`, parse the response and delete fields to
return a modified response.
tags:
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Remove fields from API response
description: If origin responds with `JSON`, parse the response and delete
diff --git a/src/content/docs/rules/snippets/examples/remove-query-strings.mdx b/src/content/docs/rules/snippets/examples/remove-query-strings.mdx
index 32bbb01f7807653..8995d0da911323a 100644
--- a/src/content/docs/rules/snippets/examples/remove-query-strings.mdx
+++ b/src/content/docs/rules/snippets/examples/remove-query-strings.mdx
@@ -2,8 +2,7 @@
summary: Remove certain query strings from a request before passing to the origin.
tags:
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Remove query strings before sending request to origin
description: Remove certain query strings from a request before passing to the origin.
diff --git a/src/content/docs/rules/snippets/examples/remove-response-headers.mdx b/src/content/docs/rules/snippets/examples/remove-response-headers.mdx
index 7ca3d571dfbdd93..b2b44f389d121ca 100644
--- a/src/content/docs/rules/snippets/examples/remove-response-headers.mdx
+++ b/src/content/docs/rules/snippets/examples/remove-response-headers.mdx
@@ -2,8 +2,7 @@
summary: Remove from response all headers that start with a certain name.
tags:
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Remove response headers
description: Remove from response all headers that start with a certain name.
diff --git a/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx b/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx
index 6113d00a69921e4..b901933b598af37 100644
--- a/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx
+++ b/src/content/docs/rules/snippets/examples/return-incoming-request-properties.mdx
@@ -4,8 +4,7 @@ summary: Respond with information about the incoming request provided by
tags:
- Logging
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Return information about the incoming request
description: Respond with information about the incoming request provided by
diff --git a/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx b/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx
index 1ac12fc17aaeefd..a410cd84b299f67 100644
--- a/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx
+++ b/src/content/docs/rules/snippets/examples/rewrite-site-links.mdx
@@ -2,8 +2,7 @@
summary: Dynamically rewrite links in HTML responses.
tags:
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Rewrite links on HTML pages
description: Dynamically rewrite links in HTML responses. This is useful for site migrations and branding updates.
diff --git a/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx b/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx
index ec4750ce9248d0c..8ae58bcd2f54ec4 100644
--- a/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx
+++ b/src/content/docs/rules/snippets/examples/route-and-rewrite.mdx
@@ -2,8 +2,7 @@
summary: Reroute a request to a different origin and modify the URL path.
tags:
- URL rewrite
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Change origin and modify paths
description: Route requests to a different origin, prepend a directory to the URL path, and remove specific segments.
diff --git a/src/content/docs/rules/snippets/examples/security-headers.mdx b/src/content/docs/rules/snippets/examples/security-headers.mdx
index c172871a5f0b417..50494c0a591b6b3 100644
--- a/src/content/docs/rules/snippets/examples/security-headers.mdx
+++ b/src/content/docs/rules/snippets/examples/security-headers.mdx
@@ -4,8 +4,7 @@ summary: Set common security headers such as X-XSS-Protection, X-Frame-Options,
tags:
- Headers
- Response modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Set security headers
description: Set common security headers such as X-XSS-Protection,
diff --git a/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx b/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx
index 41b12f808b0beeb..5207bdcff43dea7 100644
--- a/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx
+++ b/src/content/docs/rules/snippets/examples/send-timestamp-to-origin.mdx
@@ -4,8 +4,7 @@ summary: Convert timestamp to hexadecimal format and send it as a custom header
tags:
- Headers
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Send timestamp to origin as a custom header
description: Convert timestamp to hexadecimal format and send it as a custom
diff --git a/src/content/docs/rules/snippets/examples/serve-different-origin.mdx b/src/content/docs/rules/snippets/examples/serve-different-origin.mdx
index d7173d4a9ce303c..6b8529506d58753 100644
--- a/src/content/docs/rules/snippets/examples/serve-different-origin.mdx
+++ b/src/content/docs/rules/snippets/examples/serve-different-origin.mdx
@@ -3,8 +3,7 @@ summary: If response to the original request is not `200 OK` or a redirect, send
to another origin.
tags:
- Redirects
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Route to a different origin based on origin response
description: If response to the original request is not `200 OK` or a redirect,
diff --git a/src/content/docs/rules/snippets/examples/signing-requests.mdx b/src/content/docs/rules/snippets/examples/signing-requests.mdx
index 07d5cea04259867..7d50e3971fe40b9 100644
--- a/src/content/docs/rules/snippets/examples/signing-requests.mdx
+++ b/src/content/docs/rules/snippets/examples/signing-requests.mdx
@@ -3,8 +3,7 @@ summary: Verify a signed request using the HMAC and SHA-256 algorithms or return
tags:
- Authentication
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Sign requests
description: Verify a signed request using the HMAC and SHA-256 algorithms or return a 403.
diff --git a/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx b/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx
index 0f1935a86270107..91fc4a67b31e48d 100644
--- a/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx
+++ b/src/content/docs/rules/snippets/examples/slow-suspicious-requests.mdx
@@ -3,8 +3,7 @@ summary: Define a delay to be used when incoming requests match a rule you
consider suspicious based on the bot score.
tags:
- Request modification
-products:
- - Snippets
+products: [snippets]
pcx_content_type: example
title: Slow down suspicious requests
description: Define a delay to be used when incoming requests match a rule you
diff --git a/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx b/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx
index c6f071ec2008f48..67e9d962de1afa6 100644
--- a/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx
+++ b/src/content/docs/rules/transform/examples/add-request-header-bot-score.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a request header transform rule to add a `X-Bot-Score` HTTP header to the request with the current bot score.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Request modification
title: Add a request header with the current bot score
diff --git a/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx b/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx
index 7900b252bc9e7aa..151c928103cd9c6 100644
--- a/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx
+++ b/src/content/docs/rules/transform/examples/add-request-header-static-value.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary:
Create a request header transform rule to add an `X-Source` HTTP header to the request with a static value
(`Cloudflare`).
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Request modification
title: Add request header with a static value
diff --git a/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx b/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx
index 1b6320a1f4acf40..c23aff52fc9770a 100644
--- a/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx
+++ b/src/content/docs/rules/transform/examples/add-request-header-subrequest-other-zone.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a request header transform rule to add an HTTP header when the Workers subrequest comes from a different zone.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Request modification
title: Add a request header for subrequests from other zones
diff --git a/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx b/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx
index 691aff86becce3e..1cece09fe520bc2 100644
--- a/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx
+++ b/src/content/docs/rules/transform/examples/add-response-header-static-value.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary:
Create a response header transform rule to add a `set-cookie` HTTP header to the response with a static value
(`cookiename=value`).
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Response modification
title: Add a response header with a static value
diff --git a/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx b/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx
index fa389bc217881ad..df40dadeb31f7ff 100644
--- a/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx
+++ b/src/content/docs/rules/transform/examples/normalize-encoded-slash.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a URL rewrite rule (part of Transform Rules) to normalize encoded forward slashes (`%2F`) in the request path to standard slashes (`/`).
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Normalize encoded slashes in URL path
diff --git a/src/content/docs/rules/transform/examples/remove-request-header.mdx b/src/content/docs/rules/transform/examples/remove-request-header.mdx
index eb85a295dd47343..1be3a11507e7cdc 100644
--- a/src/content/docs/rules/transform/examples/remove-request-header.mdx
+++ b/src/content/docs/rules/transform/examples/remove-request-header.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a request header transform rule (part of Transform Rules) to remove the `cf-connecting-ip` HTTP header from the request.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Request modification
title: Remove a request header
diff --git a/src/content/docs/rules/transform/examples/remove-response-header.mdx b/src/content/docs/rules/transform/examples/remove-response-header.mdx
index 0dcf87d3d03a51e..90d6f12caaff287 100644
--- a/src/content/docs/rules/transform/examples/remove-response-header.mdx
+++ b/src/content/docs/rules/transform/examples/remove-response-header.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a response header transform rule (part of Transform Rules) to remove the `cf-connecting-ip` HTTP header from the response.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Response modification
title: Remove a response header
diff --git a/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx b/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx
index 9b5d4cc896da5dd..00a768f84ecaf0f 100644
--- a/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx
+++ b/src/content/docs/rules/transform/examples/rewrite-archive-urls-new-format.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Create a transform rule to rewrite the URL format
`/posts/--
-` to the new format
`/posts///
/`.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Rewrite blog archive URLs
diff --git a/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx b/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx
index 546014948b3a1f6..01d1a944536db9c 100644
--- a/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx
+++ b/src/content/docs/rules/transform/examples/rewrite-moved-section.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a URL rewrite rule (part of Transform Rules) to rewrite
everything under `/blog/` to `/marketing/`.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Rewrite path of moved section of a website
diff --git a/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx b/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx
index 6d732e17d937149..a61f9fce5e99d86 100644
--- a/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx
+++ b/src/content/docs/rules/transform/examples/rewrite-path-archived-posts.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a URL rewrite rule (part of Transform Rules) to rewrite any
requests for `/news/2012/...` URI paths to `/archive/news/2012/...`.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Rewrite path of archived blog posts
diff --git a/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx b/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx
index 0abf811b829e67a..e5ab48d5e84e7aa 100644
--- a/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx
+++ b/src/content/docs/rules/transform/examples/rewrite-path-object-storage.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a URL rewrite rule (part of Transform Rules) to remove
`/files/` from URI paths before routing request to your object storage bucket.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Rewrite path for object storage bucket
diff --git a/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx b/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx
index e837c22c9ac66ae..bf90f2d8f3595db 100644
--- a/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx
+++ b/src/content/docs/rules/transform/examples/rewrite-several-url-different-url.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a URL rewrite rule (part of Transform Rules) to rewrite any
requests for `/images///` to `/img/`.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Rewrite image paths with several URL segments
diff --git a/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx b/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx
index 2bfaeeba929e62b..d9664145a17a4d5 100644
--- a/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx
+++ b/src/content/docs/rules/transform/examples/rewrite-url-string-visitors.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a transform rule to rewrite the request path from `/blog` to
`/blog?sort-by=date`.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Rewrite URL query string
diff --git a/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx b/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx
index d4ca9a4f8f324b5..a3e868c09799ac6 100644
--- a/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx
+++ b/src/content/docs/rules/transform/examples/rewrite-welcome-for-countries.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create two URL rewrite rules (part of Transform Rules) to rewrite the
path of the welcome page for visitors in specific countries.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- URL rewrite
title: Rewrite page path for visitors in specific countries
diff --git a/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx b/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx
index 21822844adc91eb..48a7864e96db5cf 100644
--- a/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx
+++ b/src/content/docs/rules/transform/examples/set-response-header-bot-score.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a response header transform rule (part of Transform Rules) to
set an `X-Bot-Score` HTTP header in the response with the current bot score.
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Response modification
title: Set a response header with the current bot score
diff --git a/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx b/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx
index 7e774d30a56f9a1..b2fbbeee3f7de0f 100644
--- a/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx
+++ b/src/content/docs/rules/transform/examples/set-response-header-static-value.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a response header transform rule (part of Transform Rules) to
set an `X-Bot-Score` HTTP header in the response to a static value (`Cloudflare`).
-products:
- - Transform Rules
+products: [transform-rules]
tags:
- Response modification
title: Set response header with a static value
diff --git a/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx b/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx
index 22db876ec3a03aa..4d32b7afef82285 100644
--- a/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/perform-mobile-redirects.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a redirect rule to redirect visitors using mobile devices to a
different hostname.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Perform mobile redirects
description: Create a redirect rule to redirect visitors using mobile devices to
a different hostname.
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx
index 8a668fd0d0e02c8..870e50b09c8ddc0 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-admin-https.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a redirect rule to redirect requests for the administration area
of `store.example.com` to HTTPS, keeping the original path and query string.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect admin area requests to HTTPS
description: Create a redirect rule to redirect requests for the administration
area of `store.example.com` to HTTPS, keeping the original path and query
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx
index e8f71be4fc80ffa..897c5f6c681ff0d 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-another-domain.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Create a redirect rule to redirect all requests to a different domain,
maintaining all functionality, except for the discontinued HTTP service (port
80).
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect requests from one domain to another
description: Create a redirect rule to redirect all requests to a different
domain, maintaining all functionality, except for the discontinued HTTP
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx
index def38402fc261ec..79d4a8866831ac1 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-country.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Create a redirect rule to redirect all website visitors from the United
Kingdom to a different domain, maintaining the current functionality in the
same paths.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect requests from one country to a domain
description: Create a redirect rule to redirect all website visitors from the
United Kingdom to a different domain, maintaining the current functionality in
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx
index cd77b921e74f59e..87409c0499810bc 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-domain-root.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a redirect rule to redirect all URLs for a domain to point to
the root of a new domain, including any subdomains of the old domain.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect requests for a domain to a new domain
description: Create a redirect rule to redirect all URLs for a domain to point
to the root of a new domain, including any subdomains of the old domain.
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx
index 273930f479b6b3b..631691a2a1ed821 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-all-different-hostname.mdx
@@ -3,8 +3,7 @@ pcx_content_type: example
summary: Create a redirect rule to redirect all requests for
`smallshop.example.com` to a different hostname using HTTPS, keeping the
original path and query string.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect requests to a different hostname
description: Create a redirect rule to redirect all requests for
`smallshop.example.com` to a different hostname using HTTPS, keeping the
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx
index f0b0c1e4f5e0dd5..a4001b263d28d35 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-country-subdomains.mdx
@@ -4,8 +4,7 @@ summary: Create a redirect rule to redirect United Kingdom and France visitors
from the `example.com` website's root path (`/`) to their localized
subdomains `https://gb.example.com` and `https://fr.example.com`,
respectively.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect local visitors to specific subdomains
description: Create a redirect rule to redirect United Kingdom and France
visitors from the `example.com` website's root path (`/`) to their localized
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx
index 4722032a641bf9e..cf7b8f84822a2f8 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-new-url.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a redirect rule to redirect visitors from `/contact-us/` to the
page's new path `/contacts/`.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect visitors to a new page URL
description: Create a redirect rule to redirect visitors from `/contact-us/` to
the page's new path `/contacts/`.
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx
index 1e72d7b7921f3ba..21a9af13071e0d7 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-root-to-www.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a redirect rule to forward HTTPS requests from the root (also known as the “apex” or “naked” domain) to the WWW subdomain.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect from root to WWW
description: Create a redirect rule to forward HTTPS requests from the root (also known as the “apex” or “naked” domain) to the WWW subdomain.
---
diff --git a/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx b/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx
index fb03aeb5487b999..67efe25c932dc6b 100644
--- a/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/redirect-www-to-root.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: example
summary: Create a redirect rule to forward HTTPS requests from the WWW subdomain to the root (also known as the “apex” or “naked” domain).
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Redirect from WWW to root
description: Create a redirect rule to forward HTTPS requests from the WWW subdomain to the root (also known as the “apex” or “naked” domain).
---
diff --git a/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx b/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx
index 7dd3cc0289a67fa..cbf0eb365437268 100644
--- a/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx
+++ b/src/content/docs/rules/url-forwarding/examples/remove-locale-url.mdx
@@ -2,8 +2,7 @@
pcx_content_type: example
summary: Create a redirect rule to redirect visitors from an old URL format with
locale information to a new URL format.
-products:
- - Redirect Rules
+products: [redirect-rules]
title: Remove locale from URL path
description: Create a redirect rule to redirect visitors from an old URL format
with locale information to a new URL format.
diff --git a/src/content/docs/smart-shield/get-started.mdx b/src/content/docs/smart-shield/get-started.mdx
index 4f643b571fc6c9e..9431251f7ac4a25 100644
--- a/src/content/docs/smart-shield/get-started.mdx
+++ b/src/content/docs/smart-shield/get-started.mdx
@@ -5,7 +5,7 @@ sidebar:
order: 2
---
-import { GlossaryTooltip, ResourcesBySelector, DirectoryListing } from "~/components";
+import { GlossaryTooltip, DirectoryListing } from "~/components";
Smart Shield is available to all customers as an opt-in configuration.
diff --git a/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx b/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx
index be2ca69dacc5114..5156a648cb8a4a5 100644
--- a/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx
+++ b/src/content/docs/turnstile/tutorials/integrating-turnstile-waf-and-bot-management.mdx
@@ -3,9 +3,7 @@ title: Integrate Turnstile, WAF, & Bot Management
pcx_content_type: tutorial
reviewed: 2024-09-17
difficulty: Beginner
-products:
- - Web Application Firewall
- - Bot Management
+products: [waf, bots]
tags:
- JavaScript
sidebar:
diff --git a/src/content/docs/vectorize/demos.mdx b/src/content/docs/vectorize/demos.mdx
index a4378d1c677b4a6..b82c7511dfd1410 100644
--- a/src/content/docs/vectorize/demos.mdx
+++ b/src/content/docs/vectorize/demos.mdx
@@ -14,4 +14,4 @@ Learn how you can use Vectorize within your existing architecture.
Explore the following reference architectures that use Vectorize:
-
+
diff --git a/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx b/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx
index fb9a86f19d0e0b7..f70be9e51f5b064 100644
--- a/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx
+++ b/src/content/docs/workers-ai/features/function-calling/embedded/examples/kv.mdx
@@ -1,8 +1,7 @@
---
pcx_content_type: navigation
title: Use KV API
-products:
- - KV
+products: [kv]
tags:
- AI
sidebar:
diff --git a/src/content/docs/workers-ai/guides/demos-architectures.mdx b/src/content/docs/workers-ai/guides/demos-architectures.mdx
index b8d09655662434f..e6b340af95d7521 100644
--- a/src/content/docs/workers-ai/guides/demos-architectures.mdx
+++ b/src/content/docs/workers-ai/guides/demos-architectures.mdx
@@ -29,5 +29,5 @@ Explore the following reference a
"design-guide",
"reference-architecture-diagram",
]}
- products={["Workers AI"]}
+ products={["workers-ai"]}
/>
diff --git a/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx b/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx
index bb374add1e8bcec..789e040a69aecad 100644
--- a/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx
+++ b/src/content/docs/workers-ai/guides/tutorials/build-a-retrieval-augmented-generation-ai.mdx
@@ -3,10 +3,7 @@ reviewed: 2024-11-21
difficulty: Beginner
pcx_content_type: tutorial
title: Build a Retrieval Augmented Generation (RAG) AI
-products:
- - Workers
- - D1
- - Vectorize
+products: [workers, d1, vectorize]
tags:
- AI
- Hono
diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx
index bd814c2873a3359..8e87fb19dccc4c5 100644
--- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx
+++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux-newmodels.mdx
@@ -5,8 +5,7 @@ pcx_content_type: tutorial
title: Add New AI Models to your Playground (Part 2)
sidebar:
order: 2
-products:
- - Workers
+products: [workers]
tags:
- AI
- TypeScript
diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx
index 0a0855441124dca..24cb8a4a1c4d3a3 100644
--- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx
+++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-flux.mdx
@@ -6,8 +6,7 @@ title: Build an AI Image Generator Playground (Part 1)
tableOfContents: false
sidebar:
order: 1
-products:
- - Workers
+products: [workers]
tags:
- AI
- TypeScript
diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx
index 505be69f66c3b2e..cd1708d66f86e93 100644
--- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx
+++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/image-generator-store-and-catalog.mdx
@@ -5,8 +5,7 @@ pcx_content_type: tutorial
title: Store and Catalog AI Generated Images with R2 (Part 3)
sidebar:
order: 3
-products:
- - Workers
+products: [workers]
tags:
- AI
- TypeScript
diff --git a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx
index db85475b2a5330d..4ea2e333d7ca7bf 100644
--- a/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx
+++ b/src/content/docs/workers-ai/guides/tutorials/image-generation-playground/index.mdx
@@ -3,8 +3,7 @@ reviewed: 2024-10-17
difficulty: Beginner
pcx_content_type: tutorial
title: How to Build an Image Generator using Workers AI
-products:
- - Workers
+products: [workers]
tags:
- AI
- TypeScript
diff --git a/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx b/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx
index 2ac240e5b6be843..038d940f21802d9 100644
--- a/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx
+++ b/src/content/docs/workers-ai/guides/tutorials/using-bigquery-with-workers-ai.mdx
@@ -3,9 +3,7 @@ reviewed: 2024-10-21
difficulty: Beginner
pcx_content_type: tutorial
title: Using BigQuery with Workers AI
-products:
- - Workers
- - Workers AI
+products: [workers, workers-ai]
tags:
- AI
- JavaScript
diff --git a/src/content/docs/workers/demos.mdx b/src/content/docs/workers/demos.mdx
index b2d57d598b45917..ea9f624b4c4fdc7 100644
--- a/src/content/docs/workers/demos.mdx
+++ b/src/content/docs/workers/demos.mdx
@@ -20,4 +20,4 @@ Explore the following demo applications
Explore the following reference architectures that use Workers:
-
+
diff --git a/src/content/docs/workers/examples/index.mdx b/src/content/docs/workers/examples/index.mdx
index cfe975a9e03e706..47e8b646bb5d66e 100644
--- a/src/content/docs/workers/examples/index.mdx
+++ b/src/content/docs/workers/examples/index.mdx
@@ -1,5 +1,4 @@
---
-
hideChildren: true
pcx_content_type: navigation
title: Examples
@@ -11,4 +10,8 @@ import { GlossaryTooltip, ResourcesBySelector } from "~/components";
Explore the following examples for Workers.
-
+
diff --git a/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx b/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx
index da95233fbebeb12..9a8d66aaf84d015 100644
--- a/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx
+++ b/src/content/docs/workers/tutorials/build-a-jamstack-app.mdx
@@ -3,8 +3,7 @@ reviewed: 2024-05-14
difficulty: Beginner
pcx_content_type: tutorial
title: Build a todo list Jamstack application
-products:
- - KV
+products: [kv]
tags:
- JavaScript
description: >-
diff --git a/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx b/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx
index d68efadaf95ebaf..b350f85625c7d36 100644
--- a/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx
+++ b/src/content/docs/workers/tutorials/create-finetuned-chatgpt-ai-models-with-r2.mdx
@@ -3,8 +3,7 @@ difficulty: Intermediate
pcx_content_type: tutorial
title: Create a fine-tuned OpenAI model with R2
reviewed: 2024-06-07
-products:
- - R2
+products: [r2]
tags:
- AI
- Hono
diff --git a/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx b/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx
index 269a7eabb7214a0..cb1978608046319 100644
--- a/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx
+++ b/src/content/docs/workers/tutorials/deploy-a-realtime-chat-app.mdx
@@ -3,8 +3,7 @@ reviewed: 2023-09-13
difficulty: Intermediate
pcx_content_type: tutorial
title: Deploy a real-time chat application
-products:
- - Durable Objects
+products: [durable-objects]
tags:
- JavaScript
description: >-
diff --git a/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx b/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx
index 8fd38ce4aa58344..1af393460a1113f 100644
--- a/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx
+++ b/src/content/docs/workers/tutorials/generate-youtube-thumbnails-with-workers-and-images.mdx
@@ -3,8 +3,7 @@ reviewed: 2023-03-27
difficulty: Intermediate
pcx_content_type: tutorial
title: Generate YouTube thumbnails with Workers and Cloudflare Image Resizing
-products:
- - Images
+products: [images]
tags:
- JavaScript
- Rust
diff --git a/src/content/docs/workers/tutorials/mysql.mdx b/src/content/docs/workers/tutorials/mysql.mdx
index 3a434d1dc321463..e94e9443989a927 100644
--- a/src/content/docs/workers/tutorials/mysql.mdx
+++ b/src/content/docs/workers/tutorials/mysql.mdx
@@ -3,8 +3,7 @@ reviewed: 2025-04-02
difficulty: Beginner
pcx_content_type: tutorial
title: Connect to a MySQL database with Cloudflare Workers
-products:
- - Hyperdrive
+products: [hyperdrive]
tags:
- MySQL
- TypeScript
diff --git a/src/content/docs/workers/tutorials/postgres.mdx b/src/content/docs/workers/tutorials/postgres.mdx
index bb209e67d3327a3..1bdd73dc12178ba 100644
--- a/src/content/docs/workers/tutorials/postgres.mdx
+++ b/src/content/docs/workers/tutorials/postgres.mdx
@@ -3,8 +3,7 @@ reviewed: 2025-07-01
difficulty: Beginner
pcx_content_type: tutorial
title: Connect to a PostgreSQL database with Cloudflare Workers
-products:
- - Hyperdrive
+products: [hyperdrive]
tags:
- PostgreSQL
- TypeScript
diff --git a/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx b/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx
index 28805cf2c8902d3..223fa98d4e243fa 100644
--- a/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx
+++ b/src/content/docs/workers/tutorials/upload-assets-with-r2.mdx
@@ -3,8 +3,7 @@ reviewed: 2023-06-15
difficulty: Beginner
pcx_content_type: tutorial
title: Securely access and upload assets with Cloudflare R2
-products:
- - R2
+products: [r2]
tags:
- TypeScript
description: >-
diff --git a/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx b/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx
index 6887baf0ac9dd9f..20d6c9e6db7dd9a 100644
--- a/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx
+++ b/src/content/docs/workers/tutorials/workers-kv-from-rust.mdx
@@ -3,8 +3,7 @@ reviewed: 2024-05-15
difficulty: Intermediate
pcx_content_type: tutorial
title: Use Workers KV directly from Rust
-products:
- - KV
+products: [kv]
tags:
- Rust
description: >-
diff --git a/src/content/docs/workflows/examples/backup-d1.mdx b/src/content/docs/workflows/examples/backup-d1.mdx
index 786dcc895654ebe..6b0435ba36283f0 100644
--- a/src/content/docs/workflows/examples/backup-d1.mdx
+++ b/src/content/docs/workflows/examples/backup-d1.mdx
@@ -1,12 +1,9 @@
---
summary: Export a D1 database into R2 storage with Workflows
-products:
- - Workflows
- - D1
- - R2
+products: [d1, r2]
tags:
- - Typescript
+ - TypeScript
pcx_content_type: example
title: Export and save D1 database
sidebar:
diff --git a/src/content/docs/workflows/examples/send-invoices.mdx b/src/content/docs/workflows/examples/send-invoices.mdx
index a937ffaa00c5cd5..960ee8d5403684a 100644
--- a/src/content/docs/workflows/examples/send-invoices.mdx
+++ b/src/content/docs/workflows/examples/send-invoices.mdx
@@ -1,10 +1,9 @@
---
summary: Send invoice when shopping cart is checked out and paid for
-products:
- - Workflows
- - D1
- - Email Routing
+products: [d1, email-routing]
+tags:
+ - TypeScript
pcx_content_type: example
title: Pay cart and send invoice
sidebar:
diff --git a/src/content/docs/workflows/examples/twilio.mdx b/src/content/docs/workflows/examples/twilio.mdx
index f628e9e19be2cb0..fab000b5aa83d1b 100644
--- a/src/content/docs/workflows/examples/twilio.mdx
+++ b/src/content/docs/workflows/examples/twilio.mdx
@@ -1,8 +1,7 @@
---
summary: Integrate Workflows with Twilio. Learn how to receive and send text messages and phone calls via APIs and Webhooks.
-products:
- - Workers
+products: [workers]
pcx_content_type: example
title: Integrate Workflows with Twilio
sidebar:
diff --git a/src/content/docs/workflows/examples/wait-for-event.mdx b/src/content/docs/workflows/examples/wait-for-event.mdx
index 09066d250e1f1ff..a0d3963f43a46c1 100644
--- a/src/content/docs/workflows/examples/wait-for-event.mdx
+++ b/src/content/docs/workflows/examples/wait-for-event.mdx
@@ -1,8 +1,6 @@
---
summary: Implement a Cloudflare Workflow that processes user-uploaded images, awaits human approval, and performs AI-based image tagging upon approval.
-products:
- - Workflows
tags:
- Typescript
pcx_content_type: example
diff --git a/src/content/learning-paths/application-security.json b/src/content/learning-paths/application-security.json
index 79e18fd0822599d..aa547fcfe07f6a1 100644
--- a/src/content/learning-paths/application-security.json
+++ b/src/content/learning-paths/application-security.json
@@ -3,13 +3,8 @@
"path": "/learning-paths/application-security/account-security/",
"priority": 6,
"description": "Learn more about the tools Cloudflare offers to protect your website against malicious traffic and bad actors.",
- "products": [
- "Cloudflare Essentials",
- "SSL/TLS",
- "WAF",
- "DDoS protection",
- "Bots"
- ],
+ "pcx_content_type": "learning-path",
+ "products": ["fundamentals", "ssl", "waf", "ddos-protection", "bots"],
"product_group": "Application security",
"additional_groups": ["Application security"]
}
diff --git a/src/content/learning-paths/china-network-overview.json b/src/content/learning-paths/china-network-overview.json
index 7f7f420ae2f67b7..f47b4567524a8b2 100644
--- a/src/content/learning-paths/china-network-overview.json
+++ b/src/content/learning-paths/china-network-overview.json
@@ -3,7 +3,8 @@
"path": "/learning-paths/china-network-overview/series/china-network-main-features-1/",
"priority": 1,
"description": "Watch to learn how Cloudflare's China Network can help you improve performance, compliance, and connectivity for your users in mainland China.",
- "products": ["China Network"],
+ "pcx_content_type": "learning-path",
+ "products": ["china-network"],
"product_group": "Application performance",
"additional_groups": ["Application security"],
"video": true
diff --git a/src/content/learning-paths/clientless-access.json b/src/content/learning-paths/clientless-access.json
index ea51e2ce9d60b1e..cb3f8a7cef8803d 100644
--- a/src/content/learning-paths/clientless-access.json
+++ b/src/content/learning-paths/clientless-access.json
@@ -2,12 +2,9 @@
"title": "Deploy clientless access",
"path": "/learning-paths/clientless-access/concepts/",
"priority": 2,
- "description": "Secure access to internal web applications without a device client.",
- "products": [
- "Cloudflare Access",
- "Cloudflare Tunnel",
- "Remote Browser Isolation"
- ],
+ "description": "Learn how to set up clientless access to internal applications with Cloudflare Zero Trust.",
+ "pcx_content_type": "learning-path",
+ "products": ["access", "cloudflare-tunnel", "browser-isolation"],
"product_group": "Cloudflare One",
"additional_groups": ["Application security", "Application performance"]
}
diff --git a/src/content/learning-paths/cybersafe.json b/src/content/learning-paths/cybersafe.json
index 8087d7865c9ce1d..736ae574a63d076 100644
--- a/src/content/learning-paths/cybersafe.json
+++ b/src/content/learning-paths/cybersafe.json
@@ -2,8 +2,9 @@
"title": "Project Cybersafe Schools",
"path": "/learning-paths/cybersafe/concepts/",
"priority": 5,
- "description": "Prevent children from accessing obscene or harmful content over the Internet. Go to [Project Cybersafe Schools](https://www.cloudflare.com/lp/cybersafe-schools/) to apply.",
- "products": ["Cloudflare Gateway", "WARP", "DNS"],
+ "description": "Prevent children from accessing obscene or harmful content over the Internet.",
+ "pcx_content_type": "learning-path",
+ "products": ["gateway", "zero-trust-warp", "dns"],
"product_group": "Cloudflare One",
"additional_groups": ["Application security"]
}
diff --git a/src/content/learning-paths/data-center-protection.json b/src/content/learning-paths/data-center-protection.json
index 7a389cd5c9272df..8ce0d1fdaae848d 100644
--- a/src/content/learning-paths/data-center-protection.json
+++ b/src/content/learning-paths/data-center-protection.json
@@ -3,6 +3,7 @@
"path": "/learning-paths/data-center-protection/concepts/",
"priority": 2,
"description": "Learn how to use Magic Transit to protect your data centers from distributed denial-of-service (DDoS) attacks.",
- "products": ["Magic Transit"],
+ "pcx_content_type": "learning-path",
+ "products": ["magic-transit"],
"product_group": "Network security"
}
diff --git a/src/content/learning-paths/durable-objects-course.json b/src/content/learning-paths/durable-objects-course.json
index 08ba05bc9320c4a..bd073ad5bfab256 100644
--- a/src/content/learning-paths/durable-objects-course.json
+++ b/src/content/learning-paths/durable-objects-course.json
@@ -2,8 +2,9 @@
"title": "Introduction to Durable Objects",
"path": "/learning-paths/durable-objects-course/series/introduction-to-series-1/",
"priority": 2,
+ "pcx_content_type": "learning-path",
"description": "Dive into a hands-on Durable Objects project and learn how to build stateful apps using serverless architecture",
- "products": ["Durable Objects", "Workers"],
+ "products": ["durable-objects", "workers"],
"product_group": "Developer platform",
"video": true
}
diff --git a/src/content/learning-paths/holistic-ai-security.json b/src/content/learning-paths/holistic-ai-security.json
index 7d125aae75d0e89..f87b49d36be169a 100644
--- a/src/content/learning-paths/holistic-ai-security.json
+++ b/src/content/learning-paths/holistic-ai-security.json
@@ -3,6 +3,7 @@
"path": "/learning-paths/holistic-ai-security/concepts/",
"priority": 18,
"description": "Address new security challenges and mitigate risks like shadow AI and data loss.",
- "products": ["CASB", "Access", "Secure Gateway"],
+ "pcx_content_type": "learning-path",
+ "products": ["casb", "access", "gateway"],
"product_group": "Cloudflare One"
}
diff --git a/src/content/learning-paths/load-balancing.json b/src/content/learning-paths/load-balancing.json
index 3ef01a3b174f8a2..e0d36e41530582e 100644
--- a/src/content/learning-paths/load-balancing.json
+++ b/src/content/learning-paths/load-balancing.json
@@ -3,6 +3,7 @@
"path": "/learning-paths/load-balancing/concepts/",
"priority": 2,
"description": "Maximize application performance and availability.",
- "products": ["Load balancing"],
+ "pcx_content_type": "learning-path",
+ "products": ["load-balancing"],
"product_group": "Application performance"
}
diff --git a/src/content/learning-paths/mtls.json b/src/content/learning-paths/mtls.json
index 2f71a34f40a8042..8443efbe600e6de 100644
--- a/src/content/learning-paths/mtls.json
+++ b/src/content/learning-paths/mtls.json
@@ -3,7 +3,8 @@
"path": "/learning-paths/mtls/concepts/",
"priority": 5,
"description": "Safeguard APIs and Devices on Cloudflare's network.",
- "products": ["API Shield", "Access", "SSL/TLS"],
+ "pcx_content_type": "learning-path",
+ "products": ["api-shield", "access", "ssl"],
"product_group": "Cloudflare One",
"additional_groups": ["Application security"]
}
diff --git a/src/content/learning-paths/prevent-ddos-attacks.json b/src/content/learning-paths/prevent-ddos-attacks.json
index 3036863293e1b02..7712efb47aedc21 100644
--- a/src/content/learning-paths/prevent-ddos-attacks.json
+++ b/src/content/learning-paths/prevent-ddos-attacks.json
@@ -2,7 +2,8 @@
"title": "Prevent DDoS attacks",
"path": "/learning-paths/prevent-ddos-attacks/concepts/",
"priority": 2,
+ "pcx_content_type": "learning-path",
"description": "Protect your application from distributed (DDoS) and regular denial of service (DoS) attacks.",
- "products": ["Cache", "DDoS protection", "SSL/TLS", "WAF"],
+ "products": ["cache", "ddos-protection", "ssl", "waf"],
"product_group": "Application security"
}
diff --git a/src/content/learning-paths/r2-intro.json b/src/content/learning-paths/r2-intro.json
index ca12249bb21869c..06e062f30635c8b 100644
--- a/src/content/learning-paths/r2-intro.json
+++ b/src/content/learning-paths/r2-intro.json
@@ -2,8 +2,9 @@
"title": "Introduction to R2",
"path": "/learning-paths/r2-intro/series/r2-1/",
"priority": 2,
+ "pcx_content_type": "learning-path",
"description": "Learn about Cloudflare R2, an object storage solution designed to handle your data and files efficiently. It is ideal for storing large media files, creating data lakes, or delivering web assets.",
- "products": ["R2", "Workers"],
+ "products": ["r2", "workers"],
"product_group": "Developer platform",
"video": true
}
diff --git a/src/content/learning-paths/replace-vpn.json b/src/content/learning-paths/replace-vpn.json
index 246fc535f3f4d5a..f92632d9e62d1ce 100644
--- a/src/content/learning-paths/replace-vpn.json
+++ b/src/content/learning-paths/replace-vpn.json
@@ -2,8 +2,9 @@
"title": "Replace your VPN",
"path": "/learning-paths/replace-vpn/concepts/",
"priority": 1,
- "description": "Give users secure, auditable network and application access.",
- "products": ["Cloudflare Gateway", "Cloudflare Tunnel", "WARP"],
+ "description": "Learn how to replace your VPN with Cloudflare Zero Trust.",
+ "pcx_content_type": "learning-path",
+ "products": ["gateway", "cloudflare-tunnel", "zero-trust-warp"],
"product_group": "Cloudflare One",
"additional_groups": ["Application security", "Application performance"]
}
diff --git a/src/content/learning-paths/sase-overview-course.json b/src/content/learning-paths/sase-overview-course.json
index 87441d86996b7e0..67fe1a5459a7f70 100644
--- a/src/content/learning-paths/sase-overview-course.json
+++ b/src/content/learning-paths/sase-overview-course.json
@@ -2,8 +2,9 @@
"title": "Build and secure your SASE corporate network",
"path": "/learning-paths/sase-overview-course/series/evolution-corporate-networks-1/",
"priority": 1,
+ "pcx_content_type": "learning-path",
"description": "Watch this series and learn all about Cloudflare's Secure Access Service Edge (SASE) platform to learn how it can revolutionize your corporate network.",
- "products": ["Cloudflare One"],
+ "products": ["cloudflare-one"],
"product_group": "Cloudflare One",
"additional_groups": ["Cloudflare One", "Core platform"],
"video": true
diff --git a/src/content/learning-paths/secure-internet-traffic.json b/src/content/learning-paths/secure-internet-traffic.json
index 6a4b6695c7ebfb5..114b660a9bc8def 100644
--- a/src/content/learning-paths/secure-internet-traffic.json
+++ b/src/content/learning-paths/secure-internet-traffic.json
@@ -2,7 +2,8 @@
"title": "Secure your Internet traffic and SaaS apps",
"path": "/learning-paths/secure-internet-traffic/concepts/",
"priority": 2,
+ "pcx_content_type": "learning-path",
"description": "Provide your users and networks with a secure, performant, and flexible path to the Internet.",
- "products": ["DNS", "Gateway", "CASB", "DLP", "Browser Isolation"],
+ "products": ["dns", "gateway", "casb", "dlp", "browser-isolation"],
"product_group": "Cloudflare One"
}
diff --git a/src/content/learning-paths/secure-o365-email.json b/src/content/learning-paths/secure-o365-email.json
index 07a86a08bd342e1..c268f9c1a1f7fbd 100644
--- a/src/content/learning-paths/secure-o365-email.json
+++ b/src/content/learning-paths/secure-o365-email.json
@@ -2,7 +2,8 @@
"title": "Secure Microsoft 365 email with Email Security",
"path": "/learning-paths/secure-o365-email/concepts/",
"priority": 2,
+ "pcx_content_type": "learning-path",
"description": "Use Cloudflare's Email Security to protect your Microsoft 365 email inbox from phishing and malware attacks.",
- "products": ["Email Security"],
+ "products": ["email-security-cf1"],
"product_group": "Cloudflare One"
}
diff --git a/src/content/learning-paths/surge-readiness.json b/src/content/learning-paths/surge-readiness.json
index b12fdc72088096e..075f3c9000ba1ca 100644
--- a/src/content/learning-paths/surge-readiness.json
+++ b/src/content/learning-paths/surge-readiness.json
@@ -2,7 +2,8 @@
"title": "Prepare for surges or spikes in web traffic",
"path": "/learning-paths/surge-readiness/concepts/",
"priority": 5,
+ "pcx_content_type": "learning-path",
"description": "Learn how to protect your website for potential surges or spikes in web traffic.",
- "products": ["Cache", "WAF"],
+ "products": ["cache", "waf"],
"product_group": "Application security"
}
diff --git a/src/content/learning-paths/warp-overview-course.json b/src/content/learning-paths/warp-overview-course.json
index 1c35c0586844bff..930158c573831b5 100644
--- a/src/content/learning-paths/warp-overview-course.json
+++ b/src/content/learning-paths/warp-overview-course.json
@@ -2,8 +2,9 @@
"title": "Understand and troubleshoot Cloudflare WARP",
"path": "/learning-paths/warp-overview-course/series/warp-basics-1/",
"priority": 1,
+ "pcx_content_type": "learning-path",
"description": "In this series, we cover the basics of Cloudflare WARP, share useful troubleshooting tips, and explain the warp-diag logs in detail.",
- "products": ["Cloudflare One"],
+ "products": ["cloudflare-one"],
"product_group": "Cloudflare One",
"additional_groups": ["Cloudflare One", "Core platform"],
"video": true
diff --git a/src/content/learning-paths/workers.json b/src/content/learning-paths/workers.json
index 401eef67bce1598..02641c7aec61646 100644
--- a/src/content/learning-paths/workers.json
+++ b/src/content/learning-paths/workers.json
@@ -3,7 +3,8 @@
"uid": "workers-intro",
"path": "/learning-paths/workers/concepts/",
"priority": 4,
+ "pcx_content_type": "learning-path",
"description": "Deploy serverless code, globally with exceptional performance, reliability, and scale.",
- "products": ["Workers"],
+ "products": ["workers"],
"product_group": "Developer platform"
}
diff --git a/src/content/learning-paths/workflows-course.json b/src/content/learning-paths/workflows-course.json
index 08c206e841fb6c6..9c0e6ce72d70527 100644
--- a/src/content/learning-paths/workflows-course.json
+++ b/src/content/learning-paths/workflows-course.json
@@ -2,8 +2,9 @@
"title": "Introduction to Cloudflare Workflows",
"path": "/learning-paths/workflows-course/series/workflows-1/",
"priority": 2,
+ "pcx_content_type": "learning-path",
"description": "In this series, we introduce Cloudflare Workflows and the term 'Durable Execution' which comes from the desire to run applications that can resume execution from where they left off, even if the underlying host or compute fails.",
- "products": ["Durable Objects", "Workers"],
+ "products": ["durable-objects", "workers", "workflows"],
"product_group": "Developer platform",
"video": true
}
diff --git a/src/content/products/cache-rules.yaml b/src/content/products/cache-rules.yaml
new file mode 100644
index 000000000000000..89865b0ea812851
--- /dev/null
+++ b/src/content/products/cache-rules.yaml
@@ -0,0 +1,11 @@
+name: Cache Rules
+
+product:
+ title: Cache Rules
+ group: Application performance
+ url: /cache/how-to/cache-rules/
+ show: false
+
+meta:
+ title: Cloudflare Cache Rules docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/products/cloud-connector.yaml b/src/content/products/cloud-connector.yaml
new file mode 100644
index 000000000000000..99381210de79eed
--- /dev/null
+++ b/src/content/products/cloud-connector.yaml
@@ -0,0 +1,11 @@
+name: Cloud Connector
+
+product:
+ title: Cloud Connector
+ group: Application performance
+ url: /rules/cloud-connector/
+ show: false
+
+meta:
+ title: Cloudflare Cloud Connector docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/products/compression-rules.yaml b/src/content/products/compression-rules.yaml
new file mode 100644
index 000000000000000..b4b20d8c29f7df6
--- /dev/null
+++ b/src/content/products/compression-rules.yaml
@@ -0,0 +1,11 @@
+name: Compression Rules
+
+product:
+ title: Compression Rules
+ group: Application performance
+ url: /rules/compression-rules/
+ show: false
+
+meta:
+ title: Cloudflare Compression Rules docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/products/configuration-rules.yaml b/src/content/products/configuration-rules.yaml
new file mode 100644
index 000000000000000..49d441ebc33fcb6
--- /dev/null
+++ b/src/content/products/configuration-rules.yaml
@@ -0,0 +1,11 @@
+name: Configuration Rules
+
+product:
+ title: Configuration Rules
+ group: Application performance
+ url: /rules/configuration-rules/
+ show: false
+
+meta:
+ title: Cloudflare Configuration Rules docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/products/origin-rules.yaml b/src/content/products/origin-rules.yaml
new file mode 100644
index 000000000000000..d395daa9aceb30b
--- /dev/null
+++ b/src/content/products/origin-rules.yaml
@@ -0,0 +1,11 @@
+name: Origin Rules
+
+product:
+ title: Origin Rules
+ group: Application performance
+ url: /rules/origin-rules/
+ show: false
+
+meta:
+ title: Cloudflare Origin Rules docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/products/redirect-rules.yaml b/src/content/products/redirect-rules.yaml
new file mode 100644
index 000000000000000..9f6945cd223bb9b
--- /dev/null
+++ b/src/content/products/redirect-rules.yaml
@@ -0,0 +1,11 @@
+name: Redirect Rules
+
+product:
+ title: Redirect Rules
+ group: Application performance
+ url: /rules/url-forwarding/
+ show: false
+
+meta:
+ title: Cloudflare Redirect Rules docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/products/snippets.yaml b/src/content/products/snippets.yaml
new file mode 100644
index 000000000000000..5fc5fc15f836495
--- /dev/null
+++ b/src/content/products/snippets.yaml
@@ -0,0 +1,11 @@
+name: Snippets
+
+product:
+ title: Snippets
+ group: Application performance
+ url: /rules/snippets/
+ show: false
+
+meta:
+ title: Cloudflare Snippets docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/products/transform-rules.yaml b/src/content/products/transform-rules.yaml
new file mode 100644
index 000000000000000..220cb78eb71c347
--- /dev/null
+++ b/src/content/products/transform-rules.yaml
@@ -0,0 +1,11 @@
+name: Transform Rules
+
+product:
+ title: Transform Rules
+ group: Application performance
+ url: /rules/transform/
+ show: false
+
+meta:
+ title: Cloudflare Transform Rules docs
+ author: "@cloudflare"
\ No newline at end of file
diff --git a/src/content/stream/app-sec-dashboard/index.yaml b/src/content/stream/app-sec-dashboard/index.yaml
index 2b4d22d71cf305e..5fd6d770e8a54f2 100644
--- a/src/content/stream/app-sec-dashboard/index.yaml
+++ b/src/content/stream/app-sec-dashboard/index.yaml
@@ -5,6 +5,7 @@ title: Application Security - Dashboard walkthrough
description: In this video, learn how to navigate the Cloudflare Application Security dashboard and how to use each page to monitor, investigate, and manage security protections.
products:
- dns
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Application%20security%20demo.png
transcript: |
diff --git a/src/content/stream/app-sec-get-started/index.yaml b/src/content/stream/app-sec-get-started/index.yaml
index 8ae299408e0f905..53b75d1afb428ff 100644
--- a/src/content/stream/app-sec-get-started/index.yaml
+++ b/src/content/stream/app-sec-get-started/index.yaml
@@ -5,6 +5,7 @@ title: Application Security - Get started guide
description: In this video, learn how to get immediate protection against the most common attacks.
products:
- dns
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/appsec-get-started-guide.png
transcript: |
diff --git a/src/content/stream/china-network-acceleration/index.yaml b/src/content/stream/china-network-acceleration/index.yaml
index ce5f66a4a3fb64f..915c2c86e90e499 100644
--- a/src/content/stream/china-network-acceleration/index.yaml
+++ b/src/content/stream/china-network-acceleration/index.yaml
@@ -5,6 +5,7 @@ title: China network - CDN global acceleration for Mainland China
description: In this video, Jess Liu discusses Cloudflares CDN Global Acceleration (formerly China Express), including solutions for high latency on dynamic content, accelerating API calls, accessing Cloudflare One services like WARP and Magic WAN from within mainland China, and securely connecting private enterprise networks.
products:
- china-network
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/2-China-Express-thumbnail.png
chapters:
diff --git a/src/content/stream/china-network-inside-china/index.yaml b/src/content/stream/china-network-inside-china/index.yaml
index db1666afc1790ac..747e2102222b805 100644
--- a/src/content/stream/china-network-inside-china/index.yaml
+++ b/src/content/stream/china-network-inside-china/index.yaml
@@ -5,6 +5,7 @@ title: China network - How to speed up your web traffic inside mainland China
description: In this video, Jess Liu walks us through the main features of Cloudflares China Network. They cover how the China Network works, including integrated caching, in-country China name servers, and compliance with ICP regulations. They also briefly discuss Cloudflare's CDN Global Acceleration (formerly China Express), an option for accelerating dynamic content that cannot be cached.
products:
- china-network
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/1-China-network-thumbnail.png
chapters:
diff --git a/src/content/stream/content-compression/index.yaml b/src/content/stream/content-compression/index.yaml
index 6de2812410a24d2..ba51205ba1844cb 100644
--- a/src/content/stream/content-compression/index.yaml
+++ b/src/content/stream/content-compression/index.yaml
@@ -5,5 +5,6 @@ title: Content compression
description: In this video, learn how Cloudflare compresses content between Cloudflare and your website visitors and between Cloudflare and your origin server.
products:
- speed
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Content%20Compression.png
diff --git a/src/content/stream/create-api-tokens/index.yaml b/src/content/stream/create-api-tokens/index.yaml
index 82307734bd427ef..0a78c7e57b32dce 100644
--- a/src/content/stream/create-api-tokens/index.yaml
+++ b/src/content/stream/create-api-tokens/index.yaml
@@ -5,6 +5,7 @@ title: Create an API token
description: In this video, learn the difference between account and user API tokens how to create one.
products:
- fundamentals
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/API%20token.png
transcript: |
diff --git a/src/content/stream/full-ssl-encryption/index.yaml b/src/content/stream/full-ssl-encryption/index.yaml
index 6709a6dd8d40bea..402a9fde51a4bb8 100644
--- a/src/content/stream/full-ssl-encryption/index.yaml
+++ b/src/content/stream/full-ssl-encryption/index.yaml
@@ -5,5 +5,6 @@ title: Configure Full encryption mode
description: In this video, learn how to configure your site to use Full encryption mode.
products:
- ssl
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Full.png
diff --git a/src/content/stream/load-balancing/index.yaml b/src/content/stream/load-balancing-setup/index.yaml
similarity index 97%
rename from src/content/stream/load-balancing/index.yaml
rename to src/content/stream/load-balancing-setup/index.yaml
index d57066d98e402db..82a5d5f43e211a7 100644
--- a/src/content/stream/load-balancing/index.yaml
+++ b/src/content/stream/load-balancing-setup/index.yaml
@@ -5,6 +5,7 @@ title: How to set up a load balancer
description: Unexpected traffic spikes can crash your website, but Cloudflare Load Balancing helps keep your apps online and fast. In this step-by-step tutorial, learn how to create a public load balancer in just five steps - select a hostname, add an origin pool, attach a health monitor, choose a traffic steering method, and configure custom rules. We'll also explain the difference between public and private load balancers and guide you through using session affinity, fallback pools, and proxy modes.
products:
- load-balancing
+pcx_content_type: video
thumbnail:
timestamp: 26s
chapters: {
diff --git a/src/content/stream/manage-account-members/index.yaml b/src/content/stream/manage-account-members/index.yaml
index 2fef20fa6c4a179..5de9cec658436ef 100644
--- a/src/content/stream/manage-account-members/index.yaml
+++ b/src/content/stream/manage-account-members/index.yaml
@@ -5,6 +5,7 @@ title: Manage account members
description: In this video, learn how to define the roles and permission scope for members associated with an account.
products:
- fundamentals
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/manage%20account%20members.png
transcript: |
diff --git a/src/content/stream/onboard-domain-cf/index.yaml b/src/content/stream/onboard-domain-cf/index.yaml
index 2de221336e6201d..179adcc5f17c33c 100644
--- a/src/content/stream/onboard-domain-cf/index.yaml
+++ b/src/content/stream/onboard-domain-cf/index.yaml
@@ -4,7 +4,8 @@ url: onboard-domain-cf
title: Onboard your domain to Cloudflare
description: Learn how Cloudflare secures and accelerates your website using its global network and reverse proxy technology. In this video, we explain how connecting your domain to Cloudflare protects your origin server, enhances performance, and keeps your site online—even during attacks. You'll see how DNS, nameservers, and proxy status work together to route and safeguard traffic. Whether you're self-hosting or using serverless platforms like Cloudflare Workers, this guide helps you understand the onboarding process and why Cloudflare is essential for modern web infrastructure.
products:
- - dns
+ - fundamentals
+pcx_content_type: video
thumbnail:
timestamp: 2s
chapters: {
diff --git a/src/content/stream/sase-1-evolution-corp-networks/index.yaml b/src/content/stream/sase-1-evolution-corp-networks/index.yaml
index 9bb4d8a91bdc50e..8cd3d0cb2045cd2 100644
--- a/src/content/stream/sase-1-evolution-corp-networks/index.yaml
+++ b/src/content/stream/sase-1-evolution-corp-networks/index.yaml
@@ -4,24 +4,26 @@ url: sase-1-evolution-corp-networks
title: SASE - The evolution of corporate networks
description: In this video, we discuss Cloudflare One, our Secure Access Service Edge (SASE) platform and how it has been designed to revolutionize the corporate network and enable companies with their Zero Trust strategy. Legacy network design is struggling to address today's challenges of security, performance, and monitoring needs. Many IT teams are trying to evolve their corporate network with point solutions and finding the lack of integration and performance an issue.
products:
- - sase
+ - cloudflare-one
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-1-The-evolution-of-corporate-networks.jpg
-chapters: {
- "Introduction to SASE and Modern Corporate Networking": "0s",
- "The Evolution of Corporate Networks and Security Challenges": "01m08s",
- "Why Legacy Solutions Like VPNs and SD-WAN Are Insufficient": "03m05s",
- "How Cloudflare's Global Network Powers SASE Solutions": "04m13s",
- "The Role of Cloudflare's Connectivity Cloud in Securing Enterprises": "05m28s",
- "Simplified Security, Network Optimization, and Cost Savings with Cloudflare": "06m15s"
-}
+chapters:
+ {
+ "Introduction to SASE and Modern Corporate Networking": "0s",
+ "The Evolution of Corporate Networks and Security Challenges": "01m08s",
+ "Why Legacy Solutions Like VPNs and SD-WAN Are Insufficient": "03m05s",
+ "How Cloudflare's Global Network Powers SASE Solutions": "04m13s",
+ "The Role of Cloudflare's Connectivity Cloud in Securing Enterprises": "05m28s",
+ "Simplified Security, Network Optimization, and Cost Savings with Cloudflare": "06m15s",
+ }
transcript: |
WEBVTT
1
00:00:07.310 --> 00:00:12.080
- Hi, I'm Simon here at Cloudflare,
+ Hi, I'm Simon here at Cloudflare,
and I'm going to talk about our SASE platform
2
@@ -30,42 +32,42 @@ transcript: |
3
00:00:14.720 --> 00:00:18.920
- Many company networks have been built on
+ Many company networks have been built on
technology that simply can't cope with
4
00:00:18.920 --> 00:00:21.620
- today's security, performance and monitoring
+ today's security, performance and monitoring
needs.
5
00:00:21.650 --> 00:00:25.910
- The demands on a corporate network have
+ The demands on a corporate network have
evolved dramatically over the past few years.
6
00:00:25.910 --> 00:00:29.660
- Those working in IT and networking are really
+ Those working in IT and networking are really
struggling with the fact that users,
7
00:00:29.660 --> 00:00:34.670
- their devices, and the applications and data
+ their devices, and the applications and data
they need to access are distributed all over
8
00:00:34.670 --> 00:00:38.000
- the place, beyond the perimeter of the
+ the place, beyond the perimeter of the
classic corporate network.
9
00:00:38.030 --> 00:00:41.840
- They're trying to address this problem with
+ They're trying to address this problem with
legacy approaches, which increase cost and
10
00:00:41.840 --> 00:00:45.350
- complexity, and can result in a solution that
+ complexity, and can result in a solution that
doesn't perform that well,
11
@@ -74,7 +76,7 @@ transcript: |
12
00:00:47.390 --> 00:00:50.990
- So in response to these challenges,
+ So in response to these challenges,
the concept of SASE has evolved.
13
@@ -83,17 +85,17 @@ transcript: |
14
00:00:54.260 --> 00:00:56.630
- It's a new approach to networking and
+ It's a new approach to networking and
security,
15
00:00:56.630 --> 00:01:00.770
- which reduces complexity,
+ which reduces complexity,
as well as bringing stronger access controls
16
00:01:00.770 --> 00:01:04.100
- and improved performance for the protection
+ and improved performance for the protection
of applications,
17
@@ -102,47 +104,47 @@ transcript: |
18
00:01:06.950 --> 00:01:10.790
- But how does it work? First,
+ But how does it work? First,
let's go back and let's look at how
19
00:01:10.820 --> 00:01:13.790
- networking and security solutions used to be
+ networking and security solutions used to be
designed.
20
00:01:13.820 --> 00:01:18.920
- Decades ago, employees would travel into an
+ Decades ago, employees would travel into an
office and use the company's local network,
21
00:01:18.920 --> 00:01:23.420
- which was made up of that network,
+ which was made up of that network,
plus also connections to branch offices,
22
00:01:23.420 --> 00:01:28.790
- maybe a data center, and various other
+ maybe a data center, and various other
locations via private leased lines using
23
00:01:28.820 --> 00:01:33.470
- technologies such as MultiProtocol Label
+ technologies such as MultiProtocol Label
Switching or MPLS.
24
00:01:33.500 --> 00:01:37.880
- You are paying for expensive private
+ You are paying for expensive private
connectivity with dedicated bandwidth,
25
00:01:37.880 --> 00:01:42.380
- and typically all Internet access was
+ and typically all Internet access was
backhauled through these connections to a
26
00:01:42.380 --> 00:01:46.310
- single data center, where firewalls and
+ single data center, where firewalls and
proxies would then inspect the traffic and
27
@@ -151,87 +153,87 @@ transcript: |
28
00:01:47.630 --> 00:01:52.790
- But over time, as the available Internet
+ But over time, as the available Internet
bandwidth increased for less cost,
29
00:01:52.790 --> 00:01:57.320
- the need for these dedicated lines diminished
+ the need for these dedicated lines diminished
and software defined networks,
30
00:01:57.320 --> 00:02:02.780
- commonly known as SD-WAN became popular,
+ commonly known as SD-WAN became popular,
helping businesses better manage traffic and
31
00:02:02.810 --> 00:02:08.400
- optimize usage of cheaper Internet based
+ optimize usage of cheaper Internet based
IPsec tunnels versus these expensive leased
32
00:02:08.400 --> 00:02:15.120
- lines. However, SD-WAN still left businesses
+ lines. However, SD-WAN still left businesses
managing complex on premises appliances and
33
00:02:15.120 --> 00:02:18.690
- having to deal with configuration changes and
+ having to deal with configuration changes and
software updates.
34
00:02:18.720 --> 00:02:24.210
- Also, firewalls associated with these SD-WAN
+ Also, firewalls associated with these SD-WAN
appliances were relatively limited and often
35
00:02:24.210 --> 00:02:27.870
- paired with extra hardware for a more
+ paired with extra hardware for a more
complete security solution.
36
00:02:27.900 --> 00:02:31.860
- While all this was going on,
+ While all this was going on,
the proliferation of devices such as laptops
37
00:02:31.860 --> 00:02:35.550
- and smartphones were allowing employees to
+ and smartphones were allowing employees to
work from anywhere,
38
00:02:35.550 --> 00:02:40.140
- so VPNs were added into the mix,
+ so VPNs were added into the mix,
where people could dial up to the VPN and
39
00:02:40.140 --> 00:02:44.130
- access their company network. Often all their
+ access their company network. Often all their
Internet access was also funneled through
40
00:02:44.130 --> 00:02:47.880
- these VPN connections,
+ these VPN connections,
so the same security policies office users
41
00:02:47.880 --> 00:02:51.870
- had would also be applied to the remote user
+ had would also be applied to the remote user
traffic and it all came back through that
42
00:02:51.870 --> 00:02:56.370
- company data center. And this approach is
+ company data center. And this approach is
really hard to manage with multiple vendors
43
00:02:56.370 --> 00:02:59.880
- and different appliances and different
+ and different appliances and different
dashboards to configure the policies across
44
00:02:59.880 --> 00:03:03.090
- all these technologies,
+ all these technologies,
and they're not really designed to work well
45
@@ -240,37 +242,37 @@ transcript: |
46
00:03:05.130 --> 00:03:08.970
- But today, it's not just users and devices
+ But today, it's not just users and devices
that have left the office and company
47
00:03:09.000 --> 00:03:12.840
- network, but the applications and data live
+ network, but the applications and data live
all over the place as well.
48
00:03:12.840 --> 00:03:18.480
- They've migrated out of the data center into
+ They've migrated out of the data center into
cloud infrastructure such as AWS,
49
00:03:18.510 --> 00:03:23.100
- Azure and Google. Some applications have been
+ Azure and Google. Some applications have been
completely reimagined as SaaS apps,
50
00:03:23.100 --> 00:03:27.240
- where companies no longer run the servers,
+ where companies no longer run the servers,
but just rent access to tenants in large
51
00:03:27.240 --> 00:03:30.150
- software deployments,
+ software deployments,
you know, such as Salesforce or Workday and
52
00:03:30.150 --> 00:03:33.750
- Zoom. And users are not just taking a short
+ Zoom. And users are not just taking a short
trip away from the office anymore.
53
@@ -279,27 +281,27 @@ transcript: |
54
00:03:35.850 --> 00:03:39.210
- They're working from home,
+ They're working from home,
in coffee shops, even on airplanes.
55
00:03:39.210 --> 00:03:43.320
- And sometimes they might visit an office,
+ And sometimes they might visit an office,
yet the same needs still exist:
56
00:03:43.320 --> 00:03:47.340
- the right person should get access to the
+ the right person should get access to the
right applications and data.
57
00:03:47.370 --> 00:03:52.770
- Latency or the performance of the application
+ Latency or the performance of the application
should be really high quality and all while
58
00:03:52.770 --> 00:03:57.360
- using secure devices and being protected from
+ using secure devices and being protected from
Internet threats such as phishing campaigns
59
@@ -308,17 +310,17 @@ transcript: |
60
00:03:58.500 --> 00:04:03.090
- Because of this constant need for everyone to
+ Because of this constant need for everyone to
access anything from anywhere,
61
00:04:03.120 --> 00:04:08.280
- SASE architectures evolved where the
+ SASE architectures evolved where the
intelligence in the network has migrated out
62
00:04:08.280 --> 00:04:13.860
- of these on premises appliances and now into
+ of these on premises appliances and now into
massively scalable global cloud networks.
63
@@ -327,22 +329,22 @@ transcript: |
64
00:04:16.710 --> 00:04:22.320
- Well, first, and probably most importantly,
+ Well, first, and probably most importantly,
we've built a massive network spread all over
65
00:04:22.320 --> 00:04:26.760
- the globe. We've deployed thousands of
+ the globe. We've deployed thousands of
servers in data centers in hundreds of
66
00:04:26.760 --> 00:04:30.720
- cities, creating peering relationships with
+ cities, creating peering relationships with
thousands of other networks.
67
00:04:30.750 --> 00:04:34.620
- On top of all of that,
+ On top of all of that,
we've ensured that we have connectivity in
68
@@ -351,32 +353,32 @@ transcript: |
69
00:04:36.810 --> 00:04:40.980
- These are places where all the big
+ These are places where all the big
connectivity of the Internet is shared.
70
00:04:41.010 --> 00:04:43.800
- To give you an idea of the scale of this huge
+ To give you an idea of the scale of this huge
network,
71
00:04:43.800 --> 00:04:47.400
- it handles around 20% of all Internet web
+ it handles around 20% of all Internet web
traffic,
72
00:04:47.400 --> 00:04:50.880
- and it can deal with the largest denial of
+ and it can deal with the largest denial of
service attacks that have ever been seen.
73
00:04:50.910 --> 00:04:54.900
- The scale and performance of this network is
+ The scale and performance of this network is
really important because from a SASE
74
00:04:54.930 --> 00:04:57.600
- perspective, you're going to be routing all
+ perspective, you're going to be routing all
your user,
75
@@ -385,42 +387,42 @@ transcript: |
76
00:05:00.360 --> 00:05:05.070
- Every server in our network runs all the
+ Every server in our network runs all the
capabilities you need to inspect and secure
77
00:05:05.070 --> 00:05:07.740
- traffic. So access controls,
+ traffic. So access controls,
traffic routing,
78
00:05:07.740 --> 00:05:11.640
- caching, all run on the server that your user
+ caching, all run on the server that your user
or network is connecting to.
79
00:05:11.730 --> 00:05:15.870
- So now, instead of all the security controls
+ So now, instead of all the security controls
and network logic spread across a variety of
80
00:05:15.870 --> 00:05:19.620
- different vendors and appliances and services
+ different vendors and appliances and services
that you're having to maintain,
81
00:05:19.620 --> 00:05:24.960
- it's centralized in a cloud service that
+ it's centralized in a cloud service that
operates and points all over the globe,
82
00:05:24.960 --> 00:05:28.980
- so that each user or network is connected to
+ so that each user or network is connected to
a fast local data center.
83
00:05:28.980 --> 00:05:33.210
- And Cloudflare SASE platform is part of a
+ And Cloudflare SASE platform is part of a
greater connectivity cloud.
84
@@ -429,12 +431,12 @@ transcript: |
85
00:05:35.130 --> 00:05:40.080
- It's a unified platform of cloud native
+ It's a unified platform of cloud native
services that spans networking,
86
00:05:40.080 --> 00:05:44.970
- security and application performance,
+ security and application performance,
and it's designed to help companies regain
87
@@ -443,77 +445,77 @@ transcript: |
88
00:05:47.460 --> 00:05:52.140
- Our connectivity cloud goes way beyond just
+ Our connectivity cloud goes way beyond just
protecting employees and their access to
89
00:05:52.170 --> 00:05:57.090
- company resources. It's also used to protect
+ company resources. It's also used to protect
public assets like websites and APIs.
90
00:05:57.090 --> 00:06:00.090
- In fact, we run one of the world's fastest
+ In fact, we run one of the world's fastest
DNS servers.
91
00:06:00.090 --> 00:06:03.660
- We've even exposed the underlying components
+ We've even exposed the underlying components
of our platform,
92
00:06:03.660 --> 00:06:07.170
- letting developers write and run their code
+ letting developers write and run their code
directly on our network.
93
00:06:07.260 --> 00:06:11.700
- Then they can extend our existing services or
+ Then they can extend our existing services or
build entirely new applications,
94
00:06:11.730 --> 00:06:14.520
- leading you to an infinite amount of things
+ leading you to an infinite amount of things
you can build.
95
00:06:15.180 --> 00:06:20.080
- So to summarize Cloudflare SASE platform,
+ So to summarize Cloudflare SASE platform,
which runs in our connectivity cloud,
96
00:06:20.080 --> 00:06:22.960
- allows companies to reimagine their company
+ allows companies to reimagine their company
network.
97
00:06:22.990 --> 00:06:27.220
- Users connect to Cloudflare's global network
+ Users connect to Cloudflare's global network
via a data center that's close to them,
98
00:06:27.220 --> 00:06:30.670
- and that server then ensures that they don't
+ and that server then ensures that they don't
access phishing sites on the Internet, or it
99
00:06:30.700 --> 00:06:33.820
- gives them secure access to an internal
+ gives them secure access to an internal
company application.
100
00:06:33.850 --> 00:06:37.150
- All of this is happening in milliseconds
+ All of this is happening in milliseconds
across our vast network.
101
00:06:37.150 --> 00:06:41.290
- Because we can deliver all these capabilities
+ Because we can deliver all these capabilities
in a single platform instead of different
102
00:06:41.290 --> 00:06:45.550
- vendor solutions, it means that companies can
+ vendor solutions, it means that companies can
centralize all that management into a single,
103
@@ -522,17 +524,17 @@ transcript: |
104
00:06:46.900 --> 00:06:51.040
- This ultimately drives down your cost less
+ This ultimately drives down your cost less
time used to manage the services,
105
00:06:51.070 --> 00:06:54.280
- less or often no hardware to purchase and
+ less or often no hardware to purchase and
maintain,
106
00:06:54.280 --> 00:06:57.220
- and it's cheaper to purchase the actual final
+ and it's cheaper to purchase the actual final
solution.
107
@@ -541,7 +543,7 @@ transcript: |
108
00:06:58.450 --> 00:07:02.650
- This video is part of a series which explains
+ This video is part of a series which explains
how to build your new corporate network using
109
@@ -550,7 +552,7 @@ transcript: |
110
00:07:04.390 --> 00:07:06.610
- Watch other videos in this series to learn
+ Watch other videos in this series to learn
more.
111
@@ -563,15 +565,15 @@ transcript: |
113
00:07:11.710 --> 00:07:15.490
- We also cover a wide variety of topics
+ We also cover a wide variety of topics
including application security,
114
00:07:15.490 --> 00:07:18.220
- corporate networking,
+ corporate networking,
and all the developer content the Internet
115
00:07:18.220 --> 00:07:20.800
- can hold. Follow us online and thanks for
- watching!
\ No newline at end of file
+ can hold. Follow us online and thanks for
+ watching!
diff --git a/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml b/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml
index e9e3636e6fb2746..f5bf61662a45c95 100644
--- a/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml
+++ b/src/content/stream/sase-2-stop-hosting-own-vpn/index.yaml
@@ -4,29 +4,31 @@ url: sase-2-stop-your-own-vpn
title: SASE - Stop hosting your VPN service
description: Cloudflare's SASE platform can replace your traditional, expensive VPN appliances, which deliver poor performance for users and create more security risks than solve them. Cloudflare's Zero Trust Network Access (ZTNA) service is a more secure, highly scalable cloud solution. In this video, we look at how easily you can deploy Cloudflare to secure access to internal resources.
products:
- - sase
+ - cloudflare-one
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-2-Stop-hosting-your-own-VPN-service.jpg
-chapters: {
- "Introduction to Corporate Network Security and Access Challenges": "0s",
- "Cloudflare's SASE Approach to Securing Internal Applications": "01m15s",
- "Connecting Internal Applications to Cloudflare with Secure Tunnels": "01m54s",
- "Implementing Identity-Based, Clientless Access Control Access Control": "02m42s",
- "Leveraging Anycast Networking for Faster and More Secure Application Access": "05m36s",
- "Enhancing Security with Micro-Segmentation and Cloudflare's Global Network": "06m59s"
-}
+chapters:
+ {
+ "Introduction to Corporate Network Security and Access Challenges": "0s",
+ "Cloudflare's SASE Approach to Securing Internal Applications": "01m15s",
+ "Connecting Internal Applications to Cloudflare with Secure Tunnels": "01m54s",
+ "Implementing Identity-Based, Clientless Access Control Access Control": "02m42s",
+ "Leveraging Anycast Networking for Faster and More Secure Application Access": "05m36s",
+ "Enhancing Security with Micro-Segmentation and Cloudflare's Global Network": "06m59s",
+ }
transcript: |
WEBVTT
1
00:00:07.160 --> 00:00:12.140
- Corporate networks are often used to allow
+ Corporate networks are often used to allow
employees to access sensitive information in
2
00:00:12.140 --> 00:00:15.920
- private, self-hosted applications,
+ private, self-hosted applications,
such as an internal wiki,
3
@@ -35,42 +37,42 @@ transcript: |
4
00:00:18.530 --> 00:00:22.040
- While some applications have migrated into
+ While some applications have migrated into
the cloud as SaaS apps,
5
00:00:22.040 --> 00:00:25.160
- there are still applications that are run and
+ there are still applications that are run and
maintained by IT.
6
00:00:25.490 --> 00:00:29.510
- These days, most of these self-hosted
+ These days, most of these self-hosted
applications run in a web server and are
7
00:00:29.510 --> 00:00:33.980
- deployed either in a private data center or
+ deployed either in a private data center or
in a public cloud such as AWS,
8
00:00:34.010 --> 00:00:38.390
- Azure, or Google. Access to these
+ Azure, or Google. Access to these
applications is usually limited to internal
9
00:00:38.390 --> 00:00:42.290
- employees, but it's common to allow some form
+ employees, but it's common to allow some form
of restricted access to partners or
10
00:00:42.290 --> 00:00:46.370
- contractors. The old way of doing things was
+ contractors. The old way of doing things was
to have users either come into a physical
11
00:00:46.400 --> 00:00:51.140
- office or connect remotely via a VPN,
+ office or connect remotely via a VPN,
giving them access to that corporate network
12
@@ -79,27 +81,27 @@ transcript: |
13
00:00:52.760 --> 00:00:57.890
- But these VPN solutions use on premises
+ But these VPN solutions use on premises
hardware appliances through which every user
14
00:00:57.890 --> 00:01:00.960
- request passes, creating a bottleneck and a
+ request passes, creating a bottleneck and a
security risk.
15
00:01:00.990 --> 00:01:04.980
- In fact, recently, many on premises VPN
+ In fact, recently, many on premises VPN
vendors such as Cisco,
16
00:01:05.010 --> 00:01:10.380
- Checkpoint, and Fortinet have reported a wide
+ Checkpoint, and Fortinet have reported a wide
range of vulnerabilities which requires IT
17
00:01:10.380 --> 00:01:13.500
- and security teams to scramble to update
+ and security teams to scramble to update
their systems.
18
@@ -108,12 +110,12 @@ transcript: |
19
00:01:15.660 --> 00:01:19.440
- Did you know that Cloudflare can be used to
+ Did you know that Cloudflare can be used to
easily create secure access to these
20
00:01:19.440 --> 00:01:22.410
- self-hosted applications using our SASE
+ self-hosted applications using our SASE
platform?
21
@@ -122,7 +124,7 @@ transcript: |
22
00:01:24.570 --> 00:01:28.470
- Well, similar to how a legacy VPN works,
+ Well, similar to how a legacy VPN works,
but using a much,
23
@@ -131,97 +133,97 @@ transcript: |
24
00:01:30.300 --> 00:01:33.600
- Let's take a look at how we improve on the
+ Let's take a look at how we improve on the
old way of doing things,
25
00:01:33.600 --> 00:01:36.360
- and create greater security for application
+ and create greater security for application
access.
26
00:01:36.360 --> 00:01:40.920
- The first objective is to create connectivity
+ The first objective is to create connectivity
between the user's browser and the
27
00:01:40.920 --> 00:01:44.550
- application. Right. So there are two parts to
+ application. Right. So there are two parts to
this. The connection from Cloudflare to the
28
00:01:44.550 --> 00:01:47.400
- app and the connection between the user and
+ app and the connection between the user and
Cloudflare.
29
00:01:47.430 --> 00:01:51.270
- Cloudflare is going to sit in the middle and
+ Cloudflare is going to sit in the middle and
apply security policies and use its vast
30
00:01:51.270 --> 00:01:54.660
- network to protect the application and
+ network to protect the application and
improve response times.
31
00:01:54.660 --> 00:01:57.870
- For the first part, to create connectivity
+ For the first part, to create connectivity
from Cloudflare to the app,
32
00:01:57.870 --> 00:02:01.530
- we use tunnels that a variety of different
+ we use tunnels that a variety of different
methods you can use.
33
00:02:01.530 --> 00:02:06.270
- You can connect on premises networks to
+ You can connect on premises networks to
Cloudflare via IPsec or GRE tunnels,
34
00:02:06.270 --> 00:02:08.700
- typically using your existing network
+ typically using your existing network
hardware,
35
00:02:08.700 --> 00:02:13.200
- or if your applications are running at a data
+ or if your applications are running at a data
center where Cloudflare already has its
36
00:02:13.200 --> 00:02:18.300
- servers, we can connect directly from your
+ servers, we can connect directly from your
servers to our servers inside that data
37
00:02:18.330 --> 00:02:21.990
- center. But for this example,
+ center. But for this example,
we're going to talk about using a software
38
00:02:22.020 --> 00:02:26.250
- agent. It's just a small daemon that is
+ agent. It's just a small daemon that is
installed either directly on the application
39
00:02:26.250 --> 00:02:29.970
- server or runs on a dedicated server on the
+ server or runs on a dedicated server on the
same local network.
40
00:02:30.000 --> 00:02:33.030
- The software then creates a secure tunnel
+ The software then creates a secure tunnel
back to Cloudflare.
41
00:02:33.060 --> 00:02:36.990
- This tunnel maintains a constant connection
+ This tunnel maintains a constant connection
to two Cloudflare data centers,
42
00:02:36.990 --> 00:02:40.140
- so it's always available,
+ so it's always available,
and now your traffic can flow between your
43
@@ -230,107 +232,107 @@ transcript: |
44
00:02:42.930 --> 00:02:46.200
- Now for the second part,
+ Now for the second part,
we need to connect your users to Cloudflare,
45
00:02:46.200 --> 00:02:48.960
- which we're going to do in this example using
+ which we're going to do in this example using
public DNS.
46
00:02:48.990 --> 00:02:51.720
- We'll associate a public hostname with the
+ We'll associate a public hostname with the
application.
47
00:02:51.720 --> 00:02:54.480
- Request to this hostname will resolve to
+ Request to this hostname will resolve to
Cloudflare,
48
00:02:54.480 --> 00:02:58.150
- which in turn proxies and routes traffic down
+ which in turn proxies and routes traffic down
the tunnel to the application,
49
00:02:58.150 --> 00:03:02.710
- but hold on a second. A public DNS record and
+ but hold on a second. A public DNS record and
a tunnel directly to the server?
50
00:03:02.740 --> 00:03:06.700
- If we didn't take this any further,
+ If we didn't take this any further,
we could now access this internal application
51
00:03:06.700 --> 00:03:09.310
- from anywhere just by heading to the new
+ from anywhere just by heading to the new
public hostname.
52
00:03:09.340 --> 00:03:13.270
- What we need to do is add authentication and
+ What we need to do is add authentication and
authorization into the mix.
53
00:03:13.270 --> 00:03:16.270
- Because Cloudflare is now in front of access
+ Because Cloudflare is now in front of access
to the application,
54
00:03:16.270 --> 00:03:19.750
- we can integrate with your existing company
+ we can integrate with your existing company
identity providers.
55
00:03:19.750 --> 00:03:23.770
- So anyone attempting to access is first
+ So anyone attempting to access is first
redirected to your identity provider to
56
00:03:23.800 --> 00:03:28.060
- authenticate. Now this is where it gets
+ authenticate. Now this is where it gets
interesting because you can add multiple
57
00:03:28.060 --> 00:03:30.880
- identity providers in front of the same
+ identity providers in front of the same
application.
58
00:03:30.880 --> 00:03:35.620
- So for example, you might use your main
+ So for example, you might use your main
company directory where all your employee
59
00:03:35.620 --> 00:03:39.880
- accounts reside, but you might also integrate
+ accounts reside, but you might also integrate
a separate identity service just for
60
00:03:39.880 --> 00:03:42.460
- contractors, partners and other third party
+ contractors, partners and other third party
users.
61
00:03:42.490 --> 00:03:45.700
- We also support consumer identity providers
+ We also support consumer identity providers
such as Facebook,
62
00:03:45.700 --> 00:03:50.620
- Google or GitHub. In fact,
+ Google or GitHub. In fact,
any SAML or OAuth identity service can be
63
00:03:50.620 --> 00:03:55.300
- used. Now, these identity integrations don't
+ used. Now, these identity integrations don't
just provide authentication.
64
00:03:55.300 --> 00:03:57.940
- It's possible to import user and group
+ It's possible to import user and group
information.
65
@@ -339,17 +341,17 @@ transcript: |
66
00:03:59.830 --> 00:04:02.710
- Now that we've ensured a user has
+ Now that we've ensured a user has
authenticated,
67
00:04:02.710 --> 00:04:07.270
- we can start to leverage their identity
+ we can start to leverage their identity
information and other data to create an
68
00:04:07.270 --> 00:04:12.100
- access policy that defines who should and
+ access policy that defines who should and
should not get access to the application.
69
@@ -358,27 +360,27 @@ transcript: |
70
00:04:13.960 --> 00:04:18.910
- A range of different attributes can be used
+ A range of different attributes can be used
that define who is allowed or denied access.
71
00:04:18.910 --> 00:04:23.320
- We started by adding an identity provider,
+ We started by adding an identity provider,
so users first need to authenticate.
72
00:04:23.350 --> 00:04:27.040
- Let's take it a little further and leverage
+ Let's take it a little further and leverage
group information from the same identity
73
00:04:27.070 --> 00:04:32.410
- service. We can say only users in the full
+ service. We can say only users in the full
time employees group have access to the
74
00:04:32.410 --> 00:04:37.360
- internal wiki. The identity service can also
+ internal wiki. The identity service can also
tell us how they authenticated.
75
@@ -387,12 +389,12 @@ transcript: |
76
00:04:39.100 --> 00:04:43.300
- The requirement that they must have
+ The requirement that they must have
authenticated using MFA or multi-factor
77
00:04:43.300 --> 00:04:46.930
- authentication. In fact,
+ authentication. In fact,
let's say that they have to specifically use
78
@@ -401,7 +403,7 @@ transcript: |
79
00:04:50.320 --> 00:04:53.320
- Finally, we only want users working from
+ Finally, we only want users working from
Canada,
80
@@ -410,27 +412,27 @@ transcript: |
81
00:04:56.150 --> 00:05:01.160
- So let's add to the policy that only traffic
+ So let's add to the policy that only traffic
coming from IP addresses geolocated in those
82
00:05:01.160 --> 00:05:06.200
- countries is allowed. Now,
+ countries is allowed. Now,
full time employees working from somewhere in
83
00:05:06.200 --> 00:05:11.060
- Canada who have authenticated using a strong
+ Canada who have authenticated using a strong
set of credentials will be able to access the
84
00:05:11.060 --> 00:05:13.160
- company wiki. Let's take a look at this in
+ company wiki. Let's take a look at this in
action.
85
00:05:13.190 --> 00:05:15.710
- The user just needs to navigate to the public
+ The user just needs to navigate to the public
hostname,
86
@@ -439,112 +441,112 @@ transcript: |
87
00:05:17.330 --> 00:05:22.160
- They have access from anywhere in the world
+ They have access from anywhere in the world
with only a browser to our privately hosted
88
00:05:22.160 --> 00:05:26.330
- application. Simple. What a difference from
+ application. Simple. What a difference from
the old way of doing things.
89
00:05:26.360 --> 00:05:31.700
- Also, it's important to note that all traffic
+ Also, it's important to note that all traffic
from browser to application is secured using
90
00:05:31.700 --> 00:05:36.410
- standard TLS and SSL encryption,
+ standard TLS and SSL encryption,
keeping the application data safe.
91
00:05:36.440 --> 00:05:38.780
- Let's turn our attention a little bit to
+ Let's turn our attention a little bit to
performance.
92
00:05:38.810 --> 00:05:42.890
- We already mentioned that Cloudflare is a lot
+ We already mentioned that Cloudflare is a lot
more efficient than a traditional VPN.
93
00:05:42.920 --> 00:05:45.950
- Let's think about somebody in Germany trying
+ Let's think about somebody in Germany trying
to access the wiki.
94
00:05:45.980 --> 00:05:48.680
- Cloudflare uses something called Anycast
+ Cloudflare uses something called Anycast
networking,
95
00:05:48.680 --> 00:05:53.700
- which means that a request to the hostname
+ which means that a request to the hostname
will resolve to the nearest Cloudflare data
96
00:05:53.700 --> 00:05:56.690
- center, of which we have many in over 300
+ center, of which we have many in over 300
cities.
97
00:05:56.690 --> 00:06:00.620
- We also have 12,000 network peering
+ We also have 12,000 network peering
relationships,
98
00:06:00.620 --> 00:06:03.860
- allowing us to ensure fast connectivity from
+ allowing us to ensure fast connectivity from
user to application.
99
00:06:03.860 --> 00:06:09.140
- So our user in Germany might on ramp to
+ So our user in Germany might on ramp to
Cloudflare at a data center in Berlin,
100
00:06:09.140 --> 00:06:12.590
- whereas our Canadian user might on ramp in
+ whereas our Canadian user might on ramp in
Vancouver,
101
00:06:12.950 --> 00:06:17.930
- and their requests are authenticated and the
+ and their requests are authenticated and the
policy evaluated all close to the end user
102
00:06:17.930 --> 00:06:22.700
- and if authorized, their request is then
+ and if authorized, their request is then
routed via the most efficient network path to
103
00:06:22.730 --> 00:06:25.777
- the Cloudflare data center that is then
+ the Cloudflare data center that is then
nearest the application.
104
00:06:25.777 --> 00:06:28.910
- To further improve performance,
+ To further improve performance,
there are many more things we can do.
105
00:06:28.940 --> 00:06:33.140
- Any of Cloudflare's existing performance
+ Any of Cloudflare's existing performance
services and network benefits apply to your
106
00:06:33.140 --> 00:06:37.040
- application traffic. So,
+ application traffic. So,
for example, we can leverage Cloudflare's
107
00:06:37.040 --> 00:06:41.150
- caching technologies so that any static data
+ caching technologies so that any static data
from the wiki such as images,
108
00:06:41.150 --> 00:06:47.540
- files, videos is all cached locally at the
+ files, videos is all cached locally at the
data center that the user is accessing.
109
@@ -553,42 +555,42 @@ transcript: |
110
00:06:50.150 --> 00:06:53.750
- Setting up access like this can be typically
+ Setting up access like this can be typically
done in less than an hour,
111
00:06:53.750 --> 00:06:58.010
- and it doesn't take long to migrate an entire
+ and it doesn't take long to migrate an entire
company's internal application
112
00:06:58.010 --> 00:07:03.470
- infrastructure. Unlike your VPN,
+ infrastructure. Unlike your VPN,
access to each application only exposes that
113
00:07:03.470 --> 00:07:08.120
- specific service. You don't need to worry
+ specific service. You don't need to worry
about firewalling off SSH and RDP,
114
00:07:08.150 --> 00:07:13.430
- because Cloudflare is only allowing access to
+ because Cloudflare is only allowing access to
the specific application over HTTPS.
115
00:07:13.430 --> 00:07:18.920
- This is called network micro-segmentation and
+ This is called network micro-segmentation and
really reduces concerns of access gained by
116
00:07:18.920 --> 00:07:23.840
- lateral movement. Changes to authentication
+ lateral movement. Changes to authentication
policies can easily be made in our dashboard
117
00:07:23.840 --> 00:07:27.530
- and in just a matter of seconds,
+ and in just a matter of seconds,
the entire global network is updated.
118
@@ -597,7 +599,7 @@ transcript: |
119
00:07:28.940 --> 00:07:33.380
- This video is part of a series which explains
+ This video is part of a series which explains
how to build your new corporate network using
120
@@ -606,7 +608,7 @@ transcript: |
121
00:07:35.030 --> 00:07:37.430
- Watch the other videos in this series to
+ Watch the other videos in this series to
learn more.
122
@@ -619,15 +621,15 @@ transcript: |
124
00:07:42.620 --> 00:07:46.430
- We also cover a wide variety of topics
+ We also cover a wide variety of topics
including application security,
125
00:07:46.430 --> 00:07:49.130
- corporate networking,
+ corporate networking,
and all the developer content the Internet
126
00:07:49.130 --> 00:07:51.620
- can hold. Follow us online and thanks for
- watching!
\ No newline at end of file
+ can hold. Follow us online and thanks for
+ watching!
diff --git a/src/content/stream/sase-3-secure-remote-access/index.yaml b/src/content/stream/sase-3-secure-remote-access/index.yaml
index ab37beca899a136..b2ff71ee58ade47 100644
--- a/src/content/stream/sase-3-secure-remote-access/index.yaml
+++ b/src/content/stream/sase-3-secure-remote-access/index.yaml
@@ -4,34 +4,36 @@ url: sase-3-secure-remote-access
title: SASE - Secure remote access to your critical infrastructure
description: In this video, learn how Cloudflare's SASE platform can provide highly secure access to your critical infrastructure by leveraging a modern ZTNA service to implement Zero Trust principles Applications, databases and their servers are running in a variety of locations from on-premises data centers to cloud hyperscalers, making the need to secure administrative access more important than ever.
products:
- - sase
+ - cloudflare-one
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-3-Secure-remote-access-to-your-critical-infrastructure.jpg
-chapters: {
- "Introduction to SASE and Securing Access to Critical Infrastructure": "0s",
- "Connecting and Securing Private Servers with Cloudflare Tunnels": "50s",
- "Using Internal DNS to Securely Resolve Private Network Resources": "02m12s",
- "Connecting User Devices Securely with Cloudflare's Device Agent": "03m01s",
- "Enforcing Access Control with Identity, Network and Device Based Security Policies": "03m48s",
- "Auditing and Logging Access to Critical Infrastructure": "05m03s"
-}
+chapters:
+ {
+ "Introduction to SASE and Securing Access to Critical Infrastructure": "0s",
+ "Connecting and Securing Private Servers with Cloudflare Tunnels": "50s",
+ "Using Internal DNS to Securely Resolve Private Network Resources": "02m12s",
+ "Connecting User Devices Securely with Cloudflare's Device Agent": "03m01s",
+ "Enforcing Access Control with Identity, Network and Device Based Security Policies": "03m48s",
+ "Auditing and Logging Access to Critical Infrastructure": "05m03s",
+ }
transcript: |
WEBVTT
1
00:00:07.220 --> 00:00:14.450
- Secure Access Service Edge or SASE solutions
+ Secure Access Service Edge or SASE solutions
incorporate Zero Trust Network Access or ZTNA
2
00:00:14.660 --> 00:00:19.610
- to provide access to applications such as an
+ to provide access to applications such as an
internal wiki or a HR system.
3
00:00:19.640 --> 00:00:25.190
- But what about critical high risk services
+ But what about critical high risk services
such as a database administration tool or
4
@@ -40,22 +42,22 @@ transcript: |
5
00:00:28.370 --> 00:00:33.800
- In these cases, it's important to be able to
+ In these cases, it's important to be able to
ensure tight security from the device all the
6
00:00:33.800 --> 00:00:39.020
- way to the application and allow authorized
+ way to the application and allow authorized
users who are using strong authentication on
7
00:00:39.020 --> 00:00:44.240
- trusted devices. Let's say we need to secure
+ trusted devices. Let's say we need to secure
access to a database admin app such as
8
00:00:44.270 --> 00:00:47.810
- pgAdmin, a common web interface for Postgres
+ pgAdmin, a common web interface for Postgres
databases,
9
@@ -64,42 +66,42 @@ transcript: |
10
00:00:50.390 --> 00:00:54.530
- Imagine we have an example environment,
+ Imagine we have an example environment,
and in it we've already created connectivity
11
00:00:54.560 --> 00:00:57.800
- from the server to Cloudflare,
+ from the server to Cloudflare,
using a software agent that maintains a
12
00:00:57.800 --> 00:01:02.230
- secure tunnel from the private network where
+ secure tunnel from the private network where
the Pgadmin server is running back to the
13
00:01:02.230 --> 00:01:06.700
- Cloudflare network. No private server IP
+ Cloudflare network. No private server IP
addresses are going to be exposed to the
14
00:01:06.700 --> 00:01:10.960
- Internet. We're essentially connecting this
+ Internet. We're essentially connecting this
server to our new corporate network managed
15
00:01:10.960 --> 00:01:15.400
- by Cloudflare. Once connected,
+ by Cloudflare. Once connected,
there are two methods by which we can access
16
00:01:15.400 --> 00:01:21.040
- our private server. Method one is to create a
+ our private server. Method one is to create a
public hostname which resolves to Cloudflare,
17
00:01:21.040 --> 00:01:25.150
- which in turn proxies and routes the traffic
+ which in turn proxies and routes the traffic
for that specific hostname to that
18
@@ -108,7 +110,7 @@ transcript: |
19
00:01:26.950 --> 00:01:31.450
- And this method allows anyone,
+ And this method allows anyone,
anywhere, on any device to easily access the
20
@@ -117,17 +119,17 @@ transcript: |
21
00:01:33.760 --> 00:01:36.970
- In this scenario we want to implement even
+ In this scenario we want to implement even
tighter security.
22
00:01:36.970 --> 00:01:42.970
- So method two is to configure the tunnel to
+ So method two is to configure the tunnel to
proxy access only to the server IP with no
23
00:01:42.970 --> 00:01:48.340
- public DNS record, and only for trusted users
+ public DNS record, and only for trusted users
with managed devices that are connected to
24
@@ -136,12 +138,12 @@ transcript: |
25
00:01:49.630 --> 00:01:52.780
- So none of this server has any public
+ So none of this server has any public
exposure.
26
00:01:53.830 --> 00:01:57.280
- Now, to provide access to only database
+ Now, to provide access to only database
admins,
27
@@ -150,92 +152,92 @@ transcript: |
28
00:01:59.290 --> 00:02:03.010
- We need to use an internal hostname that
+ We need to use an internal hostname that
resolves to our server.
29
00:02:03.040 --> 00:02:07.000
- We need to connect to the user device to the
+ We need to connect to the user device to the
Cloudflare managed network.
30
00:02:07.030 --> 00:02:12.640
- And we need to identify who the user is and
+ And we need to identify who the user is and
if their device has a good security posture.
31
00:02:12.670 --> 00:02:15.910
- So let's first look at how we do the internal
+ So let's first look at how we do the internal
DNS resolution.
32
00:02:15.910 --> 00:02:20.860
- Because nobody likes using IP addresses to
+ Because nobody likes using IP addresses to
access services with the exception of
33
00:02:20.860 --> 00:02:25.690
- 1.1.1.1, because it's the easiest IP address
+ 1.1.1.1, because it's the easiest IP address
on the Internet to remember.
34
00:02:25.690 --> 00:02:28.960
- So we really should always be using
+ So we really should always be using
hostnames.
35
00:02:29.110 --> 00:02:33.520
- With Cloudflare, it's as simple as connecting
+ With Cloudflare, it's as simple as connecting
a private DNS service to the network,
36
00:02:33.520 --> 00:02:37.630
- and then building a policy that says any
+ and then building a policy that says any
request from a user or a network,
37
00:02:37.630 --> 00:02:40.660
- anywhere on the Cloudflare network,
+ anywhere on the Cloudflare network,
for an internal domain,
38
00:02:40.660 --> 00:02:43.540
- should be answered by that specific DNS
+ should be answered by that specific DNS
service.
39
00:02:43.570 --> 00:02:47.860
- In this example, we're going to connect it to
+ In this example, we're going to connect it to
Cloudflare using exactly the same tunnel
40
00:02:47.860 --> 00:02:50.350
- software that we're using for the database
+ software that we're using for the database
server.
41
00:02:50.380 --> 00:02:55.450
- So at this point we have our database admin
+ So at this point we have our database admin
tool that's connected to Cloudflare and we
42
00:02:55.450 --> 00:03:00.770
- have an ability to resolve the IP address of
+ have an ability to resolve the IP address of
that private network using an internal
43
00:03:00.800 --> 00:03:05.720
- hostname. Next, we need to securely connect
+ hostname. Next, we need to securely connect
the user device to Cloudflare so that all
44
00:03:05.720 --> 00:03:09.080
- traffic destined for our database server is
+ traffic destined for our database server is
over secure channels.
45
00:03:09.110 --> 00:03:12.890
- We do this using a similar piece of software
+ We do this using a similar piece of software
we used on the server,
46
@@ -244,7 +246,7 @@ transcript: |
47
00:03:15.110 --> 00:03:20.030
- It supports macOS, windows,
+ It supports macOS, windows,
Linux, iOS and Android and connects the
48
@@ -253,27 +255,27 @@ transcript: |
49
00:03:22.370 --> 00:03:26.000
- But the agent can actually provide
+ But the agent can actually provide
information about the security posture of the
50
00:03:26.000 --> 00:03:29.510
- device, and we'll talk about that later when
+ device, and we'll talk about that later when
we look at the policy itself.
51
00:03:29.510 --> 00:03:32.180
- So once the user device is connected to
+ So once the user device is connected to
Cloudflare,
52
00:03:32.180 --> 00:03:36.710
- requests for private applications are
+ requests for private applications are
resolved using the internal DNS service,
53
00:03:36.710 --> 00:03:42.230
- and traffic is routed from the device through
+ and traffic is routed from the device through
Cloudflare through secure tunnels down to the
54
@@ -282,17 +284,17 @@ transcript: |
55
00:03:45.050 --> 00:03:48.710
- Now we have secured connectivity all the way
+ Now we have secured connectivity all the way
from the device to the server.
56
00:03:48.740 --> 00:03:53.600
- The last thing we need to do is actually
+ The last thing we need to do is actually
write a policy which enforces access only to
57
00:03:53.630 --> 00:03:57.290
- users that you authorize,
+ users that you authorize,
and that the device they're on meets a
58
@@ -301,7 +303,7 @@ transcript: |
59
00:03:58.820 --> 00:04:03.690
- We use information from our device agent,
+ We use information from our device agent,
and also leverage your existing identity and
60
@@ -310,12 +312,12 @@ transcript: |
61
00:04:06.030 --> 00:04:09.690
- Cloudflare is typically integrated with one
+ Cloudflare is typically integrated with one
or more identity providers.
62
00:04:09.690 --> 00:04:13.020
- Usually, your company has a central directory
+ Usually, your company has a central directory
for employees,
63
@@ -324,97 +326,97 @@ transcript: |
64
00:04:14.370 --> 00:04:17.460
- For example, you might manage contractors in
+ For example, you might manage contractors in
a different directory.
65
00:04:17.490 --> 00:04:22.260
- Cloudflare can also integrate with XDR
+ Cloudflare can also integrate with XDR
platforms such as CrowdStrike and
66
00:04:22.260 --> 00:04:27.150
- SentinelOne, and these give us information we
+ SentinelOne, and these give us information we
can use in the policy regards to the security
67
00:04:27.150 --> 00:04:31.170
- posture of the device,
+ posture of the device,
such as if the device is free of malware.
68
00:04:31.200 --> 00:04:34.590
- For our own agent, we can provide information
+ For our own agent, we can provide information
about the device,
69
00:04:34.590 --> 00:04:38.190
- such as is the hard disk encrypted or if the
+ such as is the hard disk encrypted or if the
local firewall is enabled.
70
00:04:38.190 --> 00:04:40.680
- So now we have all the information about the
+ So now we have all the information about the
user,
71
00:04:40.680 --> 00:04:43.200
- their device, and how they're connected to
+ their device, and how they're connected to
Cloudflare.
72
00:04:43.230 --> 00:04:47.880
- A policy can be created which only allows
+ A policy can be created which only allows
users who have authenticated using a strong
73
00:04:47.910 --> 00:04:53.340
- factor, such as MFA using a hard token,
+ factor, such as MFA using a hard token,
that they also exist in a group such as IT
74
00:04:53.370 --> 00:04:57.750
- administrators, and they're using a secure
+ administrators, and they're using a secure
device free of malware.
75
00:04:58.110 --> 00:05:03.390
- This policy sits in front of access to both
+ This policy sits in front of access to both
the database admin tool and the SSH service.
76
00:05:03.510 --> 00:05:07.410
- Finally, because you might want to record of
+ Finally, because you might want to record of
all access to the database administration
77
00:05:07.410 --> 00:05:13.020
- tool, you can optionally inject a page after
+ tool, you can optionally inject a page after
authentication asking for justification for
78
00:05:13.020 --> 00:05:16.170
- access to the app and that gets audited and
+ access to the app and that gets audited and
logged in Cloudflare.
79
00:05:16.170 --> 00:05:20.760
- So in summary, you've seen an example of how
+ So in summary, you've seen an example of how
Cloudflare can protect access to some of your
80
00:05:20.760 --> 00:05:24.000
- critical infrastructure using our SASE
+ critical infrastructure using our SASE
platform.
81
00:05:24.000 --> 00:05:29.490
- We can help lock down access to servers only
+ We can help lock down access to servers only
from highly authenticated users on tightly
82
00:05:29.490 --> 00:05:34.020
- managed devices that must be connected to
+ managed devices that must be connected to
your new corporate network or managed by
83
@@ -423,7 +425,7 @@ transcript: |
84
00:05:36.510 --> 00:05:41.250
- This video is part of a series which explains
+ This video is part of a series which explains
how to build your new corporate network using
85
@@ -432,7 +434,7 @@ transcript: |
86
00:05:42.930 --> 00:05:45.630
- You can watch the other videos in this series
+ You can watch the other videos in this series
to learn more.
87
@@ -445,15 +447,15 @@ transcript: |
89
00:05:50.700 --> 00:05:54.480
- We also cover a wide variety of topics
+ We also cover a wide variety of topics
including application security,
90
00:05:54.480 --> 00:05:57.210
- corporate networking,
+ corporate networking,
and all the developer content the Internet
91
00:05:57.210 --> 00:05:59.700
- can hold. Follow us online and thanks for
- watching!
\ No newline at end of file
+ can hold. Follow us online and thanks for
+ watching!
diff --git a/src/content/stream/sase-4-connect-secure/index.yaml b/src/content/stream/sase-4-connect-secure/index.yaml
index 5f41f800c3b81b9..c51580ef54c8208 100644
--- a/src/content/stream/sase-4-connect-secure/index.yaml
+++ b/src/content/stream/sase-4-connect-secure/index.yaml
@@ -4,33 +4,35 @@ url: sase-4-connect-secure
title: SASE - Connect and secure from any network to anywhere
description: Build your new corporate network with Cloudflare, connecting any network into our modern SASE platform and secure applications, users, devices and your company data. In this video, you will learn all of the different methods of connecting networks to Cloudflare and what services can be used to improve security and performance.
products:
- - sase
+ - cloudflare-one
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-4-Connect-and-secure-from-any-network-to-anywhere.jpg
-chapters: {
- "Introduction to SASE and the Need for Modern, Secure Corporate Networking": "0s",
- "Using Cloudflare to Unify and Secure Corporate Networks Across Multiple Locations": "01m57s",
- "Enabling Secure Remote Access for Distributed Teams with Cloudflare's Zero Trust Approach": "02m47s",
- "Integrating Private Networks and Data Centers using various methods": "04m17s",
- "Cloudflare's Connectivity Cloud: Security, Performance, and Simplified Network Management": "05m17s"
-}
+chapters:
+ {
+ "Introduction to SASE and the Need for Modern, Secure Corporate Networking": "0s",
+ "Using Cloudflare to Unify and Secure Corporate Networks Across Multiple Locations": "01m57s",
+ "Enabling Secure Remote Access for Distributed Teams with Cloudflare's Zero Trust Approach": "02m47s",
+ "Integrating Private Networks and Data Centers using various methods": "04m17s",
+ "Cloudflare's Connectivity Cloud: Security, Performance, and Simplified Network Management": "05m17s",
+ }
transcript: |
WEBVTT
1
00:00:07.070 --> 00:00:10.970
- When looking at Secure Access Service Edge or
+ When looking at Secure Access Service Edge or
SASE platforms,
2
00:00:10.970 --> 00:00:15.260
- we often talk about a user getting remote
+ we often talk about a user getting remote
access into some privately hosted
3
00:00:15.260 --> 00:00:19.070
- application. The focus is often user to
+ application. The focus is often user to
application,
4
@@ -39,42 +41,42 @@ transcript: |
5
00:00:21.830 --> 00:00:25.970
- and a user can only access an application
+ and a user can only access an application
over a specific address and port.
6
00:00:26.000 --> 00:00:29.570
- But corporate networks exist to carry traffic
+ But corporate networks exist to carry traffic
in many other ways.
7
00:00:29.600 --> 00:00:33.230
- Let's take, for example,
+ Let's take, for example,
a retail coffee company with many coffee
8
00:00:33.230 --> 00:00:37.790
- shops each providing customers free access to
+ shops each providing customers free access to
the Internet with their guest Wi-Fi,
9
00:00:37.790 --> 00:00:40.940
- but also connecting employees to internal
+ but also connecting employees to internal
applications.
10
00:00:40.970 --> 00:00:45.200
- Each shop also houses point of sale devices,
+ Each shop also houses point of sale devices,
security cameras,
11
00:00:45.200 --> 00:00:48.980
- and other network enabled equipment that need
+ and other network enabled equipment that need
access to the Internet,
12
00:00:48.980 --> 00:00:53.240
- but also might require access to other
+ but also might require access to other
private networks to back up data or be
13
@@ -83,42 +85,42 @@ transcript: |
14
00:00:54.890 --> 00:01:00.440
- IT staff also need to remotely access these
+ IT staff also need to remotely access these
devices from a corporate office network.
15
00:01:00.470 --> 00:01:04.760
- A lot of this traffic is private and should
+ A lot of this traffic is private and should
only remain on the corporate network.
16
00:01:04.790 --> 00:01:08.660
- This is where Cloudflare's Connectivity Cloud
+ This is where Cloudflare's Connectivity Cloud
really comes into its own.
17
00:01:08.690 --> 00:01:11.180
- The ability to mesh together different
+ The ability to mesh together different
networks,
18
00:01:11.180 --> 00:01:14.120
- applications and users no matter where they
+ applications and users no matter where they
are.
19
00:01:14.150 --> 00:01:17.180
- Let's dive deeper into our coffee company
+ Let's dive deeper into our coffee company
example.
20
00:01:17.210 --> 00:01:20.630
- Right. First, they have their main
+ Right. First, they have their main
headquarters in Seattle.
21
00:01:20.630 --> 00:01:24.770
- Most HQ employees live locally and about half
+ Most HQ employees live locally and about half
travel into the office,
22
@@ -127,7 +129,7 @@ transcript: |
23
00:01:27.080 --> 00:01:31.310
- Second, they have around 40 coffee shops down
+ Second, they have around 40 coffee shops down
the west coast of America,
24
@@ -136,22 +138,22 @@ transcript: |
25
00:01:33.170 --> 00:01:37.910
- And then they have an internal company wiki,
+ And then they have an internal company wiki,
which is running in a virtual environment in
26
00:01:37.910 --> 00:01:41.150
- Amazon Web Services with its own virtual
+ Amazon Web Services with its own virtual
private network.
27
00:01:41.150 --> 00:01:46.340
- And then finally, the security cameras at all
+ And then finally, the security cameras at all
their coffee shops need to back up data to a
28
00:01:46.340 --> 00:01:52.310
- central service that you've got running on
+ central service that you've got running on
servers that you run and host in a rack in a
29
@@ -160,177 +162,177 @@ transcript: |
30
00:01:54.470 --> 00:01:57.890
- You see how these network locations are all
+ You see how these network locations are all
quite different.
31
00:01:57.950 --> 00:02:02.330
- Cloudflare has a variety of ways all these
+ Cloudflare has a variety of ways all these
networks can be connected together.
32
00:02:02.660 --> 00:02:05.960
- Let's start by connecting the headquarters
+ Let's start by connecting the headquarters
network in Seattle.
33
00:02:05.960 --> 00:02:10.640
- We can use something called Magic WAN,
+ We can use something called Magic WAN,
which is our service that creates IPsec
34
00:02:10.670 --> 00:02:14.920
- tunnels from the headquarters office back to
+ tunnels from the headquarters office back to
the Cloudflare network and assign a private
35
00:02:14.950 --> 00:02:19.720
- network range to it. This is using regular
+ network range to it. This is using regular
standard IPsec protocols and can easily
36
00:02:19.720 --> 00:02:22.630
- leverage functionality in a network,
+ leverage functionality in a network,
router or firewall that exists at
37
00:02:22.630 --> 00:02:25.870
- headquarters. Next, let's look at each coffee
+ headquarters. Next, let's look at each coffee
shop.
38
00:02:26.260 --> 00:02:31.600
- You can ship out to each location a physical
+ You can ship out to each location a physical
device running Cloudflare's Magic WAN
39
00:02:31.600 --> 00:02:35.830
- connector. It's essentially a lightweight
+ connector. It's essentially a lightweight
appliance that can be plugged into the local
40
00:02:35.830 --> 00:02:40.780
- ISP router. Each connector creates an IPsec
+ ISP router. Each connector creates an IPsec
connection back to Cloudflare,
41
00:02:40.780 --> 00:02:45.340
- and each device can be administered remotely
+ and each device can be administered remotely
via the Cloudflare dashboard private network.
42
00:02:45.340 --> 00:02:47.920
- Ranges can then be assigned to each coffee
+ Ranges can then be assigned to each coffee
shop.
43
00:02:47.920 --> 00:02:51.460
- And now we have the beginnings of a new
+ And now we have the beginnings of a new
modern corporate network.
44
00:02:51.670 --> 00:02:56.920
- So IT admins in the Seattle office can now
+ So IT admins in the Seattle office can now
remotely access point of sale devices in each
45
00:02:56.920 --> 00:03:00.850
- coffee shop location. Also,
+ coffee shop location. Also,
because we want to provide customers in each
46
00:03:00.850 --> 00:03:03.670
- shop free Internet access using the guest
+ shop free Internet access using the guest
WiFi,
47
00:03:03.700 --> 00:03:06.580
- all traffic from that location is now routed
+ all traffic from that location is now routed
through Cloudflare,
48
00:03:06.580 --> 00:03:11.320
- and we can use our secure web gateway to
+ and we can use our secure web gateway to
block any access to malicious websites,
49
00:03:11.320 --> 00:03:14.710
- and this keeps customers safe while they sip
+ and this keeps customers safe while they sip
their cappuccinos.
50
00:03:17.740 --> 00:03:20.230
- But what about the IT staff working from
+ But what about the IT staff working from
home?
51
00:03:20.230 --> 00:03:23.110
- They're not connected to any of these
+ They're not connected to any of these
networks. No worries!
52
00:03:23.110 --> 00:03:26.050
- They can use our device agent,
+ They can use our device agent,
which connects them to Cloudflare,
53
00:03:26.050 --> 00:03:29.680
- and in turn gives them access to this new
+ and in turn gives them access to this new
corporate network as if they were connected
54
00:03:29.680 --> 00:03:33.940
- in headquarters. Now it can manage the
+ in headquarters. Now it can manage the
devices in each coffee shop,
55
00:03:33.940 --> 00:03:36.820
- no matter if they're on a plane,
+ no matter if they're on a plane,
sitting in an office,
56
00:03:36.820 --> 00:03:41.650
- or in a coffee shop. When each network or
+ or in a coffee shop. When each network or
user connects,
57
00:03:41.650 --> 00:03:44.590
- it does so to the nearest Cloudflare data
+ it does so to the nearest Cloudflare data
center,
58
00:03:44.590 --> 00:03:50.290
- which is a key feature of our network where
+ which is a key feature of our network where
we use Anycast IP networking to ensure secure
59
00:03:50.320 --> 00:03:55.540
- connections to users and offices are made to
+ connections to users and offices are made to
the geographically nearest Cloudflare data
60
00:03:55.570 --> 00:04:00.610
- center, so that traffic is then secured and
+ center, so that traffic is then secured and
optimized as close as possible to the user or
61
00:04:00.610 --> 00:04:06.760
- to that network. And we have data centers in
+ to that network. And we have data centers in
over 300 cities and have over 12,000 network
62
00:04:06.790 --> 00:04:10.360
- peering relationships,
+ peering relationships,
allowing us to ensure fast connectivity from
63
00:04:10.360 --> 00:04:14.410
- user to the network. Think of it like having
+ user to the network. Think of it like having
a coffee shop in every neighborhood so
64
00:04:14.410 --> 00:04:16.960
- everyone doesn't have to walk far to get a
+ everyone doesn't have to walk far to get a
cup of coffee.
65
@@ -339,17 +341,17 @@ transcript: |
66
00:04:19.450 --> 00:04:23.200
- Remember, the backup service is running in a
+ Remember, the backup service is running in a
data center in San Jose.
67
00:04:23.230 --> 00:04:28.120
- Most likely than not. Cloudflare is also
+ Most likely than not. Cloudflare is also
running our own servers in the same data
68
00:04:28.150 --> 00:04:33.250
- center, and you can offer direct connections
+ center, and you can offer direct connections
from Cloudflare to your network switches,
69
@@ -358,12 +360,12 @@ transcript: |
70
00:04:35.410 --> 00:04:38.470
- And even if your servers are not in the exact
+ And even if your servers are not in the exact
same data center,
71
00:04:38.470 --> 00:04:42.610
- we can create a virtual connection directly
+ we can create a virtual connection directly
from your rack to the nearest Cloudflare data
72
@@ -376,37 +378,37 @@ transcript: |
74
00:04:47.290 --> 00:04:50.380
- Let's say the company is launching a new
+ Let's say the company is launching a new
internal company wiki,
75
00:04:50.380 --> 00:04:54.220
- and they're running the service in AWS,
+ and they're running the service in AWS,
Amazon Web Services.
76
00:04:54.220 --> 00:04:57.640
- We don't need to connect the entire AWS
+ We don't need to connect the entire AWS
private network.
77
00:04:57.640 --> 00:05:02.590
- We just install a software agent on the wiki
+ We just install a software agent on the wiki
server that creates a secure tunnel back to
78
00:05:02.620 --> 00:05:05.890
- Cloudflare, and connects that application to
+ Cloudflare, and connects that application to
the network,
79
00:05:05.920 --> 00:05:10.390
- that anyone on that network can now access
+ that anyone on that network can now access
the application policies and Cloudflare
80
00:05:10.390 --> 00:05:14.320
- control who can access the wiki,
+ control who can access the wiki,
ensuring users authenticate with valid
81
@@ -415,57 +417,57 @@ transcript: |
82
00:05:16.360 --> 00:05:19.930
- You can see that Cloudflare is able to
+ You can see that Cloudflare is able to
connect to a wide variety of networks,
83
00:05:19.930 --> 00:05:24.430
- from the physical office locations to virtual
+ from the physical office locations to virtual
application networks in the cloud,
84
00:05:24.430 --> 00:05:27.580
- as well as direct your servers running in
+ as well as direct your servers running in
your data centers.
85
00:05:27.580 --> 00:05:32.730
- So much of the complexity from legacy network
+ So much of the complexity from legacy network
architectures is abstracted into our
86
00:05:32.730 --> 00:05:36.840
- Connectivity Cloud , making life much easier
+ Connectivity Cloud , making life much easier
for IT and network admins.
87
00:05:36.870 --> 00:05:41.040
- And once connected to Cloudflare,
+ And once connected to Cloudflare,
it's not just about routing traffic.
88
00:05:41.040 --> 00:05:45.660
- Firewalling, DNS, Load Balancing,
+ Firewalling, DNS, Load Balancing,
protecting from denial of service attacks,
89
00:05:45.660 --> 00:05:49.440
- content caching, and a lot more are all
+ content caching, and a lot more are all
easily enabled.
90
00:05:49.440 --> 00:05:53.760
- Any traffic destined for the Internet can
+ Any traffic destined for the Internet can
also be filtered to ensure only access to
91
00:05:53.790 --> 00:05:57.540
- legitimate sites, and blocking any unsafe
+ legitimate sites, and blocking any unsafe
transfer of company data.
92
00:05:57.570 --> 00:06:01.890
- The flexibility of Cloudflare's Connectivity
+ The flexibility of Cloudflare's Connectivity
Cloud allows you to connect all sorts of
93
@@ -474,12 +476,12 @@ transcript: |
94
00:06:03.540 --> 00:06:08.070
- It's possible to recreate your classic
+ It's possible to recreate your classic
corporate network and then apply on top of it
95
00:06:08.070 --> 00:06:13.320
- all the modern Zero Trust services to ensure
+ all the modern Zero Trust services to ensure
high security without compromising the user
96
@@ -488,7 +490,7 @@ transcript: |
97
00:06:15.360 --> 00:06:19.590
- This video is part of a series which explains
+ This video is part of a series which explains
how to build your new corporate network using
98
@@ -497,7 +499,7 @@ transcript: |
99
00:06:21.360 --> 00:06:23.670
- Watch the other videos in this series to
+ Watch the other videos in this series to
learn more.
100
@@ -510,15 +512,15 @@ transcript: |
102
00:06:28.710 --> 00:06:32.520
- We also cover a wide variety of topics
+ We also cover a wide variety of topics
including application security,
103
00:06:32.520 --> 00:06:35.250
- corporate networking,
+ corporate networking,
and all the developer content the Internet
104
00:06:35.250 --> 00:06:37.680
- can hold. Follow us online and thanks for
- watching!
\ No newline at end of file
+ can hold. Follow us online and thanks for
+ watching!
diff --git a/src/content/stream/sase-5-protect-users/index.yaml b/src/content/stream/sase-5-protect-users/index.yaml
index 75a4de371c0dc3d..903cb5283cd8544 100644
--- a/src/content/stream/sase-5-protect-users/index.yaml
+++ b/src/content/stream/sase-5-protect-users/index.yaml
@@ -4,74 +4,76 @@ url: sase-5-protect-users
title: SASE - Protect your users from Internet risks
description: The Internet has become part of your corporate network; however, browsing the web comes with hidden risks including malware, phishing attacks, and malicious websites. In this video, we will explore how Cloudflare's Secure Web Gateway (SWG) helps keep users safe by filtering and inspecting Internet traffic in real time. Whether you are protecting a remote workforce or securing an entire organization, Cloudflare ensures that users can access the web securely — without sacrificing speed or productivity.
products:
- - sase
+ - cloudflare-one
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Video-5-Protect-your-users-from-Internet-risks.jpg
-chapters: {
- "Introduction to Cloudflare's SASE and the Importance of Secure Corporate Networking": "1s",
- "Using Secure Web Gateway to Inspect and Control Internet Traffic": "01m06s",
- "Protecting Users with DNS Filtering and Threat Intelligence": "02m04s" ,
- "Implementing Network-Level Security Policies for Private and Public Traffic": "03m37s",
- "Advanced HTTP Filtering and Data Loss Prevention with Cloudflare": "04m23s",
- "Isolating Risky Websites and Preventing Data Leaks with Browser Isolation": "05m48s"
-}
+chapters:
+ {
+ "Introduction to Cloudflare's SASE and the Importance of Secure Corporate Networking": "1s",
+ "Using Secure Web Gateway to Inspect and Control Internet Traffic": "01m06s",
+ "Protecting Users with DNS Filtering and Threat Intelligence": "02m04s",
+ "Implementing Network-Level Security Policies for Private and Public Traffic": "03m37s",
+ "Advanced HTTP Filtering and Data Loss Prevention with Cloudflare": "04m23s",
+ "Isolating Risky Websites and Preventing Data Leaks with Browser Isolation": "05m48s",
+ }
transcript: |
WEBVTT
1
00:00:07.100 --> 00:00:11.540
- Cloudflare's Connectivity Cloud hosts a
+ Cloudflare's Connectivity Cloud hosts a
complete Secure Access Service Edge,
2
00:00:11.540 --> 00:00:16.790
- or SASE platform, which allows organizations
+ or SASE platform, which allows organizations
to create a new corporate network leveraging
3
00:00:16.790 --> 00:00:20.930
- the latest in zero trust security approaches
+ the latest in zero trust security approaches
and cloud based networking.
4
00:00:21.110 --> 00:00:24.320
- Many companies start by connecting
+ Many companies start by connecting
applications,
5
00:00:24.350 --> 00:00:28.970
- networks and user devices to Cloudflare to
+ networks and user devices to Cloudflare to
use Zero Trust Network Access,
6
00:00:28.970 --> 00:00:33.800
- or ZTNA to authorize users to connect to
+ or ZTNA to authorize users to connect to
self-hosted applications and private
7
00:00:33.830 --> 00:00:39.560
- networks. But connecting devices and networks
+ networks. But connecting devices and networks
into Cloudflare can also help secure public
8
00:00:39.560 --> 00:00:43.130
- Internet access and increase visibility and
+ Internet access and increase visibility and
control over company data.
9
00:00:43.160 --> 00:00:47.240
- Let's take a look at an example of a company
+ Let's take a look at an example of a company
that has already connected its corporate HQ
10
00:00:47.240 --> 00:00:51.800
- network, along with a few branch offices and
+ network, along with a few branch offices and
many remote user devices.
11
00:00:51.800 --> 00:00:56.780
- You can see that all these methods of on
+ You can see that all these methods of on
ramping traffic to Cloudflare result in user
12
@@ -80,17 +82,17 @@ transcript: |
13
00:00:58.960 --> 00:01:02.740
- Sometimes the traffic is destined for a
+ Sometimes the traffic is destined for a
private application or network,
14
00:01:02.740 --> 00:01:06.370
- but a lot of the traffic is just heading for
+ but a lot of the traffic is just heading for
the public Internet.
15
00:01:06.400 --> 00:01:10.810
- Cloudflare has the ability to inspect that
+ Cloudflare has the ability to inspect that
traffic using another part of our SASE
16
@@ -99,22 +101,22 @@ transcript: |
17
00:01:13.600 --> 00:01:16.420
- It can examine traffic either at the DNS
+ It can examine traffic either at the DNS
request,
18
00:01:16.420 --> 00:01:21.070
- the network level, or we can even inspect the
+ the network level, or we can even inspect the
contents of a HTTP request.
19
00:01:21.850 --> 00:01:26.020
- Do you want to deny users from accessing
+ Do you want to deny users from accessing
websites known to be part of a phishing
20
00:01:26.020 --> 00:01:29.770
- campaign or ransomware attack,
+ campaign or ransomware attack,
or only allow users coming from IP addresses
21
@@ -123,57 +125,57 @@ transcript: |
22
00:01:32.140 --> 00:01:36.970
- Or more seriously, do you want to prevent
+ Or more seriously, do you want to prevent
employees from sending sensitive information
23
00:01:36.970 --> 00:01:41.050
- like financial data or source code to AI
+ like financial data or source code to AI
sites like ChatGPT?
24
00:01:41.140 --> 00:01:43.990
- Policies in the Secure Web Gateway allow you
+ Policies in the Secure Web Gateway allow you
to achieve this,
25
00:01:43.990 --> 00:01:46.780
- and they can be written using a wide variety
+ and they can be written using a wide variety
of attributes.
26
00:01:46.780 --> 00:01:50.800
- We can even isolate a website by running not
+ We can even isolate a website by running not
in the user's browser,
27
00:01:50.800 --> 00:01:54.460
- but by rendering it in our headless browser,
+ but by rendering it in our headless browser,
running on our own network.
28
00:01:54.460 --> 00:01:56.740
- And then we send the results down to the user
+ And then we send the results down to the user
device,
29
00:01:56.740 --> 00:02:00.670
- and this protects them from any nasty code
+ and this protects them from any nasty code
running in that website.
30
00:02:00.700 --> 00:02:03.970
- Let's take a look at the different ways our
+ Let's take a look at the different ways our
Secure Web Gateway can help protect your
31
00:02:03.970 --> 00:02:08.350
- organization. The first method to protect any
+ organization. The first method to protect any
user or device is to look at their DNS
32
00:02:08.350 --> 00:02:12.940
- requests. Some of the most common policies
+ requests. Some of the most common policies
are simply designed to prevent access to
33
@@ -182,7 +184,7 @@ transcript: |
34
00:02:14.680 --> 00:02:18.910
- To make your life easier,
+ To make your life easier,
Cloudflare manages large lists of sites that
35
@@ -191,12 +193,12 @@ transcript: |
36
00:02:20.140 --> 00:02:23.380
- Either they've been found to distribute
+ Either they've been found to distribute
malware or they're part of a phishing
37
00:02:23.380 --> 00:02:27.730
- campaign. All you need to do is include that
+ campaign. All you need to do is include that
category in the deny policy,
38
@@ -205,32 +207,32 @@ transcript: |
39
00:02:29.830 --> 00:02:32.950
- Cloudflare keeps the sites in each category
+ Cloudflare keeps the sites in each category
up to date.
40
00:02:32.950 --> 00:02:38.260
- In fact, we block an average of 158 billion
+ In fact, we block an average of 158 billion
cyber threats a day.
41
00:02:38.260 --> 00:02:41.710
- So we have an amazing view into what's bad
+ So we have an amazing view into what's bad
out there on the Internet.
42
00:02:41.710 --> 00:02:44.500
- You could never maintain this amount of data
+ You could never maintain this amount of data
yourself.
43
00:02:44.530 --> 00:02:48.820
- Policies can be applied at the user level or
+ Policies can be applied at the user level or
be based on network location.
44
00:02:48.820 --> 00:02:52.870
- You might wish to implement a policy that
+ You might wish to implement a policy that
limits certain websites depending on the
45
@@ -239,27 +241,27 @@ transcript: |
46
00:02:54.850 --> 00:02:59.580
- You can even subscribe to government cyber
+ You can even subscribe to government cyber
defense lists of known malicious websites.
47
00:03:00.510 --> 00:03:05.250
- You can also use a DNS policy to simplify
+ You can also use a DNS policy to simplify
some of your IT infrastructure.
48
00:03:05.280 --> 00:03:10.320
- A policy can override the IP address returned
+ A policy can override the IP address returned
from a DNS request and point to a service
49
00:03:10.320 --> 00:03:15.450
- that might be local. For example,
+ that might be local. For example,
you might configure all employee laptops to
50
00:03:15.480 --> 00:03:18.300
- use a single hostname for connecting to the
+ use a single hostname for connecting to the
office printer.
51
@@ -268,22 +270,22 @@ transcript: |
52
00:03:21.180 --> 00:03:24.720
- Then, if a user is attempting to print in the
+ Then, if a user is attempting to print in the
Seattle office,
53
00:03:24.750 --> 00:03:29.400
- Cloudflare will replace the IP address for
+ Cloudflare will replace the IP address for
that host with the local office printer.
54
00:03:29.400 --> 00:03:32.100
- But if the same user then travels to the
+ But if the same user then travels to the
London office,
55
00:03:32.100 --> 00:03:36.258
- the same laptop makes the same request to
+ the same laptop makes the same request to
print and Cloudflare replaces the IP address
56
@@ -292,152 +294,152 @@ transcript: |
57
00:03:37.440 --> 00:03:40.800
- The second method of protection is by using
+ The second method of protection is by using
network policies.
58
00:03:40.800 --> 00:03:43.890
- So for all your networks connected Cloudflare
+ So for all your networks connected Cloudflare
SASE platform,
59
00:03:43.890 --> 00:03:47.280
- it's possible to write simple
+ it's possible to write simple
firewall-like-rules.
60
00:03:47.370 --> 00:03:52.200
- These are often used to allow access to
+ These are often used to allow access to
specific services on private IP addresses.
61
00:03:52.230 --> 00:03:56.160
- Say for example, you have a lot of windows
+ Say for example, you have a lot of windows
servers running in your corporate network and
62
00:03:56.160 --> 00:03:59.760
- you want to ensure only IT admins are allowed
+ you want to ensure only IT admins are allowed
to connect to them over RDP.
63
00:04:00.330 --> 00:04:05.160
- How? Well, when users access Cloudflare using
+ How? Well, when users access Cloudflare using
our device agent,
64
00:04:05.190 --> 00:04:09.330
- network access policies can use identity
+ network access policies can use identity
information such as the method of
65
00:04:09.330 --> 00:04:12.990
- authentication, what groups the user is in as
+ authentication, what groups the user is in as
part of the policy.
66
00:04:13.020 --> 00:04:16.350
- Device security posture can also be taken
+ Device security posture can also be taken
from that device agent,
67
00:04:16.350 --> 00:04:21.480
- making sure that IT admins access Windows
+ making sure that IT admins access Windows
servers only using secured company managed
68
00:04:21.480 --> 00:04:27.660
- devices. The third and the one with the most
+ devices. The third and the one with the most
control is HTTP policies,
69
00:04:27.660 --> 00:04:31.260
- since it allows you to inspect the actual
+ since it allows you to inspect the actual
HTTP traffic.
70
00:04:31.320 --> 00:04:34.500
- For devices where a Cloudflare certificate
+ For devices where a Cloudflare certificate
has been deployed,
71
00:04:34.500 --> 00:04:38.070
- the TLS and SSL connection terminates at
+ the TLS and SSL connection terminates at
Cloudflare,
72
00:04:38.070 --> 00:04:41.520
- where you can inspect the traffic and apply
+ where you can inspect the traffic and apply
your policies.
73
00:04:41.670 --> 00:04:45.900
- You can build policies that limit the
+ You can build policies that limit the
uploading or downloading of files based on
74
00:04:45.930 --> 00:04:52.220
- their file type, or prevent HTTP POST or PUT
+ their file type, or prevent HTTP POST or PUT
to prevent the certain upload of content to
75
00:04:52.250 --> 00:04:57.890
- any websites. We also have a sandboxing
+ any websites. We also have a sandboxing
feature where we can use AV scanning to
76
00:04:57.920 --> 00:05:02.060
- examine certain files being downloaded and
+ examine certain files being downloaded and
quarantine them if they contain malicious
77
00:05:02.060 --> 00:05:07.880
- content. But the true power of inspecting
+ content. But the true power of inspecting
HTTP traffic is when it's combined with our
78
00:05:07.880 --> 00:05:12.410
- DLP policies. Here, we can match any part of
+ DLP policies. Here, we can match any part of
the HTTP request,
79
00:05:12.410 --> 00:05:16.610
- either the body of the request or if a file
+ either the body of the request or if a file
contains specific content,
80
00:05:16.610 --> 00:05:21.260
- and then protect that data from leaving your
+ and then protect that data from leaving your
organization or being downloaded to insecure
81
00:05:21.290 --> 00:05:25.250
- devices. We have built-in DLP profiles for
+ devices. We have built-in DLP profiles for
matching common data,
82
00:05:25.280 --> 00:05:29.480
- such as health or financial information,
+ such as health or financial information,
source code or privately identifiable
83
00:05:29.480 --> 00:05:32.960
- information such as social security or tax
+ information such as social security or tax
identifiers.
84
00:05:32.990 --> 00:05:38.390
- You can also create your own DLP profiles by
+ You can also create your own DLP profiles by
either defining patterns to match sensitive
85
00:05:38.390 --> 00:05:42.140
- data, or just by uploading a list of known
+ data, or just by uploading a list of known
customer accounts.
86
00:05:42.170 --> 00:05:46.700
- Now, when users attempt to download or upload
+ Now, when users attempt to download or upload
any content that matches these profiles,
87
@@ -446,67 +448,67 @@ transcript: |
88
00:05:48.530 --> 00:05:51.460
- Sometimes the risk for a website isn't well
+ Sometimes the risk for a website isn't well
known.
89
00:05:51.490 --> 00:05:55.150
- For example, you might deem social media
+ For example, you might deem social media
websites to be a little risky,
90
00:05:55.150 --> 00:05:58.030
- but your marketing department still requires
+ but your marketing department still requires
access.
91
00:05:58.060 --> 00:06:01.900
- Newly registered domains might sometimes be
+ Newly registered domains might sometimes be
part of a phishing campaign,
92
00:06:01.900 --> 00:06:04.300
- or they might just be a legitimate new
+ or they might just be a legitimate new
website.
93
00:06:04.330 --> 00:06:07.990
- In these examples, Cloudflare has a really
+ In these examples, Cloudflare has a really
cool capability.
94
00:06:08.020 --> 00:06:13.360
- You can write a policy that when a user makes
+ You can write a policy that when a user makes
a request for a website you think is a little
95
00:06:13.360 --> 00:06:16.960
- risky, instead of their machine receiving all
+ risky, instead of their machine receiving all
the content directly,
96
00:06:16.960 --> 00:06:21.250
- we spin up a headless browser on our network
+ we spin up a headless browser on our network
and render the content first.
97
00:06:21.280 --> 00:06:25.090
- Here we isolate any potential bad behavior in
+ Here we isolate any potential bad behavior in
a secure,
98
00:06:25.120 --> 00:06:29.680
- isolated environment. We then send the
+ isolated environment. We then send the
results of the render page down to the user's
99
00:06:29.680 --> 00:06:33.820
- device, and you can optionally turn on and
+ device, and you can optionally turn on and
off certain capabilities,
100
00:06:33.820 --> 00:06:37.660
- such as the ability to enter text into the
+ such as the ability to enter text into the
web page or download files.
101
@@ -515,42 +517,42 @@ transcript: |
102
00:06:40.780 --> 00:06:45.580
- You can also use this service to limit access
+ You can also use this service to limit access
to SaaS application data for a certain set of
103
00:06:45.580 --> 00:06:49.510
- users. You might, for example,
+ users. You might, for example,
want to allow contractors or partners to have
104
00:06:49.510 --> 00:06:53.410
- access to your Salesforce instance,
+ access to your Salesforce instance,
and you can use our Browser Isolation to
105
00:06:53.440 --> 00:06:56.830
- prevent copy and paste,
+ prevent copy and paste,
printing or downloading of Salesforce data.
106
00:06:56.860 --> 00:07:01.330
- So in summary, Cloudflare has a powerful
+ So in summary, Cloudflare has a powerful
range of capabilities to protect users from
107
00:07:01.330 --> 00:07:05.980
- the threat of bad actors on the Internet,
+ the threat of bad actors on the Internet,
while also identifying company data and
108
00:07:05.980 --> 00:07:10.720
- protecting its use. You can ensure safe
+ protecting its use. You can ensure safe
browsing by blocking known malicious
109
00:07:10.720 --> 00:07:15.190
- websites, detect when company data is being
+ websites, detect when company data is being
uploaded to unapproved cloud storage,
110
@@ -559,7 +561,7 @@ transcript: |
111
00:07:17.350 --> 00:07:22.030
- You can even isolate the entire website so
+ You can even isolate the entire website so
that users are protected from any dangerous
112
@@ -568,7 +570,7 @@ transcript: |
113
00:07:24.400 --> 00:07:28.750
- This video is part of a series which explains
+ This video is part of a series which explains
how to build your new corporate network using
114
@@ -577,7 +579,7 @@ transcript: |
115
00:07:30.370 --> 00:07:32.740
- Watch the other videos in this series to
+ Watch the other videos in this series to
learn more.
116
@@ -590,15 +592,15 @@ transcript: |
118
00:07:37.900 --> 00:07:41.680
- We also cover a wide variety of topics
+ We also cover a wide variety of topics
including application security,
119
00:07:41.680 --> 00:07:44.410
- corporate networking,
+ corporate networking,
and all the developer content the Internet
120
00:07:44.410 --> 00:07:46.960
- can hold. Follow us online and thanks for
- watching!
\ No newline at end of file
+ can hold. Follow us online and thanks for
+ watching!
diff --git a/src/content/stream/ssl-cipher-mismatch/index.yaml b/src/content/stream/ssl-cipher-mismatch/index.yaml
index 130df9eca3bd33a..6aaf3bf239714ec 100644
--- a/src/content/stream/ssl-cipher-mismatch/index.yaml
+++ b/src/content/stream/ssl-cipher-mismatch/index.yaml
@@ -5,5 +5,6 @@ title: Manage SSL version or cipher mismatch errors
description: In this video, learn how to manage an SSL version or cipher mismatch error.
products:
- ssl
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Cipher.png
diff --git a/src/content/stream/ssl-concepts/index.yaml b/src/content/stream/ssl-concepts/index.yaml
index 834ff68b0ad8d06..647fb86a9c0de16 100644
--- a/src/content/stream/ssl-concepts/index.yaml
+++ b/src/content/stream/ssl-concepts/index.yaml
@@ -5,5 +5,6 @@ title: SSL/TLS concepts
description: In this video, learn the key concepts relevant to Cloudflare SSL/TLS.
products:
- ssl
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Concepts.png
diff --git a/src/content/stream/strict-ssl-encryption/index.yaml b/src/content/stream/strict-ssl-encryption/index.yaml
index d6694185333e5c7..885bdb4e20c2a2d 100644
--- a/src/content/stream/strict-ssl-encryption/index.yaml
+++ b/src/content/stream/strict-ssl-encryption/index.yaml
@@ -5,5 +5,6 @@ title: Configure Strict encryption mode
description: In this video, learn how to configure your site to use Strict (SSL-Only Origin Pull) encryption mode.
products:
- ssl
+pcx_content_type: video
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Mermaid%20thumbnail_Strict.png
diff --git a/src/content/stream/warp-1-basics/index.yaml b/src/content/stream/warp-1-basics/index.yaml
index 932beaacb9f9c1e..9b6ab9cf79d1f70 100644
--- a/src/content/stream/warp-1-basics/index.yaml
+++ b/src/content/stream/warp-1-basics/index.yaml
@@ -3,18 +3,21 @@ id: 31178cc41d0ec56d42ef892160589635
url: warp-1-basics
title: WARP - Understand Cloudflare WARP basics
description: In this episode, we explain the core features of the Cloudflare WARP client and how to troubleshoot common issues. After watching, you will have an understanding of the GUI, the differences between the consumer and corporate WARP, device profiles, the various operating modes of WARP, split tunneling, and more.
-products:
- - warp, zero-trust
+pcx_content_type: video
+products:
+ - zero-trust-warp
+ - cloudflare-one
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Understand-Cloudflare-WARP-Basics%20thumbnail.png
-chapters: {
- "Introduction and WARP GUI Basics": "0s",
- "Consumer vs Corporate WARP": "57s",
- "Device Profiles Explained": "01m35s",
- "WARP Operating Modes": "02m12s",
- "Split Tunneling": "03m4s",
- "Conclusion": "04m56s"
-}
+chapters:
+ {
+ "Introduction and WARP GUI Basics": "0s",
+ "Consumer vs Corporate WARP": "57s",
+ "Device Profiles Explained": "01m35s",
+ "WARP Operating Modes": "02m12s",
+ "Split Tunneling": "03m4s",
+ "Conclusion": "04m56s",
+ }
transcript: |
WEBVTT
@@ -28,7 +31,7 @@ transcript: |
2
00:00:06.240 --> 00:00:10.200
- Welcome. In this video,
+ Welcome. In this video,
you'll learn the basics of Cloudflare WARP.
3
@@ -37,57 +40,57 @@ transcript: |
4
00:00:12.480 --> 00:00:17.240
- but this guide is all about empowering you to
+ but this guide is all about empowering you to
understand and solve issues faster on your
5
00:00:17.240 --> 00:00:22.120
- own. We will learn the Cloudflare WARP client
+ own. We will learn the Cloudflare WARP client
and how it differs from the consumer version
6
00:00:22.120 --> 00:00:27.240
- of WARP, also known as the app 1.1.1.1,
+ of WARP, also known as the app 1.1.1.1,
device profiles,
7
00:00:27.520 --> 00:00:32.800
- the different operating modes of WARP,
+ the different operating modes of WARP,
split tunneling exclude versus include modes,
8
00:00:32.960 --> 00:00:36.000
- and the WARP GUI and its intended versus
+ and the WARP GUI and its intended versus
actual state.
9
00:00:36.560 --> 00:00:40.360
- These are the basic concepts that will
+ These are the basic concepts that will
prepare you to troubleshoot any issues you
10
00:00:40.360 --> 00:00:44.640
- may encounter. Let's get started with What is
+ may encounter. Let's get started with What is
the Cloudflare WARP client?
11
00:00:45.040 --> 00:00:49.920
- Cloudflare WARP client allows you to protect
+ Cloudflare WARP client allows you to protect
corporate devices by securely and privately
12
00:00:49.920 --> 00:00:53.800
- sending traffic from those devices to
+ sending traffic from those devices to
Cloudflare's global network,
13
00:00:54.040 --> 00:00:57.120
- where Cloudflare Gateway can apply advanced
+ where Cloudflare Gateway can apply advanced
web filtering.
14
00:00:57.440 --> 00:01:00.800
- The consumer version of WARP,
+ The consumer version of WARP,
or the app 1.1.1.1,
15
@@ -96,22 +99,22 @@ transcript: |
16
00:01:03.140 --> 00:01:06.220
- The corporate version integrates with
+ The corporate version integrates with
Cloudflare Zero Trust,
17
00:01:06.380 --> 00:01:09.940
- giving your IT team the ability to manage
+ giving your IT team the ability to manage
security policies,
18
00:01:10.180 --> 00:01:12.940
- control traffic routing,
+ control traffic routing,
and monitor usage.
19
00:01:13.060 --> 00:01:16.100
- If you're not sure which version of WARP
+ If you're not sure which version of WARP
you're currently using,
20
@@ -120,22 +123,22 @@ transcript: |
21
00:01:19.020 --> 00:01:21.820
- The consumer version will display WARP in
+ The consumer version will display WARP in
red,
22
00:01:21.980 --> 00:01:25.220
- whereas the corporate version will display
+ whereas the corporate version will display
Zero Trust in blue.
23
00:01:25.740 --> 00:01:28.500
- If your intention is to use the corporate
+ If your intention is to use the corporate
version,
24
00:01:28.660 --> 00:01:32.900
- make sure you're seeing a blue Zero Trust
+ make sure you're seeing a blue Zero Trust
WARP banner by authenticating with your
25
@@ -148,72 +151,72 @@ transcript: |
27
00:01:37.940 --> 00:01:42.380
- A device profile represents a different set
+ A device profile represents a different set
of parameters assigned to your device,
28
00:01:42.380 --> 00:01:45.220
- based on its relationship with the policy
+ based on its relationship with the policy
attributes.
29
00:01:45.220 --> 00:01:49.540
- You can create multiple profiles and apply
+ You can create multiple profiles and apply
different settings based on your user's
30
00:01:49.540 --> 00:01:53.140
- identity, the device location,
+ identity, the device location,
and other criteria.
31
00:01:53.180 --> 00:01:57.140
- IT administrators can assign different device
+ IT administrators can assign different device
profiles to their users.
32
00:01:57.540 --> 00:02:01.220
- For example, depending on office locations,
+ For example, depending on office locations,
teams,
33
00:02:01.220 --> 00:02:05.100
- device types, operating systems,
+ device types, operating systems,
or other attributes,
34
00:02:05.310 --> 00:02:09.230
- users might have different routes that need
+ users might have different routes that need
to be excluded from their WARP Tunnel,
35
00:02:09.470 --> 00:02:13.070
- or different DNS settings to accommodate
+ or different DNS settings to accommodate
local development services.
36
00:02:16.070 --> 00:02:20.470
- All right, it's important to know that WARP
+ All right, it's important to know that WARP
client can operate in different modes,
37
00:02:20.470 --> 00:02:24.390
- because each mode controls the types of
+ because each mode controls the types of
traffic sent to Cloudflare Gateway
38
00:02:24.390 --> 00:02:29.430
- differently. The WARP mode determines which
+ differently. The WARP mode determines which
Zero Trust features are available on the
39
00:02:29.430 --> 00:02:33.590
- device. Selecting the right mode depends on
+ device. Selecting the right mode depends on
your organization's needs.
40
00:02:33.870 --> 00:02:39.520
- For example, for Internet security or remote
+ For example, for Internet security or remote
access gateway with WARP or Secure Web
41
@@ -222,7 +225,7 @@ transcript: |
42
00:02:42.910 --> 00:02:47.470
- and the latter should only be used in cases
+ and the latter should only be used in cases
where Cloudflare cannot control DNS
43
@@ -231,27 +234,27 @@ transcript: |
44
00:02:49.590 --> 00:02:53.550
- Both Gateway with DoH and Proxy Mode are used
+ Both Gateway with DoH and Proxy Mode are used
for Internet filtering.
45
00:02:54.150 --> 00:02:59.710
- Gateway with DoH is only DNS traffic,
+ Gateway with DoH is only DNS traffic,
while Proxy Mode is only HTTP traffic.
46
00:02:59.870 --> 00:03:05.150
- Lastly, Device Information Only mode would be
+ Lastly, Device Information Only mode would be
useful for clientless access or browser based
47
00:03:05.150 --> 00:03:09.530
- remote access to use device posture without
+ remote access to use device posture without
proxying traffic to Cloudflare.
48
00:03:09.570 --> 00:03:13.050
- If you encounter a problem,
+ If you encounter a problem,
understanding which mode you're in will help
49
@@ -260,32 +263,32 @@ transcript: |
50
00:03:15.210 --> 00:03:19.290
- And that's because WARP modes are
+ And that's because WARP modes are
combinations or absences of particular
51
00:03:19.290 --> 00:03:24.250
- features. For example,
+ features. For example,
Gateway with WARP includes both DNS and
52
00:03:24.250 --> 00:03:26.810
- Tunnel components. So when you're
+ Tunnel components. So when you're
troubleshooting,
53
00:03:26.810 --> 00:03:31.770
- you have to look at both the DNS and Tunnel
+ you have to look at both the DNS and Tunnel
components as opposed to Gateway with DoH
54
00:03:32.090 --> 00:03:34.890
- where you will only have to look at the DNS
+ where you will only have to look at the DNS
component.
55
00:03:35.170 --> 00:03:38.050
- But don't worry, you don't have to memorize
+ But don't worry, you don't have to memorize
all of this.
56
@@ -294,12 +297,12 @@ transcript: |
57
00:03:40.450 --> 00:03:45.730
- Next up, split tunneling,
+ Next up, split tunneling,
a feature that allows you to control what IP
58
00:03:45.770 --> 00:03:48.850
- traffic goes through the WARP virtual
+ traffic goes through the WARP virtual
interface or tunnel.
59
@@ -316,37 +319,37 @@ transcript: |
62
00:03:57.090 --> 00:04:01.330
- All traffic will be sent to Cloudflare
+ All traffic will be sent to Cloudflare
Gateway except for IPs and domains you
63
00:04:01.330 --> 00:04:05.970
- specify. The second mode is include IPs and
+ specify. The second mode is include IPs and
domains.
64
00:04:06.290 --> 00:04:11.300
- Only traffic destined to IPs or domains you
+ Only traffic destined to IPs or domains you
specify will be sent to Cloudflare Gateway.
65
00:04:11.780 --> 00:04:16.700
- All other traffic will bypass Gateway and
+ All other traffic will bypass Gateway and
will no longer be filtered by your network or
66
00:04:16.740 --> 00:04:22.340
- HTTP policies. Secure Web Gateway without DNS
+ HTTP policies. Secure Web Gateway without DNS
filtering and Device Information Only mode
67
00:04:22.340 --> 00:04:25.420
- will automatically disable domain based split
+ will automatically disable domain based split
tunneling.
68
00:04:25.420 --> 00:04:28.180
- So if you're experiencing issues related to
+ So if you're experiencing issues related to
domains,
69
@@ -355,40 +358,40 @@ transcript: |
70
00:04:30.340 --> 00:04:33.380
- And lastly, here's a common point of
+ And lastly, here's a common point of
confusion.
71
00:04:33.620 --> 00:04:36.940
- The toggle button in the WARP GUI shows the
+ The toggle button in the WARP GUI shows the
intended state,
72
00:04:36.980 --> 00:04:41.060
- not the actual state. For example,
+ not the actual state. For example,
if the toggle is on,
73
00:04:41.100 --> 00:04:46.140
- it means that the client intends to connect,
+ it means that the client intends to connect,
but the actual status may show disconnected
74
00:04:46.140 --> 00:04:51.100
- if there's an issue. So always check the
+ if there's an issue. So always check the
message below the toggle for the current
75
00:04:51.100 --> 00:04:55.900
- connection state. You now understand the
+ connection state. You now understand the
foundation of WARP client components.
76
00:04:55.900 --> 00:04:59.140
- If you want to learn more,
+ If you want to learn more,
we also have additional resources on
77
00:04:59.140 --> 00:05:02.380
- Cloudflare docs. Thanks for watching and see
- you soon!
\ No newline at end of file
+ Cloudflare docs. Thanks for watching and see
+ you soon!
diff --git a/src/content/stream/warp-2-diagonostic-logs/index.yaml b/src/content/stream/warp-2-diagonostic-logs/index.yaml
index e642ac967a12a81..43caee9329c3675 100644
--- a/src/content/stream/warp-2-diagonostic-logs/index.yaml
+++ b/src/content/stream/warp-2-diagonostic-logs/index.yaml
@@ -3,20 +3,23 @@ id: c29964ab3dcf7c3432ebb2b4e93c3aca
url: warp-2-diagnostic-logs
title: WARP - Understand Cloudflare WARP through diagnostic logs
description: In this more advanced episode, we explain how to use warp-diag files to identify and resolve connection issues with the WARP client. You will learn how to locate and interpret three key files - warp-status, warp-settings, and daemonlog. The video also provides troubleshooting tips, including specific keyword searches and guidance on how to cross-reference logs to identify a bigger picture of the problem.
+pcx_content_type: video
products:
- - warp, zero-trust
+ - zero-trust-warp
+ - cloudflare-one
thumbnail:
url: https://pub-d9bf66e086fb4b639107aa52105b49dd.r2.dev/Warp-diagnostics%20thumbnail.png
-chapters: {
- 00:00 Introduction": "0s",
- "What are warp-diag files?": "44s",
- "How to download and navigate warp-diag files": "01m16s",
- "warp-statustxt": "02m06s",
- "warp-settingstxt": "02m29s",
- "daemonlog": "03m37s",
- "Additonal tips": "08m07s",
- "Conclusion": "08m43s"
-}
+chapters:
+ {
+ 00:00 Introduction": "0s",
+ "What are warp-diag files?": "44s",
+ "How to download and navigate warp-diag files": "01m16s",
+ "warp-statustxt": "02m06s",
+ "warp-settingstxt": "02m29s",
+ "daemonlog": "03m37s",
+ "Additonal tips": "08m07s",
+ "Conclusion": "08m43s",
+ }
transcript: |
WEBVTT
@@ -30,22 +33,22 @@ transcript: |
2
00:00:09.440 --> 00:00:14.320
- Welcome. This is a WARP troubleshooting video
+ Welcome. This is a WARP troubleshooting video
where you'll learn how to interpret warp-diag
3
00:00:14.640 --> 00:00:19.600
- files. This is a more advanced episode,
+ files. This is a more advanced episode,
so if you come across any concepts you aren't
4
00:00:19.600 --> 00:00:24.560
- fully familiar with, we also have a WARP
+ fully familiar with, we also have a WARP
basics video that brings you up to speed.
5
00:00:24.680 --> 00:00:27.520
- And as always, our support team will be here
+ And as always, our support team will be here
to help.
6
@@ -58,12 +61,12 @@ transcript: |
8
00:00:31.640 --> 00:00:34.360
- How to download and navigate the warp-diag
+ How to download and navigate the warp-diag
files,
9
00:00:35.000 --> 00:00:39.920
- warp-status file, warp-settings file,
+ warp-status file, warp-settings file,
daemon.log file,
10
@@ -72,12 +75,12 @@ transcript: |
11
00:00:42.800 --> 00:00:50.680
- Let's get started. So what are warp-diag
+ Let's get started. So what are warp-diag
files?
12
00:00:51.040 --> 00:00:55.120
- They contain valuable information about the
+ They contain valuable information about the
device connection status,
13
@@ -86,17 +89,17 @@ transcript: |
14
00:00:57.880 --> 00:01:01.920
- These files are your first line of defense
+ These files are your first line of defense
when troubleshooting any issues.
15
00:01:02.830 --> 00:01:07.390
- Each of these files serves different purposes
+ Each of these files serves different purposes
and contains specific information,
16
00:01:07.390 --> 00:01:11.670
- such as combination of logs and outputs
+ such as combination of logs and outputs
created when warp-diag runs.
17
@@ -105,12 +108,12 @@ transcript: |
18
00:01:20.350 --> 00:01:24.270
- When WARP is installed,
+ When WARP is installed,
a command line tool called warp-diag is also
19
00:01:24.270 --> 00:01:30.270
- installed. Simply running the command
+ installed. Simply running the command
warp-diag in a terminal will generate a zip
20
@@ -119,32 +122,32 @@ transcript: |
21
00:01:33.270 --> 00:01:37.510
- Each time warp-diag is run,
+ Each time warp-diag is run,
a new set of logs will be generated,
22
00:01:37.510 --> 00:01:42.710
- and now we can start by unzipping the file
+ and now we can start by unzipping the file
produced by warp-diag and opening its content
23
00:01:42.710 --> 00:01:48.510
- in a text editor. I'm using VS Code here,
+ in a text editor. I'm using VS Code here,
but any other text editor will also work.
24
00:01:48.870 --> 00:01:53.190
- In this video, we'll only look at three
+ In this video, we'll only look at three
particularly useful ones for initial
25
00:01:53.190 --> 00:01:57.030
- troubleshooting: warp-status,
+ troubleshooting: warp-status,
warp-settings,
26
00:01:57.150 --> 00:02:02.190
- and daemon.log. So now I'll walk you through
+ and daemon.log. So now I'll walk you through
each of these files and tell you why they're
27
@@ -161,32 +164,32 @@ transcript: |
30
00:02:13.620 --> 00:02:17.100
- It contains the status of the client when
+ It contains the status of the client when
warp-diag was executed.
31
00:02:17.300 --> 00:02:21.780
- The connection status is useful to know when
+ The connection status is useful to know when
you're analyzing any files that are outputs
32
00:02:21.780 --> 00:02:25.340
- of common command line tools such as listing
+ of common command line tools such as listing
interfaces,
33
00:02:25.460 --> 00:02:28.620
- printing the routing table,
+ printing the routing table,
and current DNS configuration.
34
00:02:28.820 --> 00:02:31.020
- And that's it! On to warp-
+ And that's it! On to warp-
settings.
35
00:02:32.860 --> 00:02:37.660
- This file contains all of the currently
+ This file contains all of the currently
active settings configured for the device,
36
@@ -195,7 +198,7 @@ transcript: |
37
00:02:40.500 --> 00:02:45.020
- This file can help verify if the settings
+ This file can help verify if the settings
you're making in a dashboard are actually
38
@@ -204,32 +207,32 @@ transcript: |
39
00:02:46.860 --> 00:02:50.940
- We should always check this file to see if
+ We should always check this file to see if
there are any unexpected values.
40
00:02:51.420 --> 00:02:55.700
- For example, let's say the user you're
+ For example, let's say the user you're
troubleshooting for is expected to have a
41
00:02:55.700 --> 00:03:01.180
- specific device profile like office users,
+ specific device profile like office users,
meaning their devices should be connected to
42
00:03:01.220 --> 00:03:05.180
- a corporate network. First,
+ a corporate network. First,
confirm that warp -settings has the correct
43
00:03:05.180 --> 00:03:09.090
- profile ID. If the profile ID is not the
+ profile ID. If the profile ID is not the
expected value,
44
00:03:09.330 --> 00:03:13.210
- this might be an indication that the user
+ this might be an indication that the user
isn't matching the rules you've defined in
45
@@ -238,32 +241,32 @@ transcript: |
46
00:03:15.290 --> 00:03:19.770
- Also, if any specific changes have been made
+ Also, if any specific changes have been made
to the device profile settings,
47
00:03:19.770 --> 00:03:23.930
- you can use this file to ensure the user is
+ you can use this file to ensure the user is
receiving those updates.
48
00:03:23.970 --> 00:03:28.770
- For example, if you've updated a device
+ For example, if you've updated a device
profile to use the MASQUE tunneling type
49
00:03:28.770 --> 00:03:32.730
- instead of WireGuard,
+ instead of WireGuard,
you can verify that the user has received
50
00:03:32.730 --> 00:03:36.130
- that update and will indeed attempt to
+ that update and will indeed attempt to
connect via MASQUE.
51
00:03:40.850 --> 00:03:45.410
- Daemon.log is a fairly detailed file that
+ Daemon.log is a fairly detailed file that
contains everything going on in WARP,
52
@@ -272,12 +275,12 @@ transcript: |
53
00:03:47.370 --> 00:03:50.890
- But before we open the file,
+ But before we open the file,
what is the WARP daemon?
54
00:03:51.010 --> 00:03:54.490
- It's the background process of WARP,
+ It's the background process of WARP,
also known as service,
55
@@ -286,27 +289,27 @@ transcript: |
56
00:03:56.254 --> 00:03:59.546
- When WARP is installed,
+ When WARP is installed,
it's installed as both daemon,
57
00:03:59.546 --> 00:04:03.690
- the background process,
+ the background process,
and as a GUI, which is the interface you see
58
00:04:03.730 --> 00:04:09.680
- here. The GUI, warp-diag and warp-cli can all
+ here. The GUI, warp-diag and warp-cli can all
communicate with the Daemon.
59
00:04:10.360 --> 00:04:13.680
- There are multiple Daemon.log files and their
+ There are multiple Daemon.log files and their
name chronologically.
60
00:04:14.240 --> 00:04:18.640
- Daemon.log is the most recent,
+ Daemon.log is the most recent,
and daemon.3 .log is the oldest.
61
@@ -315,22 +318,22 @@ transcript: |
62
00:04:20.560 --> 00:04:24.600
- Line by line, we'll look at how daemon.log
+ Line by line, we'll look at how daemon.log
should look like when WARP connects as
63
00:04:24.600 --> 00:04:28.600
- expected. When WARP starts,
+ expected. When WARP starts,
it prints out its version information,
64
00:04:28.600 --> 00:04:33.760
- so we'll start there. Search for the string
+ so we'll start there. Search for the string
"warp _ service :
65
00:04:33.760 --> 00:04:37.200
- Version :" and look for the most recent
+ Version :" and look for the most recent
entry.
66
@@ -339,7 +342,7 @@ transcript: |
67
00:04:39.360 --> 00:04:43.680
- Our team is optimizing warp-diag constantly,
+ Our team is optimizing warp-diag constantly,
so the string we mentioned in this video
68
@@ -348,7 +351,7 @@ transcript: |
69
00:04:45.760 --> 00:04:50.360
- The registration contains all the necessary
+ The registration contains all the necessary
information to connect the WARP client,
70
@@ -357,47 +360,47 @@ transcript: |
71
00:04:53.520 --> 00:04:58.480
- If the GUI detects a missing registration,
+ If the GUI detects a missing registration,
it may attempt to obtain one if configured to
72
00:04:58.520 --> 00:05:02.680
- do so. Otherwise, it'll display missing
+ do so. Otherwise, it'll display missing
registration.
73
00:05:03.960 --> 00:05:07.400
- Once the registration is loaded,
+ Once the registration is loaded,
WARP will attempt to connect,
74
00:05:07.400 --> 00:05:10.000
- but only if configured to do so
+ but only if configured to do so
automatically.
75
00:05:10.560 --> 00:05:14.680
- Otherwise, it will only attempt to connect if
+ Otherwise, it will only attempt to connect if
it was previously connected.
76
00:05:15.360 --> 00:05:20.440
- After registration, WARP will then retrieve
+ After registration, WARP will then retrieve
the device profile remotely via an API.
77
00:05:21.040 --> 00:05:24.960
- This includes the device configurations and
+ This includes the device configurations and
mode that will be used.
78
00:05:26.000 --> 00:05:30.120
- It's very important to be aware that the
+ It's very important to be aware that the
device profile can be further influenced by a
79
00:05:30.120 --> 00:05:33.840
- local configuration file,
+ local configuration file,
which is used by an MDM provider,
80
@@ -406,7 +409,7 @@ transcript: |
81
00:05:36.120 --> 00:05:39.480
- For more information on Cloudflare MDM
+ For more information on Cloudflare MDM
configuration,
82
@@ -415,17 +418,17 @@ transcript: |
83
00:05:41.680 --> 00:05:45.280
- At this point, which components connect is
+ At this point, which components connect is
determined by the mode.
84
00:05:46.480 --> 00:05:51.640
- If the mode contains the Tunnel component,
+ If the mode contains the Tunnel component,
for example Secure web gateway without DNS
85
00:05:51.680 --> 00:05:58.080
- filtering, we'll see "Initiate WARP." if the
+ filtering, we'll see "Initiate WARP." if the
mode contains the DNS component like Gateway
86
@@ -434,7 +437,7 @@ transcript: |
87
00:06:01.640 --> 00:06:06.120
- If it contains both, like Gateway with WARP
+ If it contains both, like Gateway with WARP
will eventually see both.
88
@@ -443,7 +446,7 @@ transcript: |
89
00:06:10.000 --> 00:06:13.480
- Starting with initiate WARP for modes with
+ Starting with initiate WARP for modes with
the Tunnel component.
90
@@ -452,12 +455,12 @@ transcript: |
91
00:06:16.990 --> 00:06:21.550
- It starts off by allowing the tunnel endpoint
+ It starts off by allowing the tunnel endpoint
through the firewall and attempting to
92
00:06:21.550 --> 00:06:28.150
- connect it. When connecting the tunnel,
+ connect it. When connecting the tunnel,
WARP attempts to connect to both IPv4 and
93
@@ -466,7 +469,7 @@ transcript: |
94
00:06:30.350 --> 00:06:34.150
- This makes sure the end user will be
+ This makes sure the end user will be
connected as fast as possible,
95
@@ -475,27 +478,27 @@ transcript: |
96
00:06:37.430 --> 00:06:42.230
- Once connected, a network interface is
+ Once connected, a network interface is
created and it begins the task of updating
97
00:06:42.230 --> 00:06:46.710
- the routing table and the firewall according
+ the routing table and the firewall according
to the exclude or include split tunnel
98
00:06:46.710 --> 00:06:50.470
- entries. These entries can be either domains
+ entries. These entries can be either domains
or IPs.
99
00:06:50.910 --> 00:06:54.310
- WARP will update the routing table
+ WARP will update the routing table
immediately for any IPs,
100
00:06:54.310 --> 00:06:59.030
- but for domains, it will rely on a DNS
+ but for domains, it will rely on a DNS
resolution for these domains and will update
101
@@ -504,7 +507,7 @@ transcript: |
102
00:07:01.110 --> 00:07:05.030
- Once that's completed,
+ Once that's completed,
WARP performs two connectivity tests,
103
@@ -513,57 +516,57 @@ transcript: |
104
00:07:08.470 --> 00:07:12.710
- Moving on to initiate DNS and this is for
+ Moving on to initiate DNS and this is for
modes with DNS component.
105
00:07:13.270 --> 00:07:17.740
- For DNS, WARP will set itself as the default
+ For DNS, WARP will set itself as the default
DNS global provider,
106
00:07:17.740 --> 00:07:23.620
- and forward all DNS requests to Cloudflare
+ and forward all DNS requests to Cloudflare
via DNS over HTTPS or DoH.
107
00:07:24.340 --> 00:07:27.300
- And in order to do that,
+ And in order to do that,
the following sequence needs to complete
108
00:07:27.300 --> 00:07:31.820
- successfully. First, attempt to connect to
+ successfully. First, attempt to connect to
the DoH endpoint.
109
00:07:32.900 --> 00:07:36.900
- Second, receive a DNS response from that DoH
+ Second, receive a DNS response from that DoH
endpoint.
110
00:07:38.060 --> 00:07:43.740
- Third, bind to localhost on 127.0.2.2 and
+ Third, bind to localhost on 127.0.2.2 and
127.0.2.3.
111
00:07:44.860 --> 00:07:49.460
- Fourth, update the system to use these IP's
+ Fourth, update the system to use these IP's
as the DNS provider.
112
00:07:50.220 --> 00:07:54.540
- If all four steps happen without error,
+ If all four steps happen without error,
WARP then performs a series of DNS
113
00:07:54.540 --> 00:07:59.340
- connectivity checks. These are end to end
+ connectivity checks. These are end to end
tests which confirm that WARP is successfully
114
00:07:59.340 --> 00:08:03.780
- receiving DNS requests,
+ receiving DNS requests,
forwarding them to Cloudflare for resolution,
115
@@ -572,12 +575,12 @@ transcript: |
116
00:08:06.380 --> 00:08:09.140
- Here are some additional tips to make
+ Here are some additional tips to make
troubleshooting easier.
117
00:08:11.060 --> 00:08:15.340
- You should use the search function in your
+ You should use the search function in your
text editor to quickly locate terms like
118
@@ -586,7 +589,7 @@ transcript: |
119
00:08:18.530 --> 00:08:21.570
- Also look for patterns such as repeated
+ Also look for patterns such as repeated
entries.
120
@@ -595,52 +598,52 @@ transcript: |
121
00:08:24.450 --> 00:08:27.850
- And finally cross-referencing files from warp
+ And finally cross-referencing files from warp
-settings,
122
00:08:28.010 --> 00:08:31.930
- warp-s tatus and daemon.log can reveal
+ warp-s tatus and daemon.log can reveal
insights and a bigger picture.
123
00:08:32.690 --> 00:08:36.170
- For example, if warp -status shows
+ For example, if warp -status shows
disconnected,
124
00:08:36.410 --> 00:08:41.090
- check daemon.log for error details and warp
+ check daemon.log for error details and warp
-settings for potential misconfigurations.
125
00:08:45.930 --> 00:08:49.890
- There are other files that provide more
+ There are other files that provide more
specific information depending on your issue.
126
00:08:50.290 --> 00:08:55.050
- Our team is optimizing warp-diag constantly,
+ Our team is optimizing warp-diag constantly,
so you might find more files in the future.
127
00:08:55.410 --> 00:08:58.250
- For an updated view on what you can find in
+ For an updated view on what you can find in
which file,
128
00:08:58.370 --> 00:09:02.610
- check out our troubleshooting guide. You now
+ check out our troubleshooting guide. You now
understand the basics of warp-diag .
129
00:09:02.770 --> 00:09:05.850
- If you're still experiencing issues after
+ If you're still experiencing issues after
following these steps,
130
00:09:05.850 --> 00:09:08.250
- don't hesitate to reach out to our support
+ don't hesitate to reach out to our support
team.
131
@@ -649,4 +652,4 @@ transcript: |
132
00:09:09.930 --> 00:09:11.930
- Thanks for watching and see you soon.
\ No newline at end of file
+ Thanks for watching and see you soon.
diff --git a/src/pages/learning-paths.astro b/src/pages/learning-paths.astro
deleted file mode 100644
index 6b9543019fa21e1..000000000000000
--- a/src/pages/learning-paths.astro
+++ /dev/null
@@ -1,46 +0,0 @@
----
-import StarlightPage, {
- type StarlightPageProps,
-} from "@astrojs/starlight/components/StarlightPage.astro";
-import { getCollection } from "astro:content";
-import LearningPathCatalog from "~/components/LearningPathCatalog.tsx";
-
-// @ts-expect-error virtual module
-import iconCollection from "virtual:astro-icon";
-import { getIconData, iconToSVG } from "@iconify/utils";
-
-const props = {
- frontmatter: {
- title: "Learning paths",
- description:
- "Learning paths guide you through modules and projects so you can get started with Cloudflare as quickly as possible.",
- template: "splash",
- },
- hideBreadcrumbs: true,
-} as StarlightPageProps;
-
-const learningPaths = await getCollection("learning-paths");
-
-const data = learningPaths.map((lp) => lp.data);
-
-const iconToSvg = (id: string) => {
- const data = getIconData(iconCollection.local, id);
-
- if (!data) throw new Error(`Icon ${id} does not exist.`);
-
- return iconToSVG(data);
-};
-
-const icons = {
- "Core platform": iconToSvg("fundamentals"),
- "Application performance": iconToSvg("speed"),
- "Application security": iconToSvg("ddos-protection"),
- "Cloudflare One": iconToSvg("cloudflare-one"),
- "Developer platform": iconToSvg("workers"),
- "Network security": iconToSvg("magic-transit"),
-};
----
-
-
-
-
diff --git a/src/pages/resources/index.astro b/src/pages/resources/index.astro
new file mode 100644
index 000000000000000..0118f4804210691
--- /dev/null
+++ b/src/pages/resources/index.astro
@@ -0,0 +1,35 @@
+---
+import StarlightPage, {
+ type StarlightPageProps,
+} from "@astrojs/starlight/components/StarlightPage.astro";
+
+import { ResourcesBySelector } from "~/components";
+
+const props = {
+ frontmatter: {
+ title: "Resources",
+ template: "splash",
+ description:
+ "Explore our resources to learn more about Cloudflare products and services",
+ },
+ hideBreadcrumbs: true,
+} as StarlightPageProps;
+---
+
+
+
+
diff --git a/src/pages/videos/index.astro b/src/pages/videos/index.astro
index d8cb9130da81466..792c17b7143f4d8 100644
--- a/src/pages/videos/index.astro
+++ b/src/pages/videos/index.astro
@@ -15,5 +15,5 @@ const props = {
---
-
+
diff --git a/src/schemas/base.ts b/src/schemas/base.ts
index 6655bce2e1e0f4e..69672463e1a028f 100644
--- a/src/schemas/base.ts
+++ b/src/schemas/base.ts
@@ -1,5 +1,5 @@
import { z } from "astro:schema";
-import type { SchemaContext } from "astro:content";
+import { reference, type SchemaContext } from "astro:content";
import { sidebar, SidebarIconSchema } from "./types/sidebar";
@@ -89,11 +89,10 @@ export const baseSchema = ({ image }: SchemaContext) =>
"Required for the [`ProductReleaseNotes`](/style-guide/components/usage/#productreleasenotes) component.",
),
products: z
- .string()
- .array()
- .optional()
+ .array(reference("products"))
+ .default([])
.describe(
- "The names of related products, which show on some grids for Examples, [Tutorials](/style-guide/documentation-content-strategy/content-types/tutorial/), and [Reference Architectures](/style-guide/documentation-content-strategy/content-types/reference-architecture/)",
+ "The names of related products (according to their file name in `src/content/products`). Usually, these correspond to file paths, but not always, such as with `cloudflare-tunnel`",
),
summary: z
.string()
diff --git a/src/schemas/learning-paths.ts b/src/schemas/learning-paths.ts
index 555df50c2b4cd32..af1d3d5206cb565 100644
--- a/src/schemas/learning-paths.ts
+++ b/src/schemas/learning-paths.ts
@@ -1,4 +1,5 @@
import { z } from "astro:schema";
+import { reference } from "astro:content";
export const learningPathsSchema = z
.object({
@@ -7,8 +8,15 @@ export const learningPathsSchema = z
path: z.string(),
priority: z.number(),
description: z.string(),
- products: z.string().array(),
+ pcx_content_type: z.string().default("learning-path"),
+ products: z
+ .array(reference("products"))
+ .default([])
+ .describe(
+ "The names of related products (according to their file name in `src/content/products`). Usually, these correspond to file paths, but not always, such as with `cloudflare-tunnel`",
+ ),
product_group: z.string(),
+ tags: z.string().array().optional(),
additional_groups: z.string().array().optional(),
video: z.boolean().default(false),
})
diff --git a/src/schemas/stream.ts b/src/schemas/stream.ts
index 1738eff10a81c59..d23096fc8dab3a5 100644
--- a/src/schemas/stream.ts
+++ b/src/schemas/stream.ts
@@ -6,11 +6,17 @@ export const streamSchema = z.object({
url: z.string(),
title: z.string(),
description: z.string(),
- products: z.array(reference("products")),
+ products: z
+ .array(reference("products"))
+ .default([])
+ .describe(
+ "The names of related products (according to their file name in `src/content/products`). Usually, these correspond to file paths, but not always, such as with `cloudflare-tunnel`",
+ ),
transcript: z.string().optional(),
chapters: z.record(z.string(), z.string()).optional(),
tags: z.array(z.string()).optional(),
updated: z.date().optional(),
+ pcx_content_type: z.string().default("video"),
thumbnail: z
.object({
url: z.string(),
diff --git a/src/util/content-type.ts b/src/util/content-type.ts
new file mode 100644
index 000000000000000..1a3b9b03cfe0c92
--- /dev/null
+++ b/src/util/content-type.ts
@@ -0,0 +1,13 @@
+/**
+ * Formats a content type string by capitalizing the first letter and replacing hyphens with spaces
+ * @param contentType - The content type string to format
+ * @returns The formatted content type string
+ */
+export function formatContentType(contentType: string): string {
+ return contentType
+ ? (contentType.charAt(0).toUpperCase() + contentType.slice(1)).replaceAll(
+ "-",
+ " ",
+ )
+ : "";
+}