

# 将标签与 S3 表存储桶结合使用
<a name="table-bucket-tagging"></a>

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

**注意**  
在表存储桶上使用标签时，除了标准 S3 API 请求费率之外，没有任何其他费用。有关更多信息，请参阅 [Amazon S3 定价](https://aws.amazon.com/s3/pricing/)。

## 将标签与表存储桶结合使用的常用方法
<a name="common-ways-to-use-tags-table-bucket"></a>

使用 S3 表存储桶上的标签来执行以下操作：

**基于属性的访问权限控制（ABAC）**：根据 S3 表存储桶的标签扩展访问权限并授予对这些存储桶的访问权限。有关更多信息，请参阅 [Using tags for ABAC](https://docs.aws.amazon.com/AmazonS3/latest/userguide/tagging.html#using-tags-for-abac)。

### 适用于 S3 表存储桶的 ABAC
<a name="abac-for-table-buckets"></a>

Amazon S3 表存储桶支持使用标签进行基于属性的访问权限控制（ABAC）。请在您的 AWS Organizations、AWS Identity and Access Management（IAM）和 S3 表存储桶策略中使用基于标签的条件键。Amazon S3 中的 ABAC 支持跨多个 AWS 账户进行授权。

在您的 IAM 策略中，您可以使用 `s3tables:TableBucketTag/tag-key` 条件键或 [AWS 全局条件键](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-tagkeys) `aws:ResourceTag/key-name`、`aws:RequestTag/key-name` 或 `aws:TagKeys`，根据表存储桶的标签控制对 S3 表存储桶的访问。

#### aws:ResourceTag/key-name
<a name="table-bucket-condition-key-resource-tag"></a>

使用此条件键可将您在策略中指定的标签键值对与附加到资源的键值对进行比较。例如，您可能会要求仅在表存储桶具有标签键 `Department` 和值 `Marketing` 时才允许访问该表存储桶。

此条件键将应用于使用 Amazon S3 控制台、AWS 命令行界面（CLI）、S3 API 或 AWS SDK 执行的所有表存储桶操作（针对 `CreateBucket` API 请求的操作除外）。

有关策略示例，请参阅 [1.1：用于通过标签限制对表存储桶内表的操作的表存储桶策略](#example-policy-table-bucket-resource-tag)。

有关更多示例策略和信息，请参阅《AWS Identity and Access Management 用户指南》**中的[控制对 AWS 资源的访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-resources)。

**注意**  
对于对表执行的操作，此条件键将对应用于表的标签起作用，而非应用于包含该表的表存储桶的标签。如果您希望 ABAC 策略在您执行表操作时对表存储桶的标签起作用，请改用 `s3tables:TableBucketTag/tag-key`。

#### aws:RequestTag/key-name
<a name="table-bucket-condition-key-request-tag"></a>

使用此条件键可将请求中传递的标签键值对与您在策略中指定的标签对进行比较。例如，您可以检查为表存储桶添加标签的请求是否包含标签键 `Department` 并具有值 `Accounting`。

在 `TagResource` 或 `CreateTableBucket` API 操作请求中传递标签键时，或者使用 Amazon S3 控制台、AWS 命令行界面（CLI）或 AWS SDK 标记或创建带有标签的表存储桶时，此条件键适用。

有关策略示例，请参阅 [1.2：用于创建或修改具有特定标签的表存储桶的 IAM 策略](#example-policy-table-bucket-request-tag)。

有关更多示例策略和信息，请参阅《AWS Identity and Access Management 用户指南》**中的[在 AWS 请求期间控制访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-requests)。

#### aws:TagKeys
<a name="table-bucket-condition-key-tag-keys"></a>

使用此条件键可将请求中的标签键与您在策略中指定的键进行比较，从而定义允许用于访问操作的标签键。例如，要允许在 `CreateTableBucket` 操作期间添加标签，必须创建一个同时允许 `s3tables:TagResource` 和 `s3tables:CreateTableBucket` 操作的策略。然后，您可以使用 `aws:TagKeys` 条件键来强制仅在 `CreateTableBucket` 请求中使用特定标签。

在 `TagResource`、`UntagResource` 或 `CreateTableBucket` API 操作中传递标签键时，或者使用 Amazon S3 控制台、AWS 命令行界面（CLI）或 AWS SDK 来标记、取消标记或创建带有标签的表存储桶时，此条件键适用。

有关策略示例，请参阅 [1.3：用于控制对现有资源上的标签的修改以保持标签治理的 IAM 策略](#example-policy-table-bucket-tag-keys)。

有关更多示例策略和更多信息，请参阅《AWS Identity and Access Management 用户指南》**中的[根据标签键控制访问](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_tags.html#access_tags_control-tag-keys)。

#### s3tables:TableBucketTag/tag-key
<a name="table-bucket-condition-key"></a>

使用此条件键可通过标签授予对表存储桶中特定数据的权限。此条件键主要作用于针对所有 S3 表操作分配给表存储桶的标签。即使在您创建带有标签的表时，此条件键也会对应用于包含该表的表存储桶的标签起作用。下面是一些例外情况：
+ 当您创建带有标签的表存储桶时，此条件键会对请求中的标签起作用。

有关策略示例，请参阅 [1.4：使用 s3tables:TableBucketTag 条件键](#example-policy-table-bucket-tag)。

#### 适用于表存储桶的示例 ABAC 策略
<a name="example-table-buckets-abac-policies"></a>

请参阅以下适用于 Amazon S3 表存储桶的示例 ABAC 策略。

**注意**  
如果您使用 Lake Formation 来管理对 Amazon S3 表类数据存储服务的访问，并且您拥有基于 IAM 或 S3 表类数据存储服务资源的策略（根据主体标签限制 IAM 用户和 IAM 角色），则必须将相同的主体标签附加到 Lake Formation 用来访问 Amazon S3 数据的 IAM 角色（例如，LakeFormationDataAccessRole），并为该角色授予必要的权限。这是基于标签的访问控制策略与 S3 表类数据存储服务分析集成正常协同工作所必需的。

##### 1.1：用于通过标签限制对表存储桶内表的操作的表存储桶策略
<a name="example-policy-table-bucket-resource-tag"></a>

在此表存储桶策略中，指定的 IAM 主体（用户和角色）仅在表的 `project` 标签的值与主体的 `project` 标签的值匹配时，才能对表存储桶中的任何表执行 `GetTable` 操作。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowGetTable",
      "Effect": "Allow",
      "Principal": {
        "AWS": "111122223333"
      },
      "Action": "s3tables:GetTable",
      "Resource": "arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/*",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
        }
      }
    }
  ]
}
```

##### 1.2：用于创建或修改具有特定标签的表存储桶的 IAM 策略
<a name="example-policy-table-bucket-request-tag"></a>

**注意**  
如果您使用 AWS Lake Formation 管理对 Amazon S3 表的访问，并且将 ABAC 与 Amazon S3 表类数据存储服务结合使用，请确保您还为 Lake Formation 代入的 IAM 角色授予所需的访问权限。有关为 Lake Formation 设置 IAM 角色的更多信息，请参阅《AWS Lake Formation 开发人员指南》**中的[将 Amazon S3 表目录与 Data Catalog 和 Lake Formation 集成的先决条件](https://docs.aws.amazon.com/lake-formation/latest/dg/s3tables-catalog-prerequisites.html)。

在此 IAM 策略中，具有此策略的用户或角色仅在以下情况下才能创建 S3 表存储桶：他们在表存储桶创建请求中使用标签键 `project` 和标签值 `Trinity` 为表存储桶添加标签。他们还可以在现有 S3 表存储桶上添加或修改标签，前提是 `TagResource` 请求包含标签键值对 `project:Trinity`。此策略不授予对表存储桶或其对象的读取、写入或删除权限。

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

##### 1.3：用于控制对现有资源上的标签的修改以保持标签治理的 IAM 策略
<a name="example-policy-table-bucket-tag-keys"></a>

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

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "EnforceTaggingRulesOnModification",
      "Effect": "Allow",
      "Action": [
        "s3tables:TagResource",
        "s3tables:UntagResource"
      ],
      "Resource": "arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket",
      "Condition": {
        "StringEquals": {
          "aws:ResourceTag/project": "${aws:PrincipalTag/project}"
        },
        "ForAllValues:StringEquals": {
          "aws:TagKeys": [
            "project",
            "environment",
            "owner",
            "cost-center"
          ]
        }
      }
    }
  ]
}
```

##### 1.4：使用 s3tables:TableBucketTag 条件键
<a name="example-policy-table-bucket-tag"></a>

在此 IAM 策略中，条件语句仅在表存储桶具有标签键 `Environment` 和标签值 `Production` 时，才支持访问表存储桶的数据。`s3tables:TableBucketTag/<tag-key>` 与 `aws:ResourceTag/<tag-key>` 条件键不同，因为除了根据标签控制对表存储桶的访问外，它还支持根据父表存储桶上的标签控制对表的访问。

```
{
  "Version": "2012-10-17",		 	 	 
  "Statement": [
    {
      "Sid": "AllowAccessToSpecificTables",
      "Effect": "Allow",
      "Action": "*",
      "Resource": "arn:aws::s3tables:us-west-2:111122223333:bucket/amzn-s3-demo-table-bucket/*",
      "Condition": {
        "StringEquals": {
          "s3tables:TableBucketTag/Environment": "Production"
        }
      }
    }
  ]
}
```

## 管理表存储桶的标签
<a name="table-bucket-working-with-tags"></a>

您可以使用 Amazon S3 控制台、AWS 命令行界面（CLI）、AWS SDK 或以下 S3 API 为 S3 表存储桶添加或管理标签：[TagResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_TagResource.html)、[UntagResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_UntagResource.html) 和 [ListTagsForResource](https://docs.aws.amazon.com/AmazonS3/latest/API/API_s3Buckets_ListTagsForResource.html)。有关更多信息，请参阅下列内容：

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