使用已签名的请求

如需创建已签名请求,请构建一个字符串,其中包含用于描述要保护的内容的参数以及已签名值的到期时间。然后,您可以在请求中添加组合字符串。然后,Media CDN 会验证您的已签名请求是否有效,然后再对其执行操作。

已签名请求要求

已签名请求必须满足以下要求:

  • 使用 GETHEADOPTIONS HTTP 方法。不支持其他方法。

  • 设置未来的失效时间。由于可能存在的时钟同步差异以及客户端网络状况(例如断开连接和重试),我们建议将时间戳设置为至少 1 分钟后的时间,或至少视频串流时长(以时间较长者为准)。

  • 具有可通过 EdgeCacheKeyset 中的密钥或 Secret 进行验证的签名。

您无法对其他 HTTP 方法(例如 POSTPUTDELETE 请求)进行签名。如果您需要为面向用户的上传内容签发网址,请参阅有关签名网址的 Cloud Storage 文档

配置已签名请求

以下部分将详细介绍如何配置、签名和验证已签名请求。

生成密钥

创建媒体 CDN 用于对请求进行签名的密钥。

创建密钥集

创建媒体 CDN 用于签名请求的密钥集

要求使用已签名请求

如需仅允许已签名请求访问资源,您可以将密钥列表附加到路线,并将 signedRequestMode 设置为以下选项之一:

  • REQUIRE_SIGNATURES(适用于不使用令牌的已签名请求)。

  • REQUIRE_TOKENS(适用于使用令牌的已签名请求)。

在路线上启用已签名请求会强制要求所有请求都已签名或提供令牌。如果请求没有有效的签名(例如密钥名称无效、签名或令牌已过期、签名不匹配等),则请求会失败。

EdgeCacheKeyset 可以包含多个按键,以便进行按键轮替。系统会接受使用所列任何密钥签名的有效请求,并按顺序尝试密钥。如需详细了解密钥轮替,请参阅轮替密钥

signedRequestMode 设置为 REQUIRE_SIGNATURESREQUIRE_TOKENS 时,媒体 CDN 会验证缓存命中和缓存未命中情况。这包括对来源的所有请求。

以下是强制对给定 PathMatcher(路由)使用已签名请求的媒体 CDN 配置示例:

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 请求标头,其中包含移除已签名组件之前的原始(已签名)客户端请求网址。

如需在源端验证请求,请使用与请求签名端点中相同的验证代码,这还有助于减少密钥不匹配和因密钥轮替而导致的问题。

轮替密钥

最佳实践是定期轮替或更新 Media CDN 使用的密钥。我们建议每 30 到 60 天轮替一次密钥,但这并非强制性要求。

后续步骤

  • 如需详细了解如何启用和访问 Media CDN 日志(包括如何过滤和查询日志),请参阅日志记录

  • 如需配置媒体 CDN 和私有 Cloud Storage 存储桶,请参阅来源连接和防护