edit-icon download-icon

PutObjectACL

最終更新日: Jun 19, 2018

PutObjectACL はオブジェクトのアクセス権限を変更するために使用します。

現在オブジェクトで使用できるアクセス権限は、デフォルト、非公開、公開読み取り、公開読み書きの 4 つです。アクセス権限を設定するには、PutObjectACL リクエストで x-oss-object-acl ヘッダーを使用します。この操作を実行できるのはバケットオーナーだけです。操作が成功すると、200 が返されます。失敗すると、対応するエラーコードとプロンプトメッセージが返されます。

リクエスト構文

  1. PUT /ObjectName?acl HTTP/1.1
  2. x-oss-object-acl: Permission
  3. Host: BucketName.oss-cn-hangzhou.aliyuncs.com
  4. Date: GMT Date
  5. Authorization: SignatureValue

オブジェクト ACL の定義

名前 説明
非公開 このACLは、オブジェクトが非公開リソースであることを示します。このオブジェクトの読み取りまたは書き込みを実行できるのは、このオブジェクトのオーナーだけです。
公開読み取り このACLは、オブジェクトがパブリックに読み取り可能なリソースであることを示します。このオブジェクトの読み取りおよび書き込みを実行できるのは、このオブジェクトのオーナーだけです。その他のユーザーはこのオブジェクトの読み取りのみを実行できます。
公開読み書き このACLは、オブジェクトがパブリックに読み書き可能なリソースであることを示します。すべてのユーザーがこのオブジェクトの読み取りおよび書き込みを実行できます。
デフォルト このACLは、オブジェクトがバケットの読み取り/書き込み許可を継承するリソースであることを示します。 つまり、バケットとオブジェクトは同じ権限を持ちます。

詳細分析:

  • オブジェクトの読み取り操作には GetObjectHeadObjectCopyObject、および UploadPartCopy 操作におけるソースオブジェクトの読み取りが含まれます。オブジェクトの書き込み操作には PutObjectPostObjectAppendObjectDeleteObjectDeleteMultipleObjectsCompleteMultipartUpload、および CopyObject 操作における新しいオブジェクトの書き込みが含まれます。
  • x-oss-object-acl は前述の 4 つの権限のいずれかに設定する必要があります。それ以外の場合、OSS は 400 Bad Request メッセージを返し、エラーコードはInvalidArgumentです。
  • PutObjectACL を使用すると、オブジェクトの ACL を設定できます。また、オブジェクトを書き込む際に、リクエストヘッダーに x-oss-object-acl を含めてオブジェクトの ACL を設定することもできます。効果は PutObjectACL と同じです。たとえば、PutObject リクエストのヘッダーに x-oss-object-acl が含まれている場合は、オブジェクトのアップロード時にオブジェクトの ACL を設定できます。
  • オブジェクトの読み取り権限がないユーザーがこのオブジェクトを読み取ろうとすると、OSS は403 Forbiddenメッセージを返し、エラーコードは AccessDenied になります。表示されるプロンプトは “You do not have read permission on this object” です。
  • オブジェクトの書き込み権限がないユーザーがこのオブジェクトを書き込もうとすると、OSS は 403 Forbidden メッセージを返し、エラーコードは AccessDenied になります。表示されるプロンプトは “You do not have write permission on this object” です。
  • PutObjectACL を使用してバケット内のオブジェクトの ACL を変更できるのは、このバケットのオーナーだけです。バケットオーナー以外のユーザーが PutObjectACL を使おうとすると、OSS は 403 Forbidden メッセージを返し、エラーコードは AccessDenied になります。表示されるプロンプトは “You do not have write acl permission on this object” です。
  • オブジェクト ACL はバケット ACL よりも優先されます。たとえば、バケット ACL が非公開でオブジェクト ACL が公開読み書きの場合、ユーザーがオブジェクトにアクセスする際には、まずこのオブジェクトの ACL がチェックされます。結果として、このバケットが非公開バケットであっても、このオブジェクトにはすべてのユーザーがアクセスできます。オブジェクトの ACL が設定されていない場合、このオブジェクトの ACL はオブジェクトが配置されているバケットの ACL と同じになります。

リクエストの例:

  1. PUT /test-object?acl HTTP/1.1
  2. x-oss-object-acl: public-read
  3. Host: oss-example.oss-cn-hangzhou.aliyuncs.com
  4. Date: Wed, 29 Apr 2015 05:21:12 GMT
  5. Authorization: OSS qn6qrrqxo2oawuk53otfjbyc:KU5h8YMUC78M30dXqf3JxrTZHiA=

応答例:

  1. HTTP/1.1 200 OK
  2. x-oss-request-id: 559CC9BDC755F95A64485981
  3. Date: Wed, 29 Apr 2015 05:21:12 GMT
  4. Content-Length: 0
  5. Connection: keep-alive
  6. Server: AliyunOSS