

# Amazon S3 如何与 IAM 配合使用
Amazon S3 如何与 IAM 配合使用

在使用 IAM 管理对 Amazon S3 的访问权限之前，您应该了解哪些 IAM 功能可用于 Amazon S3。






**可以与 Amazon S3 配合使用的 IAM 功能**  

| IAM 功能 | Amazon S3 支持 | 
| --- | --- | 
|  [基于身份的策略](#security_iam_service-with-iam-id-based-policies)  |   是  | 
|  [基于资源的策略](#security_iam_service-with-iam-resource-based-policies)  |   是  | 
|  [策略操作](#security_iam_service-with-iam-id-based-policies-actions)  |   是  | 
|  [策略资源](#security_iam_service-with-iam-id-based-policies-resources)  |   是  | 
|  [策略条件键（特定于服务）](#security_iam_service-with-iam-id-based-policies-conditionkeys)  |   是  | 
|  [ACL](#security_iam_service-with-iam-acls)  |   是  | 
|  [ABAC（策略中的标签）](#security_iam_service-with-iam-tags)  |   部分  | 
|  [临时凭证](#security_iam_service-with-iam-roles-tempcreds)  |   是  | 
|  [转发访问会话（FAS）](#security_iam_service-with-iam-principal-permissions)  |   是  | 
|  [服务角色](#security_iam_service-with-iam-roles-service)  |   是  | 
|  [服务关联角色](#security_iam_service-with-iam-roles-service-linked)  |   部分  | 

要深入了解 Amazon S3 和其它 Amazon 服务如何与大多数 IAM 功能配合使用，请参阅《IAM 用户指南》**中的[使用 IAM 的 Amazon 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

有关按 S3 资源类型对 S3 API 操作的权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。

## Amazon S3 基于身份的策略
基于身份的策略

**支持基于身份的策略：**是

基于身份的策略是可附加到身份（如 IAM 用户、用户组或角色）的 JSON 权限策略文档。这些策略控制用户和角色可在何种条件下对哪些资源执行哪些操作。要了解如何创建基于身份的策略，请参阅《IAM 用户指南》**中的[使用客户管理型策略定义自定义 IAM 权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies_create.html)。

通过使用 IAM 基于身份的策略，您可以指定允许或拒绝的操作和资源以及允许或拒绝操作的条件。要了解可在 JSON 策略中使用的所有元素，请参阅《IAM 用户指南》**中的 [IAM JSON 策略元素引用](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements.html)。

### Amazon S3 基于身份的策略示例


要查看 Amazon S3 基于身份的策略的示例，请参阅 [Amazon S3 基于身份的策略](security_iam_id-based-policy-examples.md)。

## Amazon S3 内基于资源的策略
基于资源的策略

**支持基于资源的策略：**是

基于资源的策略是附加到资源的 JSON 策略文档。基于资源的策略的示例包括 IAM *角色信任策略*和 Amazon S3 *存储桶策略*。在支持基于资源的策略的服务中，服务管理员可以使用它们来控制对特定资源的访问。对于在其中附加策略的资源，策略定义指定主体可以对该资源执行哪些操作以及在什么条件下执行。您必须在基于资源的策略中[指定主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html)。主体可以包括账户、用户、角色、联合用户或。Amazon Web Services 服务

要启用跨账户访问，您可以将整个账户或其他账户中的 IAM 实体指定为基于资源的策略中的主体。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的跨账户资源访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_policies-cross-account-resource-access.html)。

Amazon S3 服务支持*存储桶策略*、*接入点策略*和*访问授权*：
+ 存储桶策略是附加到 Amazon S3 存储桶的基于资源的策略。存储桶策略定义了哪些主体可以对该存储桶执行操作。
+ 接入点策略是与底层存储桶策略一起进行评估的基于资源的策略。
+ Access Grants 提供了一个简化模型，用于按前缀、存储桶或对象定义对 Amazon S3 中数据的访问权限。有关 S3 Access Grants 的信息，请参阅[使用 S3 Access Grants 管理访问权限](access-grants.md)。

### 存储桶策略的主体
主体

`Principal` 元素用于指定被允许或拒绝访问资源的用户、账户、服务或其它实体。下面是指定 `Principal` 的示例。有关更多信息，请参阅 *IAM 用户指南*中的[主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html)。

#### 向 Amazon Web Services 账户授予权限


要向 Amazon Web Services 账户授予权限，则使用以下格式标识此账户。

```
"AWS":"account-ARN"
```

示例如下。

```
"Principal":{"AWS":"arn:aws:iam::AccountIDWithoutHyphens:root"}
```

```
"Principal":{"AWS":["arn:aws:iam::AccountID1WithoutHyphens:root","arn:aws:iam::AccountID2WithoutHyphens:root"]}
```

**注意**  
上述示例向根用户授予权限，而该用户将权限委派给账户级别。但是，账户中的特定角色和用户仍需要 IAM 策略。

#### 向 IAM 用户授予权限


要向您的账户中的 IAM 用户授予权限，您必须提供 `"AWS":"user-ARN"` 名称值对。

```
"Principal":{"AWS":"arn:aws:iam::account-number-without-hyphens:user/username"}
```

有关提供分步说明的详细示例，请参阅 [示例 1：存储桶拥有者向其用户授予存储桶权限](example-walkthroughs-managing-access-example1.md) 和 [示例 3：存储桶拥有者授予不属于自己的对象的权限](example-walkthroughs-managing-access-example3.md)。

**注意**  
如果您在更新存储桶策略后删除了 IAM 身份，则存储桶策略将在主体元素中显示唯一标识符，而不是 ARN。这些唯一 ID 从不会重复使用，因此，您可以安全地从所有策略语句中删除具有唯一标识符的主体。有关唯一标识符的更多信息，请参阅《IAM 用户指南》**中的 [IAM 标识符](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_identifiers.html#identifiers-unique-ids)。

#### 授予匿名权限


**警告**  
在授予对您的 Amazon S3 存储桶的匿名访问权限时应谨慎。如果您授予匿名访问权限，那么世界上的任何人都可以访问您的存储桶。我们强烈建议您绝对不要授予对 S3 存储桶的任何类型的匿名写入权限。

要授予每个人权限，也称为匿名访问，请将 `"*"` 值设置为通配符 (`Principal`)。例如，如果您将存储桶配置为网站，您将需要使该存储桶中的所有对象都可公开访问。

```
"Principal":"*"
```

```
"Principal":{"Amazon":"*"}
```

在基于资源的策略中使用具有 `Allow` 效果的 `"Principal": "*"` 允许任何人访问您的资源，即便未登录 Amazon。

在基于资源的策略中使用具有 `Allow` 效果的 `"Principal" : { "Amazon" : "*" }` 允许任何根用户、IAM 用户、代入角色会话或联合身份用户在同一分区的任何账户中访问您的资源。

对于匿名用户，这两种方法是等效的。有关更多信息，请参阅《IAM 用户指南》**中的[所有主体](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_principal.html#principal-anonymous)。

您不能使用通配符匹配一部分主体名称或 ARN。

**重要**  
在 Amazon 访问控制策略中，主体“\$1”和 \$1"Amazon": "\$1"\$1 的行为相同。

#### 限制资源权限


您还可以使用资源策略来限制对 IAM 主体原本可以使用的资源的访问权限。使用 `Deny` 语句来阻止访问。

如果未使用安全传输协议，则以下示例会阻止访问：

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

****  

```
{
  "Version":"2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "DenyBucketAccessIfSTPNotUsed",
      "Effect": "Deny",
      "Principal": "*",
      "Action": "s3:*",
      "Resource": "arn:aws:s3:::amzn-s3-demo-bucket",
      "Condition": {
        "Bool": {
          "aws:SecureTransport": "false"
        }
      }
    }
  ]
}
```

------

使用 `"Principal": "*"` 以便此限制适用于每个用户，这是本策略的最佳实践，而不是尝试使用此方法仅拒绝特定账户或主体的访问权限。

#### 要求通过 CloudFront URL 进行访问


您可以要求用户仅使用 CloudFront URL 而不是 Amazon S3 URL 访问您的 Amazon S3 内容。为此，请创建 CloudFront 来源访问控制（OAC）。然后，更改 S3 数据的权限。在存储桶策略中，您可以将 CloudFront 设置为主体，如下所示：

```
"Principal":{"Service":"cloudfront.amazonaws.com"}
```

使用策略中的 `Condition` 元素，仅在请求代表包含 S3 源的 CloudFront 分配时，才允许 CloudFront 访问存储桶。

```
        "Condition": {
           "StringEquals": {
              "AWS:SourceArn": "arn:aws:cloudfront::111122223333:distribution/CloudFront-distribution-ID"
           }
        }
```

有关需要通过 CloudFront URL 访问 S3 的更多信息，请参阅《Amazon CloudFront 开发人员指南》中的[限制对 Amazon Simple Storage Service 源的访问](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/private-content-restricting-access-to-s3.html)**。有关使用 Amazon CloudFront 的安全和隐私优势的更多信息，请参阅[配置安全访问和限制对内容的访问](https://docs.amazonaws.cn/AmazonCloudFront/latest/DeveloperGuide/SecurityAndPrivateContent.html)。

### 适用于 Amazon S3 的基于资源的策略示例

+ 要查看 Amazon S3 存储桶的策略示例，请参阅[Amazon S3 的存储桶策略](bucket-policies.md)。
+ 要查看接入点的策略示例，请参阅[配置使用接入点的 IAM 策略](access-points-policies.md)。

## Amazon S3 的策略操作
策略操作

**支持策略操作：**是

管理员可以使用 Amazon JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

JSON 策略的 `Action` 元素描述可用于在策略中允许或拒绝访问的操作。在策略中包含操作以授予执行关联操作的权限。

下图显示了 S3 API 操作和所需策略操作之间不同类型的映射关系。
+ 同名一对一映射。例如，要使用 `PutBucketPolicy` API 操作，需要执行 `s3:PutBucketPolicy` 策略操作。
+ 具有不同名称的一对一映射。例如，要使用 `ListObjectsV2` API 操作，需要执行 `s3:ListBucket` 策略操作。
+ 一对多映射。例如，要使用 `HeadObject` API 操作，则需要执行 `s3:GetObject`。此外，当您使用 S3 对象锁定并想要获取对象的法定保留状态或保留设置时，还需要执行相应的 `s3:GetObjectLegalHold` 或 `s3:GetObjectRetention` 策略操作，然后才能使用 `HeadObject` API 操作。
+ 多对一映射。例如，要使用 `ListObjectsV2` 或 `HeadBucket` API 操作，需要执行 `s3:ListBucket` 策略操作。



要查看在策略中使用的 Amazon S3 操作的列表，请参阅《Service Authorization Reference》中的 [Actions defined by Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html#amazons3-actions-as-permissions)**。有关 Amazon S3 API 操作的完整列表，请参阅《Amazon Simple Storage Service API Reference》**中的 [Amazon S3 API Actions](https://docs.amazonaws.cn//AmazonS3/latest/API/API_Operations.html)。

有关按 S3 资源类型对 S3 API 操作的权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。

Amazon S3 中的策略操作在操作前面使用以下前缀：

```
s3
```

要在单个语句中指定多项操作，请使用逗号将它们隔开。

```
"Action": [
      "s3:action1",
      "s3:action2"
         ]
```





### 存储桶操作


存储桶操作是在存储桶资源类型上执行的 S3 API 操作。例如：`CreateBucket`、`ListObjectsV2` 和 `PutBucketPolicy`。针对存储桶操作的 S3 策略操作要求存储桶策略或基于 IAM 身份的策略中的 `Resource` 元素必须是采用以下示例格式的 S3 存储桶类型 Amazon 资源名称 (ARN) 标识符。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
```

以下存储桶策略向账户 `12345678901` 的用户 `Akua` 授予 `s3:ListBucket` 权限，来执行 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_PutObject.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_PutObject.html) API 操作和列出 S3 存储桶中的对象。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to list objects in the bucket",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket"
        }
    ]
}
```

------
<a name="bucket-operations-ap"></a>
**通用存储桶的接入点策略中的存储桶操作**  
在通用存储桶的接入点策略中授予的权限仅在底层存储桶支持相同的权限时才有效。使用 S3 接入点时，必须将访问控制权从存储桶委托给接入点，或者将接入点策略中的相同权限添加到底层存储桶策略中。有关更多信息，请参阅 [配置使用接入点的 IAM 策略](access-points-policies.md)。在接入点策略中，针对存储桶操作的 S3 策略操作要求您对 `Resource` 元素使用以下格式的接入点 ARN。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point"
```

以下接入点策略向账户 `12345678901` 的用户 `Akua` 授予 `s3:ListBucket` 权限，来通过名为 `example-access-point` 的 S3 接入点执行 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_ListObjectsV2.html) API 操作。此权限支持 `Akua` 列出存储桶中与 `example-access-point` 关联的对象。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAkuaToListObjectsInBucketThroughAccessPoint",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3:us-west-2:111122223333:accesspoint/example-access-point"
        }
    ]
}
```

------

**注意**  
并非所有存储桶操作都受通用存储桶的接入点支持。有关更多信息，请参阅 [接入点与 S3 操作的兼容性](access-points-service-api-support.md#access-points-operations-support)。
<a name="bucket-operations-ap-directory-buckets"></a>
**目录存储桶的接入点策略中的存储桶操作**  
在目录存储桶的接入点策略中授予的权限仅在底层存储桶支持相同的权限时才有效。使用 S3 接入点时，必须将访问控制权从存储桶委托给接入点，或者将接入点策略中的相同权限添加到底层存储桶策略中。有关更多信息，请参阅 [配置 IAM 策略以使用目录存储桶的接入点](access-points-directory-buckets-policies.md)。在接入点策略中，针对存储桶操作的 S3 策略操作要求您对 `Resource` 元素使用以下格式的接入点 ARN。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3"
```

以下接入点策略向账户 `12345678901` 的用户 `Akua` 授予 `s3:ListBucket` 权限，来通过名为 `example-access-point--usw2-az1--xa-s3` 的接入点执行 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_ListObjectsV2.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_ListObjectsV2.html) API 操作。此权限支持 `Akua` 列出存储桶中与 `example-access-point--usw2-az1--xa-s3` 关联的对象。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowAkuaToListObjectsInTheBucketThroughAccessPoint",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:ListBucket"
            ],
            "Resource": "arn:aws:s3express:us-east-1:111122223333:accesspoint/example-access-point-usw2-az1-xa-s3"
        }
    ]
}
```

------

**注意**  
并非所有存储桶操作都受目录存储桶的接入点支持。有关更多信息，请参阅 [目录存储桶的接入点的对象操作](access-points-directory-buckets-service-api-support.md)。

### 对象操作


对象操作是按对象资源类型执行的 S3 API 操作。例如：`GetObject`、`PutObject` 和 `DeleteObject`。用于对象操作的 S3 策略操作要求策略中的 `Resource` 元素为采用以下示例格式的 S3 对象 ARN。

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
```

```
"Resource": "arn:aws:s3:::amzn-s3-demo-bucket/prefix/*"
```

**注意**  
对象 ARN 必须在存储桶名称后面包含正斜杠，如前面的示例所示。

以下存储桶策略向账户 `12345678901` 的用户 `Akua` 授予 `s3:PutObject` 权限。此权限支持 `Akua` 使用 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_PutObject.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_PutObject.html) API 操作将对象上传到名为 `amzn-s3-demo-bucket` 的 S3 存储桶。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to upload objects",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------
<a name="object-operations-ap"></a>
**接入点策略中的对象操作**  
使用 S3 接入点控制对对象操作的访问时，可以使用接入点策略。当您使用接入点策略时，用于对象操作的 S3 策略操作要求您对 `Resource` 元素使用以下格式的接入点 ARN：`arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource`。对于使用接入点的对象操作，必须在 `Resource` 元素中整个接入点 ARN 的后面包含 `/object/` 值。下面是一些示例。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point/object/*"
```

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point/object/prefix/*"
```

以下接入点策略向账户 `12345678901` 的用户 `Akua` 授予 `s3:GetObject` 权限。此权限支持 `Akua` 通过名为 `example-access-point` 的接入点，对存储桶中与该接入点关联的所有对象执行 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_GetObject.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_GetObject.html) API 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to get objects through access point",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:user/Akua"
            },
            "Action": [
            "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:us-east-1:111122223333:accesspoint/example-access-point/object/*"
        }
    ]
}
```

------

**注意**  
并非所有对象操作都受接入点支持。有关更多信息，请参阅 [接入点与 S3 操作的兼容性](access-points-service-api-support.md#access-points-operations-support)。
<a name="object-operations-ap-directory-buckets"></a>
**目录存储桶的接入点策略中的对象操作**  
使用目录存储桶的接入点来控制对于对象操作的访问权限时，可以使用接入点策略。当您使用接入点策略时，用于对象操作的 S3 策略操作要求您对 `Resource` 元素使用以下格式的接入点 ARN：`arn:aws:s3:region:account-id:accesspoint/access-point-name/object/resource`。对于使用接入点的对象操作，必须在 `Resource` 元素中整个接入点 ARN 的后面包含 `/object/` 值。下面是一些示例。

```
"Resource": "arn:aws:s3express:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/*"
```

```
"Resource": "arn:aws:s3express:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/prefix/*"
```

以下接入点策略向账户 `12345678901` 的用户 `Akua` 授予 `s3:GetObject` 权限。此权限支持 `Akua` 通过名为 `example-access-point--usw2-az1--xa-s3` 的接入点，对存储桶中与该接入点关联的所有对象执行 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_GetObject.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_GetObject.html) API 操作。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "Allow Akua to get objects through access point",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::12345678901:user/Akua"
            },
            "Action": "s3express:CreateSession","s3:GetObject"
            "Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3/object/*"
        }
    ]
}
```

**注意**  
并非所有对象操作都受目录存储桶的接入点支持。有关更多信息，请参阅 [目录存储桶的接入点的对象操作](access-points-directory-buckets-service-api-support.md)。

### 通用存储桶的接入点操作


接入点操作是在 `accesspoint` 资源类型上执行的 S3 API 操作。例如：`CreateAccessPoint`、`DeleteAccessPoint` 和 `GetAccessPointPolicy`。用于接入点操作的 S3 策略操作只能在基于 IAM 身份的策略中使用，不能用于存储桶策略或接入点策略。接入点操作要求 `Resource` 元素为采用以下示例格式的接入点 ARN。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point"
```

以下基于 IAM 身份的策略授予 `s3:GetAccessPointPolicy` 权限，来对名为 `example-access-point` 的 S3 接入点执行 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html) API 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GrantPermissionToRetrieveTheAccessPointPolicyOfAccessPointExampleAccessPoint",
            "Effect": "Allow",
            "Action": [
            "s3:GetAccessPointPolicy"
            ],
            "Resource": "arn:aws:s3:*:123456789012:accesspoint/example-access-point"
        }
    ]
}
```

------

使用接入点时，要控制对存储桶操作的访问权限，请参阅[通用存储桶的接入点策略中的存储桶操作](#bucket-operations-ap)；要控制对对象操作的访问权限，请参阅[接入点策略中的对象操作](#object-operations-ap)。有关如何配置接入点策略的更多信息，请参阅[配置使用接入点的 IAM 策略](access-points-policies.md)。

### 目录存储桶的接入点操作


目录存储桶的接入点操作是在 `accesspoint` 资源类型上执行的 S3 API 操作。例如：`CreateAccessPoint`、`DeleteAccessPoint` 和 `GetAccessPointPolicy`。用于接入点操作的 S3 策略操作只能在基于 IAM 身份的策略中使用，不能用于存储桶策略或接入点策略。目录存储桶的接入点操作要求 `Resource` 元素为采用以下示例格式的接入点 ARN。

```
"Resource": "arn:aws:s3:us-west-2:123456789012:accesspoint/example-access-point--usw2-az1--xa-s3"
```

以下基于 IAM 身份的策略授予 `s3express:GetAccessPointPolicy` 权限，来对名为 `example-access-point--usw2-az1--xa-s3` 的接入点执行 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_control_GetAccessPointPolicy.html) API 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "GrantPermissionToRetrieveTheAccessPointPolicyOfAccessPointExampleAccessPointUsw2Az1XaS3",
            "Effect": "Allow",
            "Action": [
            "s3express:CreateSession","s3express:GetAccessPointPolicy"
            ],
            "Resource": "arn:aws:s3:*:111122223333:accesspoint/example-access-point"
        }
    ]
}
```

------

以下基于 IAM 身份的策略授予为目录存储桶创建接入点的 `s3express:CreateAccessPoint` 权限。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "Grant CreateAccessPoint.",
            "Principal": "*",
            "Action": "s3express:CreateSession",
            "s3express:CreateAccessPoint""Effect": "Allow",
            "Resource": "*"
        }
    ]
}
```

以下基于 IAM 身份的策略授予为目录存储桶的接入点创建接入点范围的 `s3express:PutAccessPointScope` 权限。

```
{
    "Version": "2012-10-17", 		 	 	 
    "Statement": [
        {
            "Sid": "Grant PutAccessPointScope",
            "Principal": "*",
            "Action": "s3express:CreateSession",
            "s3express:CreateAccessPoint",
            "S3Express:PutAccessPointScope""Effect": "Allow",
            "Resource": "*",
        }
    ]
}
```

当使用目录存储桶的接入点来控制对存储桶操作的访问权限时，请参阅[目录存储桶的接入点策略中的存储桶操作](#bucket-operations-ap-directory-buckets)；要控制对对象操作的访问权限，请参阅[目录存储桶的接入点策略中的对象操作](#object-operations-ap-directory-buckets)。有关如何配置目录存储桶的接入点策略的更多信息，请参阅[配置 IAM 策略以使用目录存储桶的接入点](access-points-directory-buckets-policies.md)。

### 对象 Lambda 接入点操作


借助 Amazon S3 对象 Lambda，您可以将自己的代码添加到 Amazon S3 `GET`、`LIST` 和 `HEAD` 请求中，以便在数据返回到应用程序时修改和处理数据。您可以通过 Object Lambda 接入点发出请求，与通过其它接入点发出请求的工作方式相同。有关更多信息，请参阅 [使用 S3 对象 Lambda 转换对象](transforming-objects.md)。

有关如何为对象 Lambda 接入点操作配置策略的更多信息，请参阅[为对象 Lambda 接入点配置 IAM 策略](olap-policies.md)。

### 多区域接入点操作


多区域接入点提供了一个全局端点，应用程序可以使用该端点来满足来自位于多个 Amazon Web Services 区域中的 S3 存储桶的请求。您可以使用多区域接入点通过单个区域中使用的相同架构来构建多区域应用程序，然后在世界任何地方运行这些应用程序。有关更多信息，请参阅 [使用多区域接入点管理多区域流量](MultiRegionAccessPoints.md)。

有关如何为多区域接入点操作配置策略的更多信息，请参阅[多区域接入点策略示例](MultiRegionAccessPointPermissions.md#MultiRegionAccessPointPolicyExamples)。

### 批处理作业操作


（批量操作）任务操作是在任务资源类型上运行的 S3 API 操作。例如，`DescribeJob` 和 `CreateJob`。用于作业操作的 S3 策略操作只能在基于 IAM 身份的策略中使用，不能用于存储桶策略。此外，作业操作要求基于 IAM 身份的策略中的 `Resource` 元素必须是采用以下示例格式的 `job` ARN。

```
"Resource": "arn:aws:s3:*:123456789012:job/*"
```

以下基于 IAM 身份的策略授予 `s3:DescribeJob` 权限，来对名为 `example-job` 的 S3 批量操作任务执行 [DescribeJob](https://docs.amazonaws.cn//AmazonS3/latest/API/API_DescribeJob.html) API 操作。

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "AllowDescribingBatchOperationJob",
            "Effect": "Allow",
            "Action": [
            "s3:DescribeJob"
            ],
            "Resource": "arn:aws:s3:*:111122223333:job/example-job"
        }
    ]
}
```

------

### S3 Storage Lens 存储分析功能配置操作


有关如何配置 S3 Storage Lens 存储分析功能配置操作的更多信息，请参阅[设置 Amazon S3 Storage Lens 存储统计管理工具权限](storage_lens_iam_permissions.md)。

### 账户操作


账户操作是在账户级别执行的 S3 API 操作。例如，`GetPublicAccessBlock`（用于账户）。账户不是 Amazon S3 定义的资源类型。用于账户操作的 S3 策略操作只能在基于 IAM 身份的策略中使用，不能用于存储桶策略。此外，账户操作要求基于 IAM 身份的策略中的 `Resource` 元素必须是 `"*"`。

以下基于 IAM 身份的策略授予 `s3:GetAccountPublicAccessBlock` 权限，来执行账户级 [https://docs.amazonaws.cn//AmazonS3/latest/API/API_control_GetPublicAccessBlock.html](https://docs.amazonaws.cn//AmazonS3/latest/API/API_control_GetPublicAccessBlock.html) API 操作和检索账户级公共访问权限屏蔽设置。

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

****  

```
{
   "Version":"2012-10-17",		 	 	 
   "Statement":[
      {
         "Sid":"AllowRetrievingTheAccountLevelPublicAccessBlockSettings",
         "Effect":"Allow",
         "Action":[
            "s3:GetAccountPublicAccessBlock" 
         ],
         "Resource":[
            "*"
         ]
       }
    ]
}
```

------

### Amazon S3 的策略示例

+ 要查看 Amazon S3 基于身份的策略的示例，请参阅 [Amazon S3 基于身份的策略](security_iam_id-based-policy-examples.md)。
+ 要查看 Amazon S3 基于资源的策略示例，请参阅[Amazon S3 的存储桶策略](bucket-policies.md)和[配置使用接入点的 IAM 策略](access-points-policies.md)。

## Amazon S3 的策略资源
策略资源

**支持策略资源：**是

管理员可以使用 Amazon JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Resource` JSON 策略元素指定要向其应用操作的一个或多个对象。作为最佳实践，请使用其 [Amazon 资源名称（ARN）](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference-arns.html)指定资源。对于不支持资源级权限的操作，请使用通配符（\$1）来指示此语句应用于所有资源。

```
"Resource": "*"
```

某些 Amazon S3 API 操作支持多个资源。例如，`s3:GetObject` 访问 `example-resource-1` 和 `example-resource-2`，因此主体必须具有访问这两项资源的权限。要在单个语句中指定多个资源，请使用逗号分隔 ARN，如下面的示例所示。

```
"Resource": [
      "example-resource-1",
      "example-resource-2"
```

Amazon S3 中的资源包括存储桶、对象、接入点或任务。在策略中，使用存储桶、对象、接入点或任务的 Amazon 资源名称（ARN）来识别资源。

有关 Amazon S3 资源类型及其 ARN 的列表，请参阅《Service Authorization Reference》**中的 [Resources defined by Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html#amazons3-resources-for-iam-policies)。要了解您可以使用哪些操作指定每个资源的 ARN，请参阅 [Actions defined by Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html#amazons3-actions-as-permissions)。

有关按 S3 资源类型对 S3 API 操作的权限的更多信息，请参阅 [Amazon S3 API 操作所需的权限](using-with-s3-policy-actions.md)。

### 资源 ARN 中的通配符


可以将通配符用作资源 ARN 的一部分。可以在任何 ARN 分段（用冒号分隔的部分）中使用通配符（`*` 和 `?`）。星号 (`*`) 表示 0 个或多个字符的任意组合，问号 (`?`) 表示任何单个字符。您可以在每个分段中使用多个 `*` 或 `?` 字符。但是，通配符不能跨分段。
+ 以下 ARN 在此 ARN 的 `relative-ID` 部分中使用 `*` 通配符，来标识 `amzn-s3-demo-bucket` 存储桶中的所有对象。

  ```
  1. arn:aws:s3:::amzn-s3-demo-bucket/*
  ```
+ 以下 ARN 使用 `*` 来表示所有 S3 存储桶和对象。

  ```
  arn:aws:s3:::*
  ```
+ 以下 ARN 在 `relative-ID` 部分中同时使用通配符 `*` 和 `?`。此 ARN 标识存储桶（例如 *`amzn-s3-demo-example1bucket`*、`amzn-s3-demo-example2bucket`、`amzn-s3-demo-example3bucket` 等）中的所有对象。

  ```
  1. arn:aws:s3:::amzn-s3-demo-example?bucket/*
  ```

### 资源 ARN 的策略变量


您可以在 Amazon S3 ARN 中使用策略变量。在策略评估时，这些预定义变量会被它们的相应值替换。假设您将存储桶组织成一个文件夹集合，每个用户拥有一个文件夹。文件夹名称与用户名相同。要为他们的文件夹授予用户权限，您可以在资源 ARN 中指定策略变量：

```
arn:aws:s3:::bucket_name/developers/${aws:username}/
```

在运行时，如果评估策略，资源 ARN 中的 `${aws:username}` 变量将替换为发出请求的人员的用户名。





### Amazon S3 的策略示例

+ 要查看 Amazon S3 基于身份的策略的示例，请参阅 [Amazon S3 基于身份的策略](security_iam_id-based-policy-examples.md)。
+ 要查看 Amazon S3 基于资源的策略示例，请参阅[Amazon S3 的存储桶策略](bucket-policies.md)和[配置使用接入点的 IAM 策略](access-points-policies.md)。

## Amazon S3 的策略条件键
策略条件键

**支持特定于服务的策略条件键：**是

管理员可以使用 Amazon JSON 策略来指定谁有权访问什么内容。也就是说，哪个**主体**可以对什么**资源**执行**操作**，以及在什么**条件**下执行。

`Condition` 元素根据定义的条件指定语句何时执行。您可以创建使用[条件运算符](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_condition_operators.html)（例如，等于或小于）的条件表达式，以使策略中的条件与请求中的值相匹配。要查看所有 Amazon 全局条件键，请参阅《IAM 用户指南》**中的 [Amazon 全局条件上下文键](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html)。

每个 Amazon S3 条件键均映射到可设置条件的 API 所允许的相同名称请求标头。特定于 Amazon S3 的条件键指定同名请求标头的行为。例如，条件键 `s3:VersionId` 用于对 `s3:GetObjectVersion` 权限授予条件权限，它定义您在 GET Object 请求中设置的查询参数 `versionId` 的行为。

要查看 Amazon S3 条件键的列表，请参阅《Service Authorization Reference》中的 [Condition keys for Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html#amazons3-policy-keys)**。要了解您可以对哪些操作和资源使用条件键，请参阅 [Actions defined by Amazon S3](https://docs.amazonaws.cn/service-authorization/latest/reference/list_amazons3.html#amazons3-actions-as-permissions)。

### 示例：将对象上传限制为具有特定存储类的对象
示例 5：将对象上传限制为特定的存储类

假设账户 A（由账户 ID `123456789012` 表示）拥有一个存储桶。账户 A 管理员想要限制 *`Dave`*（账户 A 中的一位用户），以便仅当对象存储在 `STANDARD_IA` 存储类别中时，*`Dave`* 才能将对象上传到存储桶。要将对象上传限制到特定的存储类，账户 A 管理员可以使用 `s3:x-amz-storage-class` 条件键，如以下示例存储桶策略所示。

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

****  

```
{
                 "Version":"2012-10-17",		 	 	 
                 "Statement": [
                   {
                     "Sid": "statement1",
                     "Effect": "Allow",
                     "Principal": {
                       "AWS": "arn:aws:iam::123456789012:user/Dave"
                     },
                     "Action": "s3:PutObject",
                     "Resource": "arn:aws:s3:::amzn-s3-demo-bucket1/*",
                     "Condition": {
                       "StringEquals": {
                         "s3:x-amz-storage-class": [
                           "STANDARD_IA"
                         ]
                       }
                     }
                   }
                 ]
            }
```

------

在本例中，`Condition` 块指定应用于指定的键值对 `StringEquals` 的 `"s3:x-amz-acl":["public-read"]` 条件。有一组预定义键可用于表达条件。此示例使用 `s3:x-amz-acl` 条件键。此条件要求用户在每个 `PutObject` 请求中包含 `x-amz-acl` 标头以及值 `public-read`。

### Amazon S3 的策略示例

+ 要查看 Amazon S3 基于身份的策略的示例，请参阅 [Amazon S3 基于身份的策略](security_iam_id-based-policy-examples.md)。
+ 要查看 Amazon S3 基于资源的策略示例，请参阅[Amazon S3 的存储桶策略](bucket-policies.md)和[配置使用接入点的 IAM 策略](access-points-policies.md)。

## Amazon S3 中的 ACL
ACL

**支持 ACL：**是

在 Amazon S3 中，访问控制列表（ACL）控制哪些 Amazon Web Services 账户有权限访问资源。ACL 与基于资源的策略类似，但它们不使用 JSON 策略文档格式。

**重要**  
Amazon S3 中的大多数现代使用案例不再需要使用 ACL。

有关如何使用 ACL 在 Amazon S3 中控制访问的信息，请参阅[使用 ACL 管理访问](acls.md)。

## ABAC 与 Amazon S3
ABAC

**支持 ABAC（策略中的标签）：**部分支持

基于属性的访问权限控制（ABAC）是一种授权策略，该策略基于称为标签的属性来定义权限。您可以将标签附加到 IAM 实体和 Amazon 资源，然后设计 ABAC 策略，以支持在主体的标签与资源上的标签匹配时执行操作。

要基于标签控制访问，您需要使用 `aws:ResourceTag/key-name``aws:RequestTag/key-name` 或 `aws:TagKeys` 条件键在策略的[条件元素](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_condition.html)中提供标签信息。

如果某个服务对于每种资源类型都支持所有这三个条件键，则对于该服务，该值为**是**。如果某个服务仅对于部分资源类型支持所有这三个条件键，则该值为**部分**。

有关 ABAC 的更多信息，请参阅《IAM 用户指南》**中的[使用 ABAC 授权定义权限](https://docs.amazonaws.cn/IAM/latest/UserGuide/introduction_attribute-based-access-control.html)。要查看设置 ABAC 步骤的教程，请参阅《IAM 用户指南》**中的[使用基于属性的访问权限控制（ABAC）](https://docs.amazonaws.cn/IAM/latest/UserGuide/tutorial_attribute-based-access-control.html)。

有关在 Amazon S3 中支持 ABAC 的资源的信息，请参阅 [Using tags for attribute-based access control (ABAC)](https://docs.amazonaws.cn/AmazonS3/latest/userguide/tagging.html#using-tags-for-abac)。

要查看基于身份的策略（用于根据标签来限制对 S3 分批操作的访问）的示例，请参阅[使用任务标签控制批量操作的权限](batch-ops-job-tags-examples.md)。

### ABAC 和对象标签
对象的 ABAC

在 ABAC 策略中，对象使用 `s3:` 标签而不是 `aws:` 标签。要根据对象标签控制对于对象的访问，需要在策略的 [Condition 元素](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_elements_condition.html)中使用以下标签提供标签信息：
+ `s3:ExistingObjectTag/tag-key`
+ `s3:RequestObjectTagKeys`
+ `s3:RequestObjectTag/tag-key`

有关使用对象标签控制访问的信息，包括权限策略示例，请参阅[标签和访问控制策略](tagging-and-policies.md)。

## 将临时凭证用于 Amazon S3
临时凭证

**支持临时凭证：**是

临时凭证提供对 Amazon 资源的短期访问权限，并且是在您使用联合身份验证或切换角色时自动创建的。Amazon 建议您动态生成临时凭证，而不是使用长期访问密钥。有关更多信息，请参阅《IAM 用户指南》**中的 [IAM 中的临时安全凭证](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_credentials_temp.html)和[使用 IAM 的 Amazon Web Services 服务](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_aws-services-that-work-with-iam.html)。

## Amazon S3 的转发访问会话
转发访问会话

**支持转发访问会话（FAS）：**是

 转发访问会话（FAS）使用调用 Amazon Web Services 服务 的主体的权限，与发出请求的 Amazon Web Services 服务 结合，向下游服务发出请求。有关发出 FAS 请求时的策略详情，请参阅[转发访问会话](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_forward_access_sessions.html)。
+ 当使用 SSE-KMS 加密对象时，Amazon S3 使用 FAS 调用 Amazon KMS 以解密该对象。有关更多信息，请参阅 [使用具有 Amazon KMS 密钥的服务器端加密（SSE-KMS）](UsingKMSEncryption.md)。
+ S3 Access Grants 还使用 FAS。在您为特定身份创建针对 S3 数据的访问授权后，被授权者会向 S3 Access Grants 申请临时凭证。S3 Access Grants 会从 Amazon STS 获取请求者的临时凭证，然后将该凭证发送给请求者。有关更多信息，请参阅 [通过 S3 Access Grants 请求访问 Amazon S3 数据](access-grants-credentials.md)。

## Amazon S3 的服务角色
服务角色

**支持服务角色：**是

 服务角色是由一项服务担任、代表您执行操作的 [IAM 角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles.html)。IAM 管理员可以在 IAM 中创建、修改和删除服务角色。有关更多信息，请参阅《IAM 用户指南》**中的[创建向 Amazon Web Services 服务委派权限的角色](https://docs.amazonaws.cn/IAM/latest/UserGuide/id_roles_create_for-service.html)。

**警告**  
更改服务角色的权限可能会破坏 Amazon S3 的功能。仅当 Amazon S3 提供相关指导时才编辑服务角色。

## Amazon S3 的服务相关角色
服务关联角色

**支持服务相关角色：**部分支持

 服务关联角色是一种与 Amazon Web Services 服务 关联的服务角色。服务可以代入代表您执行操作的角色。服务关联角色显示在您的 Amazon Web Services 账户 中，并由该服务拥有。IAM 管理员可以查看但不能编辑服务关联角色的权限。

Amazon S3 支持针对 Amazon S3 Storage Lens 存储统计管理工具的服务相关角色。有关创建或管理 Amazon S3 服务相关角色的详细信息，请参阅[将服务相关角色用于 Amazon S3 Storage Lens 存储统计管理工具](using-service-linked-roles.md)。

**作为主体的 Amazon S3 服务**


| 策略中的服务名称 | S3 功能 | 更多信息 | 
| --- | --- | --- | 
|  `s3.amazonaws.com`  |  S3 复制  |  [设置实时复制概述](replication-how-setup.md)  | 
|  `s3.amazonaws.com`  |  S3 事件通知  |  [Amazon S3 事件通知](EventNotifications.md)  | 
|  `s3.amazonaws.com`  |  S3 清单  |  [使用 S3 清单对数据进行编目和分析](storage-inventory.md)  | 
|  `access-grants.s3.amazonaws.com`  |  S3 访问权限管控  |  [注册位置](access-grants-location-register.md)  | 
|  `batchoperations.s3.amazonaws.com`  |  S3 批量操作  |  [授予批处理操作的权限](batch-ops-iam-role-policies.md)  | 
|  `logging.s3.amazonaws.com`  |  S3 服务器访问日志记录  |  [启用 Amazon S3 服务器访问日志记录](enable-server-access-logging.md)  | 
|  `storage-lens.s3.amazonaws.com`  |  S3 Storage Lens 存储统计管理工具  |  [使用数据导出查看 Amazon S3 Storage Lens 存储统计管理工具指标](storage_lens_view_metrics_export.md)  | 