所有权质询是一次性验证,用于在 Cloudflare 向目标存储桶推送日志之前,证明您对该目标存储桶具有读取权限。此机制可防止您意外将 Logpush 作业配置为向您无法控制的存储桶推送数据。
当您创建指向存储目标的 Logpush 作业时,Cloudflare 会要求您证明对该目标的所有权:
- 您为
destination_conf请求所有权质询。 - Cloudflare 将 JWT 写入您存储桶中的
ownership-challenge.txt文件。 - 您从存储桶中读取该令牌,并在创建作业请求时一并提交。
- Cloudflare 验证令牌后创建作业。
有关分步说明,请参阅 使用 cURL 管理 Logpush。
所有权质询主要防止意外配置错误。若无此验证,您可能会无意中将作业配置为推送到非预期存储桶——例如,推送到实际由他人拥有的存储桶。
质询还可防范恶意场景,例如有人可能:
- 将 Logpush 作业指向另一客户的存储桶
- 向该存储桶推送虚假或恶意日志数据
- 污染或破坏受害者的日志存储
所有权质询是一个 JSON Web Token (JWT),其中包含将其绑定到特定上下文的声明。令牌包括:
- 对象类型 - 作业是 zone 作用域、账户作用域还是租户作用域
- 对象 ID - 具体的 zone 或账户标识符
- 目标配置 - 完整的目标配置字符串
- 目标指纹 - 存储桶名称与路径/前缀的哈希
- 过期时间 - 令牌在 7 天后过期
提交质询令牌时,Cloudflare 会验证所有声明是否与您的作业创建请求匹配。这可防止令牌被用于不同的账户、zone 或目标。
实际上,使用被泄露的所有权质询令牌发起攻击的可能性极低。攻击者需要:
- 访问您的 Cloudflare 账户(以匹配令牌中的对象 ID)
- 知晓确切的存储桶名称和路径/前缀(以匹配目标指纹)
- 在 7 天内采取行动(在质询过期之前)
您存储桶的 IAM/访问控制以及 Cloudflare 账户安全才是主要安全层,而非所有权质询令牌。
- 创建作业后删除质询文件 - Logpush 作业创建完成后,可安全地从存储桶中删除
ownership-challenge.txt文件。 - 限制存储桶权限 - 仅向 Cloudflare 的服务账户授予写入权限。对于 AWS S3,向
arn:aws:iam::391854517948:user/cloudflare-logpush授予PutObject权限。对于 GCS,向logpush@cloudflare-data.iam.gserviceaccount.com授予Storage Object Admin权限。 - 监控 Logpush 作业 - 使用 Logpush 健康状况仪表板 监控作业状态并检测异常。
| 目标 | 是否需要所有权质询 |
|---|---|
| AWS S3 | 是(或使用访问密钥/密钥) |
| Google Cloud Storage | 是 |
| Azure Blob Storage | 是 |
| Sumo Logic | 是 |
| 兼容 S3 的存储 | 否 |
| HTTP 端点 | 否 |
| Datadog | 否 |
| Splunk | 否 |
| New Relic | 否 |
对于不需要所有权质询的目标,Cloudflare 使用 API 密钥或令牌等替代身份验证方法。