无法使用Ceph API获取公共存储桶

时间:2015-08-27 14:03:02

标签: s3cmd ceph

我使用comand从S3客户端创建公共存储桶:

s3cmd mb s3://public_bucket --acl-public
Bucket 's3://public_bucket/' created

我可以从客户端(s3cmd ls)和rados gw(使用radosgw-admin存储桶列表)看到这个存储桶。 但是当我使用API​​并将请求发送到服务器时,我总是收到错误404.为什么会发生这种情况? Apache,fcgi工作正常。

我的要求:

GET /public-bucket?max-keys=15 HTTP/1.1
Host: ceph_gw.objectstore.com

此外,请求

GET / HTTP/1.1
Host: ceph_gw.objectstore.com

给我回复

HTTP/1.1 200 OK
Date: Thu, 27 Aug 2015 13:20:21 GMT
Server: Apache/2.2.15 (CentOS)
Connection: close
Content-Type: application/xml

<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>

2 个答案:

答案 0 :(得分:0)

s3cmd(至少自2011年起)已发送标题[&#34; x-amz-acl&#34;] =&#34; public-read&#34;在bucket中,如果指定了--acl-public,则创建。也许你有一个旧版本的s3cmd,或者Ceph没有尊重这个标题?

答案 1 :(得分:0)

如果$ mc --debug mb http://ceph_gw.objectstore.com/yourbucket $ mc --debug access set public http://ceph_gw.objectstore.com/yourbucket 设置为您请求的相应值,则需要验证的是来自http标头。如果是,则可能是服务器ACL代码有问题。

您也可以尝试 - https://github.com/minio/mc,它实现了http流量的控制台UI。

$ mc --debug access set public s3/deflector
mc: <DEBUG> PUT /deflector?acl= HTTP/1.1
Host: s3.amazonaws.com
User-Agent:  Minio/UNOFFICIAL.GOGET (mc; darwin; amd64)
Content-Length: 0
Authorization: AWS4-HMAC-SHA256 Credential=**REDACTED**/20151107/us-east-1/s3/aws4_request, SignedHeaders=host;x-amz-acl;x-amz-content-sha256;x-amz-date, Signature=**REDACTED**
X-Amz-Acl: public-read-write
X-Amz-Content-Sha256: e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
X-Amz-Date: 20151107T002030Z
Accept-Encoding: gzip

mc: <DEBUG> HTTP/1.1 200 OK
mc: <DEBUG> Response Time:  917.38277ms

Set access permission ‘public’ updated successfully for ‘https://s3.amazonaws.com/deflector’

示例

-remove_noise no