

# 条件キーを使用したバケットポリシーの例
<a name="amazon-s3-policy-keys"></a>

アクセスポリシー言語を使用して、アクセス許可を付与するときに条件を指定できます。オプションの `Condition` 要素、または `Condition` ブロックを使用して、ポリシーが有効になるときの条件を指定できます。

オブジェクトおよびバケットオペレーションに Amazon S3 条件キーを使用するポリシーについては、次の例を参照してください。条件キーの詳細については、[Amazon S3 のポリシー条件キー](security_iam_service-with-iam.md#security_iam_service-with-iam-id-based-policies-conditionkeys) を参照してください。Amazon S3 アクションの完全なリストとポリシーで指定できるリソースについては、「サービス認可リファレンス」の「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

## 例: オブジェクトオペレーションで使用できる Amazon S3 の条件キー
<a name="object-keys-in-amazon-s3-policies"></a>

以下の例は、オブジェクトオペレーションに Amazon S3 固有の条件キーを使用する方法を示しています。Amazon S3 アクションの完全なリストとポリシーで指定できるリソースについては、「サービス認可リファレンス」の「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**

S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

ここでは、[PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html) オペレーションで条件キーを使用するポリシーの例をいくつか示します。PutObject オペレーションでは、アクセスコントロールリスト (ACL) に固有のヘッダーを使用して、ACL に基づいてアクセス許可を付与することができます。これらの条件キーを使用することで、条件を設定し、ユーザーがオブジェクトをアップロードする場合に特定のアクセス許可を要求することができます。また、PutObjectAcl オペレーションを使用して ACL に基づいてアクセス許可を付与することもできます。詳細については、[Amazon S3 Amazon Simple Storage Service API リファレンス](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObjectAcl.html)の *PutObjectAcl* を参照してください。ACL の詳細については、[アクセスコントロールリスト (ACL) の概要](acl-overview.md) を参照してください。

**Topics**
+ [例 1: サーバー側の暗号化を使用してオブジェクトを保存するよう要求する `s3:PutObject` のアクセス許可を付与する](#putobject-require-sse-2)
+ [例 2: 制限されているコピー元からオブジェクトをコピーする `s3:PutObject` のアクセス許可を付与する](#putobject-limit-copy-source-3)
+ [例 3: オブジェクトの特定のバージョンに対するアクセス許可を付与する](#getobjectversion-limit-access-to-specific-version-3)
+ [例 4: オブジェクトタグに基づくアクセス許可の付与](#example-object-tagging-access-control)
+ [例 5: バケット所有者の AWS アカウント ID によるアクセスの制限](#example-object-resource-account)
+ [例 6: 最小の TLS バージョンの要求](#example-object-tls-version)
+ [例 7: `Deny` ステートメントから特定のプリンシパルを除外する](#example-exclude-principal-from-deny-statement)
+ [例 8: オブジェクトキー名または ETags に基づいた、クライアントへの条件付きオブジェクトアップロードの強制](#example-conditional-writes-enforce)

### 例 1: サーバー側の暗号化を使用してオブジェクトを保存するよう要求する `s3:PutObject` のアクセス許可を付与する
<a name="putobject-require-sse-2"></a>

アカウント A がバケットの所有者であるとします。アカウント管理者がアカウント A のユーザーの Jane にオブジェクトをアップロードするアクセス許可を付与するとします。ただし、Jane が必ず Amazon S3 マネージドキーを使用したサーバー側の暗号化 (SSE-S3) をリクエストすることを条件とします。この場合、アカウント A の管理者は、以下のように `s3:x-amz-server-side-encryption` 条件キーを使用することで、この要件を指定できます。次の `Condition` ブロックのキーと値のペアは、暗号化タイプとして `s3:x-amz-server-side-encryption` 条件キーと SSE-S3 (`AES256`) を指定します。

```
"Condition": {
     "StringNotEquals": {
         "s3:x-amz-server-side-encryption": "AES256"
     }}
```

AWS CLI を使用してこのアクセス許可をテストする場合、次の例に示すように、`--server-side-encryption` パラメータを使用して必要な暗号化を追加する必要があります。このコマンド例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

```
aws s3api put-object --bucket {{amzn-s3-demo-bucket}} --key {{HappyFace.jpg}} --body {{c:\HappyFace.jpg}} --server-side-encryption "{{AES256}}" --profile {{AccountAadmin}}
```

### 例 2: 制限されているコピー元からオブジェクトをコピーする `s3:PutObject` のアクセス許可を付与する
<a name="putobject-limit-copy-source-3"></a>

`PUT` のオブジェクトリクエストでは、ソースオブジェクトを指定すると、リクエストはコピーオペレーションです (「[https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html](https://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectCOPY.html)」を参照)。バケット所有者は、これに対応して、ソースに制限が付いているオブジェクトをコピーするためのアクセス許可をユーザーに付与できます。以下に例を示します。
+ 指定したソースバケット (例: `{{amzn-s3-demo-source-bucket}}`) からのみオブジェクトをコピーすることを許可します。
+ 指定したソースバケットから、キー名のプレフィックスが {{`public/`}} など特定のプレフィックス (例: `{{amzn-s3-demo-source-bucket}}{{/public/*}}`) で始まるオブジェクトのみコピーすることを許可します。
+ ソースバケット (例: `{{amzn-s3-demo-source-bucket}}{{/example.jpg}}`) から特定のオブジェクトのみをコピーすることを許可します。

次のバケットポリシーでは、ユーザー (`{{Dave}}`) に `s3:PutObject` のアクセス許可が付与されます。このポリシーでは、リクエストに `s3:x-amz-copy-source` ヘッダーを含め、ヘッダーの値でキー名のプレフィックスに `/{{amzn-s3-demo-source-bucket}}{{/public/*}}` を指定している場合にのみ、オブジェクトをコピーできます。このポリシーの例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
       {
            "Sid": "cross-account permission to user in your own account",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:user/{{Dave}}"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-source-bucket}}/*"
        },
        {
            "Sid": "Deny your user permission to upload object if copy source is not /bucket/prefix",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:user/{{Dave}}"
            },
            "Action": "s3:PutObject",
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-source-bucket}}/*",
            "Condition": {
                "StringNotLike": {
                    "s3:x-amz-copy-source": "{{amzn-s3-demo-source-bucket}}{{/public/*}}"
                }
            }
        }
    ]
}
```

------

**AWS CLI でポリシーをテストする**  
AWS CLI の `copy-object` コマンドを使用して、アクセス許可をテストできます。`--copy-source` パラメータを追加してソースを指定します。キー名のプレフィックスは、ポリシーで許可されているプレフィックスと一致する必要があります。`--profile` パラメータを使用して、ユーザー Dave の認証情報を指定します。AWS CLI の設定の詳細については、「Amazon S3 API リファレンス」の「[Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)」を参照してください。**

```
aws s3api copy-object --bucket {{{{amzn-s3-demo-source-bucket}}}} --key {{HappyFace.jpg}} 
--copy-source {{{{amzn-s3-demo-source-bucket}}}}{{/public/PublicHappyFace1.jpg}} --profile {{AccountADave}}
```

**特定のオブジェクトのみをコピーするアクセス許可を付与する**  
前述のポリシーでは、`StringNotLike` 条件を使用しています。次に示すとおり、特定のオブジェクトのみをコピーするアクセス許可を付与するには、条件を `StringNotLike` から `StringNotEquals` に変更し、オブジェクトキーを正確に指定する必要があります。このコマンド例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

```
"Condition": {
       "StringNotEquals": {
           "s3:x-amz-copy-source": "{{{{amzn-s3-demo-source-bucket}}}}{{/public/PublicHappyFace1.jpg}}"
       }
}
```

### 例 3: オブジェクトの特定のバージョンに対するアクセス許可を付与する
<a name="getobjectversion-limit-access-to-specific-version-3"></a>

アカウント A が、バージョニングが有効なバケットを所有しているとします。このバケットには、`{{HappyFace.jpg}}` オブジェクトのバージョンが複数含まれています。アカウント A の管理者は、ユーザー `{{Dave}}` にオブジェクトの特定のバージョンのみを取得できるアクセス許可を付与したいと考えています。この場合、アカウント管理者は、次に示すように、条件を付けてユーザー `{{Dave}}` に `s3:GetObjectVersion` のアクセス許可を付与できます。`Condition` ブロックのキーと値のペアは、`s3:VersionId` 条件キーを指定します。この場合、指定したバージョニングが有効なバケットからオブジェクトを取得するには、`{{Dave}}` は正確なオブジェクトバージョン ID を知る必要があります。このポリシーの例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

詳細については、「**Amazon Simple Storage Service API リファレンス」の「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:user/{{Dave}}"
            },
            "Action": "s3:GetObjectVersion",
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}{{/HappyFace.jpg}}"
        },
        {
            "Sid": "statement2",
            "Effect": "Deny",
            "Principal": {
                "AWS": "arn:aws:iam::{{123456789012}}:user/{{Dave}}"
            },
            "Action": "s3:GetObjectVersion",
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}{{/HappyFace.jpg}}",
            "Condition": {
                "StringNotEquals": {
                    "s3:VersionId": "{{AaaHbAQitwiL_h47_44lRO2DDfLlBO5e}}"
                }
            }
        }
    ]
}
```

------

**AWS CLI でポリシーをテストする**  
このこのポリシーでアクセス許可をテストするには、AWS CLI `get-object` コマンドを実行するときに、特定のオブジェクトバージョンを指定して取得する`--version-id` パラメータを使用します。コマンドは、特定のオブジェクトバージョンを取得し、`{{OutputFile.jpg}}` ファイルに保存します。

```
aws s3api get-object --bucket {{{{amzn-s3-demo-bucket}}}} --key {{HappyFace.jpg}} {{OutputFile.jpg}} --version-id {{AaaHbAQitwiL_h47_44lRO2DDfLlBO5e}} --profile {{AccountADave}}
```

### 例 4: オブジェクトタグに基づくアクセス許可の付与
<a name="example-object-tagging-access-control"></a>

Amazon S3 のオペレーションでオブジェクトのタグの条件キーを使用する方法の例については、「[タグ付けとアクセスコントロールポリシー](tagging-and-policies.md)」を参照してください。

### 例 5: バケット所有者の AWS アカウント ID によるアクセスの制限
<a name="example-object-resource-account"></a>

`aws:ResourceAccount` または `s3:ResourceAccount` の条件キーのいずれかを使用して、特定の AWS アカウント ID が所有する Amazon S3 バケットへのユーザー、ロール、またはアプリケーションのアクセスを制限する IAM または仮想プライベートクラウド (VPC) エンドポイントポリシーを記述できます。これらの条件キーを使用すると、VPC 内のクライアントによる、ユーザーが所有していないバケットへのアクセスを制限できます。

ただし、一部の AWS サービスは AWS マネージドバケットへのアクセスに依存していることに注意してください。したがって、IAM ポリシーで `aws:ResourceAccount` キーまたは `s3:ResourceAccount` キーを使用することは、これらのリソースへのアクセスにも影響する可能性があります。詳細については、以下のリソースを参照してください。
+ [AWS アカウント ガイド](https://docs.aws.amazon.com/vpc/latest/privatelink/vpc-endpoints-s3.html#bucket-policies-s3)の*指定された AWS PrivateLink のバケットへのアクセスの制限*
+ *Amazon ECR ガイド*の [Amazon ECR が使用するバケットへのアクセスを制限する](https://docs.aws.amazon.com/AmazonECR/latest/userguide/vpc-endpoints.html#ecr-minimum-s3-perms)
+ *AWS Systems Manager ガイド*の [AWS が管理する Amazon S3 バケットに必要なアクセスを System Manager に提供する](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent-minimum-s3-permissions.html)

`aws:ResourceAccount` および `s3:ResourceAccount` 条件キーの詳細と使用方法を示す例については、「AWS ストレージブログ」の「[Limit access to Amazon S3 buckets owned by specific AWS アカウント](https://aws.amazon.com/blogs/storage/limit-access-to-amazon-s3-buckets-owned-by-specific-aws-accounts/)」を参照してください。**

### 例 6: 最小の TLS バージョンの要求
<a name="example-object-tls-version"></a>

`s3:TlsVersion` 条件キーを使用して、クライアントが使用する TLS バージョンに基づいて Amazon S3 バケットへのユーザーまたはアプリケーションのアクセスを制限する IAM ポリシー、仮想プライベートクラウドエンドポイント (VPCE) ポリシー、またはバケットポリシーを作成できます。この条件キーを使用して、最小の TLS バージョンを必要とするポリシーを記述できます。

**注記**  
AWS のサービスがユーザーに代わって他の AWS のサービスを呼び出す場合 (サービス間呼び出し)、`s3:TlsVersion`、`aws:SecureTransport`、`aws:SourceIp`、および `aws:VpcSourceIp` など、特定のネットワーク固有の認可コンテキストが編集されます。ポリシーで `Deny` ステートメントとともにこれらの条件キーを使用すると、AWS サービスプリンシパルが意図せずブロックされる可能性があります。セキュリティ要件を維持しながら AWS のサービスが適切に動作できるようにするには、値が `false` の `aws:PrincipalIsAWSService` 条件キーを追加して、`Deny` ステートメントからサービスプリンシパルを除外します。例えば、次のようになります。  

```
{
  "Effect": "Deny",
  "Action": "s3:*",
  "Resource": "*",
  "Condition": {
    "Bool": {
      "aws:SecureTransport": "false",
      "aws:PrincipalIsAWSService": "false"
    }
  }
}
```
このポリシーは、HTTPS が使用されていない場合に (`aws:SecureTransport` が false)、AWS 以外のサービスプリンシパルに対してのみ S3 オペレーションへのアクセスを拒否します。これにより、条件付き制限が AWS サービスプリンシパルを除くすべてのプリンシパルに適用されます。

**Example**  
このバケットポリシーの例では、1.2 より前の TLS バージョン (1.1 や 1.0 など) のクライアントによる `PutObject` リクエストを拒否します。**このポリシーの例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Deny",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::{{amzn-s3-demo-bucket1}}",
                "arn:aws:s3:::{{amzn-s3-demo-bucket1}}/*"
            ],
            "Condition": {
                "NumericLessThan": {
                    "s3:TlsVersion": 1.2
                }
            }
        }
    ]
}
```

**Example**  
このバケットポリシー例では、1.1 よりも高い TLS バージョン (1.2、1.3 以降など) のクライアントによる `PutObject` リクエストを許可します。**    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": "*",
            "Action": "s3:PutObject",
            "Resource": [
                "arn:aws:s3:::{{amzn-s3-demo-bucket1}}",
                "arn:aws:s3:::{{amzn-s3-demo-bucket1}}/*"
            ],
            "Condition": {
                "NumericGreaterThan": {
                    "s3:TlsVersion": 1.1
                }
            }
        }
    ]
}
```

### 例 7: `Deny` ステートメントから特定のプリンシパルを除外する
<a name="example-exclude-principal-from-deny-statement"></a>

次のバケットポリシーは、アカウント番号 {{`123456789012`}} を持つプリンシパルを除き、`{{amzn-s3-demo-bucket}}` への `s3:GetObject` アクセスを拒否します。このポリシーの例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyAccessFromPrincipalNotInSpecificAccount",
      "Principal": {
        "AWS": "*"
      },
      "Action": "s3:GetObject",
      "Effect": "Deny",
      "Resource": [
        "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*"
      ],
      "Condition": {
        "StringNotEquals": {
          "aws:PrincipalAccount": [
            "{{123456789012}}"
          ]
        }
      }
    }
  ]
}
```

------

### 例 8: オブジェクトキー名または ETags に基づいた、クライアントへの条件付きオブジェクトアップロードの強制
<a name="example-conditional-writes-enforce"></a>

条件付き書き込みでは、`WRITE` リクエストにヘッダーを追加して、S3 オペレーションに前提条件を指定できます。このヘッダーを使用して、条件が満たされないと S3 オペレーションが失敗する条件を指定します。例えば、オブジェクトアップロード時に、バケットに同じキー名を持つオブジェクトが存在しないことを検証することで、既存のデータの上書きを防ぐことができます。または、オブジェクトを書き込む前に、Amazon S3 でオブジェクトのエンティティタグ (ETag) をチェックすることもできます。

バケットポリシーの条件を使用して条件付き書き込みを適用するバケットポリシーの例については、「[Amazon S3 バケットに条件付き書き込みを強制する](conditional-writes-enforce.md)」を参照してください。

## 例: バケットオペレーションで使用できる Amazon S3 の条件キー
<a name="bucket-keys-in-amazon-s3-policies"></a>

以下のポリシーの例では、バケットオペレーションに Amazon S3 固有の条件キーを使用する方法を示します。

**Topics**
+ [例 1: IP アドレスに対する条件付きの `s3:GetObject` アクセス許可の付与](#AvailableKeys-iamV2)
+ [例 2: 特定のプレフィックスを持つバケット内のオブジェクト一覧の取得](#condition-key-bucket-ops-2)
+ [例 3: キーの最大数の設定](#example-numeric-condition-operators)

### 例 1: IP アドレスに対する条件付きの `s3:GetObject` アクセス許可の付与
<a name="AvailableKeys-iamV2"></a>

リクエストが特定の範囲の IP アドレス (例: `{{192.0.2.*}}`) から発信された場合は、そのアドレスが除外する IP アドレス (例: `{{192.0.2.188}}`) でない限り、`s3:GetObject` アクションを使用するアクセス許可を認証したユーザーに付与できます。`Condition` ブロックでは、`IpAddress` と `NotIpAddress` は条件であり、それぞれの条件に評価されるキーと値のペアが指定されています。この例の両方のキーと値のペアは、`aws:SourceIp` AWS 全体キーを使用しています。このポリシーの例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

**注記**  
`Condition` ブロックで指定されている `IPAddress` と `NotIpAddress` のキー値は、RFC 4632 で説明されているように、CIDR 表記を使用しています。詳細については、[http://www.rfc−editor.org/rfc/rfc4632.txt](http://www.rfc-editor.org/rfc/rfc4632.txt) を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Id": "S3PolicyId1",
    "Statement": [
        {
            "Sid": "statement1",
            "Effect": "Allow",
            "Principal": "*",
            "Action":"s3:GetObject",
            "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}/*",
            "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 エンドポイントからのアクセスコントロール](example-bucket-policies-vpc-endpoint.md)」を参照してください。

**注記**  
一部の AWS グローバル条件キーでは、特定のリソースタイプのみがサポートされます。そのため、使用するグローバル条件キーとリソースタイプを Amazon S3 がサポートしているかどうか、または代わりに Amazon S3 固有の条件キーを使用する必要があるかどうかを確認してください。Amazon S3 に対してサポートされているリソースタイプと条件キーの完全なリストについては、サービス認可リファレンスの「[Actions, resources, and condition keys for Amazon S3](https://docs.aws.amazon.com/service-authorization/latest/reference/list_amazons3.html)」を参照してください。**  
S3 リソースタイプ別の S3 API オペレーションへのアクセス許可の詳細については、「[Amazon S3 API オペレーションに必要なアクセス許可](using-with-s3-policy-actions.md)」を参照してください。

### 例 2: 特定のプレフィックスを持つバケット内のオブジェクト一覧の取得
<a name="condition-key-bucket-ops-2"></a>

`s3:prefix` 条件キーを使用して、[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) API オペレーションを、特定のプレフィックスを持つキー名に制限できます。バケット所有者であれば、条件キーを使用して、ユーザーがバケット内の特定のプレフィックスの内容を一覧表示することを制限できます。`s3:prefix` 条件キーは、バケットのオブジェクトがキー名プレフィックスによって整理されている場合に便利です。

Amazon S3 コンソールでは、キー名のプレフィックスを使用して、フォルダの概念を示します。フォルダの概念をサポートしているはコンソールのみです。Amazon S3 API では、バケットとオブジェクトのみがサポートされています。例えば、キー名が {{`public/object1.jpg`}} および {{`public/object2.jpg`}} である 2 つのオブジェクトがある場合、コンソールには {{`public`}} フォルダ以下のオブジェクトが表示されます。Amazon S3 API では、これらはプレフィックスを持つオブジェクトとして扱われ、フォルダ内のオブジェクトとしては扱われません。プレフィックスと区切り文字を使用してアクセス許可をフィルタリングする方法の詳細については、[ユーザーポリシーを使用したバケットへのアクセスの制御](walkthrough1.md) を参照してください。

次のシナリオでは、バケット所有者とユーザーが属する親アカウントは同一です。したがって、バケット所有者は、アクセス許可を付与するためにバケットポリシーまたはユーザーポリシーのどちらも使用できます。`ListObjectsV2` API オペレーションを使用できる条件キーの詳細については、「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)」を参照してください。

**注記**  
バケットがバージョニングに対応している場合、バケット内のオブジェクトのリストを表示するには、以下のポリシーで、`s3:ListBucket` のアクセス許可ではなく `s3:ListBucketVersions` のアクセス許可を付与する必要があります。`s3:ListBucketVersions` アクセス許可は、`s3:prefix` 条件キーもサポートしています。

**ユーザーポリシー**  
次のユーザーポリシーは、`s3:ListBucket` のアクセス許可 (「[https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html)」を参照) に、`{{projects}}` の値を持つリクエストでプレフィックスを指定する必要がある `Condition` ステートメントを付与します。このポリシーの例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Action": "s3:ListBucket",
         "Resource":"arn:aws:s3:::{{amzn-s3-demo-bucket}}",
         "Condition" : {
             "StringEquals" : {
                 "s3:prefix": "{{projects}}" 
             }
          } 
       },
      {
         "Sid":"statement2",
         "Effect":"Deny",
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
         "Condition" : {
             "StringNotEquals" : {
                 "s3:prefix": "{{projects}}" 
             }
          } 
       }         
    ]
}
```

------

`Condition` ステートメントは、プレフィックスが `{{projects}}` のオブジェクトキーのみを一覧表示するようにユーザーを制限します。明示的な`Deny` ステートメントを追加すると、ユーザーに付与されている他のアクセス許可にかかわらず、他のプレフィックスが付いたキーのリストを求めるユーザーは拒否されます。例えば、以前のユーザーポリシーの更新やバケットポリシーにより、オブジェクトキーのリストを表示するアクセス許可がユーザーに制限なく付与される場合があります。明示的な `Deny` ステートメントは常に `Allow` ステートメントを上書きするため、ユーザーが `{{projects}}` プレフィックスを持つキー以外のキーを一覧表示しようとすると、リクエストは拒否されます。

**バケットポリシー**  
次の例に示すとおり、上記のユーザーポリシーに `Principal` 要素を追加して、ユーザーを指定する場合は、バケットポリシーを使用できます。このポリシーの例を実行するには、`{{user input placeholders}}` をユーザー自身の情報に置き換えます。

------
#### [ JSON ]

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"statement1",
         "Effect":"Allow",
         "Principal": {
            "AWS": "arn:aws:iam::{{123456789012}}:user/{{bucket-owner}}"
         },  
         "Action":  "s3:ListBucket",
         "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
         "Condition" : {
             "StringEquals" : {
                 "s3:prefix": "{{projects}}" 
             }
          } 
       },
      {
         "Sid":"statement2",
         "Effect":"Deny",
         "Principal": {
            "AWS": "arn:aws:iam::{{123456789012}}:user/{{bucket-owner}}"
         },  
         "Action": "s3:ListBucket",
         "Resource": "arn:aws:s3:::{{amzn-s3-demo-bucket}}",
         "Condition" : {
             "StringNotEquals" : {
                 "s3:prefix": "{{projects}}"  
             }
          } 
       }         
    ]
}
```

------

**AWS CLI でポリシーをテストする**  
このポリシーは、次の `list-object` AWS CLI コマンドを使用してテストできます。このコマンドでは、`--profile` パラメータを使用してユーザーの認証情報を指定します。AWS CLI のセットアップと使用の詳細については、「Amazon S3 API リファレンス」の「[Developing with Amazon S3 using the AWS CLI](https://docs.aws.amazon.com/AmazonS3/latest/API/setup-aws-cli.html)」を参照してください。**

```
aws s3api list-objects --bucket {{{{amzn-s3-demo-bucket}}}} --prefix {{projects}} --profile {{AccountA}}
```

### 例 3: キーの最大数の設定
<a name="example-numeric-condition-operators"></a>

`s3:max-keys` 条件キーを使用すると、リクエスタが [https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjectsV2.html) または [https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html](https://docs.aws.amazon.com//AmazonS3/latest/API/API_ListObjectVersions.html) リクエストで返すことができるキーの最大数を設定できます。デフォルトでは、API オペレーションは最大 1,000 個のキーを返します。`s3:max-keys` で使用できる数値条件演算子の一覧とその例については、[IAM ユーザーガイド](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html#Conditions_Numeric)の*数値条件演算子* を参照してください。