バケットポリシーの例 - Amazon Simple Storage Service

バケットポリシーの例

このセクションでは、バケットポリシーの一般的なユースケース例をいくつか紹介します。以下のポリシーでは、リソース値の中で「DOC-EXAMPLE-BUCKET」の文字列が使用されています。これらのポリシーをテストするには、これらの文字列を使用するバケット名に置き換えます。バケットポリシーの詳細については、バケットポリシーの使用 を参照してください。ポリシー言語については、「Amazon S3 のポリシーとアクセス許可」を参照してください。

バケットポリシーは、バケットとその中のオブジェクトへのアクセス許可を付与できるリソースベースのポリシーです。バケット所有者のみが、ポリシーをバケットに関連付けることができます。バケットに添付された許可は、バケット所有者が所有するバケットのすべてのオブジェクトに適用されます。これらの許可は、他の AWS アカウント が所有するオブジェクトには適用されません。

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

バケットポリシーの詳細については、バケットポリシーの使用 を参照してください。

注記

バケットポリシーのサイズは 20 KB に制限されています。

Amazon S3 のバケットポリシーの作成には、AWS Policy Generator を使用することができます。作成されたドキュメントを Amazon S3 コンソール、サードパーティー製ツール、お使いのアプリケーションなどを使用してバケットポリシーを設定できます。

重要

Amazon S3 コンソールを使用して許可をテストするときには、コンソールに必要な s3:ListAllMyBucketss3:GetBucketLocations3:ListBucket の許可を追加で付与する必要があります。コンソールを使用してユーザーにアクセス許可を付与してテストする例の解説については、ユーザーポリシーを使用したバケットへのアクセスの制御 を参照してください。

追加条件付きでの複数のアカウントへのアクセス許可の付与

次のポリシーの例では、s3:PutObject および s3:PutObjectAcl 許可を複数の AWS アカウントに付与し、これらのオペレーションのリクエストに public-read という既定のアクセスコントロールリスト (ACL) が含まれることを要求しています。詳細については、Amazon S3 のアクション および Amazon S3 条件キーの例 を参照してください。

警告

Amazon S3 のバケットへの匿名アクセスを許可したり、パブリックアクセスブロック設定を無効にしたりする場合は注意が必要です。匿名アクセスを付与すると、世界中のすべてのユーザーがバケットにアクセスできます。静的なウェブサイトのホスティングなどで特に必要な場合を除いて、Amazon S3 のバケットへの匿名アクセスは許可しないことをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddCannedAcl", "Effect": "Allow", "Principal": { "AWS": [ "arn:aws:iam::111122223333:root", "arn:aws:iam::444455556666:root" ] }, "Action": [ "s3:PutObject", "s3:PutObjectAcl" ], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": { "s3:x-amz-acl": [ "public-read" ] } } } ] }

匿名ユーザーへの読み取り専用アクセス許可の付与

次のポリシー例では、任意のパブリック匿名ユーザーに s3:GetObject アクセス許可を付与します。(これによって許可されるアクセスとオペレーションの一覧については、Amazon S3 のアクション を参照してください。) このアクセス許可はオブジェクトデータを誰でも読み取り可能にするので、バケットをウェブサイトとして設定し、バケット内のオブジェクトをすべての人が読み取れるようにする場合に便利です。バケットポリシーを使用して匿名ユーザーに読み取り専用アクセス許可を付与する前に、バケットのパブリックアクセスブロック設定を無効にする必要があります。詳細については、ウェブサイトアクセスのアクセス許可の設定 を参照してください。

警告

Amazon S3 のバケットへの匿名アクセスを許可したり、パブリックアクセスブロック設定を無効にしたりする場合は注意が必要です。匿名アクセスを付与すると、世界中のすべてのユーザーがバケットにアクセスできます。静的なウェブサイトのホスティングなどで特に必要な場合を除いて、Amazon S3 のバケットへの匿名アクセスは許可しないことをお勧めします。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "PublicRead", "Effect": "Allow", "Principal": "*", "Action": [ "s3:GetObject", "s3:GetObjectVersion" ], "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ] } ] }

特定の IP アドレスのアクセスの制限

以下の例では、リクエストが条件で指定した IP アドレス範囲からのものでない限り、指定した S3 のバケット内のオブジェクトに対して Amazon S3 のオペレーションを実行するユーザーのアクセスを拒否します。

このステートメントは、許可されたインターネットプロトコルバージョン 4 (IPv4) の IP アドレスの範囲として、54.240.143.0/24 を識別します。

Condition ブロックでは、NotIpAddress 条件と aws:SourceIp 条件キー (AWS 全体をターゲットとする条件キー) を使用します。これらの条件キーの詳細については、Amazon S3 条件キーの例 を参照してください。aws:SourceIpIPv4 値は標準の CIDR 表記を使用します。詳細については、IAM ユーザーガイドIAM JSON ポリシーのエレメントのリファレンスを参照してください。

警告

このポリシーを使用する前に、この例の 54.240.143.0/24 IP アドレス範囲をユースケースに適した値に置き換えてください。置き換えないと、バケットにアクセスできなくなります。

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "NotIpAddress": { "aws:SourceIp": "54.240.143.0/24" } } } ] }

IPv4 アドレスと IPv6 アドレスの許可

IPv6 アドレスの使用を開始する場合は、IPv6 アドレスに移行してもポリシーが引き続き確実に機能するように、既存の IPv4 アドレス範囲に IPv6 アドレス範囲を追加して組織のすべてのポリシーを更新することをお勧めします。

以下のバケットポリシーの例は、組織の有効な IP アドレスすべてを含めるために、IPv4 アドレス範囲と IPv6 アドレス範囲を混在させる方法を示しています。このポリシーの例では、サンプル IP アドレス (54.240.143.1 および 2001:DB8:1234:5678::1) へのアクセスを許可したり、アドレス 54.240.143.129 および 2001:DB8:1234:5678:ABCD::1 へのアクセスを拒否したりできます。

aws:SourceIp の IPv6 の値は、標準の CIDR 形式で指定する必要があります。IPv6 では、0 の範囲を表すために :: の使用がサポートされています (例:2032001:DB8:1234:5678::/64)。詳細については、IAM ユーザーガイドIP アドレス条件演算子 を参照してください。

警告

このポリシーを使用する前に、この例の IP アドレス範囲をユースケースに適した値に置き換えます。置き換えないと、バケットにアクセスできなくなる可能性があります。

{ "Id": "PolicyId2", "Version": "2012-10-17", "Statement": [ { "Sid": "AllowIPmix", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::DOC-EXAMPLE-BUCKET", "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" ], "Condition": { "IpAddress": { "aws:SourceIp": [ "54.240.143.0/24", "2001:DB8:1234:5678::/64" ] }, "NotIpAddress": { "aws:SourceIp": [ "54.240.143.128/30", "2001:DB8:1234:5678:ABCD::/80" ] } } } ] }

特定の HTTP Referer へのアクセスの制限

Amazon S3 バケット DOC-EXAMPLE-BUCKET に保存されている写真や動画へのリンクがあるドメイン名 (www.example.com または example.com) のウェブサイトがあるとします。デフォルトでは、Amazon S3 のすべてのリソースはプライベートであるため、リソースを作成した AWS アカウントのみがアクセスできます。これらのオブジェクトへのウェブサイトからの読み取りアクセスを許可するには、s3:GetObject アクセス許可を条件付きで付与するバケットポリシーを追加する方法があります。条件としては、aws:Referer キーを使用して、GET リクエストが特定のウェブページから発生する必要があることを指定します。次のポリシーは、StringLike 条件を aws:Referer 条件キーで指定しています。

{ "Version":"2012-10-17", "Id":"http referer policy example", "Statement":[ { "Sid":"Allow get requests originating from www.example.com and example.com.", "Effect":"Allow", "Principal":"*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }

使用するブラウザのリクエストに HTTP referer ヘッダーが含まれていることを確認します。

警告

aws:Referer 条件キーを使用するときには、十分な注意が必要です。一般に知られている参照子のヘッダー値を含めるのは危険です。不正な当事者は、変更されたブラウザまたはカスタムブラウザを使用して任意の aws:Referer 値を提供することができます。したがって、無許可の当事者が AWS リクエストを直接作成できないよう、aws:Referer を使用しないでください。

この aws:Referer 条件キーは、Amazon S3 に保存されているコンテンツなどのデジタルコンテンツが、無許可のサードパーティーサイトで参照されないよう保護する目的でのみ、お客様に提供されています。詳細については、IAM ユーザーガイドaws:Referer を参照してください。

Amazon CloudFront の OAI へのアクセス許可の付与

次のバケットポリシーの例は、CloudFront のオリジンアクセスアイデンティティ (OAI) に Amazon S3 のバケット内のすべてのオブジェクトを取得 (読み取り) するアクセス許可を付与します。CloudFront の OAI を使用すると、バケット内のオブジェクトへの CloudFront からのアクセスは許可して、Amazon S3 からの直接アクセスは許可しないようにすることができます。詳細については、Amazon CloudFront デベロッパーガイドオリジンアクセスアイデンティティを使用して Amazon S3 コンテンツへのアクセスを制限するを参照してください。

次のポリシーは、OAI の ID をポリシーの Principal として使用します。S3 のバケットポリシーを使用して CloudFront の OAI にアクセス許可を付与する方法の詳細については、Amazon CloudFront デベロッパーガイドAmazon S3 バケットポリシーの使用を参照してください。

この例を使用するには:

{ "Version": "2012-10-17", "Id": "PolicyForCloudFrontPrivateContent", "Statement": [ { "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::cloudfront:user/CloudFront Origin Access Identity EH1HDMB1FH2TC" }, "Action": "s3:GetObject", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

MFA を要求するバケットポリシーの追加

Amazon S3 は、多エレメント認証 (MFA) で保護された API へのアクセスをサポートしています。この機能により、Amazon S3 のリソースへのアクセスに MFA を強制的に適用することができます。多エレメント認証により、AWS 環境に適用できるセキュリティのレベルが高まります。このセキュリティ機能では、有効な MFA コードを入力して MFA デバイスを物理的に所有していることを証明することがユーザーに要求されます。詳細については、AWS 多エレメント認証 を参照してください。Amazon S3 のリソースにアクセスするすべてのリクエストに対して MFA を要求することができます。

MFA の要件は、バケットポリシーで aws:MultiFactorAuthAge キーを使用することで適用できます。AWS Identity and Access Management(IAM) ユーザーは、AWS Security Token Service (AWS STS) により発行される一時的な認証情報を使用して、Amazon S3 のリソースにアクセスできます。AWS STS リクエスト時に、MFA コードを指定します。

Amazon S3 が多エレメント認証のリクエストを受け取ると、aws:MultiFactorAuthAge キーに一時的な認証情報が作成されてからの時間の数値 (秒) が示されます。リクエストで提供された一時的な認証情報が MFA デバイスを使用して作成されていない場合、このキー値は null (不在) になります。次のバケットポリシー例に示すように、バケットポリシーに、この値を確認する条件を追加できます。このポリシー例は、リクエストが MFA を使用して認証されていない場合、DOC-EXAMPLE-BUCKET バケットの /taxdocuments フォルダに対するすべての Amazon S3 オペレーションを拒否します。MFA の詳細については、IAM ユーザーガイドAWSの での多エレメント認証 (MFA) の使用 を参照してください。

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }

aws:MultiFactorAuthAge キー値が null で、リクエスト内の一時的なセキュリティ認証情報が MFA キーを使用せずに作成されたことを示している場合、Condition ブロック内の Null 条件の評価は true になります。

次のバケットポリシーは、前述のバケットポリシーの拡張です。2 つのポリシーステートメントが含まれています。1 つのステートメントは、バケット (DOC-EXAMPLE-BUCKET) の s3:GetObject アクセス許可を全員に付与します。もう 1 つのステートメントは、MFA を要求することにより、バケットの DOC-EXAMPLE-BUCKET/taxdocuments フォルダへのアクセスを制限します。

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

オプションで、リクエストの認証に使われる一時セキュリティ証明書の寿命に関係なく、aws:MultiFactorAuthAge キーの有効期間を制限する数値条件を使用することができます。例えば、次のバケットポリシーでは、MFA 認証を要求するほかに、一時セッションが作成されてからの時間もチェックします。このポリシーは、aws:MultiFactorAuthAge キーの値が、一時セッションが 1 時間 (3,600 秒) 以上前に作成されたことを示す場合に、すべてのオペレーションを拒否します。

{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET/*" } ] }

バケット所有者はフルコントロール権限を持ちながら、オブジェクトをアップロードするためのクロスアカウントアクセス許可を付与する

以下の例は、アップロードされたオブジェクトを完全に制御しながら、別の AWS アカウントがバケットにオブジェクトをアップロードできるようにする方法を示しています。このポリシーでは、特定の AWS アカウント (111122223333) に、アップロード時に bucket−owner−full−control の既定 ACL が含まれている場合にのみ、オブジェクトをアップロードする機能が付与されます。ポリシーの StringEquals 条件は、要件を表現する s3:x-amz-acl condition キーを指定します (「Amazon S3 条件キーの例」を参照してください)。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"111122223333"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::DOC-EXAMPLE-BUCKET/*", "Condition": { "StringEquals": {"s3:x-amz-acl":"bucket-owner-full-control"} } } ] }

Amazon S3 イベントリと Amazon S3 の分析の許可を与えます

Amazon S3 インベントリは、Amazon S3 のバケット内のオブジェクトのリストを作成します。Amazon S3 分析エクスポートは、分析に使用するデータの出力ファイルを作成します。インベントリによってオブジェクトがリストされるバケットは、ソースバケットと呼ばれます。インベントリファイルが書き込まれるバケットと、分析エクスポートファイルが書き込まれるバケットは、ターゲットバケットと呼ばれます。Amazon S3 のバケットのインベントリと分析機能のエクスポートのセットアップ時には、ターゲットバケットのバケットポリシーを作成する必要があります。詳細については、Amazon S3 インベントリ および Amazon S3 分析 – ストレージクラス分析 を参照してください。

次のバケットポリシーの例では、ソースバケットのアカウントからターゲットバケットにオブジェクトを書き込む (PUT) ための Amazon S3 のアクセス許可が付与されます。Amazon S3 インベントリと Amazon S3 分析のエクスポートを設定する時、宛先バケットのこのようなバケットポリシーを使用します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "InventoryAndAnalyticsExamplePolicy", "Effect": "Allow", "Principal": { "Service": "s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::destinationbucket/*" ], "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:::sourcebucket" }, "StringEquals": { "aws:SourceAccount": "111122223333", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }

Amazon S3 Storage Lens へのアクセス許可の付与

Amazon S3 Storage Lens は、使用状況とアクティビティのメトリクスを集計し、Amazon S3 コンソールホーム ([Buckets] (バケット)) ページ、インタラクティブなダッシュボード、または CSV または Parquet 形式でダウンロードできるメトリクスのエクスポートを通じて、アカウントスナップショットの情報を表示します。ダッシュボードでは、インサイトと傾向を可視化したり、外れ値にフラグ付けしたりできます。また、ストレージコストの最適化や、データ保護のベストプラクティスの適用に関するレコメンデーション事項を受け取ることもできます。AWS Management Console、AWS CLI、AWS SDK、または REST API を使用して S3 Storage Lens を使用できます。

S3 Storage Lens は、ストレージ使用量をメトリクスのエクスポートにしてさらなる分析のため Amazon S3 バケット内に収集できます。S3 Storage Lens がメトリクスのエクスポートを配置するバケットは、送信先バケットとして知られています。S3 Storage Lens メトリクスのエクスポートを設定するときには、エクスポート先バケットのバケットポリシーが必要です。詳細については、「Amazon S3 Storage Lens を使用してストレージのアクティビティと使用状況を評価する」を参照してください。

次のバケットポリシーの例では、Amazon S3 が送信先バケットにオブジェクトを書き込む (PUT) ためのアクセス許可が付与されます。S3 Storage Lens メトリクスのエクスポートを設定するときには、このようなバケットポリシーを送信先バケットに使用します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "S3StorageLensExamplePolicy", "Effect": "Allow", "Principal": { "Service": "storage-lens.s3.amazonaws.com" }, "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/111122223333/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "bucket-owner-full-control", "aws:SourceAccount": "111122223333", "aws:SourceArn": "arn:aws:s3:AWS リージョン:111122223333:storage-lens/storage-lens-dashboard-configuration-id" } } } ] }

S3 Storage Lens の組織レベルのメトリクスエクスポートを設定するときには、前述のバケットポリシーのリソースに次の変更を加えます。

"Resource": "arn:aws:s3:::destination-bucket/destination-prefix/StorageLens/your-organization-id/*",