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

アクセス管理の概要

アクセス許可を付与する場合、アクセス許可を取得するユーザー、取得するアクセス許可の対象となる Amazon S3 リソース、およびそれらのリソースに対して許可される特定のアクションを決定します。

Amazon S3 リソース

バケットとオブジェクトはプライマリ Amazon S3 リソースであり、どちらにもサブリソースが関連付けられます。例えば、バケットのサブリソースには以下のものが含まれます。

  • lifecycle。ライフサイクルの設定情報を格納します(「オブジェクトのライフサイクル管理」を参照)。

  • website。ウェブサイトホスティング用にバケットを設定している場合に、ウェブサイトの設定情報を格納します(「Amazon S3 での静的ウェブサイトのホスティング」を参照)。

  • versioning。バージョニング設定を格納します(「PUT Bucket versioning」を参照)。

  • policyacl(アクセスコントロールリスト)。バケットのアクセス許可情報を格納します。

  • cors(Cross-Origin Resource Sharing)。バケットでクロスオリジンリクエストを許可する設定をサポートします(「Cross-Origin Resource Sharing (CORS)」を参照)。

  • logging。バケットアクセスログを保存するように Amazon S3 にリクエストできます。

オブジェクトのサブリソースには以下のものが含まれます。

  • acl。オブジェクトに対するアクセス許可のリストを格納します。このトピックでは、このサブリソースを使用して、オブジェクトのアクセス許可を管理する方法について説明します(「ACL によるアクセス管理 」を参照)。

  • restore。アーカイブされたオブジェクトの一時的な復元をサポートします(「POST Object restore」を参照)。Glacier ストレージクラスのオブジェクトはアーカイブされたオブジェクトです。このオブジェクトにアクセスするには、最初に復元リクエストを開始して、アーカイブされたオブジェクトのコピーを復元する必要があります。リクエストでは、復元されたコピーを保存しておく日数を指定します。オブジェクトのアーカイブについては、「オブジェクトのライフサイクル管理」を参照してください。

リソース所有者について

デフォルトでは、すべての Amazon S3 リソースはプライベートです。リソース所有者だけがリソースにアクセスできます。リソース所有者とは、リソースを作成する AWS アカウントを指します。(例:

  • バケットとオブジェクトを作成するために使用する AWS アカウントが、それらのリソースを所有します。

  • AWS アカウントに AWS Identity and Access Management(IAM)ユーザーを作成する場合、その AWS アカウントが親所有者になります。IAM ユーザーがオブジェクトをアップロードする場合、そのユーザーが属する親アカウントがオブジェクトを所有します。

  • バケット所有者は、別の AWS アカウント(または別のアカウントのユーザー)に対して、オブジェクトをアップロードするためのクロスアカウントアクセス許可を付与できます。この場合、オブジェクトをアップロードする AWS アカウントが、それらのオブジェクトを所有します。バケット所有者には、他のアカウントが所有するオブジェクトに対するアクセス許可はありません。ただし、次のような例外があります。

    • バケット所有者が請求の支払いを行う場合、バケット所有者は、オブジェクトの所有者に関係なく、オブジェクトへのアクセスを拒否したり、バケット内のオブジェクトを削除したりすることができます。

    • バケット所有者は、オブジェクトの所有者に関係なく、オブジェクトをアーカイブしたり、アーカイブされたオブジェクトを復元したりすることができます。アーカイブはオブジェクトの格納に使用されるストレージクラスを指します。詳細については、「オブジェクトのライフサイクル管理」を参照してください。

重要

AWS では、リクエストを実行するために、AWS アカウントのルート認証情報を使用することをお勧めしません。代わりに、IAM ユーザーを作成し、そのユーザーにフルアクセスを許可します。このようなユーザーを管理者ユーザーと呼びます。アカウントのルート認証情報ではなく、管理者ユーザーの認証情報を使用して、AWS を操作し、バケットの作成、ユーザーの作成、およびアクセス許可の付与などのタスクを実行できます。詳細については、『AWS General Reference』の「Root Account Credentials vs. IAM User Credentials」および『IAM ユーザーガイド』の「IAM ベストプラクティス」を参照してください。

次の図は、リソース、IAM ユーザー、バケット、およびオブジェクトを所有する AWS アカウントを示しています。

リソースオペレーション

Amazon S3 には、Amazon S3 リソースを操作するための一連のオペレーションが用意されています。利用可能なオペレーションのリストについては、『Amazon Simple Storage Service API Reference』の「Operations on Buckets」および「Operations on Objects」を参照してください。

リソースへのアクセスの管理(アクセスポリシーオプション)

アクセスの管理とは、アクセスポリシーを作成することによって、リソースオペレーションを実行するアクセス許可を他者(AWS アカウントおよびユーザー)に付与することを指します。例えば、ユーザーがバケットにオブジェクトをアップロードできるように、AWS アカウントのユーザーに PUT Object アクセス許可を付与できます。個々のユーザーやアカウントにアクセス許可を付与するだけでなく、全員にアクセス許可を付与することや(匿名アクセスとも呼ばれます)、すべての認証済みユーザー(AWS 認証情報を持つユーザー)にアクセス許可を付与することができます。例えば、バケットをウェブサイトとして設定する場合、GET Object アクセス許可を全員に付与することでオブジェクトをパブリックにすることができます。

アクセスポリシーでは、誰が何にアクセスできるかを記述します。アクセスポリシーは、リソース(バケットやオブジェクト)またはユーザーに関連付けることができます。したがって、使用可能な Amazon S3 アクセスポリシーを次のように分類できます。

  • リソースベースのポリシー。バケットポリシーおよびアクセスコントロールリスト(ACL)は、Amazon S3 リソースにアタッチされるため、リソースベースです。

    • ACL。各バケットおよびオブジェクトには ACL が関連付けられています。ACL は、アクセス許可の被付与者と付与されるアクセス許可を識別するリストです。ACL を使用して、基本的な読み取り/書き込みアクセス許可を他の AWS アカウントに付与します。ACL では Amazon S3 固有の XML スキーマが使用されます。

      以下に、バケット ACL の例を示します。この ACL のアクセス許可は、フルコントロールのアクセス許可を持つバケット所有者を示します。

      Copy
      <?xml version="1.0" encoding="UTF-8"?> <AccessControlPolicy xmlns="http://s3.amazonaws.com/doc/2006-03-01/"> <Owner> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>owner-display-name</DisplayName> </Owner> <AccessControlList> <Grant> <Grantee xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="Canonical User"> <ID>*** Owner-Canonical-User-ID ***</ID> <DisplayName>display-name</DisplayName> </Grantee> <Permission>FULL_CONTROL</Permission> </Grant> </AccessControlList> </AccessControlPolicy>

      バケット ACL とオブジェクト ACL はいずれも同じ XML スキーマを使用します。

    • バケットポリシー。バケットの場合、バケットポリシーを追加して、バケットおよびバケット内のオブジェクトに対するアクセス許可を、他の AWS アカウントまたは IAM ユーザーに付与できます。どのオブジェクトのアクセス許可も、バケット所有者が作成したオブジェクトにのみ適用されます。バケットポリシーは、ACL ベースのアクセスポリシーを補完し、多くの場合、これを置き換えます。

      以下に、バケットポリシーの例を示します。JSON ファイルを使用してバケットポリシー(とユーザーポリシー)を表現します。このポリシーは、バケット内のすべてのオブジェクトに対する匿名の読み取りアクセス許可を付与します。このバケットポリシーには、examplebucket という名前のバケット内のオブジェクトに対して、s3:GetObject アクション(読み取りアクセス許可)を許可する 1 個のステートメントがあります。ワイルドカード(*)を使用して principal を指定することによって、このポリシーは匿名アクセスを付与します。

      Copy
      { "Version":"2012-10-17", "Statement": [ { "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::examplebucket/*"] } ] }
  • ユーザーポリシー。AWS Identity and Access Management(IAM)を使用して、Amazon S3 リソースへのアクセスを管理できます。IAM を使用して、アカウント内に IAM ユーザー、グループ、およびロールを作成し、これらにアクセスポリシーをアタッチすることによって、Amazon S3 などの AWS リソースへのアクセスを許可できます。

    IAM の詳細については、AWS Identity and Access Management(IAM)の製品詳細ページを参照してください。

    ユーザーポリシーの例を次に示します。IAM ユーザーポリシーはユーザーにアタッチされるため、このポリシーでは匿名のアクセス許可を付与できません。このポリシーの例では、ポリシーがアタッチされた関連ユーザーに、バケットおよびバケット内のオブジェクトに対して、6 つの異なる Amazon S3 アクションを実行することを許可します。特定の IAM ユーザー、グループ、またはロールに、このポリシーをアタッチできます。

    Copy
    { "Statement": [ { "Effect":"Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:DeleteObject", "s3:ListAllMyBuckets", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource":"arn:aws:s3:::examplebucket/*" } ] }

Amazon S3 がリクエストを受け取る場合、リクエストを許可するか、拒否するかを判断するために、すべてのアクセスポリシーを評価する必要があります。Amazon S3 によるこれらのポリシーの評価方法の詳細については、「Amazon S3 がリクエストを許可する方法」を参照してください。

どのアクセスコントロール方法を使用するか

アクセスポリシーを記述するために使用できるオプションについて、次のような疑問がわいてきます。

  • どのアクセスコントロール方法を使用すればよいでしょうか。例えば、バケットのアクセス許可を付与するには、バケットポリシーとバケット ACL のどちらを使用すればよいでしょうか。バケットおよびバケット内のオブジェクトを所有している場合、リソースベースのアクセスポリシーと IAM ユーザーポリシーのどちらを使用すればよいでしょうか。リソースベースのアクセスポリシーを使用する場合、オブジェクトのアクセス許可を管理するために、バケットポリシーとオブジェクト ACL のどちらを使用すればよいでしょうか。

  • バケットを所有していますが、その中のオブジェクトをすべて所有しているわけではありません。他者が所有するオブジェクトに対するアクセス許可はどのように管理されますか。

  • これらのアクセスポリシーオプションの組み合わせを使用してアクセスを許可する場合、Amazon S3 では、ユーザーがリクエストされたオペレーションを実行するためのアクセス許可を持っているかどうかをどのように判断するのでしょうか。

以降のセクションでは、これらのさまざまなアクセスコントロール方法や、Amazon S3 によるアクセスコントロールメカニズムの評価方法について、およびいつ、どのアクセスコントロール方法を使用するかについて説明します。また、サンプルのチュートリアルも示します。

Amazon S3 がリクエストを許可する方法

アクセスポリシーのオプションを使用するためのガイドライン

チュートリアル例: Amazon S3 リソースへのアクセスの管理

初めに、Amazon S3 リソースへのアクセスを管理するために使用できるオプションについて説明する概要トピックをお読みになることをお勧めします。詳細については、「Amazon S3 リソースへのアクセス許可の管理の概要」を参照してください。その後、個々のアクセスポリシーオプションの詳細について、以下のトピックを参照してください。