Amazon S3 の条件キー - Amazon Simple Storage Service

Amazon S3 の条件キー

アクセスポリシー言語では、アクセス許可を付与するときの条件を指定することができます。ポリシーが有効なときの条件を指定するには、オプションの Condition 要素または Condition ブロックを使用して、ポリシーが有効になるときの条件を指定します。Amazon S3 のアクセスポリシーの条件は、事前定義済みの AWS 全体のキーと Amazon S3 固有のキーを使用して指定することができます。

Condition エレメントに、ブール演算子 (等しい、未満など) を使用する演算式を構築し、リクエストの値に対する条件を適合させます。たとえば、オブジェクトをアップロードするアクセス許可を付与する場合、バケット所有者は以下のように StringEquals 条件を追加して、オブジェクトをパブリックに読み取り可能にするよう要求することができます。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Action": "s3:PutObject", "Resource": [ "arn:aws:s3:::awsexamplebucket1/*" ], "Condition": { "StringEquals": { "s3:x-amz-acl": "public-read" } } } ] }

この例で、Condition ブロックは指定されたキーと値のペア StringEquals に適用される "s3:x-amz-acl":["public-read"] 条件を指定します。条件の表現に使用できる、事前に定義された一連のキーがあります。この例では、s3:x-amz-acl 条件キーを使用しています。この条件では、x-amz-acl の値が指定された public-read ヘッダーをすべての PUT Object リクエストに含めることがユーザーに求められます。

AWS 全体の条件キー

AWS には、ポリシーをサポートするすべての AWS のサービスでサポートされる、一連の一般的なキーが用意されています。これらのキーは AWS 全体のキーと呼ばれ、プレフィックス aws: を使用します。AWS 全体の条件キーの一覧については、IAM ユーザーガイド条件に利用可能な AWS のキーを参照してください。

Amazon S3 では、AWS 全体の条件キーを使用できます。以下のバケットポリシー例は、リクエストが指定された範囲の IP アドレス (192.0.2.0.*、ただし 192.0.2.188 を除く) から発信される場合に、認証ユーザーに s3:GetObject アクションを使用するアクセス許可を付与します。条件ブロックの IpAddressNotIpAddress は条件であり、それぞれの条件では評価されるキーと値のペアが指定されています。この例の両方のキーと値のペアでは、aws:SourceIp AWS 全体のキーを使用しています。

注記

条件で指定されている IPAddressNotIpAddress のキー値は、RFC 4632 の CIDR 表記を使用していることに注意してください。詳細については、http://www.rfc-editor.org/rfc/rfc4632.txt を参照してください。

{ "Version": "2012-10-17", "Id": "S3PolicyId1", "Statement": [ { "Sid": "statement1", "Effect": "Allow", "Principal": "*", "Action":"s3:GetObject", "Resource": "arn:aws:s3:::awsexamplebucket1/*", "Condition" : { "IpAddress" : { "aws:SourceIp": "192.0.2.0/24" }, "NotIpAddress" : { "aws:SourceIp": "192.0.2.188/32" } } } ] }

Amazon S3 のポリシーでは、他の AWS 全体の条件キーを使用することもできます。例えば、VPC エンドポイントのバケットポリシーで aws:SourceVpce 条件キーや aws:SourceVpc 条件キーを指定できます。例については、「バケットポリシーを使用した VPC エンドポイントからのアクセス制御」を参照してください。

Amazon S3 固有の条件キー

Amazon S3 の条件キーは、Amazon S3 に固有のアクションで使用できます。それぞれの条件キーは、その条件を設定できる API でサポートされている同じ名前のリクエストヘッダーに対応します。Amazon S3 固有の条件キーでは、同じ名前のリクエストヘッダーの動作が指定されます。Amazon S3 固有の条件キーの一覧については、「Amazon S3 のアクション、リソース、条件キー」を参照してください。

たとえば、s3:x-amz-acl アクセス許可に対して条件付きのアクセス許可を付与する条件キー s3:PutObject は、PUT Object API でサポートされている x-amz-acl リクエストヘッダーの動作を定義します。また、アクセス許可 s3:VersionId に対して条件付きのアクセス許可を付与する条件キー s3:GetObjectVersion は、GET Object リクエストで設定する versionId クエリパラメータの動作を定義します。

以下のバケットポリシーは、オブジェクトをパブリックに読み取り可能にする x-amz-acl ヘッダーがリクエストに含まれている場合に、2 つの AWS アカウント に s3:PutObject のアクセス許可を付与します。Condition ブロックでは、StringEquals 条件を使用し、キーと値のペアとして "s3:x-amz-acl":["public-read" を評価に使用できます。このキーと値のペアで、s3:x-amz-acl は、「s3:」というプレフィックスが示すとおり Amazon S3 固有のキーです。

{ "Version":"2012-10-17", "Statement": [ { "Sid":"AddCannedAcl", "Effect":"Allow", "Principal": { "AWS": [ "arn:aws:iam::Account1-ID:root", "arn:aws:iam::Account2-ID:root" ] }, "Action":"s3:PutObject", "Resource": ["arn:aws:s3:::awsexamplebucket1/*"], "Condition": { "StringEquals": { "s3:x-amz-acl":["public-read"] } } } ] }
重要

すべての条件が、すべてのアクションに対して意味を成すわけではありません。例えば、Amazon S3 の s3:LocationConstraint のアクセス許可を付与するポリシーに条件として s3:CreateBucket を含めることは理にかなっています。ただし、この条件を s3:GetObject のアクセス許可を付与するポリシーに含めることは意味がありません。Amazon S3 では、このような Amazon S3 固有の条件を含むセマンティックエラーをテストすることができます。ただし、IAM ユーザーを対象とするポリシーを作成する場合は、Amazon S3 では無意味な条件が含まれていてもエラーは報告されません。これは、IAM では Amazon S3 の条件を検証できないためです。