CEPH + S3 Java SDK +预先签名的PUT + CORS = FAIL

时间:2014-07-01 20:59:07

标签: amazon-s3 cors openstack-swift ceph radosgw

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

针对AWS,这个代码效果很好。但是,Swift和Ceph都在使用403的OPTIONS请求失败。由于OPTIONS失败,CORS失败。我们跟踪它(我们认为)RADOSGW中可能存在的创建auth标头的缺陷......它与亚马逊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

我们可以处理缺少的内容类型和其他元数据字段,但请注意METHOD完全错误。 RADOSGW我认为应该使用"访问控制请求方法"作为签名中的方法...而不是用于预检请求的实际OPTIONS方法。

有没有人能够使这个组合起作用?

1 个答案:

答案 0 :(得分:1)

我们最终将此错误记录到Ceph RGW库中以解决此问题。 http://tracker.ceph.com/issues/8718#change-38624