Amazon S3 でオブジェクト ACL を使用するユースケースにはどのようなものがありますか?

最終更新日: 2021 年 12 月 21 日

アクセスコントロールリスト (ACL) を使用して Amazon Simple Storage Service (Amazon S3) オブジェクトへのアクセスを委任したい。オブジェクトまたはバケット ACL を使用するユースケースにはどのようなものがありますか?

解決方法

Amazon S3 アクセスコントロールリスト (ACL) を使用すると、S3 バケットとオブジェクトへのアクセスを管理できます。すべての S3 バケットとオブジェクトには、サブリソースとして ACL がアタッチされています。ACL は、どの AWS アカウントまたはグループにアクセス権を付与するかを、アクセスの種類とともに定義します。リソースに対してリクエストを送信すると、Amazon S3 は対応する ACL をチェックして、必要なアクセス権限があることを確認します。

オブジェクトまたはバケットにアクセス権が付与されるほとんどのユースケースでは、ACL が不要になりました。ただし、ACL を使用する方が適切な場合もあります。たとえば、ACL を使用してバケットまたはオブジェクトへのアクセスを管理する必要がある場合のユースケースをいくつか示します。

  • オブジェクト ACL は、バケット所有者が所有していないオブジェクトへのアクセスを許可する唯一の方法です。デフォルトでは、別の AWS アカウントが S3 バケットにオブジェクトをアップロードすると、そのアカウント (オブジェクトライター) がオブジェクトを所有します。また、オブジェクトライターはオブジェクトにアクセスでき、ACL を使用して他のユーザーにそのオブジェクトへのアクセス権を付与できます。
  • オブジェクト ACL は、オブジェクトレベルでアクセス許可を管理する必要がある場合に使用できます。たとえば、フォルダ全体にアクセス権を委任する必要がある場合、バケットポリシーを使用できます。ただし、アクセス権限がオブジェクトによって異なる場合、バケットポリシーを使用して個々のオブジェクトにアクセス許可を付与するのは現実的ではない可能性があります。したがって、オブジェクトアクセスの管理にはオブジェクト ACL の方が適している場合があります。
  • 他の AWS アカウントによってバケットに書き込まれた新しいオブジェクトを所有する場合 (ACL が無効になっていない場合) は、バケット所有者優先設定を適用します。この設定では、 bucket-owner-full-control ACL で書き込まれた新しいオブジェクトは、(オブジェクトライターではなく) バケット所有者によって自動的に所有されます。その他の ACL の動作はすべてそのまま残ります。
    注:ACL を無効にするには、[S3 オブジェクトの所有権] でバケット所有者による強制設定を使用します。ACL を無効にすると、バケットポリシーを使用して、異なる AWS アカウントによってアップロードされたオブジェクト (クロスアカウント) を含むバケットを簡単に管理できます。バケットがバケット所有者による S3 オブジェクト所有権の設定を使用している場合、ACL の設定または更新のリクエストは失敗し、 AccessControlListNotSupported エラーコードが返されます。ただし、ACL の読み取り要求は引き続きサポートされます。
  • バケット ACL を使用すると、Amazon CloudFront などの AWS サービスに、バケットに対して特定のアクションを実行するアクセス権限を付与できます。たとえば、CloudFront ディストリビューションを作成または更新して CloudFront ロギングを有効にすると、CloudFront はバケット ACL を更新します。今回の更新により、 awslogsdelivery アカウントに FULL_CONTROL 権限が付与され、バケットにログを書き込む 詳細については、「標準ロギングの設定とログファイルへのアクセスに必要な権限」を参照してください。

ACL をオブジェクトに適用する

例 1

別の AWS アカウントのバケットにオブジェクトをアップロードする場合は、 bucket-owner-full-control の既定 ACL を使用します。

aws s3api put-object --bucket destination_bucket --key dir-1/myfile --body dir-1/myfile --acl bucket-owner-full-control

バケット所有者フルコントロール既定 ACL は、バケット所有者のアカウントへのアクセスを提供します。

注:Amazon S3 では、既定 ACL と呼ばれる一連の定義済み ACL (この例で使用されているバケット所有者フルコントロール ACL など) がサポートされています。

例 2

オブジェクトアップローダーは ACL を追加して、他の AWS アカウントに読み取り権限を付与することもできます。

aws s3api put-object --bucket destination_mybucket --key dir/myfile --body dir/myfile --grant-read emailaddress=user1@amazon.com,id=canonical-id-of-account

注:E メールアドレスを使用して被付与者を指定できるのは、バージニア北部、北カリフォルニア、オレゴン、シンガポール、シドニー、東京、アイルランド、サンパウロの AWS リージョンだけです。

例 3

既存のオブジェクトの ACL を更新することもできます。

aws s3api put-object-acl --bucket destination_bucket --key dir/myfile --acl bucket-owner-full-control

例 4

Amazon S3 には事前定義された一連のグループがあります。オブジェクト ACL を使用すると、これらの定義済みグループに属するユーザーにアクセス許可を付与できます。

たとえば、Authenticated Users グループにアクセス権を付与することで、認証された AWS ユーザーにオブジェクトアクセス権を付与できます

aws s3api put-object --bucket destination_mybucket --key dir/myfile --body dir/myfile --grant-read uri=http://acs.amazonaws.com/groups/global/AuthenticatedUsers

注:Authenticated Users グループにアクセス権を付与する前に、アカウントレベルとバケットレベルの両方で ACL の [パブリックアクセスのブロック] 設定を無効にしてください。そうしない場合、「アクセス拒否」エラーが表示されます。ACL 関連の Access Denied エラーのトラブルシューティングについては、「Amazon S3 バケットにオブジェクトを追加する権限を持つユーザーが Access Denied エラーを受け取っている」を参照してください。なぜですか?