如需在观看者访问流式资源时强制执行双令牌身份验证,您可以配置单独的路由。路由是一种配置,它与媒体 CDN 的请求匹配,并将 HTTP 流量定向到源站。媒体 CDN 支持为 HTTP 实时流式传输 (HLS) 或基于 HTTP 的动态自适应流式传输 (DASH) 资源使用路由。如需详细了解媒体 CDN 中的路由,请参阅配置服务路由。
对于 HLS 流,媒体 CDN 支持通过 Cookie 和网址查询参数(不使用 Cookie)进行双令牌身份验证。对于 DASH 流,媒体 CDN 仅支持基于 Cookie 的双令牌身份验证。
本页面介绍了如何配置媒体 CDN 路由,以使用双令牌身份验证帮助保护内容。
准备工作
执行以下操作:
对于短时令牌,请选择以下签名算法之一:
- Ed25519 签名
- 基于对称密钥哈希的消息身份验证代码 (HMAC)
您只能为配置为生成新的长时令牌的路由启用对称 HMAC 签名算法。我们建议您仅在必要时使用 Ed25519 签名,以获得最佳的性能和安全性,并且仅在必要时使用对称密钥 HMAC,以便与其他 CDN 兼容。
在
EdgeCacheKeyset
资源中添加所需的键。必须使用
EdgeCacheKeyset
资源中的密钥对令牌进行签名或验证。密钥集必须包含所选签名算法的正确密钥。下表介绍了每种签名算法及其所需的密钥。签名算法 密钥集中的必需密钥 Ed25519 公钥 HMAC-SHA1 验证共享密钥 HMAC-SHA256 验证共享密钥 最佳做法是创建两个单独的密钥集,一个用于短时令牌,另一个用于长时令牌。
但是,如果您使用 DASH 和动态媒体呈现说明 (MPD) 文件,则必须对长时令牌和短时令牌使用相同的密钥集。
对于长时令牌,请选择以下一种令牌格式:
- Cookie
- 网址查询参数
设置短时令牌
根据您要使用的签名算法,可使用以下选项之一设置短时令牌。
Ed25519 签名
生成私钥:
openssl genpkey -algorithm ed25519 -outform PEM -out SSL_KEY_NAME.private.key
将
SSL_KEY_NAME
替换为密钥名称。根据私钥生成公钥:
openssl pkey -outform DER -pubout -in SSL_KEY_NAME.private.key |\ tail -c +13 |\ python3 -c "import base64, sys; print(('%s' % base64.urlsafe_b64encode(sys.stdin.buffer.read()))[2:-1])"
创建一个具有单个公钥的新密钥集:
控制台
在 Google Cloud 控制台中,前往媒体 CDN 页面。
点击密钥集标签页。
点击
Create keyset。对于名称,请输入唯一的密钥集名称。
可选:在说明部分,输入密钥集的说明。
可选:点击添加标签,然后为您的密钥集输入一个或多个键值对。
点击 Add public key,然后执行以下操作:
- 对于 ID,请输入字母数字 ID。
- 选择输入值,然后指定 Ed25519 公钥的 base64 编码值。
点击创建密钥集。
gcloud
使用
gcloud edge-cache keysets create
命令。gcloud edge-cache keysets create SHORT_KEYSET_NAME \ --public-key='id=SSL_PUBLIC_KEY_NAME,value=SSL_PUBLIC_KEY_VALUE'
请替换以下内容:
SHORT_KEYSET_NAME
:唯一的密钥集名称,例如prod-vod-keyset
SSL_PUBLIC_KEY_NAME
:您的 SSL 公钥的名称SSL_PUBLIC_KEY_VALUE
:SSL 公钥的值
如需查看与密钥集关联的密钥,请使用
gcloud edge-cache keysets describe
命令。gcloud edge-cache keysets describe prod-vod-keyset
输出类似于以下内容:
name: prod-vod-keyset description: "Keyset for prod.example.com" publicKeys: - id: "key-20200918" value: "DThVLjhAKm3VYOvLBAwFZ5XbjVyF98Ias8NZU0WEM9w" - id: "key-20200808" value: "Lw7LDSaDUrbDdqpPA6JEmMF5BA5GPtd7sAjvsnh7uDA="
Terraform
对称密钥 HMAC
如果您之前未使用过 Secret Manager,请配置 Secret Manager。
以二进制格式添加 Secret 版本。
将 Secret Manager Access 角色 (
roles/secretmanager.secretAccessor
) 授予媒体 CDN 服务帐号:控制台
在 Google Cloud 控制台中,转到 Secret Manager 页面。
选中密钥名称旁边的复选框。
点击显示信息面板。
在信息面板中,点击添加主账号。
在新的主帐号部分,按以下格式输入媒体 CDN 服务帐号:
service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com
将
PROJECT_NUMBER
替换为您的项目编号。在选择角色部分,选择 Secret Manager,然后选择 Secret Manager Secret Accessor。
gcloud
使用
gcloud secrets add-iam-policy-binding
命令。gcloud secrets add-iam-policy-binding projects/PROJECT_NUMBER/secrets/SECRET_ID \ --member="serviceAccount:service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com" \ --role="roles/secretmanager.secretAccessor"
请替换以下内容:
PROJECT_NUMBER
:您的项目编号SECRET_ID
:密钥的 ID
访问您的 Secret 版本并复制 Secret 路径,包括版本号。
使用验证共享密钥中的共享密钥创建新密钥集:
控制台
在 Google Cloud 控制台中,前往媒体 CDN 页面。
点击密钥集标签页。
点击
Create keyset。对于名称,请输入唯一的密钥集名称。
可选:在说明部分,输入密钥集的说明。
可选:点击添加标签,然后为您的密钥集输入一个或多个键值对。
如需指定验证共享密钥,请点击添加验证共享密钥,然后执行以下操作:
对于 Secret,从列表中选择一个密钥,通过指定其资源 ID 手动输入密钥,或者创建新的密钥,然后选择该密钥。
在 Secret 版本部分,从列表中选择一个版本或创建新的 Secret 版本,然后选择该版本。
点击创建密钥集。
gcloud
使用
gcloud edge-cache keysets create
命令。gcloud edge-cache keysets create SHORT_KEYSET_NAME \ --validation-shared-key='secret_version=projects/PROJECT_NUMBER/secrets/SECRET_ID/versions/KEY_VERSION'
请替换以下内容:
SHORT_KEYSET_NAME
:密钥集的唯一名称,例如prod-vod-keyset
PROJECT_NUMBER
:您的项目 IDSECRET_ID
:密钥的资源 IDKEY_VERSION
:您要使用的密钥版本
设置长时令牌
Google 管理的密钥根据密钥集划分范围。这意味着两个不同的密钥集具有不同的 Google 管理的密钥。Google 管理的密钥会定期轮替。
您可以使用以下选项之一设置长时令牌:
控制台
在密钥部分中,选择使用 Google 管理的密钥进行双令牌身份验证。
gcloud 和 YAML
使用以下任一选项:
创建 Google 管理的签名密钥:
gcloud edge-cache keysets create LONG_KEYSET_NAME \ --public-key='id=google-managed-key,managed=true'
将
LONG_KEYSET_NAME
替换为键名称,例如prod-vod-keyset-long
。修改现有密钥集:
将密钥集导出到 YAML 文件。使用
gcloud edge-cache keysets export
命令。gcloud edge-cache keysets export LONG_KEYSET_NAME \ --destination=prod-vod-keyset-long.yaml
在文本编辑器或配置管理工具中,修改密钥集配置,使其如下所示:
name: projects/my-project/locations/global/edgeCacheKeysets/LONG_KEYSET_NAME publicKeys: - id: some-key value: MC4CAQAwBQYDK2VwBCIEINV2iYugIWBuvGBJUQ_Ab69E4v4zcVqvgYHw-iZxGzcd - id: google-managed-key managed: true
导入修改后的密钥集。使用
gcloud edge-cache keysets import
命令:gcloud edge-cache keysets import LONG_KEYSET_NAME \ --source=prod-vod-keyset-long.yaml
您可以在长时令牌密钥集中添加其他公钥。该密钥集最多只能有三个公钥。实际上,这意味着密钥集可以有两个用户管理的密钥和一个 Google 管理的密钥。
媒体 CDN 始终使用 Google 管理的密钥生成令牌。用户管理的密钥只能用于验证。
通过添加其他公钥,您的播放器应用可以使用由您自己的私钥生成的签名请求来访问媒体播放列表和媒体片段。
配置令牌交换
本部分介绍如何通过创建多个路由来配置令牌交换。借助路由,您可以根据内容类型、客户端属性和新鲜度要求优化行为。在以下示例中,我们使用路由来为媒体请求的每个部分配置令牌交换。
将主清单路由配置为需要短时令牌
将媒体 CDN 配置为要求主清单路由上有短时令牌。
控制台
在主清单路由上启用短时令牌身份验证:
在 Google Cloud 控制台中,前往媒体 CDN 页面。
如需打开某项服务的详细信息页面,请点击相应服务名称。
如需切换到修改模式,请点击修改按钮。
如需转到路由部分,请点击下一步。
展开要添加主要清单路由规则的主机规则。
点击添加路由规则。
或者,如需修改路由规则,请点击相应行上的
修改。在修改路由规则窗格的优先级中,设置一个值,例如
1
。在说明部分,提供简要说明以帮助在规则列表中识别规则。
在匹配部分中,点击添加匹配条件。然后,执行以下操作:
- 对于匹配类型,选择路径模板匹配。
- 对于路径匹配,请指定 HLS 主播放列表 (M3U8) 或 DASH 清单 (MPD) 文件的名称或路径模板。如需了解详情,请参阅路径匹配。
点击高级配置。
在路由操作部分,点击添加一项。
对于类型,选择 CDN 政策。
在签名请求部分的签名请求模式中,选择需要令牌。
在签名请求密钥集部分中,执行以下操作:
如需为短时令牌指定密钥集,请点击选择密钥集,然后选择您的短时令牌密钥集。
或者,如需创建包含所需密钥的新密钥集,请点击创建新密钥集。然后选择所需项目。
对于签名算法,选择 Ed25519 using public keys。
对于令牌查询参数,请保留默认值
edge-cache-token
。或者,如果您计划使用 HLS 清单网址查询参数(而不是 Cookie)进行身份验证,请指定用于存储请求令牌的参数。
对于最长存留时间,请指定传入请求令牌的最长有效期(以秒为单位)。
若要保存路由操作部分中的更改,请点击完成。
如需保存路由规则中的更改,请点击保存。
gcloud 和 YAML
将媒体 CDN 配置导出为 YAML 文件。使用
gcloud edge-cache services export
命令。gcloud edge-cache services export SERVICE_NAME \ --destination=FILENAME.yaml
请替换以下内容:
SERVICE_NAME
:服务的名称FILENAME
:YAML 文件的名称
如需在主要清单路由规则中启用短期令牌身份验证,请在 YAML 文件的路由的
cdnPolicy
部分中指定signedTokensOptions
配置。pathMatchers: - name: "ROUTE_NAME" routeRules: - priority: 1 description: "ROUTE_DESCRIPTION" origin: "ORIGIN_NAME" matchRules: - pathTemplateMatch: "/MANIFEST_OR_PLAYLIST" routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC signedRequestMode: REQUIRE_TOKENS signedRequestKeyset: SHORT_KEYSET_NAME signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME signedTokenOptions: tokenQueryParameter: SHORT_TOKEN_NAME
请替换以下内容:
ROUTE_NAME
:路由规则的名称ROUTE_DESCRIPTION
:路由规则的说明ORIGIN_NAME
:来源名称MANIFEST_OR_PLAYLIST
:HLS 主播放列表 (M3U8) 或 DASH 清单 (MPD) 文件的名称。如需了解详情,请参阅路径匹配。SHORT_KEYSET_NAME
:用于短时令牌的密钥集名称SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
:签名请求的到期时间,例如600s
。如需了解详情,请参阅signedRequestMaximumExpirationTtl
。- 可选:
SHORT_TOKEN_NAME
:要在其中查找短令牌的查询参数。默认值为edge-cache-token
。如需了解详情,请参阅SignedTokenOptions
。
使用对称密钥 HMAC 时,在
signedTokenOptions
部分,将allowedSignatureAlgorithms
的值作为HMAC_SHA_256
附加:allowedSignatureAlgorithms: - HMAC_SHA_256
如需更新该服务,请从 YAML 文件导入您的媒体 CDN 配置。使用
gcloud edge-cache services import
命令。gcloud edge-cache services import SERVICE_NAME \ --source=FILENAME.yaml
到此,启用单令牌身份验证的流程就完成了。
如需配置双令牌身份验证,请继续阅读以下部分。
配置主要清单路由规则以生成长时令牌
配置媒体 CDN 以在主清单路由上生成长时令牌。选择 Cookie 或网址查询参数来生成这些令牌。
控制台
修改主要清单路由规则,以便媒体 CDN 可以在路由上生成长时令牌:
- 在修改路由规则页面上,点击高级配置。
- 对于类型,选择 CDN 政策。
- 展开双令牌身份验证。
- 在签名操作部分,选择生成新的长时令牌。
对于签名类型,请选择以下选项之一:
- 通过 Cookie(适用于 HLS 和 DASH 流式传输):将媒体 CDN 配置为返回包含主要清单响应的
Edge-Cache-Cookie
。 - 通过 HLS 清单网址查询参数(不使用 Cookie):配置媒体 CDN,以通过向每个网址附加长效令牌来操控 HLS 主清单。
- 通过 Cookie(适用于 HLS 和 DASH 流式传输):将媒体 CDN 配置为返回包含主要清单响应的
在生成新的长时令牌部分中,执行以下操作:
如需为长时令牌指定密钥集,请点击选择密钥集,然后选择长时令牌密钥集。
或者,点击创建新密钥集,创建一个具有所需密钥的新密钥集。然后选择所需项目。
对于令牌 TTL,请指定长时令牌的最长有效期(以秒为单位)。
对于签名类型,如果您选择了 via cookies 选项,然后在复制的参数部分中,选择您希望媒体 CDN 从短时令牌复制到长时令牌的参数。如需使用双令牌身份验证,您必须选择
PathGlobs
(或其别名,acl
或paths
)或URLPrefix
。如果您选择了通过 HLS 清单网址查询参数选项,对于令牌查询参数,请保留默认值
edge-cache-token
。
若要保存路由操作部分中的更改,请点击完成。
如需保存路由规则中的更改,请点击保存。
系统会显示一条消息,询问您是希望自动还是手动为媒体播放列表和片段创建路由。如果您选择自动选项,系统会为 Cookie 签名创建单个新路由,并为无 Cookie 签名创建两个路由。如果您选择手动选项,请继续下一部分。
gcloud 和 YAML
修改主要清单路由规则的 addSignatures
部分,以便媒体 CDN 可以在路由上生成长时令牌:
饼干
addSignatures:
actions:
- GENERATE_COOKIE
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
copiedParameters:
- PathGlobs
- SessionID
请替换以下内容:
LONG_KEYSET_NAME
:长时令牌密钥集的名称TOKEN_EXPIRATION_TIME
:长时令牌的到期时间,例如,86400s
表示一天的到期时间
此代码示例实现了以下更改:
addSignatures.actions: GENERATE_COOKIE
:将媒体 CDN 配置为返回包含主要清单响应的Edge-Cache-Cookie
copiedParameters.PathGlobs
:配置媒体 CDN 以将PathGlobs
从短时令牌复制到长时令牌。如需使用双令牌身份验证,您必须使用copiedParameters.PathGlobs
或copiedParameters.URLPrefix
。如需了解详情,请参阅copiedParameters
。可选:
copiedParameters.SessionID
:配置媒体 CDN 以将SessionID
从短时令牌复制到长时令牌
应用 GENERATE_COOKIE
操作后,媒体 CDN 会返回一个类似于以下内容的 Set-Cookie
标头,其中包含主清单响应:
Set-Cookie: Edge-Cache-Cookie=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE
网址查询参数
addSignatures:
actions:
- GENERATE_TOKEN_HLS_COOKIELESS
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
copiedParameters:
- PathGlobs
- SessionID
tokenQueryParameter: LONG_TOKEN_NAME
请替换以下内容:
LONG_KEYSET_NAME
:长时密钥集的名称TOKEN_EXPIRATION_TIME
:长时令牌的到期时间,例如,86400s
表示有效期为一天
此代码示例实现了以下更改:
addSignatures.actions: GENERATE_TOKEN_HLS_COOKIELESS
:将媒体 CDN 配置为通过向存在的每个 URI 附加一个长效令牌来操控 HLS 主清单。copiedParameters.PathGlobs
:配置媒体 CDN 以将PathGlobs
从短时令牌复制到长时令牌。如需使用双令牌身份验证,您必须使用copiedParameters.PathGlobs
或copiedParameters.URLPrefix
之一。如需了解详情,请参阅copiedParameters
。可选:
copiedParameters.SessionID
:配置媒体 CDN 以将SessionID
从短时令牌复制到长时令牌。可选:
LONG_TOKEN_NAME
:用于输入生成的长令牌的查询参数。默认值为edge-cache-token
。如需了解详情,请参阅tokenQueryParameter
。
以下清单文件显示了所应用的 GENERATE_TOKEN_HLS_COOKIELESS
操作:
#EXTM3U #EXT-X-STREAM-INF:BANDWIDTH=1280000,AVERAGE-BANDWIDTH=1000000 http://example.com/HLS_PRIMARY_PLAYLIST.m3u8?LONG_TOKEN_NAME=PathGlobs=PATHS~SessionID=SESSION_ID~Expires=EXPIRATION~_GO=Generated~Signature=SIGNATURE
媒体 CDN 验证短时令牌,然后生成长时令牌并将其存储在 LONG_TOKEN_NAME
查询参数中。
将媒体播放列表和片段路由配置为需要长时令牌
将媒体播放列表和片段路由配置为需要长时令牌。
控制台
Cookie
为媒体播放列表和片段路由创建路由规则:
- 在修改边缘缓存服务页面的路由部分,点击具有主要清单路由的主机规则。
- 点击添加路由规则。
- 在修改路由规则窗格中的优先级中,设置一个大于主清单路由的值,例如
2
。值越高,表示优先级越低。 - 在说明部分,提供简要说明以帮助在规则列表中识别规则。
按照建议设置以下字段:
- 选择来源:与主要清单路由规则相同
- 添加匹配条件:与主要清单路由规则相同
- Type(类型):CDN policy(CDN 政策)
- 签名请求模式:需要令牌
- 选择密钥集:与选择长时令牌的方法相同
- 签名算法:与主要清单路由规则相同
展开双令牌身份验证。
对于签名操作,请保留默认值 None。
点击完成,然后点击保存。
网址查询参数
为媒体播放列表创建路由规则。
- 在修改边缘缓存服务页面的路由部分,点击具有主要清单路由的主机规则。
- 点击添加路由规则。
- 在修改路由规则窗格中的优先级中,设置一个大于主清单路由的值,例如
2
。值越高,表示优先级越低。 - 在说明部分,提供简要说明以帮助在规则列表中识别规则。
按照建议设置以下字段:
- 选择来源:与主要清单路由规则相同
- 添加匹配条件:与主要清单路由规则相同
- Type(类型):CDN policy(CDN 政策)
- 签名请求模式:需要令牌
- 选择密钥集:与选择长时令牌的方法相同
- 签名算法:与主要清单路由规则相同
- 令牌查询参数:与长时令牌相同
展开双令牌身份验证。
在签名操作部分,选择传播现有的长时令牌。
仅当媒体 CDN 使用通过 HLS 清单网址查询参数(不使用 Cookie)签名类型验证生成长时令牌后,此选项才会启用。
对于令牌查询参数,请保留默认值
edge-cache-token
。点击完成,然后点击保存。
为媒体段创建路由规则。
此路由与媒体播放列表路由类似,但主要区别如下:
- 对于优先级,请设置一个大于媒体播放列表路由规则的值(例如
3
)。 - 在说明部分,提供简要说明以帮助在规则列表中识别规则。
- 在双令牌身份验证部分的签名操作中,保留默认值 None。
- 对于优先级,请设置一个大于媒体播放列表路由规则的值(例如
gcloud 和 YAML
修改 YAML 文件:
Cookie
将媒体播放列表和媒体片段配置为要求使用长效 Cookie:
- priority: 2
description: "SEGMENTS_ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/**.m3u8" # HLS media playlists
- pathTemplateMatch: "/**.ts" # HLS segments
- pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
将 SEGMENTS_ROUTE_DESCRIPTION 替换为路由的说明。
此代码示例实现了以下更改:
priority: 2
:路由的优先级。值越高,表示优先级越低。由于媒体播放列表和媒体片段的路由与以.m3u8
结尾的任何文件名匹配,因此路由的优先级必须低于您之前为主要清单创建的路由。signedRequestMode: REQUIRE_TOKENS
:为媒体播放列表和媒体片段强制执行令牌。如果您使用的是静态媒体呈现说明 (MPD) 文件,则长密钥集和短密钥集可能会有所不同。如果您使用的是动态 MPD 文件,则长密钥集和短密钥集必须相同。signedRequestKeyset: LONG_KEYSET_NAME
:媒体 CDN 使用长时密钥集验证用户代理为媒体播放列表和媒体片段请求提供的长时 Cookie。
网址查询参数
添加两项路由配置:
配置 HLS 媒体清单路由以传播长时令牌:
- priority: 2 description: "PLAYLIST_ROUTE_DESCRIPTION" origin: "ORIGIN_NAME" matchRules: - pathTemplateMatch: "/**.m3u8" # HLS media playlists routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC signedRequestMode: REQUIRE_TOKENS signedRequestKeyset: LONG_KEYSET_NAME addSignatures: actions: - PROPAGATE_TOKEN_HLS_COOKIELESS
将 PLAYLIST_ROUTE_DESCRIPTION 替换为路由的说明。
此代码示例实现了以下更改:
priority: 2
:路由的优先级。值越高,表示优先级越低。由于媒体播放列表的路由与以.m3u8
结尾的任何文件名匹配,因此路由的优先级必须低于您之前为主要清单创建的路由。signedRequestMode: REQUIRE_TOKENS
:为媒体播放列表和媒体片段强制执行令牌。如果您使用的是静态媒体呈现说明 (MPD) 文件,则长密钥集和短密钥集可能会有所不同。如果您使用的是动态 MPD 文件,则长密钥集和短密钥集必须相同。signedRequestKeyset: LONG_KEYSET_NAME
:媒体 CDN 使用长时密钥集验证用户代理为媒体播放列表和媒体片段请求提供的长时 Cookie。addSignatures.actions: PROPAGATE_TOKEN_HLS_COOKIELESS
:配置媒体 CDN 以将长时令牌复制到媒体播放列表中的媒体片段 URI。
将分段路由配置为需要长时令牌:
- priority: 3 description: "SEGMENTS_ROUTE_DESCRIPTION" origin: "ORIGIN_NAME" matchRules: - pathTemplateMatch: "/**.ts" # HLS segments routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC signedRequestMode: REQUIRE_TOKENS signedRequestKeyset: LONG_KEYSET_NAME
将 SEGMENTS_ROUTE_DESCRIPTION 替换为路由的说明。
此代码示例实现了以下更改:
priority: 3
:路由的优先级。值越高,表示优先级越低。此路由的优先级必须低于您之前为媒体播放列表创建的路由。signedRequestMode: REQUIRE_TOKENS
:为媒体播放列表和媒体片段强制执行令牌。signedRequestKeyset: LONG_KEYSET_NAME
:媒体 CDN 使用长时密钥集来验证用户代理为媒体播放列表和媒体片段请求提供的长时签名令牌。
示例配置文件
以下代码示例展示了已完成的配置文件:
饼干
name: SERVICE_NAME
routing:
hostRules:
- hosts:
- DOMAIN_NAME
pathMatcher: routes
pathMatchers:
- name: "ROUTE_NAME"
routeRules:
- priority: 1
description: "ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/HLS_MASTER_PLAYLIST.m3u8" # HLS primary playlists
- pathTemplateMatch: "/DASH_MANIFESTS.mpd" # DASH manifests
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: SHORT_KEYSET_NAME
signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
addSignatures:
actions:
- GENERATE_COOKIE
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
copiedParameters:
- PathGlobs
- SessionID
- priority: 2
description: "SEGMENTS_ROUTE_DESCRIPTION"
origin: "ORIGN_NAME"
matchRules:
- pathTemplateMatch: "/**.m3u8" # HLS media playlists
- pathTemplateMatch: "/**.ts" # HLS segments
- pathTemplateMatch: "/**.m4s" # DASH / CMAF segments
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
网址查询参数
name: SERVICE_NAME
routing:
hostRules:
- hosts:
- DOMAIN_NAME
pathMatcher: routes
pathMatchers:
- name: "ROUTE_NAME"
routeRules:
- priority: 1
description: "ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/HLS_PRIMARY_PLAYLIST.m3u8" # HLS primary playlists
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: SHORT_KEYSET_NAME
signedRequestMaximumExpirationTtl: SIGNED_REQUEST_MAXIMUM_EXPIRATION_TIME
signedTokenOptions:
tokenQueryParameter: SHORT_TOKEN_NAME
addSignatures:
actions:
- GENERATE_TOKEN_HLS_COOKIELESS
keyset: LONG_KEYSET_NAME
tokenTtl: TOKEN_EXPIRATION_TIME
tokenQueryParameter: LONG_TOKEN_NAME
copiedParameters:
- PathGlobs
- SessionID
- priority: 2
description: "PLAYLIST_ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/**.m3u8" # HLS media playlists
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
addSignatures:
actions:
- PROPAGATE_TOKEN_HLS_COOKIELESS
- priority: 3
description: "SEGMENTS_ROUTE_DESCRIPTION"
origin: "ORIGIN_NAME"
matchRules:
- pathTemplateMatch: "/**.ts" # HLS segments
routeAction:
cdnPolicy:
cacheMode: CACHE_ALL_STATIC
signedRequestMode: REQUIRE_TOKENS
signedRequestKeyset: LONG_KEYSET_NAME
在应用服务器上生成短时令牌
如需了解如何生成令牌,请参阅生成令牌。
应用深度防御内容保护
最佳实践是按照如下方式启用源站身份验证:
对于 Cloud Storage,请将 Identity and Access Management 权限与专用 Cloud Storage 存储分区搭配使用。
对于与 AWS 兼容的存储空间服务,请使用 AWS Signature Version 4。 使用源站身份验证会屏蔽试图规避媒体 CDN 并直接访问您的源站的请求。