Skip to main content
 首页 » 编程设计

amazon-s3中CEPH + S3 Java SDK + 预签名 PUT + CORS = 失败

2025年01月19日6daizhj

我正在寻找让 Ceph + S3 Java SDK + 预签名 PUT url + CORS 工作的神奇公式。我们可以创建一个存储桶,然后将 CORS 配置应用于该存储桶。然后,我们可以创建一个预先生成的 PUT url,然后将其发送回客户端。但是,CORS 预检(选项)请求失败并返回 403。

针对 AWS,相同的代码效果很好。但是,Swift 和 Ceph 在 OPTIONS 请求上均失败,返回 403。由于 OPTIONS 失败,CORS 失败。我们追踪到(我们认为)RADOSGW 中创建身份验证 header 的方式可能存在缺陷……它与 amazon SDK 使用的签名过程不匹配。例如:

AWS Java auth hdr that gets signed: 
PUT 
 
image/jpeg 
1404252781 
x-amz-meta-origfile:Desert.jpg 
/virbsupport/78946140-4638-4338-b765-6f701c453a89?response-content-disposition=attachment; filename=Desert.jpg 
 
In Ceph: 
OPTIONS 
 
 
1404252781 
/virbsupport/78946140-4638-4338-b765-6f701c453a89?response-content-disposition=attachment; filename=Desert.jpg 

我们可以处理缺少的内容类型和附加元数据字段,但请注意该方法是完全错误的。 RADOSGW 我认为应该使用“Access-Control-Request-Method”作为签名中的方法...而不是用于预检请求的实际 OPTIONS 方法。

有人能够让这个组合发挥作用吗?

请您参考如下方法:

我们最终为此问题向 Ceph RGW 库记录了一个错误。 http://tracker.ceph.com/issues/8718#change-38624