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

バケットポリシーの例

このセクションでは、バケットポリシーの一般的なユースケース例をいくつか紹介します。以下のポリシーでは、リソース値の中で「bucket」および「examplebucket」の文字列が使用されています。これらのポリシーをテストするには、これらの文字列を使用するバケット名に置き換える必要があります。アクセスポリシー言語の詳細については、「アクセスポリシー言語の概要」を参照してください。

AWS Policy Generator ツールを使用し、Amazon S3 バケットのバケットポリシーを作成できます。その後、生成されたドキュメントを使用して、Amazon S3 コンソール、サードパーティ製ツール、またはアプリケーション経由でバケットポリシーを設定できます。

注記

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

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

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

Copy
{ "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:::examplebucket/*"], "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ] }

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

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

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"AddPerm", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject"], "Resource":["arn:aws:s3:::examplebucket/*"] } ] }

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

次の例は、指定したバケット内のオブジェクトに対して任意の Amazon S3 オペレーションを実行するアクセス許可をすべてのユーザーに付与します。ただし、リクエストは条件で指定された IP アドレス範囲からのリクエストである必要があります。

このステートメントの条件では、54.240.143.* の範囲の IP アドレスが許可されています。ただし、54.240.143.188 を除きます。

Condition ブロックでは、IpAddress および NotIpAddress 条件と、aws:SourceIp 条件キーが使用されています。これは AWS 全体を対象とする条件キーです。詳細については、「ポリシーでの条件の指定」を参照してください。また、aws:sourceIp の値には RFC 2632 に記述されている CIDR 記法が使用されています。詳細については、「http://www.rfc-editor.org/rfc/rfc4632.txt」を参照してください。

Copy
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Allow", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "IpAddress": {"aws:SourceIp": "54.240.143.0/24"}, "NotIpAddress": {"aws:SourceIp": "54.240.143.188/32"} } } ] }

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

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

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

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

examplebucket バケット内のオブジェクトへのアクセスのセキュリティを強化するには、次の例に示すように、バケットポリシーに明示的な拒否を追加します。明示的な拒否は、ACL やユーザーポリシーなどの他の方法を使用して examplebucket バケット内のオブジェクトに付与したすべてのアクセス許可よりも優先されます。

Copy
{ "Version": "2012-10-17", "Id": "http referer policy example", "Statement": [ { "Sid": "Allow get requests referred by www.mysite.com and mysite.com", "Effect": "Allow", "Principal": "*", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]} } }, { "Sid": "Explicit deny to ensure requests are allowed only from specific referer.", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::examplebucket/*", "Condition": { "StringNotLike": {"aws:Referer": ["http://www.example.com/*","http://example.com/*"]} } } ] }

Amazon CloudFront オリジンアイデンティティへのアクセス許可の付与

次のバケットポリシー例は、Amazon S3 バケット内のすべてのオブジェクトを取得(リスト)するアクセス許可を CloudFront オリジンアイデンティティに付与します。CloudFront Origin Identity は、CloudFront のプライベートコンテンツ機能を有効にするために使用します。このポリシーでは AWS ではなく、CanonicalUser プレフィックスを使用して正規ユーザー ID を指定しています。プライベートコンテンツの提供に関する CloudFront のサポートの詳細については、『Amazon CloudFront 開発者ガイド』の「プライベートコンテンツを供給する」トピックを参照してください。CloudFront ディストリビューションのオリジンアクセスアイデンティティには、正規ユーザー ID を指定する必要があります。正規ユーザー ID を見つける方法の詳細については、「ポリシーでのプリンシパルの指定」を参照してください。

Copy
{ "Version":"2012-10-17", "Id":"PolicyForCloudFrontPrivateContent", "Statement":[ { "Sid":" Grant a CloudFront Origin Identity access to support private content", "Effect":"Allow", "Principal":{"CanonicalUser":"79a59df900b949e55d96a1e698fbacedfd6e09d98eacf8f8d5218e7cd47ef2be"}, "Action":"s3:GetObject", "Resource":"arn:aws:s3:::example-bucket/*" } ] }

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

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

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

Amazon S3 が MFA 認証付きのリクエストを受信すると、aws:MultiFactorAuthAge キーから、一時的な認証情報が作成されてからの時間(秒単位)を示す数値が渡されます。リクエストで提供された一時的な認証情報が MFA デバイスを使用して作成されていない場合、このキー値は null(不在)になります。次のバケットポリシー例に示すように、バケットポリシーに、この値を確認する条件を追加できます。このポリシーは、リクエストが MFA 認証されていない場合に、examplebucket バケット内の /taxdocuments フォルダへの Amazon S3 オペレーションを拒否します。MFA 認証の詳細については、「AWS のデバイスに Multi-Factor Authentication(MFA)を使用」を参照してください。

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

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

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

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

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

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

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

他の AWS アカウントが自分のバケットにオブジェクトをアップロードすることを許可できます。ただし、バケット所有者として、バケットにアップロードされたオブジェクトに対してフルコントロール権限を持っている必要がある場合があります。次のポリシーは、特定の AWS アカウント(111111111111)が、メールアドレス(xyz@amazon.com)で識別されるバケット所有者がフルコントロールアクセス許可を付与しない限り、そのアカウントによるオブジェクトのアップロードを拒否する例です。ポリシーの StringEquals 条件は、要件を表現する s3:x-amz-grant-full-control 条件キーを指定します(「ポリシーでの条件の指定」を参照してください)。

Copy
{ "Version":"2012-10-17", "Statement":[ { "Sid":"111", "Effect":"Allow", "Principal":{"AWS":"1111111111"}, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::examplebucket/*" }, { "Sid":"112", "Effect":"Deny", "Principal":{"AWS":"1111111111" }, "Action":"s3:PutObject", "Resource":"arn:aws:s3:::examplebucket/*", "Condition": { "StringNotEquals": {"s3:x-amz-grant-full-control":["emailAddress=xyz@amazon.com"]} } } ] }