防止未经授权的发布

本页面简要介绍了 Media CDN 提供的选项,以帮助防止未经授权分发您的内容。

Media CDN 提供以下选项,可帮助您保护内容免遭未经授权的传播。

  • 令牌(推荐方法):媒体 CDN 使用令牌来帮助保护内容。

    令牌是交换已签名请求的媒介,例如已签名 Cookie、包含查询参数的 URI 或路径组件。观看者提供的有效令牌用于对其访问您内容的权限进行身份验证。如果观看者的令牌无效或缺失,则无法访问您的内容。

    您可以选择使用单令牌或双令牌身份验证。双令牌身份验证需要使用令牌。

    使用双令牌身份验证时,Media CDN 会使用两个令牌,一个是短时令牌,另一个是长时令牌。

    Google 建议您在新的集成中使用令牌,因为令牌具有以下优势:

    • 提供与非 Google 内容分发网络 (CDN) 的兼容性。
    • 支持仅路径签名。
    • 启用对多个标头进行签名。
    • 提供精细的访问权限控制和撤消功能。
    • 最大限度地减少被盗令牌的影响。
    • 可以嵌入任意数据和会话 ID。
  • 签名:媒体 CDN 使用单个签名来帮助保护内容。借助签名,您可以对完整网址(包括主机和协议)进行签名。

您可以同时使用这两种选项来保护您的内容。

双令牌身份验证的运作方式

双令牌身份验证使用两个令牌对内容的请求进行身份验证:一个短时令牌用于启动播放,一个长时令牌用于播放会话的其余部分。

如需使用双令牌身份验证,您需要将应用服务器配置为向用户代理发出短时令牌。然后,您可以配置媒体 CDN 以响应短时效的令牌。您可以将令牌放置在您选择的查询参数中,也可以将令牌放置在 Cookie 中。如需了解详情,请参阅使用双令牌身份验证

应用服务器生成的短时令牌有助于保护主要清单(有时称为多变量播放列表)。已签名请求的有效期足够短,可以请求主要清单,但无法观看清单中包含的所有内容。

当媒体 CDN 收到包含已获授权的短期有效令牌的请求时,会生成一个已签名的长效令牌。您可以在单个命名查询参数或 Cookie 中使用该令牌。长时令牌支持观看完整节目。Media CDN 生成的已签名长时令牌使用 Ed25519 签名,这些签名使用与 EdgeCacheKeyset 资源关联的 Google 管理的密钥进行签名。

您可以自定义短时效和长时效令牌的到期时间。作为最佳实践,Google 建议您将在应用服务器上生成的短时效令牌的到期时间配置为 1 分钟。您必须将 Media CDN 生成的长时效令牌的到期时间设置为大于内容时长的时长,最长不超过 1 天。

双令牌身份验证的请求流程

以下介绍了请求流程:

  1. 观看者请求您的应用服务器提供他们想要观看的媒体的元数据。您的应用服务器会返回使用短时效令牌签名的主清单的 URI。

  2. 您的播放器应用会从 Media CDN 请求主要清单。该请求将短时效期令牌作为 URI 查询参数的值(采用单名称查询参数格式)包含在内。

  3. Media CDN 会验证短时令牌及其签名参数。

    1. 如果令牌有效,Media CDN 会创建一个长效签名令牌。Media CDN 会在 Set-Cookie 标头中返回令牌,或者通过修改主要清单中的清单和片段 URI 以包含令牌来返回令牌。
    2. 如果令牌无效,Media CDN 会返回 HTTP 403 Forbidden 响应。
  4. 播放器应用会从媒体 CDN 接收主要清单,然后请求主要清单中引用的媒体播放列表或媒体片段。请求必须包含长时效令牌,可以是已签名的 Cookie,也可以是 URI 参数。

  5. Media CDN 会验证长时签名令牌:

    1. 如果长时效令牌对特定请求有效,则媒体 CDN 会传送请求的内容。
    2. 如果长时效令牌无效(由于令牌过期或路径无效),Media CDN 会返回 HTTP 403 Forbidden 响应。
  6. 此过程会重复,直到媒体播放结束或长时签名过期。

双令牌签名请求支持的令牌格式

Media CDN 双令牌签名请求支持多种格式,具体取决于令牌类型。

短时有效的已签名请求

对于短时签名请求,Media CDN 默认支持使用 Ed25519 签名签名的令牌。您还可以使用基于对称密钥的哈希消息身份验证代码 (HMAC),以便与现有应用代码和其他 CDN 兼容。

如需使用 HMAC,您需要使用 Secret Manager 存储 HMAC Secret。然后,您需要向 Media CDN 服务账号授予访问存储的 Secret 的权限。作为最佳实践,Google 建议使用 Ed25519 签名进行不对称签名,以确保安全性和性能。

Media CDN 服务账号归 Media CDN 项目所有,不会显示在项目的服务账号列表中。该服务账号仅会授予对您明确允许的项目中的 Media CDN 资源的访问权限。

该服务账号具有以下格式:

service-PROJECT_NUMBER@gcp-sa-mediaedgefill.iam.gserviceaccount.com

其中,PROJECT_NUMBER 是您的项目编号。

如需激活媒体 CDN 服务账号,请至少创建一个媒体 CDN 资源,例如 EdgeCacheOrigin

长时间有效的已签名请求

对于长时有效的签名请求,Media CDN 使用 Ed25519 签名,这些签名是使用与 EdgeCacheKeyset 资源关联的 Google 管理的密钥进行签名的。

Media CDN 支持长时效令牌的单个令牌格式,该格式可用于 HLS 串流的单个命名查询参数或 Cookie 中。

签名请求的运作方式

已签名的请求使用签名或令牌来验证每个观看者是否已通过身份验证,可以访问内容。您可以配置媒体 CDN,以将访问权限范围限定为以下任一项:

  • 有效期有限的确切 URI 或 URI 前缀
  • 特定客户端
  • 对于使用令牌的已签名请求,最多可使用五个包含通配符的路径

如需使用已签名请求,您需要生成密钥来签名和验证签名。然后,您可以配置路由,以便根据内容类型、客户端属性和新鲜度要求优化行为。您可以按路由强制执行已签名请求,这有助于保护特定端点。

每个媒体 CDN 服务都可以使用多个密钥的集合。键集合也称为键集。借助密钥集,您可以轮替密钥并在自己的基础架构中分发私钥,而不会中断服务。

您可以将媒体 CDN 配置为使用已签名请求或令牌来帮助保护内容。

对于使用令牌的已签名请求,您可以将令牌放置在以下任一位置:

  • 在您选择的查询参数中
  • 在 Cookie 中

如需了解详情,请参阅生成令牌

对于使用签名的已签名请求,您可以使用以下任一格式:

  • 包含查询参数的完全匹配 URI:您可以指定包含完全匹配 URI 的 URLPrefix,并将相同的查询参数附加到多个 URI。
  • 包含查询参数的 URI 前缀:您可以指定带有 URI 前缀的 URLPrefix,并将相同的查询参数附加到多个 URI。
  • 路径组成部分:您可以指定路径组成部分,以便相对清单 URI 继承已签名的 URI 组成部分。
  • 已签名的 Cookie:您可以在 Cookie 中指定 URI 前缀,以便访问包含您指定前缀的任何 URI。

如需了解详情,请参阅生成签名

注意事项

以下部分介绍了在防止他人未经授权分发您的内容时应考虑的各种因素。

安全注意事项

媒体 CDN 会验证与 cdnPolicy.signedRequestModeREQUIRE_SIGNATURESREQUIRE_TOKENS 的路由匹配的所有请求。

我们建议您在源头验证请求。虽然 Media CDN 会拒绝对需要签名的路线发出的无效和未签名请求,但客户端可能会找到直接访问您的源站的方法。额外的验证层有助于提供深度防御方法来保护您的内容。

下表说明了 Media 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 状态代码不可缓存。

如果您的应用向无效请求发送了可缓存的状态代码,则未来的有效请求可能会被错误地拒绝。

URI 限制

大多数新型 HTTP 客户端支持的 URI 长度不超过 8,000 个字符。不过,某些旧版或小众设备可能存在更严格的限制。通常,签名 URI 会向请求 URI 添加大约 125 个字符,其中包括:

  • 如果使用所有字段名称,则每个字段大约为 67 个字符(例如 Expires=KeyName=)。
  • 对于 Unix 时间戳,10 个字符
  • 对于 KeyName,为 5 个字符
  • 对于 base64 编码的 Signature 值,为 43 个字符

最佳做法是使用查询参数作为令牌,将 URI 的长度保持在 2000 个字符以内。较短的 URI 可防止设备向 Media CDN 发送经过截断的 URI。

旧版视频在线播放设备

某些旧版视频在线播放设备可能不完全支持将 Cookie 附加到清单或媒体片段请求。如果您的设备在处理 HTTP Cookie 时存在已知问题,请将 Media CDN 配置为使用查询参数进行已签名请求和双令牌交换。

对于使用 Cookie 交换短时效令牌时所需的任何同意征求和隐私权合规要求,您自行承担全部责任。将 Media CDN 配置为使用双令牌签名请求后,Google 会颁发和管理用于长时效令牌的 Cookie。

结算

如需详细了解 Secret Manager 的结算方式,请参阅价格

媒体 CDN 会将对 Secret 的提取内容缓存在内部,从而显著降低从 Secret Manager 提取 Secret 的速率。减少提取次数还会显著降低 Secret Manager 监控和向您收费的访问次数。

如需详细了解如何在媒体 CDN 中缓存 Secret,请参阅密钥概览