

# 特定于 Amazon S3 签名版本 4 身份验证的策略键
<a name="bucket-policy-s3-sigv4-conditions"></a>

下表显示了与 Amazon S3 签名版本 4 身份验证相关的策略键，这些键可以包含在 Amazon S3 策略中。您可以在存储桶策略中添加这些条件，以便在使用签名版本 4 对请求进行身份认证时强制执行特定的行为。有关示例策略，请参阅 [使用与签名版本 4 有关的条件键的存储桶策略示例](#bucket-policy-sig-v4-condition-key-example)。


| 适用的键 | 说明 | 
| --- | --- | 
| `s3:signatureversion` | 标识您希望支持的 Amazon 签名的版本，以将其用于经过身份验证的请求。对于经身份验证的请求，Amazon S3 同时支持签名版本 4 和签名版本 2。您可以在存储桶策略中添加此条件以要求使用特定的签名版本。<br />有效值：<br />`"AWS"` 标识签名版本 2 <br /> `"AWS4-HMAC-SHA256"` 标识签名版本 4 | 
| `s3:authType` | Amazon S3 支持多种身份认证方法 [请参阅[对请求进行身份验证（Amazon 签名版本 4）](sig-v4-authenticating-requests.md)]。您可以选择使用此条件键来限制传入的请求使用特定的身份认证方法。例如，您可以仅支持在请求身份认证中使用 HTTP `Authorization` 标头。<br />有效值：<br />`REST-HEADER` <br />`REST-QUERY-STRING` <br />`POST` <br />  | 
| `s3:signatureAge` | 签名在已通过身份认证的请求中的有效期（以毫秒为单位）。<br />这种情况适用于：+ *预签名 URL*：最严格的条件胜出。有关更多信息，请参阅[使用预签名 URL](https://docs.amazonaws.cn/AmazonS3/latest/userguide/using-presigned-url.html)。<br />+ *预签名 POST*：使用预签名 POST 将文件直接上传到 S3。有关更多信息，请参阅 [Amazon S3 POST 策略](https://docs.amazonaws.cn/AmazonS3/latest/API/sigv4-HTTPPOSTConstructPolicy.html)。<br />在签名版本 2 中，此值始终设置为 0。<br />在签名版本 4 中，签名键的有效期最长为 7 天。因此，签名的有效期最初也为 7 天。您可以使用此条件进一步限制签名有效期。有关更多信息，请参阅 [对请求进行签名简介](sig-v4-authenticating-requests.md#signing-request-intro)。<br />示例值：`100` | 
| `s3:x-amz-content-sha256` | 您可以使用此条件键禁止存储桶中未签名的内容。<br />使用签名版本 4 时，对于使用 `Authorization` 标头的请求，您需要在签名计算中添加 `x-amz-content-sha256` 标头，然后将它的值设置为哈希负载。请注意，此条件键不支持将 `x-amz-content-sha256` 标头作为查询字符串参数。<br />您可以在存储桶策略中使用此条件键来拒绝任何未对有效载荷进行签名的上传。例如，您可以拒绝使用 `Authorization` 标头来对请求进行身份认证但未对有效载荷进行签名的上传。有关更多信息，请参阅 [Authorization 标头的签名计算：在单个分块中传输有效载荷（Amazon 签名版本 4）](sig-v4-header-based-auth.md)。<br />有效值：`UNSIGNED-PAYLOAD` | 

## 使用与签名版本 4 有关的条件键的存储桶策略示例
<a name="bucket-policy-sig-v4-condition-key-example"></a>

以下存储桶策略将在签名的存在时间超过十分钟时，拒绝对 `examplebucket` 中对象的任何 Amazon S3 预签名 URL 请求。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
      {
         "Sid": "Deny a presigned URL request if the signature is more than 10 min old",
         "Effect": "Deny",
         "Principal": "*",
         "Action": "s3:*",
         "Resource": "arn:aws:s3:::examplebucket3/*",
         "Condition": {
            "NumericGreaterThan": {
               "s3:signatureAge": 600000
            }
         }
      }
   ]
}
```

------

以下存储桶策略仅允许使用 `Authorization` 标头进行请求身份认证的请求。任何 POST 或预签名 URL 请求都将被拒绝。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
         {
               "Sid": "Allow only requests that use Authorization header for request authentication. Deny POST or presigned URL requests.",
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:*",
               "Resource": "arn:aws:s3:::examplebucket3/*",
               "Condition": {
                     "StringNotEquals": {
                           "s3:authType": "REST-HEADER"
                     }
               }
         }
   ]
}
```

------

以下存储桶策略拒绝使用预签名 URL 进行请求身份验证的请求：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"DenyUploadsUsingPresignedURL",
         "Effect":"Deny",
         "Principal":"*",
         "Action":"s3:*",
         "Resource":"arn:aws:s3:::amzn-s3-demo-bucket1/*",
         "Condition":{
            "StringEquals":{
               "s3:authType":"{{REST-query-string}}"
            }
         }
      }
   ]
}
```

------

以下存储桶策略拒绝任何带有未签名有效载荷的上传：

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement": [
         {
               "Sid": "Deny uploads with unsigned payloads that use the Authorization header.",
               "Effect": "Deny",
               "Principal": "*",
               "Action": "s3:*",
               "Resource": "arn:aws:s3:::examplebucket3/*",
               "Condition": {
                     "StringEquals": {
                           "s3:x-amz-content-sha256": "UNSIGNED-PAYLOAD"
                     }
               }
         }
   ]
}
```

------