Amazon S3 がオブジェクトオペレーションのリクエストを許可する仕組み - Amazon Simple Storage Service

Amazon S3 がオブジェクトオペレーションのリクエストを許可する仕組み

Amazon S3 は、オブジェクトオペレーションのリクエストを受け取ると、関連するすべての許可 、リソースベースの許可 (オブジェクトアクセスコントロールリスト (ACL)、バケットポリシー、バケット (ACL) と IAM ユーザーポリシー) を実行時に評価する一連のポリシーに変換します。その後、作成したポリシーのセットを一連の手順で評価します。各ステップでは、ポリシーのサブセットが、ユーザーコンテキスト、バケットコンテキスト、オブジェクトコンテキストの 3 つの固有のコンテキストで評価されます。

  1. ユーザーコンテキスト – リクエスタが IAM プリンシパルの場合、そのプリンシパルは親 AWS アカウント からアクセス許可を付与されている必要があります。このステップで、Amazon S3 は、親アカウント (コンテキストの権限とも呼ばれる) が所有するポリシーのサブセットを評価します。このポリシーのサブセットには、親がプリンシパルにアタッチするユーザーポリシーが含まれます。親がリクエスト内のリソース (バケット、オブジェクト) も所有している場合、Amazon S3 は、対応するリソースポリシー (バケットポリシー、バケット ACL、オブジェクト ACL) を同時に評価します。

    注記

    親 AWS アカウントがリソース (バケットまたはオブジェクト) を所有している場合、親アカウントは、ユーザーポリシーまたはリソースポリシーを使用して、リソースの許可を IAM プリンシパルに付与できます。

  2. バケットコンテキスト – このコンテキストでは、Amazon S3 はバケットを所有する AWS アカウント が所有するポリシーを評価します。

    リクエスト内のオブジェクトを所有する AWS アカウントがバケット所有者と同じでない場合、Amazon S3 はバケットコンテキストでポリシーをチェックして、バケット所有者がオブジェクトへのアクセスを明示的に拒否しているかどうかを確認します。オブジェクトに対する明示的な拒否セットが存在する場合、Amazon S3 はリクエストを許可しません。

  3. オブジェクトコンテキスト – リクエスタは、オブジェクト所有者から特定のオブジェクトオペレーションを実行するためのアクセス許可を付与されている必要があります。このステップで、Amazon S3 はオブジェクト ACL を評価します。

    注記

    バケットとオブジェクトの所有者が同じ場合、オブジェクトへのアクセスは、バケットコンテキストで評価されるバケットポリシーで許可することができます。所有者が異なる場合、オブジェクトの所有者はオブジェクト ACL を使用してアクセス許可を付与する必要があります。オブジェクトを所有する AWS アカウントが IAM プリンシパルの親アカウントでもある場合は、ユーザーコンテキストで評価されるユーザーポリシーでオブジェクトのアクセス許可を設定できます。これらのアクセスポリシーの各オプションの詳細については、アクセスポリシーのガイドライン を参照してください。

    バケット所有者がバケット内のすべてのオブジェクトを所有し、バケットポリシーまたはIAMベースのポリシーを使用してこれらのオブジェクトへのアクセスを管理する場合は、オブジェクト所有権にバケット所有者強制設定を適用できます。この設定では、バケット所有者として、バケット内のすべてのオブジェクトを自動的に所有し、完全に制御できます。バケットとオブジェクト ACL は編集できず、アクセスと見なされなくなります。詳細については、オブジェクトの所有権の制御とバケットの ACL の無効化。 を参照してください。

次に示すのは、オブジェクトオペレーションに対するコンテキストベースの評価の説明です。

例 1: オブジェクトオペレーションのリクエスト

この例では、親 AWS アカウント が 1111−1111−1111 である IAM ユーザー Jill が、AWS アカウント 2222−2222−2222 が所有するバケットにある、AWS アカウント 3333−3333−3333 が所有するオブジェクトに対するオブジェクトオペレーションのリクエスト (オブジェクトの取得など) を送信します。

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

  1. リクエストは IAM プリンシパルからであるため、Amazon S3 は、ユーザーコンテキストを評価して、親 AWS アカウント 1111−1111−1111 がリクエストされたオペレーションを実行するアクセス許可を Jill に付与していることを検証します。アクセス許可がある場合、Amazon S3 はバケットコンテキストを評価します。アクセス許可がない場合、Amazon S3 はリクエストを拒否します。

  2. バケットコンテキストでは、バケット所有者の AWS アカウント 2222−2222−2222 がコンテキストの権限です。Amazon S3 は、バケットポリシーを評価して、バケット所有者がオブジェクトへのアクセスを Jill に対して明示的に拒否しているかどうかを判定します。

  3. オブジェクトコンテキストでは、コンテキストの権限はオブジェクト所有者の AWS アカウント 3333−3333−3333 です。Amazon S3 は、オブジェクト ACL を評価して、Jill がオブジェクトにアクセスするアクセス許可を持つかどうかを判定します。アクセス許可がある場合、Amazon S3 はリクエストを許可します。