Amazon S3 のポリシーとアクセス許可 - Amazon Simple Storage Service

Amazon S3 のポリシーとアクセス許可

ここでは、Amazon S3 のバケットポリシーとユーザーポリシーの概要を示し、AWS Identity and Access Management (IAM) ポリシーの基本的なエレメントについて説明します。リストされた各エレメントは、そのエレメントの詳細と使用方法の例にリンクしています。

Amazon S3 アクションの完全なリストについては、「サービス認証リファレンス」の「Amazon S3 のアクション、リソース、および条件キー」を参照してください。

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「Amazon S3 API オペレーションに必要なアクセス許可」を参照してください。

基本的に、ポリシーには以下のエレメントが含まれます。

  • Resource — ポリシーが適用される Amazon S3 バケット、オブジェクト、アクセスポイント、またはジョブ。バケット、オブジェクト、アクセスポイント、またはジョブの Amazon リソースネーム (ARN) を使用してリソースを識別します。

    バケットレベルのオペレーションの例:

    "Resource": "arn:aws:s3:::bucket_name"

    オブジェクトレベルのオペレーションの例:

    • "Resource": "arn:aws:s3:::bucket_name/*" (バケットのすべてのオブジェクト)

    • "Resource": "arn:aws:s3:::bucket_name/prefix/*" (バケット内の特定のプレフィックスの下にあるオブジェクト)

    詳細については、「Amazon S3 のポリシーリソース」を参照してください。

  • Actions – Amazon S3 では、各リソースに対して一連のオペレーションがサポートされています。許可 (または拒否) するリソースのオペレーションは、アクションキーワードを使用して識別します。

    例えば、s3:ListBucket アクセス許可は、Amazon S3 の ListObjectsV2 オペレーションの使用をユーザーに許可します (s3:ListBucket アクセス許可は、アクション名がオペレーション名に直接マッピングされないケースに該当します)。Amazon S3 アクションの使用に関する詳細については、「Amazon S3 のポリシーアクション」を参照してください。Amazon S3 のアクション一覧については、Amazon Simple Storage Service API リファレンスの「アクション」を参照してください。

  • Effect – ユーザーが特定のアクションをリクエストした場合の効力です。Allow または Deny のいずれかになります。

    リソースへのアクセスを明示的に許可していない場合、アクセスは暗黙的に拒否されます。リソースへのアクセスを明示的に拒否することもできます。別のポリシーでリソースへのアクセスが許可されているユーザーに対して、そのリソースへのアクセスを禁止できます。詳細については、IAM ユーザーガイドの「IAM JSON ポリシーの要素: Effect」を参照してください。

  • Principal – ステートメントのアクションやリソースへのアクセスが許可されているアカウントまたはユーザーを指します。バケットポリシーの場合、プリンシパルは、このアクセス許可の被付与者であるユーザー、アカウント、サービス、または他のエンティティです。詳細については、「バケットポリシーのプリンシパル」を参照してください。

  • Condition – ポリシーが有効になる条件。Amazon S3 のアクセスポリシーの条件は、AWS 全体のキーと Amazon S3 固有のキーを使用して指定することができます。詳細については、「条件キーを使用したバケットポリシーの例」を参照してください。

以下のバケットポリシーの例は、EffectPrincipalActionResourceのエレメントを示しています。このポリシーは、アカウント 123456789012 のユーザー Akua に、amzn-s3-demo-bucket1 バケットに対する Amazon S3 の s3:GetObjects3:GetBucketLocations3:ListBucket アクセス許可を付与します。

{ "Version": "2012-10-17", "Id": "ExamplePolicy01", "Statement": [ { "Sid": "ExampleStatement01", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::123456789012:user/Akua" }, "Action": [ "s3:GetObject", "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket1/*", "arn:aws:s3:::amzn-s3-demo-bucket1" ] } ] }

ポリシーの言語の詳細については、「IAM ユーザーガイド」の「IAM でのポリシーとアクセス許可」および「IAM JSON ポリシーリファレンス」を参照してください。

アクセス許可の委任

AWS アカウントがリソースを所有している場合、そのアカウントは別の AWS アカウントにこれらの許可を付与できます。そのアカウントは、それらのアクセス許可またはそのサブセットを、アカウント内のユーザーに委任できます。これはアクセス許可の委任と呼ばれます。ただし、他のアカウントから許可を受け取るアカウントは、別の AWS アカウント にクロスアカウントで許可を委任することはできません。

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

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

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

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

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

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

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

所有権とリクエスト認証

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

バケット所有者は認証されていないリクエストを許可できます。例えば、認証されていない PutObject リクエストは、バケットにパブリックバケットポリシーが適用されている場合や、バケットの ACL で All Users グループまたは匿名ユーザーに WRITE または FULL_CONTROL のアクセス許可が付与されている場合に許可されます。パブリックバケットポリシーとパブリックアクセスコントロールリスト (ACL) の詳細については、「パブリック」の意味 を参照してください。

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

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

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

重要

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