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

Amazon S3 がバケットオペレーションのリクエストを許可する方法

Amazon S3 は、バケットオペレーションのリクエストを受け取ると、関連するすべてのアクセス許可、すなわちリソースベースの アクセス許可(バケットポリシー、バケットアクセスコントロールリスト(ACL))と、ユーザーからのリクエストの場合は IAM ユーザーポリシーを、実行時に評価するポリシーのセットに変換します。その後、作成したポリシーのセットを、特定のコンテキスト(ユーザーコンテキストまたはバケットコンテキスト)に従って、一連の手順で評価します。

  1. ユーザーコンテキスト - リクエスタが IAM ユーザーの場合、ユーザーは自分が属する親 AWS アカウントからのアクセス許可を持つ必要があります。このステップで、Amazon S3 は、親アカウント(コンテキストの権限とも呼ばれる)が所有するポリシーのサブセットを評価します。このポリシーのサブセットには、親アカウントがユーザーにアタッチするユーザーポリシーが含まれます。親がリクエスト内のリソース(この場合はバケット)も所有している場合、Amazon S3 は、対応するリソースポリシー(バケットポリシーおよびバケット ACL)も同時に評価します。バケットオペレーションのリクエストが出されるたびに、サーバーアクセスログはリクエスタの正規ユーザー ID を記録します。 詳細については、「サーバーアクセスのロギング」を参照してください。

  2. バケットコンテキスト –リクエスタは、特定のバケットオペレーションを実行するためのバケット所有者からのアクセス許可を持つ必要があります。このステップで、Amazon S3 は、バケットを所有する AWS アカウントが所有するポリシーのサブセットを評価します。

    バケット所有者は、バケットポリシーまたはバケット ACL を使用してアクセス許可を付与できます。バケットを所有している AWS アカウントが IAM ユーザーの親アカウントでもある場合は、ユーザーポリシーでバケットのアクセス許可を設定できます。

次に示すのは、バケットオペレーションのコンテキストベースの評価を説明するための図です。

次の例は、評価ロジックを示します。

例 1: バケット所有者がリクエストするバケットオペレーション

この例では、バケット所有者が AWS アカウントのルート認証情報を使用してバケットオペレーションのリクエストを送信します。

Amazon S3 はコンテキストの評価を次のように実行します。

  1. リクエストは AWS アカウントのルート認証情報を使用して行われているので、ユーザーコンテキストは評価されません。

  2. バケットコンテキストでは、Amazon S3 はバケットポリシーを調べて、リクエスタがオペレーションを実行するアクセス許可を持つかどうかを判定します。Amazon S3 はリクエストを許可します。

例 2: バケット所有者でない AWS アカウントによってリクエストされるバケットオペレーション

この例では、AWS アカウント 2222-2222-2222 が所有するバケットオペレーションのリクエストが、AWS アカウント 1111-1111-1111 のルート認証情報を使用して行われます。このリクエストに IAM ユーザーは関与していません。

この場合、Amazon S3 は次のようにコンテキストを評価します。

  1. リクエストは AWS アカウントのルート認証情報を使用して行われているので、ユーザーコンテキストは評価されません。

  2. バケットコンテキストでは、Amazon S3 はバケットポリシーを調べます。バケット所有者(AWS アカウント 2222-2222-2222)が、リクエストされたオペレーションを AWS アカウント 1111-1111-1111 に許可していない場合は、Amazon S3 はリクエストを拒否します。それ以外の場合、Amazon S3 はリクエストを許可し、オペレーションを実行します。

例 3: 親 AWS アカウントがバケット所有者でもある IAM ユーザーがリクエストするバケットオペレーション

この例では、リクエストを送信したユーザーが AWS アカウント 1111-1111-1111 の IAM ユーザー Jill であり、このアカウントがバケットの所有者でもあります。

Amazon S3 は次のコンテキスト評価を実行します。

  1. リクエストは IAM ユーザーからであるため、ユーザーコンテキストで、Amazon S3 は親 AWS アカウントに属するすべてのポリシーを評価して、Jill がオペレーションを実行するアクセス許可を持っているかどうかを判定します。

    この例では、ユーザーが属する親 AWS アカウント 1111-1111-1111 は、バケットの所有者でもあります。その結果、Amazon S3 は、ユーザーポリシーに加えて、バケットポリシーとバケット ACL も同じコンテキストで評価します。これらが同じアカウントに属するからです。

  2. Amazon S3 はバケットポリシーとバケット ACL をユーザーコンテキストの一部として評価したので、バケットコンテキストは評価しません。

例 4: 親 AWS アカウントがバケット所有者でない IAM ユーザーがリクエストするバケットオペレーション

この例では、リクエストを送信したのが 1111-1111-1111 を親アカウントとする IAM ユーザー Jill であり、バケットの所有者は別の AWS アカウント 2222-2222-2222 です。

ジルには、親 AWS アカウントとバケット所有者の両方からのアクセス許可が必要です。Amazon S3 は次のようにコンテキストを評価します。

  1. リクエストは IAM ユーザーからであるため、Amazon S3 は、アカウントが作成したポリシーを参照してユーザーコンテキストを評価し、Jill に必要なアクセス許可があることを確認します。Jill にアクセス許可がある場合、Amazon S3 はバケットコンテキストの評価に進みます。アクセス許可がない場合は、リクエストを拒否します。

  2. バケットコンテキストでは、Amazon S3 はバケット所有者の 2222-2222-2222 がリクエストされたオペレーションを実行するアクセス許可を Jill(またはその親 AWS アカウント)に付与していることを確認します。アクセス許可がある場合、Amazon S3 はリクエストを許可し、オペレーションを実行します。アクセス許可がない場合、Amazon S3 はリクエストを拒否します。