オブジェクトの所有権の制御とバケットの ACL の無効化。
S3 オブジェクト所有権は、Amazon S3 バケットレベルの設定で、バケットにアップロードされたオブジェクトの所有権を制御し、アクセスコントロールリスト (ACL) を有効または無効にするのに使用できます。デフォルトでは、オブジェクト所有権は[バケット所有者の強制] 設定に設定され、すべての ACL は無効になっています。ACL が無効になっている場合、バケット所有者はバケット内のすべてのオブジェクトを所有し、アクセス管理ポリシーのみを使用してデータへのアクセスを管理します。
Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなっています。そのため、オブジェクトごとに個別にアクセスを制御する必要がある異常な状況を除き、ACL を無効にしておくことをお勧めします。ACL を無効にすると、バケット内のオブジェクトをアップロードしたユーザーに関係なく、ポリシーを使用してバケット内のすべてのオブジェクトへのアクセスをより簡単に制御できます。
オブジェクト所有権には、バケットにアップロードされるオブジェクトの所有権を制御し、ACL を無効または有効化するために使用できる 3 つの設定があります。
ACL の無効化
-
バケット所有者の強制 (デフォルト) – ACL は無効になり、バケット所有者はバケット内のすべてのオブジェクトを自動的に所有し、完全に制御します。ACL は、S3 バケット内のデータに対するアクセス許可に対して影響を与えません。バケットは、ポリシーを使用してアクセスコントロールを定義します。
ACL の有効化。
-
希望するバケット所有者 — バケット所有者は、他のアカウントが
bucket-owner-full-control
既定 ACL でバケットに書き込む新しいオブジェクトを所有し、完全にコントロールできます。 -
オブジェクトライター — オブジェクトをアップロードする AWS アカウント は、そのオブジェクトを所有し、そのオブジェクトを完全にコントロールし、ACL を介して他のユーザーにそのオブジェクトへのアクセス権を付与できます。
S3 の最近のユースケースの大部分では、[バケット所有者の強制] 設定を適用して ACL を無効なままにし、必要に応じてバケットポリシーを使用して、アカウント外のユーザーとデータを共有することをお勧めします。このアプローチにより、アクセス許可の管理が簡素化されます。新しく作成されたバケットと既存のバケットの両方で ACL を無効にすることができます。新しく作成されたバケットでは、ACL はデフォルトで無効になっています。既存のバケットに既にオブジェクトが含まれている場合、ACL を無効にすると、オブジェクトとバケット ACL はアクセス評価に含まれなくなり、ポリシーに基づいてアクセスが許可または拒否されます。既存のバケットについては、ACL を無効にした後いつでも再度有効化でき、既存のバケットとオブジェクト ACL が復元されます。
ACL を無効にする前に、バケットポリシーを確認して、アカウント外のバケットへのアクセス権を付与するすべての方法をカバーすることを確認することをお勧めします。ACL を無効にすると、バケットは ACL を指定しない PUT
リクエスト、またはバケット所有者のフルコントロール ACL (bucket-owner-full-control
で既定の ACL またはこの ACL と同等の XML で表される形式など) を持つ PUT
リクエストのみを受け入れます。バケット所有者のフルコントロール ACL をサポートする既存のアプリケーションには影響はありません。他の ACL (特定の AWS アカウント へのカスタム許可など) を含む PUT
リクエストは失敗し、AccessControlListNotSupported
エラーコードを含む 400
エラーを返します。
それとは対照に、[バケット所有者が推奨] で設定されているバケットは、引き続きバケットおよびオブジェクト ACL を受け入れ、遵守します。この設定では、新しいオブジェクトが bucket-owner-full-control
既定 ACL はオブジェクトライターではなく、バケット所有者によって自動的に所有されます。その他のすべての ACL 動作はそのまま残ります。すべての Amazon S3 PUT
操作に bucket-owner-full-control
既定 ACL を含めるように要求するには、この ACL を使用したオブジェクトのアップロードのみを許可するバケットポリシーを追加できます。
どのオブジェクト所有権設定がバケットに適用されているかを確認するには、Amazon S3 ストレージレンズメトリクスを使用できます。S3 ストレージレンズは、オブジェクトストレージの使用状況とアクティビティを組織全体で可視化するために使用できるクラウドストレージ分析機能です。詳細については、「Using S3 Storage Lens to find Object Ownership settings」(S3 ストレージレンズを使用してオブジェクト所有権の設定を検索する) を参照してください。
注記
Amazon S3 Express One Zone ストレージクラスをディレクトリバケットで使用する方法の詳細については、「S3 Express One Zone」と「ディレクトリバケットの使用」を参照してください。
オブジェクトの所有権の設定
この表は、各オブジェクト所有権設定が ACL、オブジェクト、オブジェクト所有権、およびオブジェクトアップロードに与える影響を示しています。
設定 | 適用先 | オブジェクトの所有者への影響 | ACL への影響 | アップロードを受け付けました |
---|---|---|---|---|
バケット所有者強制 (デフォルト) | 既存のオブジェクトと新しいオブジェクト | バケット所有者はすべてのオブジェクトを所有しています。 |
ACL は無効になり、バケットへのアクセス権限には影響しません。ACL を設定または更新する要求は失敗します。ただし、ACL の読み取り要求はサポートされています。 バケット所有者は完全な所有権と制御を有しています。 オブジェクトライターには完全な所有権と制御がなくなりました。 |
バケット所有者の完全制御 ACL を使用したアップロード、または ACL を指定しないアップロード。 |
バケット所有者推奨。 | 新しいオブジェクト。 | オブジェクトのアップロードが bucket-owner-full-control 既定 ACL を含む場合、バケット所有者はオブジェクトを所有しています。他の ACL でアップロードしたオブジェクトは、書き込みアカウントによって所有されます。 |
ACL は更新でき、許可を付与できます。 オブジェクトのアップロードが |
すべてアップロードします。 |
オブジェクトライター | 新しいオブジェクト | オブジェクトライターがオブジェクトを所有します。 |
ACL は更新でき、許可を付与できます。 オブジェクトライターは完全制御アクセスを有します。 |
すべてをアップロード |
ACL を無効にして導入された変更
オブジェクト所有権に対して [バケット所有者の強制] 設定を適用すると、ACL は無効になり、追加のアクションを実行せずに、バケット内のすべてのオブジェクトを自動的に所有し、完全に制御できます。[バケット所有者の強制] 設定は、新しく作成されたすべてのバケットでデフォルト設定となっています。[バケット所有者の強制] 設定が適用されると、3 つの変更が表示されます。
-
すべてのバケット ACL とオブジェクト ACL が無効になり、バケット所有者としてフルアクセスが付与されます。バケットまたはオブジェクトに対して読み取り ACL リクエストを実行すると、バケット所有者にのみフルアクセスが付与されていることがわかります。
-
バケット所有者は、バケット内のすべてのオブジェクトを自動的に所有し、完全に制御できます。
-
ACL はバケットへのアクセス許可に影響を与えなくなりました。その結果、データのアクセスコントロールは、AWS Identity and Access Management (IAM) アイデンティティベースのポリシー、Amazon S3 バケットポリシー、VPC エンドポイントポリシー、Organizations サービスコントロールポリシー (SCP)、リソースコントロールポリシー (RCP) などのポリシーに基づいています。
![[バケット所有者の強制] 設定を適用して ACL を無効にしたときに発生することを示した図表。](images/bucket-owner-enforced.png)
S3 バージョニングを使用する場合、バケット所有者はバケット内のすべてのオブジェクトバージョンを所有し、完全に制御できます。[バケット所有者の強制] 設定を適用しても、オブジェクトの新しいバージョンは追加されません。
新しいオブジェクトをバケットにアップロードできるのは、バケット所有者の完全制御 ACL を使用するか、ACL を指定しない場合のみです。オブジェクトのアップロードは、他の ACL を指定すると失敗します。詳細については、トラブルシューティング を参照してください。
次の AWS Command Line Interface(AWS CLI) を利用した PutObject
オペレーションの例には、bucket-owner-full-control
既定 ACL が含まれるため、無効な ACL を持つバケットにオブジェクトをアップロードできます。
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keykey-name
--bodypath-to-file
--acl bucket-owner-full-control
以下の PutObject
オペレーションは ACL を指定しないため、無効な ACL を持つバケットでも成功します。
aws s3api put-object --bucket
amzn-s3-demo-bucket
--keykey-name
--bodypath-to-file
注記
アップロード後に他の AWS アカウント が、オブジェクトにアクセスする必要がある場合は、バケットポリシーを介してそれらのアカウントに追加のアクセス許可を付与する必要があります。詳細については、チュートリアル: ポリシーを使用した Amazon S3 リソースへのアクセスの管理 を参照してください。
ACL の再有効化
[バケット所有者の強制] 設定から別のオブジェクト所有権設定にいつでも変更することで ACL を再度有効にできます。[バケット所有者の強制] 設定を適用する前に、許可管理のオブジェクト ACL を使用し、これらのオブジェクト ACL アクセス権限をバケットポリシーに移行しなかった場合は、ACL を再度有効にした後に、これらのアクセス許可が復元されます。さらに、[バケット所有者の強制] 設定が適用されている間にバケットに書き込まれたオブジェクトは、バケット所有者によって所有されます。
例えば、[バケット所有者の強制] から [オブジェクトライター] 設定に戻すと、バケット所有者として、他の AWS アカウント が以前に所有していたオブジェクトを所有できなくなり、完全に制御できなくなります。代わりに、アップロードするアカウントがこれらのオブジェクトを再び所有します。他のアカウントが所有するオブジェクトは、許可用の ACL を使用するため、これらのオブジェクトに許可を与えるためポリシーを使用できません。ただし、[バケット所有者の強制] 設定が適用されている間、バケットに書き込まれたオブジェクトは、バケット所有者として引き続き所有されます。ACL を再度有効にしても、これらのオブジェクトはオブジェクトライターによって所有されません。
AWS Management Console、AWS Command Line Interface (CLI)、REST API、または AWS SDK を使用して ACL を有効化および管理する手順については、ACL の設定 を参照してください。
ACL を無効にする前提条件
既存のバケットの ACL を無効にする前に、以下の前提条件を満たしていることを確認してください。
オブジェクトの所有者許可
バケットのオブジェクト所有権設定を適用、更新、または削除するには、s3:PutBucketOwnershipControls
許可が必要です。バケットのオブジェクトの所有権の設定を返すには、s3:GetBucketOwnershipControls
許可が必要です。詳細については、バケットの作成時のオブジェクトの所有権の設定。 および S3 バケットのオブジェクト所有権設定の表示 を参照してください。
すべての新しいバケットの ACL を無効にします。
デフォルトでは、新しく作成されたバケットにはすべて[バケット所有者の強制] 設定が適用されており、ACL は無効になっています。ACL は無効にしておくことをお勧めします。原則として、アクセスコントロールには ACL ではなく S3 リソースベースのポリシー (バケットポリシーとアクセスポイントポリシー) または IAM ポリシーを使用することをお勧めします。ポリシーとは、よりシンプルで柔軟なアクセスコントロールのオプションです。バケットポリシーとアクセスポイントポリシーを使用すると、Amazon S3 リソースに対するすべてのリクエストに広く適用されるルールを定義できます。
レプリケーションとオブジェクトの所有権。
S3 レプリケーションを使用し、ソースバケットと宛先バケットが異なる AWS アカウント に所有されている場合、ACL を無効にして (バケット所有者にオブジェクト所有権の設定を適用して)、レプリカの所有権を宛先バケットを所有する AWS アカウント に変更できます。この設定は、s3:ObjectOwnerOverrideToBucketOwner
許可の必要なく、既存の所有者のオーバーライド動作を模倣します。[バケット所有者の強制] 設定で宛先バケットにレプリケーションされるすべてのオブジェクトは、宛先バケット所有者によって所有されます。レプリケーション設定の所有者上書きオプションの詳細については、レプリカ所有者の変更 を参照してください。
オブジェクトの所有権の設定
オブジェクト所有権の設定は、S3 コンソール、AWS CLI、AWS SDK、Amazon S3 REST API、または AWS CloudFormation を使用して適用できます。以下の REST API と AWS CLI コマンドは、オブジェクトの所有権をサポートしています。
REST API | AWS CLI | 説明 |
---|---|---|
PutBucketOwnershipControls | put-bucket-ownership-controls |
既存の S3 バケットのオブジェクト所有権設定を作成または変更します。 |
CreateBucket | create-bucket |
x-amz-object-ownership リクエストヘッダーを使用してバケットを作成し、オブジェクトの所有権設定を指定します。 |
GetBucketOwnershipControls | get-bucket-ownership-controls |
Amazon S3 バケットのオブジェクト所有権設定を取り戻します。 |
DeleteBucketOwnershipControls | delete-bucket-ownership-controls |
Amazon S3 バケットのオブジェクトの所有権の設定を削除します。 |
オブジェクト所有権設定の適用と操作の詳細については、以下のトピックを参照してください。