如需创建签名请求,请编写一个字符串,其中包含 请说明您要保护的内容以及 有符号值。然后,在请求中包含组合的字符串。 然后,媒体 CDN 会先验证您的签名请求是否有效,然后再 并对其执行操作。
签名请求要求
签名请求必须满足以下要求:
具有
GET
、HEAD
或OPTIONS
HTTP 方法。不支持其他方法。将到期时间设置为将来的时间。受时钟延迟的影响 同步差异以及客户端网络条件(针对 例如断开连接和重试),我们建议您将时间戳设置为 未来一分钟以内,或不小于 视频流(以较大者为准)。
具有可通过
EdgeCacheKeyset
中的密钥或 Secret 进行验证的签名。
您无法对其他 HTTP 方法(例如 POST
、PUT
或 DELETE
请求)进行签名。
如果您需要为面向用户的上传内容发布签名网址,请参阅
关于签名网址的 Cloud Storage 文档。
安全注意事项
媒体 CDN 会验证与配置
第 cdnPolicy.signedRequestMode
个,共 REQUIRE_SIGNATURES
个或REQUIRE_TOKENS
。
下表介绍了媒体 CDN 验证的场景 请求:
请求具有签名 | 签名有效吗? | signedRequestMode | 行为 | 响应代码 |
---|---|---|---|---|
否 | 不适用 | REQUIRE_SIGNATURES 或 REQUIRE_TOKENS |
没有签名或令牌的请求将按照 无效。 | HTTP 403 |
是 | 否 | REQUIRE_SIGNATURES 或 REQUIRE_TOKENS |
如果签名或令牌已过期,或者网址不匹配或密钥不正确,则会被视为无效。无效的签名或令牌会在 CDN 边缘遭拒。 | HTTP 403 |
是 | 是 | REQUIRE_SIGNATURES 或 REQUIRE_TOKENS |
验证签名或令牌以及包含来自 缓存或从源提取。 | HTTP 200 |
是 | 是 | 无或 DISABLED |
不执行验证,而是向用户提供响应 。 | HTTP 200 |
是 | 否 | 无或 DISABLED |
系统不会执行任何验证,而是直接向用户提供响应。 | HTTP 200 |
当您的应用检测到无效签名时,请确保其使用 HTTP 403 (Forbidden)
响应代码来作出响应。HTTP 403
响应代码不可缓存。
配置签名请求
以下部分将详细介绍如何配置、签名和验证已签名请求。
生成密钥
创建媒体 CDN 用于签名的密钥 请求。
创建密钥集
创建媒体 CDN 使用的密钥集 签名请求。
要求使用已签名请求
要仅允许经过签名的请求访问资源,您可以在
键列表添加到路由,并将 signedRequestMode
设置为以下其中一项:
REQUIRE_SIGNATURES
(适用于不使用令牌的已签名请求)。REQUIRE_TOKENS
(适用于使用令牌的签名请求)。
在路由上启用签名请求会强制对所有请求进行签名或 提供词元。没有有效签名(例如无效密钥)的请求 签名或令牌过期、签名不匹配等),都会失败。
EdgeCacheKeyset
可以包含多个键,以允许使用键
轮替。系统会接受使用所列任何密钥签名的有效请求,并按顺序尝试密钥。如需详细了解密钥轮替,请参阅轮替
Secret。
当 signedRequestMode
设置为 REQUIRE_SIGNATURES
或 REQUIRE_TOKENS
时,媒体 CDN 会验证缓存命中和缓存未命中情况。这包括对来源的所有请求。
下面是一个媒体 CDN 配置示例 对给定 PathMatcher(路由)强制执行签名请求:
gcloud edge-cache services describe prod-media-service
... routeAction: cdnPolicy: cacheMode: CACHE_ALL_STATIC signedRequestMode: REQUIRE_SIGNATURES signedRequestKeyset: prod-vod-keyset
如需了解如何为已签名请求创建令牌,请参阅生成令牌。
如需停用请求签名,您可以将 signedRequestMode
设置为 DISABLED
并删除对 signedRequestKeyset
的引用。
在源头验证请求
将路由配置为签名模式 REQUIRE_SIGNATURES
时,媒体 CDN 会验证每个匹配请求是否具有有效的签名。对于这些路线,缺少签名会被视为签名无效。
为防止签名配置错误以及用户尝试直接访问您的源,我们建议您还要验证请求是否在源端签名。深度防御 内容保护方法有助于防止未经授权的访问和下载 你的许可内容和付费内容
对于基于网址的签名方法(签名是查询参数的一部分或嵌入为网址路径组件),系统会在将请求发送到来源之前从网址中移除签名和相关参数。这样可防止签名在
源正在处理请求。如需验证这些请求,您可以检查 x-client-request-url
请求标头,其中包含移除已签名组件之前的原始(已签名)客户端请求网址。
要在源站验证请求,请使用 您的请求签名端点,这也有助于减少密钥不匹配问题, 导致的问题
轮替密钥
最佳做法是,轮替或更新 媒体 CDN 定期运行。我们建议每 30 到 60 天轮替一次密钥,但这并非强制性要求。