アクセス管理の概要 - Amazon Simple Storage Service

アクセス管理の概要

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

Amazon S3 リソース: バケットとオブジェクト

Amazon Web Services (AWS) では、リソースはユーザーが操作できるエンティティです。Amazon S3 では、バケットとオブジェクトはリソースであり、どちらにもサブリソースが関連付けられます。たとえば、バケットのサブリソースには以下のものが含まれます。

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

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

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

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

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

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

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

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

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

Amazon S3 バケットとオブジェクトの所有権

バケットとオブジェクトは Amazon S3 リソースです。デフォルトでは、リソース所有者のみ、これらのリソースにアクセスできます。リソース所有者とは、リソースを作成する AWS アカウントを指します。例:

  • このようなリソースの所有者は、バケットの作成とオブジェクトのアップロードに使用する AWS アカウントです。

     

  • AWS Identity and Access Management (IAM) ユーザーまたはロールの認証情報を使用してオブジェクトをアップロードする場合、オブジェクトの所有者は、そのユーザーやロールが所属する AWS アカウントです。

     

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

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

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

所有権とリクエスト認証

バケットに対するリクエストはすべて、認証済みまたは未認証です。認証リクエストには、リクエストの送信元を認証する署名値を含める必要がありますが、未認証のリクエストには含みません。リクエスト認証の詳細については、「リクエストの実行」を参照してください。

バケット所有者は認証されていないリクエストを許可できます。たとえば、認証されていない PUT オブジェクトリクエストは、バケットにパブリックバケットポリシーが設定されている場合、またはバケット ACL で「すべてのユーザー」グループまたは「匿名ユーザー」に WRITE または FULL_CONTROL のアクセス権が付与されている場合に許可されます。パブリックバケットポリシーとパブリック ACL の詳細については、「「パブリック」の意味」を参照してください。

認証されていないリクエストはすべて、匿名ユーザーによって行われます。このユーザーは、特定の正規ユーザー ID 65a011a29cdf8ec533ec3d1ccaae921c によって、アクセスコントロールリスト (ACL) で表されます。認証されていないリクエストでオブジェクトがバケットにアップロードされている場合、所有者はその匿名ユーザーです。デフォルトのオブジェクト ACL では、FULL_CONTROL がオブジェクトの所有者として匿名ユーザーに付与されます。そのため、Amazon S3 では、認証されていないリクエストによるオブジェクトの取得やその ACL の変更を許可しています。

匿名ユーザーによってオブジェクトが変更されないように、匿名のパブリック書き込みをバケットに許可するバケットポリシーを実装したり、匿名ユーザーにバケットへの書き込みアクセスを許可したりする ACL を使用しないことをお勧めします。この推奨されている方法を義務付けるには、Amazon S3 ブロックパブリックアクセスを使用します。

パブリックアクセスのブロックの詳細については、「Amazon S3 パブリックアクセスブロックの使用」を参照してください。ACL の詳細については、「アクセスコントロールリスト (ACL) の概要」を参照してください。

重要

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

リソースオペレーション

Amazon S3 には、Amazon S3 リソースを操作するための一連のオペレーションが用意されています。使用可能なオペレーションのリストについては、「Amazon S3 で定義されるアクション」を参照してください。

リソースへのアクセスの管理

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

アクセスポリシーのオプション

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

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

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

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

      <?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 を指定する際にワイルドカード (*) を使用すると、このポリシーによって匿名アクセスが付与されるため、慎重に使用する必要があります。たとえば、次のバケットポリシーでは、オブジェクトはパブリックアクセス可能になります。

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

    
						ユーザーポリシーがアタッチされた AWS アカウントの管理者や他のユーザーを示す図。

    IAM の詳細については、「AWS Identity およびアクセス管理 (IAM)」の製品詳細ページを参照してください。

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "ExampleStatement1", "Effect": "Allow", "Action": [ "s3:PutObject", "s3:GetObject", "s3:ListBucket", "s3:DeleteObject", "s3:GetBucketLocation" ], "Resource": [ "arn:aws:s3:::examplebucket/*", "arn:aws:s3:::examplebucket" ] }, { "Sid": "ExampleStatement2", "Effect": "Allow", "Action": "s3:ListAllMyBuckets", "Resource": "*" } ] }

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

Access Analyzer for S3

Amazon S3 コンソールで Access Analyzer for S3 を使用することで、パブリックアクセスまたは共有アクセスを許可するバケットアクセスコントロールリスト (ACL)、バケットポリシー、またはアクセスポイントポリシーを持つすべてのバケットを確認できます。Access Analyzer for S3 は、インターネットの任意のユーザーや他の AWS アカウント (組織外の AWS アカウントなど) にアクセスを許可するように設定されたバケットについて警告します。パブリックバケットまたは共有バケットごとに、パブリックアクセスや共有アクセスのソースとレベルを報告する結果が送信されます。

Access Analyzer for S3 では、ワンクリックでバケットへのすべてのパブリックアクセスをブロックできます。特定のユースケースをサポートするためにパブリックアクセスが必要な場合を除き、バケットへのすべてのアクセスをブロックすることをお勧めします。すべてのパブリックアクセスをブロックする前に、アプリケーションがパブリックアクセスなしで正常に動作することを確認してください。詳細については、「Amazon S3 パブリックアクセスブロックの使用」を参照してください。

また、バケットレベルのアクセス許可の設定を参照して、きめ細かいアクセスレベルを設定することもできます。パブリックアクセスまたは共有アクセスを必要とする特定の検証済みユースケースについては、バケットの調査結果をアーカイブすることで、バケットをパブリックまたは共有とすることを確定して記録できます。これらのバケット設定はいつでも再確認および変更できます。結果は、監査目的で CSV レポートとしてダウンロードすることもできます。

Access Analyzer for S3 は、Amazon S3 コンソールで追加料金なしで利用できます。Access Analyzer for S3 は AWS Identity and Access Management (IAM) Access Analyzer を使用します。Amazon S3 コンソールで Access Analyzer for S3 を使用するには、IAM コンソールにアクセスし、リージョンごとに IAM Access Analyzer でアカウントレベルのアナライザーを作成する必要があります。

Access Analyzer for S3 の詳細については、Amazon Simple Storage Service コンソールユーザーガイド の「Access Analyzer for S3 の使用方法」を参照してください。

使用するアクセスコントロール方法の選択

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

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

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

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

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

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