

# 将标签与通用存储桶的 S3 接入点结合使用
<a name="access-points-tagging"></a>

Amazon 标签是保存有关资源的元数据的键值对，在本例中为 Amazon S3 接入点。可以在创建接入点时为其添加标签，也可以管理现有接入点上的标签。有关标签的一般信息，请参阅[添加标签以进行成本分配或基于属性的访问权限控制（ABAC）](tagging.md)。

**注意**  
在超过标准 S3 API 请求速率的接入点上使用标签无需额外付费。有关更多信息，请参阅 [Amazon S3 定价](https://www.amazonaws.cn/s3/pricing/)。

## 将标签和接入点结合使用的常用方法
<a name="common-ways-to-use-tags-directory-bucket"></a>

基于属性的访问权限控制（ABAC）支持您根据标签扩展访问权限并授予对接入点的访问权限。有关 Amazon S3 中的 ABAC 的更多信息，请参阅 [Using tags for ABAC](https://docs.amazonaws.cn/AmazonS3/latest/userguide/tagging.html#)。

### 适用于 S3 接入点的 ABAC
<a name="abac-for-access-points"></a>

Amazon S3 接入点支持使用标签进行基于属性的访问权限控制（ABAC）。在您的 Amazon 组织、IAM 和接入点策略中使用基于标签的条件键。对于企业，Amazon S3 中的 ABAC 支持跨多个 Amazon 账户进行授权。

在 IAM 策略中，可以使用以下[全局条件键](https://docs.amazonaws.cn/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys)，根据接入点的标签来控制对接入点的访问权限：
+ `aws:ResourceTag/key-name`
**重要**  
`aws:ResourceTag` 条件键只能用于通过接入点 ARN 对通用存储桶执行的 S3 操作，并且仅涵盖底层接入点标签。
  + 使用此键可将您在策略中指定的标签键/值对与附加到资源的键/值对进行比较。例如，您可能会要求只有在资源具有附加的标签键 `Dept` 和值 `Marketing` 时才允许访问该资源。有关更多信息，请参阅[控制对 Amazon 资源的访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources)。
+ `aws:RequestTag/key-name`
  + 使用此键可将请求中传递的标签键/值对与您在策略中指定的标签对进行比较。例如，您可以检查请求是否包含标签键 `Dept` 并具有 `Accounting` 值。有关更多信息，请参阅[在 Amazon 请求期间控制访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests)。您可以使用此条件键来限制可以在 `TagResource` 和 `CreateAccessPoint` API 操作期间传递哪些标签键值对。
+ `aws:TagKeys`
  + 使用此键可将请求中的标签键与您在策略中指定的键进行比较。我们建议当使用策略来通过标签控制访问时，请使用 `aws:TagKeys` 条件键来定义允许的标签键。有关示例策略和更多信息，请参阅[根据标签键控制访问](https://docs.amazonaws.cn/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。可以创建带有标签的接入点。要在 `CreateAccessPoint` API 操作期间支持添加标签，您必须创建同时包含 `s3:TagResource` 和 `s3:CreateAccessPoint` 操作的策略。然后，您可以使用 `aws:TagKeys` 条件键来强制在 `CreateAccessPoint` 请求中使用特定的标签。
+ `s3:AccessPointTag/tag-key`
  + 使用此条件键，可通过使用标签的接入点授予对特定数据的权限。在 IAM 策略中使用 `aws:ResourceTag/tag-key` 时，接入点以及该接入点指向的存储桶都需要具有与在授权期间考虑这两者时相同的标签。如果想特意通过接入点标签来控制对数据的访问权限，可以使用 `s3:AccessPointTag/tag-key` 条件键。

### 接入点的 ABAC 策略示例
<a name="example-access-points-abac-policies"></a>

请参阅以下有关 Amazon S3 接入点的 ABAC 策略的示例。

#### 1.1 - 用于创建或修改具有特定标签的存储桶的 IAM 策略
<a name="example-access-points-user-policy-request-tag"></a>

在此 IAM 策略中，具有此策略的用户或角色只有在接入点创建请求中使用标签键 `project` 和标签值 `Trinity` 来为接入点添加标签时，才会创建接入点。这些用户或角色还可以在现有接入点上添加或修改标签，只要 `TagResource` 请求包含标签键值对 `project:Trinity` 即可。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "CreateAccessPointWithTags",
      "Effect": "Allow",
      "Action": [
        "s3:CreateAccessPoint",
        "s3:TagResource"
      ],
      "Resource": "*",
      "Condition": {
        "StringEquals": {
          "aws:RequestTag/project": [
            "Trinity"
          ]
        }
      }
    }
  ]
}
```

#### 1.2 - 使用标签限制对接入点的操作的接入点策略
<a name="example-access-points-user-policy-resource-tag"></a>

在此接入点策略中，IAM 主体（用户和角色）只有在接入点的 `project` 标签的值与主体的 `project` 标签的值匹配时，才会使用 `GetObject` 操作对接入点执行操作。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowObjectOperations",
      "Effect": "Allow",
      "Principal": {
        "AWS": "111122223333"
      },
      "Action": "s3:GetObject",
      "Resource": "arn:aws::s3:region:111122223333:accesspoint/my-access-point",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
        }
      }
    }
  ]
}
```

#### 1.3 - 修改现有资源上的标签以维护标签治理的 IAM 策略
<a name="example-access-points-user-policy-tag-keys"></a>

在此 IAM 策略中，IAM 主体（用户或角色）只有在接入点的 `project` 标签的值与主体的 `project` 标签的值匹配时，才会修改接入点上的标签。这些接入点只允许使用在 `aws:TagKeys` 条件键中指定的四个标签 `project`、`environment`、`owner` 和 `cost-center`。这有助于强制执行标签治理，防止未经授权修改标签，并使标签架构跨接入点保持一致。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceTaggingRulesOnModification",
      "Effect": "Allow",
      "Action": [
        "s3:TagResource"
      ],
      "Resource": "arn:aws::s3:region:111122223333:accesspoint/my-access-point",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "project",
            "environment",
            "owner",
            "cost-center"
          ]
        }
      }
    }
  ]
}
```

#### 1.4 - 使用 s3:AccessPointTag 条件键
<a name="example-access-points-policy-bucket-tag"></a>

在此 IAM 策略中，如果接入点具有标签键 `Environment` 和标签值 `Production`，则条件语句支持访问存储桶的数据。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessToSpecificAccessPoint",
      "Effect": "Allow",
      "Action": "*",
      "Resource": "arn:aws::s3:region:111122223333:accesspoint/my-access-point",
      "Condition": {
        "StringEquals": {
          "s3:AccessPointTag/Environment": "Production"
        }
      }
    }
  ]
}
```

#### 1.5 - 使用存储桶委托策略
<a name="example-access-points-policy-delegate"></a>

在 Amazon S3 中，可以将 S3 存储桶策略的访问权限或控制权委托给其它 Amazon 账户或另一个账户中的特定 Amazon Identity and Access Management（IAM）用户或角色。委托存储桶策略向该其它账户、用户或角色授予访问存储桶及其对象的权限。有关更多信息，请参阅[权限委托](https://docs.amazonaws.cn/AmazonS3/latest/userguide/access-policy-language-overview.html#permission-delegation)。

如果使用委托存储桶策略，如下所示：

```
{
  "Version": "2012-10-17",		 	 	 
    "Statement": {
      "Principal": {"Amazon": "*"},
        "Effect": "Allow",
        "Action": ["s3:*"],
        "Resource":["arn:aws::s3:::amzn-s3-demo-bucket/*", "arn:aws::s3:::amzn-s3-demo-bucket"],
           "Condition": {
             "StringEquals" : {
                "s3:DataAccessPointAccount" : "111122223333"
             }
           }
    }
}
```

在以下 IAM 策略中，如果接入点具有标签键 `Environment` 和标签值 `Production`，则条件语句支持访问存储桶的数据。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessToSpecificAccessPoint",
      "Effect": "Allow",
      "Action": "*",
      "Resource": "arn:aws::s3:region:111122223333:accesspoint/my-access-point",
      "Condition": {
        "StringEquals": {
          "s3:AccessPointTag/Environment": "Production"
        }
      }
    }
  ]
}
```

## 将标签与通用存储桶的接入点结合使用
<a name="working-with-tags-access-points"></a>

可以使用 Amazon S3 控制台、Amazon 命令行界面（CLI）、Amazon SDK 或以下 S3 API 为接入点添加或管理标签：[TagResource](https://docs.amazonaws.cn/AmazonS3/latest/API/API_control_TagResource.html)、[UntagResource](https://docs.amazonaws.cn/AmazonS3/latest/API/API_control_UntagResource.html) 和 [ListTagsForResource](https://docs.amazonaws.cn/AmazonS3/latest/API/API_control_ListTagsForResource.html)。有关更多信息，请参阅：

**Topics**
+ [将标签和接入点结合使用的常用方法](#common-ways-to-use-tags-directory-bucket)
+ [将标签与通用存储桶的接入点结合使用](#working-with-tags-access-points)
+ [创建带有标签的接入点](access-points-create-tag.md)
+ [向接入点添加标签](access-points-tag-add.md)
+ [查看接入点标签](access-points-tag-view.md)
+ [从接入点删除标签](access-points-tag-delete.md)