Amazon S3 がリクエストを許可する仕組み - Amazon Simple Storage Service

Amazon S3 がリクエストを許可する仕組み

Amazon S3 は、バケットまたはオブジェクトオペレーションなどのリクエストを受け取ると、まずリクエスタに必要なアクセス許可があることを確認します。Amazon S3 は、関連するすべてのアクセスポリシー、ユーザーポリシー、およびリソースベースのポリシー (バケットポリシー、バケット ACL、オブジェクト ACL) を評価して、リクエストを許可するかどうかを決めます。

注記

Amazon S3 許可チェックで有効な許可が見つからなかった場合は、403 許可拒否エラーが返されます。「Amazon S3 でのアクセス拒否 (403 Forbidden) エラーのトラブルシューティング」を参照してください。

Amazon S3 は、リクエストを受け取ると、リクエスタが特定のオペレーションを実行するアクセス許可があるかどうかを確認するため、次の操作を順に実行します。

  1. 関連するすべてのアクセスポリシー (ユーザーポリシー、バケットポリシー、ACL) を実行時に評価ターゲットのポリシーのセットに変換します。

  2. 作成したポリシーのセットを次の手順で評価します。各ステップで、Amazon S3 は、コンテキストの権限に基づいて、ポリシーのサブセットを特定のコンテキストで評価します。

    1. ユーザーコンテキスト – ユーザーコンテキストでは、ユーザーが属する親アカウントにコンテキストの権限があります。

      Amazon S3 は、親アカウントが所有するポリシーのサブセットを評価します。このサブセットには、親がユーザーにアタッチするユーザーポリシーが含まれています。親がリクエスト内のリソース (バケット、オブジェクト) も所有している場合、Amazon S3 は、対応するリソースポリシー (バケットポリシー、バケット ACL、オブジェクト ACL) も同時に評価します。

      ユーザーは、オペレーションを実行するための親アカウントからのアクセス許可を持つ必要があります。

      このステップは、リクエストが AWS アカウント内のユーザーによって行われた場合にのみ適用されます。リクエストが AWS アカウントのルートユーザー認証情報を使用して行われている場合、Amazon S3 はこのステップをスキップします。

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

      バケットオペレーションに対するリクエストの場合、リクエスタはバケット所有者からのアクセス許可を持つ必要があります。リクエストがオブジェクトをターゲットにしている場合、Amazon S3 は、バケット所有者が所有するすべてのポリシーを評価して、バケット所有者がオブジェクトへのアクセスを明示的に拒否していないかどうかを確認します。明示的な拒否セットが存在する場合、Amazon S3 はリクエストを許可しません。

    3. オブジェクトコンテキスト – オブジェクトに対するリクエストの場合、Amazon S3 はオブジェクトの所有者が所有するポリシーのサブセットを評価します。

Amazon S3 がリクエストを承認する方法を示すシナリオの例を次に示します。

例 リクエスタが IAM プリンシパルの場合

リクエスタが IAM プリンシパルの場合、Amazon S3 は、オペレーションを実行するために必要な許可が、プリンシパルが属する親 AWS アカウントよりプリンシパルに付与されているかどうかを判断する必要があります。さらに、リクエストがバケットオペレーション (バケット内容のリストを取得するリクエストなど) の場合、Amazon S3 は、オペレーションを実行するためのアクセス許可をバケット所有者がリクエスタに付与していることを確認する必要があります。IAM プリンシパルがリソースに対して特定のオペレーションを実行するには、そのプリンシパルが属する親 AWS アカウントと、リソースを所有する AWS アカウントの両方からの許可が必要です。

例 リクエスタが IAM プリンシパル - リクエストが、バケット所有者が所有していないオブジェクトに対するオペレーションに関連している場合。

バケット所有者が所有していないオブジェクトに対するオペレーションのリクエストの場合は、リクエスタがオブジェクトの所有者からのアクセス許可を持つことの確認に加えて、Amazon S3 はバケットポリシーもチェックして、バケット所有者がオブジェクトに対する明示的な拒否を設定していないことを確認する必要があります。バケット所有者 (請求の支払者) は、オブジェクトの所有者にかかわらず、バケット内のオブジェクトへのアクセスを明示的に拒否できます。また、バケット所有者は、バケット内のすべてのオブジェクトを削除できます。

デフォルトでは、別の AWS アカウント がオブジェクトを S3 バケットにアップロードすると、そのアカウント (オブジェクトライター) がオブジェクトを所有し、そのオブジェクトにアクセスでき、アクセスコントロールリスト (ACL) を介して他のユーザーにそのオブジェクトへのアクセスを許可できます。オブジェクトの所有権を使用してこのデフォルトの動作を変更し、ACL を無効にして、バケット所有者としてバケット内のすべてのオブジェクトを自動的に所有することができます。その結果、データのアクセスコントロールは、IAM ユーザーポリシー、S3 バケットポリシー、仮想プライベートクラウド (VPC) エンドポイントポリシー、AWS Organizations サービスコントロールポリシー (SCP) などのポリシーに基づいています。詳細については、「オブジェクトの所有権の制御とバケットの ACL の無効化。」を参照してください。

Amazon S3 がアクセスポリシーを評価してバケットオペレーションおよびオブジェクトオペレーションのリクエストを承認または拒否する仕組みについて詳しくは、以下のトピックを参照してください。