メニュー
Amazon Simple Storage Service
開発者ガイド (API Version 2006-03-01)

アクセスポリシーのオプションを使用するためのガイドライン

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

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

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

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

オブジェクト ACL の他にも、オブジェクトの所有者がオブジェクトへのアクセス許可を管理するにはいくつかの方法があります。(例:

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

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

それでは、オブジェクト ACL を使用してオブジェクトへのアクセス許可を管理するのはどのような場合でしょうか。オブジェクト ACL を使用してオブジェクトへのアクセス許可を管理するシナリオを以下に示します。

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

    注記

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

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

    このような場合、オブジェクト ACL が代わりに使用できる可能性があります。ただし、オブジェクト ACL を使用しても、付与できる許可は最大 100 個に制限されます(「アクセスコントロールリスト(ACL)の概要」を参照してください)。

  • オブジェクト ACL はオブジェクトレベルのアクセス許可のみを制御 - バケットポリシーはバケット全体に対して 1 つですが、オブジェクト ACL は各オブジェクトに対して指定されます。

    バケットを所有する AWS アカウントは、アクセスポリシーを管理するアクセス許可を別の AWS アカウントに付与できます。アクセス許可を付与されたアカウントは、ポリシーのすべての内容を変更できるようになります。アクセス許可の管理をより細かく行うには、そのような広範囲のアクセス許可を付与するのではなく、オブジェクトのサブセットに対する READ-ACP および WRITE-ACP アクセス許可だけを付与することもできます。これにより、アカウントは個別のオブジェクト ACL を更新して、特定のオブジェクトのアクセス許可だけを管理できるようになります。

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

バケット ACL の使用が推奨される唯一のケースは、Amazon S3 の Log Delivery グループに、バケットへのアクセスログオブジェクトの書き込みアクセス許可を付与する場合です(「サーバーアクセスのロギング」を参照してください)。Amazon S3 によるバケットへのアクセスログの配信を希望する場合は、Log Delivery グループにバケットへの書き込みアクセス許可を付与する必要があります。Log Delivery グループに必要なアクセス許可を付与する唯一の方法は、以下のバケット ACL の例に示すように、バケット ACL を使用することです。

Copy
<?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> ... </Owner> <AccessControlList> <Grant> ... </Grant> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Group"> <URI>http://acs.amazonaws.com/groups/s3/LogDelivery</URI> </Grantee> <Permission>WRITE</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

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

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

  • すべての Amazon S3 アクセス許可に関するクロスアカウントアクセス許可を管理する場合 - ACL を使用してクロスアカウントアクセス許可を他のアカウントに付与することはできますが、ACL ではアクセス許可の有限のセットしかサポートされないため(「付与できるアクセス許可」)、すべての Amazon S3 アクセス許可は含まれません。たとえば、ACL を使用してバケットのサブリソースに対するアクセス許可を付与することはできません(「Amazon S3 リソースへのアクセス許可の管理」を参照してください)。

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

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

一般的に、アクセス許可の管理にはユーザーポリシーまたはバケットポリシーが使用できます。ユーザーを作成し、ユーザー(またはユーザーグループ)にポリシーをアタッチすることでアクセス許可を個別に管理することもできます。あるいは、シナリオによってはバケットポリシーなどのリソースベースのポリシーの方が適切と判断される場合もあります。

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

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

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

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

アクセス許可の委任

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

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