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

バケットポリシーの例

このセクションでは、バケットポリシーの一般的なユースケース例をいくつか紹介します。以下のポリシーでは、リソース値の中で「bucket」および「examplebucket」の文字列が使用されています。これらのポリシーをテストするには、これらの文字列を使用するバケット名に置き換えます。アクセスポリシー言語の詳細については、「アクセスコントロールリスト (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 ポリシーの要素のリファレンス」を参照してください。

重要

このポリシーを使用する前に、この例の 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 アドレス範囲を混在させる方法を示しています。このポリシーの例では、54.240.143.1 および 2001:DB8:1234:5678::1 のサンプル IP アドレスへのアクセスを許可したり、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 の www.example.com というバケットに保存されている写真や動画へのリンクがある example.com または DOC-EXAMPLE-BUCKET というドメイン名のウェブサイトがあるとします。デフォルトでは、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 にリクエストが直接行われることを防止するために使用しないでください。このキーは、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 を使用して認証されていない場合に、/taxdocuments バケットの DOC-EXAMPLE-BUCKET フォルダにおけるすべての 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 }} } ] }

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

次のバケットポリシーは、前述のバケットポリシーの拡張です。2 つのポリシーステートメントが含まれています。1 つのステートメントは、バケット (s3:GetObject) の DOC-EXAMPLE-BUCKET アクセス許可を全員に付与します。もう 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 アカウント (123456789012) に、アップロード時に bucket-owner-full-control の既定 ACL が含まれている場合にのみ、オブジェクトをアップロードする機能が付与されます。このポリシーの StringEquals 条件では、その要件を示す s3:x-amz-acl 条件キーが指定されています (「Amazon S3 条件キーの例」を参照)。

{ "Version":"2012-10-17", "Statement":[ { "Sid":"PolicyForAllowUploadWithACL", "Effect":"Allow", "Principal":{"AWS":"123456789012"}, "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": "123456789012", "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" }, "StringEquals": { "aws:SourceAccount": "111122223333" }, "StringEquals": { "aws:SourceArn": "arn:aws:s3:your-region:111122223333:storage-lens/your-dashboard-configuration-id" } } } ] }

S3 Storage Lens の組織レベルのメトリクスエクスポートを設定する場合には、前述のバケットポリシー "Action": "s3:PutObject" への次の変更を提供します。

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