使用签名请求

如需创建签名请求,请编写一个字符串,其中包含用于描述要保护的内容和签名值的过期时间的参数。然后,将组成的字符串包含在请求中。 然后,媒体 CDN 会先验证您的签名请求是否有效,然后再根据该请求执行操作。

签名请求要求

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

  • 具有 GETHEADOPTIONS HTTP 方法。不支持其他方法。

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

  • 具有可由 EdgeCacheKeyset 中的密钥或 Secret 验证的签名。

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

配置已签名请求

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

生成密钥

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

创建密钥集

创建密钥集,供媒体 CDN 用于签名请求。

需要签名请求

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

  • REQUIRE_SIGNATURES 用于不使用令牌的签名请求。

  • REQUIRE_TOKENS 用于使用令牌的签名请求。

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

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

signedRequestMode 设置为 REQUIRE_SIGNATURESREQUIRE_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,则 Media CDN 会验证每个匹配的请求是否具有有效签名。对于这些路线,缺少签名会被视为签名无效。

为防止出现签名配置错误的情况,以及用户尝试直接访问您的来源的情况,我们建议您验证请求是否也在来源处签名。采用纵深防御的内容保护方法有助于防止未经授权访问和下载您的许可内容和付费内容。

对于基于网址的签名方法,如果签名是查询参数的一部分或嵌入为网址路径组件,则在将请求发送到源站之前,系统会从网址中移除签名和相关参数。这样可以防止签名在源站处理请求时导致路由问题。如需验证这些请求,您可以检查 x-client-request-url 请求标头,其中包含移除签名组件之前的原始(已签名)客户端请求网址。

如需在源站验证请求,请使用与请求签名端点相同的验证代码,这也有助于缓解密钥不匹配问题以及因密钥轮替而导致的问题。

轮替密钥

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

后续步骤

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

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