問題の説明
バッチ削除リクエストに署名情報がないか、リクエストを開始したアカウントに宛先バケット内のオブジェクトを削除する権限がありません。
原因
DeleteMultipleObjects リクエストを開始しました。 削除するオブジェクトのアクセス制御リスト (ACL) は非公開または公開読み取りです。 ただし、リクエストに署名情報が含まれていないか、リクエストに使用されたアカウントに宛先バケット内のオブジェクトを削除する権限がありません。 その結果、リクエストは失敗します。
例
次のリクエストでは、削除するオブジェクトの ACL は非公開または公開読み取りです。 ただし、リクエストの Authorization ヘッダーに署名情報が含まれていないか、リクエストに使用されたアカウントに宛先バケット内のオブジェクトを削除する権限がありません。
POST /?delete HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Tue, 09 Apr 2019 06:09:34 GMT
Content-MD5: 2Tpk+dL/tGyuSA+YCEuSVg==
<?xml version="1.0" encoding="UTF-8"?>
<Delete>
<Quiet>false</Quiet>
<Object>
<Key>abc.data</Key>
</Object>
<Object>
<Key>test.data</Key>
</Object>
</Delete>解決策
署名付き削除リクエストを送信します。
Authorization ヘッダーに署名を含めます。
手動で署名を計算し、その署名を Authorization リクエストヘッダーに追加します。 詳細については、「Authorization ヘッダーに署名を含める」をご参照ください。
Object Storage Service (OSS) SDK を使用して、リクエストの署名を自動的に生成します。
署名の生成に使用される AccessKey ペアに、オブジェクトを削除する権限があることを確認してください。
詳細については、「バケット ACL」および「オブジェクト ACL」をご参照ください。
(非推奨) 署名情報なしで DeleteMultipleObjects リクエストを開始します。
バケットのオーナーである場合は、削除するオブジェクトの ACL を公開読み書きに設定できます。 これにより、署名情報を指定しなくてもリクエストを開始できます。
警告オブジェクトの ACL を公開読み書きに設定すると、すべてのユーザーがインターネット経由でオブジェクトにアクセスし、オブジェクトにデータを書き込むことができます。 これにより、バケット内のデータへの予期しないアクセスが発生し、予期しない料金が請求される可能性があります。 ユーザーが禁止されているデータや情報をバケットにアップロードすると、正当な権利と利益が侵害される可能性があります。 したがって、必要でない限り、オブジェクトの ACL を公開読み書きに設定しないことをお勧めします。