このガイドは更新されていません。最新の情報と手順については、新しい Amazon S3 ユーザーガイドを参照してください。
バケットポリシーの例
このセクションでは、バケットポリシーの一般的なユースケース例をいくつか紹介します。以下のポリシーでは、リソース値の中で「bucket
」および「examplebucket
」の文字列が使用されています。これらのポリシーをテストするには、これらの文字列を使用するバケット名に置き換えます。アクセスポリシー言語の詳細については、「Amazon S3 のポリシーとアクセス許可」を参照してください。
バケットポリシーのサイズは 20 KB に制限されています。
Amazon S3 のバケットポリシーの作成には、AWS Policy Generator
Amazon S3 コンソールを使用してアクセス許可をテストする場合、コンソールに必要な s3:ListAllMyBuckets
、s3:GetBucketLocation
、s3:ListBucket
のアクセス許可を追加で付与する必要があります。コンソールを使用してユーザーにアクセス許可を付与してテストする例の解説については、「チュートリアル: ユーザーポリシーを使用したバケットへのアクセスのコントロール」を参照してください。
トピック
追加条件付きでの複数のアカウントへのアクセス許可の付与
次のポリシーの例では、s3:PutObject
および s3:PutObjectAcl
アクセス許可を複数の AWS アカウントに付与し、これらのオペレーションのリクエストに public-read
という既定のアクセスコントロールリスト (ACL) が含まれることを要求しています。詳細については、「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:::awsexamplebucket1
/*", "Condition":{"StringEquals":{"s3:x-amz-acl":["public-read"]}} } ] }
匿名ユーザーへの読み取り専用アクセス許可の付与
次のポリシー例では、任意のパブリック匿名ユーザーに s3:GetObject
アクセス許可を付与します。(これによって許可されるアクセスとオペレーションの一覧については、「Amazon S3 のアクション」を参照してください。) このアクセス許可はオブジェクトデータを誰でも読み取り可能にするので、バケットをウェブサイトとして設定し、バケット内のオブジェクトをすべての人が読み取れるようにする場合に便利です。バケットポリシーを使用して匿名ユーザーに読み取り専用アクセス許可を付与する前に、バケットのパブリックアクセスブロック設定を無効にする必要があります。詳細については、「ウェブサイトアクセスのアクセス許可の設定」を参照してください。
{ "Version":"2012-10-17", "Statement":[ { "Sid":"PublicRead", "Effect":"Allow", "Principal": "*", "Action":["s3:GetObject","s3:GetObjectVersion"], "Resource":["arn:aws:s3:::
awsexamplebucket1
/*"] } ] }
Amazon S3 のバケットへの匿名アクセスを許可したり、パブリックアクセスブロック設定を無効にしたりする場合は注意が必要です。匿名アクセスを付与すると、世界中のすべてのユーザーがバケットにアクセスできます。静的なウェブサイトのホスティングなどで特に必要な場合を除いて、Amazon S3 のバケットへの匿名アクセスは許可しないことをお勧めします。
特定の IP アドレスのアクセスの制限
以下の例では、リクエストが条件で指定した IP アドレス範囲からのものでない限り、指定した S3 のバケット内のオブジェクトに対して Amazon S3 のオペレーションを実行するユーザーのアクセスを拒否します。
このステートメントでは、許可されたインターネットプロトコルバージョン 4 (IPv4) IP アドレスの範囲として 54.240.143.0/24 を識別します。
Condition
ブロックでは、NotIpAddress
条件と aws:SourceIp
条件キー (AWS 全体を対象とする条件キー) を使用します。これらの条件キーの詳細については、「Amazon S3 の条件キー」を参照してください。aws:SourceIp
IPv4 値は標準の CIDR 表記を使用します。詳細については、IAM ユーザーガイドの「IAM JSON ポリシーの要素のリファレンス」を参照してください。
このポリシーを使用する前に、この例の IP アドレス範囲をユースケースに適した値に置き換えます。置き換えないと、バケットにアクセスできなくなります。
{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "IPAllow", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": [ "arn:aws:s3:::
awsexamplebucket1
", "arn:aws:s3:::awsexamplebucket1
/*" ], "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:::
awsexamplebucket1
/*", "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 の awsexamplebucket1
というバケットに保存されている写真や動画へのリンクがある 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:::
awsexamplebucket1
/*", "Condition":{ "StringLike":{"aws:Referer":["http://www.example.com/*","http://example.com/*"]} } } ] }
使用するブラウザのリクエストに HTTP 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 バケットポリシーの使用」を参照してください。
この例を使用するには:
-
EH1HDMB1FH2TC
を OAI の ID に置き換えてください。OAI の ID を確認するには、CloudFront コンソールのオリジンアクセスアイデンティティページを参照するか、CloudFront API の ListCloudFrontOriginAccessIdentities を使用します。 -
awsexamplebucket1
を対象の 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:::awsexamplebucket1
/*" } ] }
MFA を要求するバケットポリシーの追加
Amazon S3 は、多要素認証 (MFA) で保護された API へのアクセスをサポートしています。この機能により、Amazon S3 のリソースへのアクセスに
MFA を強制的に適用することができます。多要素認証により、AWS 環境に適用できるセキュリティのレベルが高まります。このセキュリティ機能では、有効な MFA コードを入力して
MFA デバイスを物理的に所有していることを証明することがユーザーに要求されます。詳細については、「Multi-factor Authentication
MFA の要件は、バケットポリシーで aws:MultiFactorAuthAge
キーを使用することで適用できます。AWS Identity and Access Management (IAM) ユーザーは、AWS Security Token
Service (AWS STS) によって発行された一時的な認証情報を使用して、Amazon S3 のリソースにアクセスできます。MFA のコードは、AWS STS
のリクエスト時に指定します。
Amazon S3 が多要素認証のリクエストを受け取ると、aws:MultiFactorAuthAge
キーに一時的な認証情報が作成されてからの時間の数値 (秒) が示されます。リクエストで提供された一時的な認証情報が MFA デバイスを使用して作成されていない場合、このキー値は
null (不在) になります。次のバケットポリシー例に示すように、バケットポリシーに、この値を確認する条件を追加できます。このポリシーは、リクエストが MFA を使用して認証されていない場合に、awsexamplebucket1
バケットの /taxdocuments
フォルダに対する Amazon S3 のオペレーションを拒否します。MFA の詳細については、IAM ユーザーガイドの「AWS での多要素認証 (MFA) の使用」を参照してください。
{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::awsexamplebucket1/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true }} } ] }
Null
キー値が null で、リクエスト内の一時的なセキュリティ認証情報が MFA キーを使用せずに作成されたことを示している場合、Condition
ブロック内の aws:MultiFactorAuthAge
条件の評価は true になります。
次のバケットポリシーは、前述のバケットポリシーの拡張です。2 つのポリシーステートメントが含まれています。1 つのステートメントは、バケット (awsexamplebucket1
) の s3:GetObject
アクセス許可を全員に付与します。もう 1 つのステートメントは、MFA を要求することにより、バケットの awsexamplebucket1/taxdocuments
フォルダへのアクセスを制限します。
{ "Version": "2012-10-17", "Id": "123", "Statement": [ { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::awsexamplebucket1/taxdocuments/*", "Condition": { "Null": { "aws:MultiFactorAuthAge": true } } }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }
オプションで、リクエストの認証に使われる一時セキュリティ証明書の寿命に関係なく、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:::awsexamplebucket1/taxdocuments/*", "Condition": {"Null": {"aws:MultiFactorAuthAge": true }} }, { "Sid": "", "Effect": "Deny", "Principal": "*", "Action": "s3:*", "Resource": "arn:aws:s3:::awsexamplebucket1/taxdocuments/*", "Condition": {"NumericGreaterThan": {"aws:MultiFactorAuthAge": 3600 }} }, { "Sid": "", "Effect": "Allow", "Principal": "*", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::awsexamplebucket1/*" } ] }
バケット所有者はフルコントロール権限を持ちながら、オブジェクトをアップロードするクロスアカウントアクセス許可を付与する
以下の例は、アップロードされたオブジェクトを完全に制御しながら、別の 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": "1234567890
", "s3:x-amz-acl": "bucket-owner-full-control" } } } ] }