1

コマンドを使用して、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>
4

2 に答える 2

0

--acl-public が指定されている場合、s3cmd (少なくとも 2011 年以降) は、バケットの作成中に headers["x-amz-acl"] = "public-read" を送信しました。古いバージョンの s3cmd を使用している可能性があります。または、Ceph がそのヘッダーを尊重していませんか?

于 2015-08-28T13:49:24.377 に答える
0

x-amz-acl確認する必要があるのは、要求した適切な値に設定されている場合、http ヘッダーからです。はいの場合、サーバーの ACL コードに何か問題がある可能性があります。

別の方法として、http トラフィック用のコンソール UI を実装するhttps://github.com/minio/mcを試すこともできます。

$ mc --debug mb http://ceph_gw.objectstore.com/yourbucket
$ mc --debug access set public http://ceph_gw.objectstore.com/yourbucket

$ 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’
于 2015-11-07T00:21:23.343 に答える