当您为缓存公开 R2 存储桶(通过 Custom Domain)时,知道 URL 的任何人都可以访问内容。要限制访问,您可以使用 Cloudflare 的 WAF 在请求到达缓存或存储桶之前验证请求。
以下图表说明了请求通过 WAF、Cache 和 R2 的流程。WAF 自定义规则在请求管道中的缓存规则之前运行,因此无效请求在消耗缓存资源之前被阻止。
flowchart LR accTitle: Connections with Cloudflare A[User's request] --> B[WAF] --> C[Cache] --> D[R2]
预签名 URL 是附加了加密令牌的常规 URL。令牌包含从 URL 路径、时间戳和签名服务与验证器之间共享的密钥计算出的基于哈希的消息认证码 (HMAC)。任何拥有 URL 的人都可以在令牌过期之前访问内容,但令牌不能为不同的 URL 路径重复使用。
您可以预签名 URL,类似于 S3 ↗,使您能够共享内容的直接访问并关联超时。此方法可以使用 Snippets、Rules 或 Cloudflare Workers 的组合实现。
为获得最佳性能,我们建议分离创建和验证过程:
在 Workers 文档中,Signing requests 示例展示如何使用 HMAC 生成和验证签名请求。Workers 实现与 WAF 的 is_timed_hmac_valid_v0() 验证函数兼容,因此您可以使用 Workers 签名并使用 WAF 自定义规则验证,或在 Workers 中处理两者。