使用已签名的请求

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

签名请求要求

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

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

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

  • 具有可通过密钥或密钥 EdgeCacheKeyset.

您无法对其他 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 次轮替一次密钥 天,但并非严格要求。

后续步骤