使用已签名的请求

如需创建签名请求,请编写一个字符串,其中包含 请说明您要保护的内容以及 有符号值。然后,在请求中包含组合的字符串。 然后,媒体 CDN 会先验证您的签名请求是否有效,然后再 并对其执行操作。

签名请求要求

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

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

  • 将到期时间设置为将来的时间。受时钟延迟的影响 同步差异以及客户端网络条件(针对 例如断开连接和重试),我们建议您将时间戳设置为 未来一分钟以内,或不小于 视频流(以较大者为准)。

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

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

安全注意事项

媒体 CDN 会验证与配置 第 cdnPolicy.signedRequestMode 个,共 REQUIRE_SIGNATURES 个或REQUIRE_TOKENS

下表介绍了媒体 CDN 验证的场景 请求:

请求具有签名 签名有效吗? signedRequestMode 行为 响应代码
不适用 REQUIRE_SIGNATURESREQUIRE_TOKENS 没有签名或令牌的请求将按照 无效。 HTTP 403
REQUIRE_SIGNATURESREQUIRE_TOKENS 如果签名或令牌已过期,或者网址不匹配或密钥不正确,则会被视为无效。无效的签名或令牌会在 CDN 边缘遭拒。 HTTP 403
REQUIRE_SIGNATURESREQUIRE_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_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 时,媒体 CDN 会验证每个匹配请求是否具有有效的签名。对于这些路线,缺少签名会被视为签名无效。

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

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

要在源站验证请求,请使用 您的请求签名端点,这也有助于减少密钥不匹配问题, 导致的问题

轮替密钥

最佳做法是,轮替或更新 媒体 CDN 定期运行。我们建议每 30 到 60 天轮替一次密钥,但这并非强制性要求。

后续步骤

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

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