この操作を呼び出して、オブジェクトのアクセス制御リスト (ACL) を変更できます。 バケット内のオブジェクトの読み取りおよび書き込み権限を持つバケットオーナーのみが、この操作を呼び出してオブジェクト ACL を変更できます。
バージョン管理
デフォルトでは、PutObjectACL 操作が呼び出されて、オブジェクトの現在のバージョンの ACL が設定されます。リクエストでバージョン ID を指定して、オブジェクトの指定されたバージョンの ACL を設定できます。
リクエストでバージョン ID を指定し、関連付けられたオブジェクトのバージョンが削除マーカーの場合、OSS は 405 MethodNotAllowed エラーを返します。
リクエストでバージョン ID を指定せず、関連付けられたオブジェクトの最新バージョンが削除マーカーの場合、OSS は 404 NoSuchKey エラーを返します。
ACL の概要
PutObjectACL 操作を呼び出すと、リクエストで x-oss-object-acl
ヘッダーを設定して、オブジェクトの ACL を設定できます。次の表に、オブジェクトに設定できる ACL を示します。
ACL | 説明 |
非公開 | オブジェクトは非公開リソースです。オブジェクトのオーナーだけが、オブジェクトの読み取りおよび書き込み権限を持ちます。他のユーザーはオブジェクトにアクセスできません。 |
公開読み取り | オブジェクトは公開読み取りリソースです。オブジェクトのオーナーだけが、このオブジェクトの読み取りおよび書き込み権限を持ちます。他のユーザーはオブジェクトを読み取ることしかできません。 |
公開読み書き | オブジェクトは公開読み書きリソースです。すべてのユーザーが、オブジェクトの読み取りおよび書き込み権限を持ちます。 |
デフォルト | オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じです。 |
オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL よりも優先されます。たとえば、ACL が公開読み書きのオブジェクトが、ACL が非公開のバケットに格納されている場合、すべてのユーザーがオブジェクトの読み取りおよび書き込みを実行できます。デフォルトでは、オブジェクトの ACL を設定しない場合、オブジェクトの ACL は、オブジェクトが格納されているバケットの ACL と同じになります。
オブジェクトを読み取る操作には、GetObject、HeadObject、CopyObject、および UploadPartCopy が含まれます。CopyObject および UploadPartCopy はソースオブジェクトを読み取ります。オブジェクトを書き込む操作には、PutObject、PostObject、AppendObject、DeleteObject、DeleteMultipleObjects、CompleteMultipartUpload、および CopyObject が含まれます。CopyObject はデスティネーションオブジェクトに書き込みます。
オブジェクトを書き込む操作を呼び出すときに、リクエストに x-oss-object-acl ヘッダーを含めて、オブジェクトの ACL を設定することもできます。たとえば、PutObject リクエストに x-oss-object-acl ヘッダーを含めて、アップロードするオブジェクトの ACL を設定できます。
構文
PUT /ObjectName?acl HTTP/1.1
x-oss-object-acl: Permission
Host: BucketName.oss-cn-hangzhou.aliyuncs.com
Date: GMT Date
Authorization: SignatureValue
リクエストヘッダー
ヘッダー | タイプ | 必須 | 例 | 説明 |
x-oss-object-acl | String | はい | public-read | オブジェクトのアクセス制御リスト (ACL)。 有効な値:
詳細については、「オブジェクト ACL」をご参照ください。 |
Host や Date など、PutObjectACL リクエストの一般的なリクエストヘッダーについては、「共通リクエストヘッダー」をご参照ください。
レスポンスヘッダー
PutObjectACL リクエストへのレスポンスのすべてのヘッダーは、共通レスポンスヘッダーです。詳細については、「共通レスポンスヘッダー」をご参照ください。
例
バージョン管理されていないバケット内のオブジェクトの ACL を変更する
リクエストの例
PUT /test-object?acl HTTP/1.1 x-oss-object-acl: public-read Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Wed, 29 Apr 2015 05:21:12 GMT Authorization: OSS qn6q**************:77Dv****************
レスポンスの例
HTTP/1.1 200 OK x-oss-request-id: 559CC9BDC755F95A64485981 Date: Wed, 29 Apr 2015 05:21:12 GMT Content-Length: 0 Connection: keep-alive Server: AliyunOSS
バージョン管理されたバケット内のオブジェクトの ACL を変更する
リクエストの例
PUT /example?acl&versionId=CAEQMhiBgIC3rpSD0BYiIDBjYTk5MmIzN2JlNjQxZTFiNGIzM2E3OTliODA0**** HTTP/1.1 x-oss-object-acl: public-read Host: oss-example.oss-cn-hangzhou.aliyuncs.com Date: Tue, 09 Apr 2019 06:30:11 GMT Authorization: OSS qn6q**************:77Dv****************
レスポンスの例
HTTP/1.1 200 OK x-oss-version-id: CAEQMhiBgIC3rpSD0BYiIDBjYTk5MmIzN2JlNjQxZTFiNGIzM2E3OTliODA0**** x-oss-request-id: 5CAC3BF3B7AEADE017000624 Date: Tue, 09 Apr 2019 06:30:11 GMT Content-Length: 0 Connection: keep-alive Server: AliyunOSS
OSS SDK
次のプログラミング言語の OSS SDK を使用して、PutObjectACL 操作を呼び出すことができます。
ossutil
PutObjectACL 操作に対応する ossutil コマンドについては、「put-object-acl」をご参照ください。
エラーコード
エラーコード | HTTP ステータスコード | 説明 |
AccessDenied | 403 | バケットオーナーではないか、ACL を変更するオブジェクトの読み取りおよび書き込み権限がありません。 |
InvalidArgument | 400 | 指定された x-oss-object-acl 値が無効です。 |
FileAlreadyExists | 409 | ACL を変更するオブジェクトは、階層型名前空間機能が有効になっているバケット内のディレクトリです。 |