アクセスポリシーのガイドライン - Amazon Simple Storage Service

アクセスポリシーのガイドライン

Amazon S3 では、リソースベースのポリシーとユーザーポリシーを使用して、Amazon S3 のリソースへのアクセスを管理できます。詳細については、リソースへのアクセスの管理 を参照してください。リソースベースのポリシーには、バケットポリシー、バケットアクセスコントロールリスト (ACL)、オブジェクト ACL があります。このセクションでは、リソースベースのアクセスポリシーを使用して Amazon S3 のリソースへのアクセスを管理する具体的なシナリオを紹介します。

ACL ベースのアクセスポリシー (バケットおよびオブジェクト ACL) の使用が適する場合

バケットとオブジェクトには関連する ACL があり、アクセス許可を付与するために使用できます。

デフォルトでは、別の AWS アカウント がオブジェクトを S3 バケットにアップロードすると、そのアカウント (オブジェクトライター) がオブジェクトを所有し、そのオブジェクトにアクセスでき、ACL を介して他のユーザーにそのオブジェクトへのアクセスを許可できます。オブジェクトの所有権を使用してこのデフォルトの動作を変更し、ACL を無効にして、バケット所有者としてバケット内のすべてのオブジェクトを自動的に所有することができます。その結果、データのアクセスコントロールは、IAM ポリシー、S3 バケットポリシー、仮想プライベートクラウド (VPC) エンドポイントポリシー、AWS Organizations サービスコントロールポリシー (SCP) などのポリシーに基づいています。

Amazon S3 の最新のユースケースの大部分では ACL を使用する必要がなくなり、オブジェクトごとに個別にアクセスを制御する必要がある異常な状況を除き、ACL を無効にすることをお勧めします。オブジェクトの所有権を使用すると ACL を無効にして、アクセスコントロールに関するポリシーに依存できます。ACL を無効にすると、別の AWS アカウント によってアップロードされたオブジェクトを含むバケットを簡単に維持できます。バケット所有者は、バケット内のすべてのオブジェクトを所有し、ポリシーを使用してオブジェクトへのアクセスを管理できます。詳細については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。

重要

バケットが S3 オブジェクト所有権のバケット所有者強制設定を使用している場合、ポリシーを使用してバケットとその中のオブジェクトへのアクセスを許可する必要があります。ACL の設定または ACL の更新の要求に失敗すると、AccessControlListNotSupported エラーコードを返します。ACL の読み取り要求は引き続きサポートされています。

オブジェクト ACL の使用が適する場合

許可を管理するためオブジェクト ACL を使用するときのシナリは次のとおりです。

オブジェクトをバケット所有者が所有していない場合

バケット所有者が所有していないオブジェクトへのアクセスを管理する唯一の方法は、オブジェクト ACL です。バケットを所有する AWS アカウントは、オブジェクトをアップロードするための許可を別の AWS アカウントに付与できます。バケット所有者はこれらのオブジェクトを所有していません。オブジェクトを作成した AWS アカウントは、オブジェクト ACL を使用する許可を付与する必要があります。

注記

バケット所有者は、自分が所有していないオブジェクトへのアクセス許可を付与できません。例えば、オブジェクトへのアクセス許可を付与するバケットポリシーが適用されるのは、バケット所有者が所有しているオブジェクトに対してだけです。ただし、請求の支払いを行うバケット所有者は、バケットポリシーを作成して、バケット内のすべてのオブジェクトへのアクセスを、オブジェクトの所有者に関わりなく拒否することができます。また、バケット所有者は、バケット内の任意のオブジェクトを削除できます。

オブジェクトレベルで権限を管理する必要がある場合

アクセス許可はオブジェクトによって異なり、オブジェクトレベルでアクセス許可を管理する必要があるとします。特定のAWS アカウントキー名のプレフィックスを使用して数百万のオブジェクトに対する読み取りのアクセス許可を に付与する 1 つのポリシーステートメントを作成できます。例えば、キー名プレフィックス logs で始まるオブジェクトの読み取り許可を付与できます。ただし、アクセス許可がオブジェクトごとに異なる場合、バケットポリシーを使用して個々のオブジェクトへのアクセス許可を付与することは実用的でない可能性があります。また、バケットポリシーのサイズは 20 KB に制限されています。

この場合、オブジェクト ACL が使用が適しているかもしれません。ただし、オブジェクト ACL では最大 100 個までの付与数に制限されます。詳細については、アクセスコントロールリスト (ACL) の概要 を参照してください。

オブジェクト ACL がオブジェクトレベルのアクセス許可のみを制御する場合

バケットポリシーはバケット全体に対して 1 つですが、オブジェクト ACL は各オブジェクトに対して指定されます。

バケットを所有する AWS アカウント は、アクセスポリシーを管理する別の AWS アカウント 許可を付与できます。そうすることで、アカウントは、ポリシーのすべての内容を変更できるようになります。許可をより適切に管理するために、このような広範な許可を与えず、代わりにオブジェクトのサブセットの READ-ACPWRITE-ACP の許可のみを他のアカウントに付与することを選択できます。これにより、アカウントは個別のオブジェクト ACL を更新して、特定のオブジェクトのアクセス許可だけを管理できるようになります。

ACL を使用してオブジェクトレベルで許可を管理し、バケットに書き込まれる新しいオブジェクトも所有する場合は、オブジェクトの所有権にバケット所有者の優先設定を適用できます。バケット所有者の優先設定を持つバケットは、引き続きバケットとオブジェクトのACL を受け入れて尊重します。この設定では、bucket-owner-full-control 規定 ACLで書き込まれる新しいオブジェクトは、オブジェクトの作成者ではなく、バケット所有者によって自動的に所有されます。その他のすべての ACL 動作はそのまま残ります。すべての Amazon S3 PUT 操作に bucket-owner-full-control 規定 ACL を含めるように要求するには、この ACL を使用したオブジェクトのアップロードのみを許可する バケットポリシーを追加できます。

ACL を使用する代わりの方法。

オブジェクト ACL に加え、オブジェクトの所有者がオブジェクトへの許可を管理できる他の方法があります。

  • オブジェクトを所有する AWS アカウントがバケットも所有している場合は、バケットポリシーを作成してオブジェクトへの許可を管理できます。

  • オブジェクトを所有する AWS アカウントがアカウント内のユーザーに許可を付与する場合は、ユーザーポリシーを使用できます。

  • バケット所有者として、バケット内のすべてのオブジェクトを自動的に所有して完全に制御したい場合は、オブジェクト所有権のバケット所有者強制設定を適用して、ACL を無効にすることができます。その結果、データのアクセスコントロールはポリシーに基づきます。詳細については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。

バケット ACL の使用が適する場合

バケット ACL の唯一の推奨されるユースケースは、AWS のサービス Amazon CloudFront アカウントなどの特定の awslogsdelivery アカウントに許可を付与することです。ディストリビューションを作成または更新して、CloudFront ロギングを有効にすると、CloudFront はバケット ACL を更新して、バケットにログを書き込むための awslogsdelivery 許可を FULL_CONTROL アカウントに付与します。詳細については、Amazon CloudFront デベロッパーガイドスタンダードログ記録の設定およびログファイルへのアクセスに必要なアクセスを参照してください。ログを保存するバケットが S3 オブジェクト所有権のバケット所有者強制設定を使用して ACL を無効にすると、CloudFront はバケットにログを書き込むことができません。詳細については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。

バケットポリシーの使用が適する場合

バケットを所有する AWS アカウントがアカウント内のユーザーに許可を付与する場合は、バケットポリシーまたはユーザーポリシーを使用できます。ただし、以下のシナリオでは、バケットポリシーを使用する必要があります。

すべての Amazon S3 のアクセス許可に対してクロスアカウントのアクセス許可を管理したい場合

ACL を使用して、他のアカウントにクロスアカウントのアクセス許可を付与できます。ただし、ACL は限定された一連のアクセス許可のみをサポートしており、これにはすべての Amazon S3 のアクセス許可は含まれません。詳細については、付与できるアクセス許可 を参照してください。例えば、バケットサブリソースに許可を付与することはできません。詳細については、Amazon S3 での Identity and Access Management を参照してください。

バケットポリシーとユーザーポリシーのどちらも、すべての Amazon S3 オペレーションに対するアクセス許可の付与をサポートします。(詳しくは、Amazon S3 のアクション を参照してください)。ただし、ユーザーポリシーは、アカウント内のユーザーのアクセス許可を管理するためのものです。他の AWS アカウントまたは別のアカウントのユーザーへのクロスアカウント許可には、バケットポリシーを使用する必要があります。

ユーザーポリシーの使用が適する場合

一般的に、アクセス許可の管理にはユーザーポリシーまたはバケットポリシーが使用できます。ユーザーを作成し、ユーザー (またはユーザーグループ) にポリシーをアタッチしてアクセス許可を個別に管理することによりアクセス許可を管理することを選択できます。または、バケットポリシーなどのリソースベースのポリシーが、状況により適しているかもしれません。

AWS Identity and Access Management (IAM) で、AWS アカウント に複数のユーザーを作成して、ユーザーポリシーで許可を管理できます。IAM ユーザーは、自身が属する親アカウントからの許可と、アクセスするリソースを所有している AWS アカウントからの許可を持つ必要があります。アクセス許可は次のように付与することができます。

  • 親アカウントからのアクセス許可 – 親アカウントは、ユーザーポリシーをアタッチして、ユーザーにアクセス許可を付与できます。

  • リソースの所有者からのアクセス許可 – リソースの所有者は、IAM ユーザー (バケットポリシーを使用) または親アカウント (バケットポリシー、バケット ACL、またはオブジェクト ACL を使用) にアクセス許可を付与できます。

これは、子供がよその子のおもちゃで遊びたい場合に例えることができます。おもちゃで遊ぶためには、子供は自分の親から許可を得るとともに、おもちゃの所有者からも許可を得る必要があります。

詳細については、バケットポリシーとユーザーポリシー を参照してください。

アクセス許可の委任

AWS アカウントがリソースを所有している場合、そのアカウントは別の AWS アカウントにこれらの許可を付与できます。そのアカウントは、それらのアクセス許可またはそのサブセットを、アカウント内のユーザーに委任できます。これはアクセス許可の委任と呼ばれます。ただし、他のアカウントから許可を受け取るアカウントは、別の AWS アカウントにクロスアカウントで許可を委任することはできません。

はじめに、Amazon S3 のリソースへのアクセスを管理する方法と関連ガイドラインについて説明する概要トピックをすべてお読みになることをお勧めします。詳細については、Amazon S3 での Identity and Access Management を参照してください。その後、個々のアクセスポリシーオプションの詳細について、以下のトピックを参照してください。