Amazon S3 がバケットオペレーションのリクエストを承認する仕組み - Amazon Simple Storage Service

Amazon S3 がバケットオペレーションのリクエストを承認する仕組み

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

  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 を親 AWS アカウント とする IAM ユーザー Jill であり、バケット所有者は別の AWS アカウント 2222−2222−2222 です。

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

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

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