如需创建签名请求,请编写一个字符串,其中包含以下参数: 请说明您要保护的内容以及 有符号值。然后,在请求中包含组合的字符串。 然后,媒体 CDN 会先验证您的签名请求是否有效,然后再 并对其执行操作。
签名请求要求
签名请求必须满足以下要求:
具有
GET
、HEAD
或OPTIONS
HTTP 方法。其他方法不适用 支持。将到期时间设置为将来的时间。受时钟延迟的影响 同步差异以及客户端网络条件(针对 例如断开连接和重试),我们建议您将时间戳设置为 不少于一分钟以内,或不小于 视频流(以较大者为准)。
具有可通过密钥或密钥
EdgeCacheKeyset
.
您无法对其他 HTTP 方法(例如 POST
、PUT
或 DELETE
请求)进行签名。
如果您需要为面向用户的上传内容发布签名网址,请参阅
关于签名网址的 Cloud Storage 文档。
安全注意事项
媒体 CDN 会验证与配置
第 cdnPolicy.signedRequestMode
个,共 REQUIRE_SIGNATURES
个或REQUIRE_TOKENS
。
下表介绍了媒体 CDN 验证的场景 请求:
请求具有签名 | 签名是否有效? | signedRequestMode | 行为 | 响应代码 |
---|---|---|---|---|
否 | 不适用 | REQUIRE_SIGNATURES 或 REQUIRE_TOKENS |
没有签名或令牌的请求将按照 无效。 | HTTP 403 |
是 | 否 | REQUIRE_SIGNATURES 或 REQUIRE_TOKENS |
如果签名或令牌已过期或 网址不匹配或密钥不正确。无效签名或令牌被拒绝 CDN 边缘。 | HTTP 403 |
是 | 是 | REQUIRE_SIGNATURES 或 REQUIRE_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_SIGNATURES
或 REQUIRE_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 次轮替一次密钥 天,但并非严格要求。