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

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

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

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

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

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

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

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

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

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

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

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

注記

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

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

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

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

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

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

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

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

バケット ACL の使用が推奨される唯一のユースケースは、Amazon S3 のログ配信グループに、バケットへのアクセスログオブジェクトの書き込みアクセス許可を付与する場合です。詳細については、「サーバーアクセスログを使用したリクエストのログ記録」を参照してください。

Amazon S3 によってバケットへのアクセスログを配信させたい場合は、ログ配信グループにバケットへの書き込みアクセス許可を付与する必要があります。ログ配信グループに必要なアクセス許可を付与する唯一の方法は、以下のバケット ACL の例に示すように、バケット ACL を使用することです。

<?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 での 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」を参照してください。その後、個々のアクセスポリシーオプションの詳細について、以下のトピックを参照してください。