将标签与 S3 目录存储桶结合使用 - Amazon Simple Storage Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

将标签与 S3 目录存储桶结合使用

Amazon 标签是保存有关资源的元数据的键值对,在本例中为 Amazon S3 目录存储桶。您可以在创建 S3 目录存储桶时为其添加标签,也可以管理现有目录存储桶上的标签。在超过标准 S3 API 请求速率的目录存储桶上使用标签无需额外付费。有关更多信息,请参阅 Amazon S3 定价

标签的工作原理

Amazon S3 目录存储桶支持两种类型的标签:

  • Amazon 生成的标签:Amazon 自动应用这些标签,您无法修改或移除它们。要了解有关 Amazon 生成的标签的更多信息,请参阅 Using Amazon-generated tags

  • 用户定义的标签:您可以将这些标签应用于 S3 目录存储桶或其它资源并对其进行管理。

用户定义的标签

用户定义的标签是您用来为资源添加标记的标签键值对。用户定义的标签由一个必需的键和一个可选的值组成。以下是用户定义的标签的主要组成部分:

标签键

标签键是标签的名称,属于必填内容。例如,project 是以下标签键值对中的标签键:

project Trinity

标签键是一个区分大小写的字符串,它必须包含 1 到 128 个 Unicode 字符。

标签值

标签值是一个可选字符串。例如,Trinity 是此标签键值对中的标签值:

project Trinity

标签值是一个区分大小写的字符串,它可以包含 0 到 256 个 Unicode 字符。

有关用户定义的标签中支持的字符以及其它限制的详细信息,请参阅《Amazon 账单与成本管理 User Guide》中的 User-Defined Tag Restrictions

标签集

每个 S3 目录存储桶都有一个标签集,其中包含分配给该存储桶的所有标签键和值对。一个标签集可以包含多达 50 个用户定义的标签,也可以为空。

虽然每个键在标签集中必须是唯一的,但您可以多次使用相同的值。例如,您可以为以下两个标签键使用相同的值 Trinity

project Trinity
cost-center Trinity

在存储桶内,当您要添加的标签与现有标签具有相同的键时,则新值会覆盖旧值。

Amazon不会对您的标签应用任何语义意义。我们严格按字符串解释标签。

要添加、列出、修改或删除标签,您可以使用 Amazon S3 控制台、Amazon 命令行界面(Amazon CLI)或 Amazon S3 API。

使用标签的常用方法

使用 S3 目录存储桶上的标签来执行以下操作:

  1. 成本分配:在 Amazon 账单与成本管理中按存储桶标签跟踪存储成本。

  2. 基于属性的访问权限控制(ABAC):根据标签扩展访问权限并授予对 S3 目录存储桶的访问权限。

注意

您可以将相同的标签同时用于成本分配和访问权限控制。

将标签用于成本分配

通过将标签应用于 S3 目录存储桶并激活这些标签来进行成本分配,跟踪您的 Amazon S3 存储成本。

开始跟踪成本:

  1. 向 S3 目录存储桶添加标签或使用现有标签。有关如何向目录存储桶添加用户定义的标签的更多信息,请参阅使用标签。例如,您可以使用标识一个项目或一组项目的标签来标记存储桶。

  2. 在 Amazon 账单与成本管理控制台中激活标签来进行成本分配。请参阅《Amazon 账单与成本管理 User Guide》中的 Activating user-defined cost allocation tags。您可以激活用户定义的标签或 Amazon 生成的标签。有关更多信息,请参阅 Organizing and tracking costs using Amazon cost allocation tags

Amazon 使用激活的标签在各种账单和成本管理工具中整理资源成本,例如:

  • 成本分配报告

    提供按您激活的标签整理的成本概要视图。有关更多信息,请参阅《Amazon Billing User Guide》中的 Using the monthly cost allocation report

  • 成本和使用情况报告(CUR)

    提供最详细的一组 Amazon 成本和使用情况数据,包括基于标签的成本明细。有关更多信息,请参阅《Amazon Data Export User Guide》中的 What are Amazon Cost and Usage Reports?

使用标签进行基于属性的访问权限控制(ABAC)

基于属性的访问权限控制(ABAC)是一种授权策略,该策略基于属性(即标签)来定义权限。您可以将标签附加到 Amazon Identity and Access Management(IAM)实体(用户或角色)以及 Amazon 资源,如 Amazon S3 目录存储桶。然后,您可以在访问权限控制策略中使用基于标签的条件来控制对这些资源的权限,以便在满足这些条件时允许或拒绝操作。

适用于 S3 目录存储桶的 ABAC

Amazon S3 目录存储桶支持使用标签进行基于属性的访问权限控制(ABAC)。在您的 Amazon 组织、IAM 和 S3 目录存储桶策略中使用基于标签的条件键。对于企业,Amazon S3 中的 ABAC 支持跨多个 Amazon 账户进行授权。

在 IAM 策略中,可以使用以下全局条件键,根据存储桶的标签来控制对 S3 目录存储桶的访问权限:

  • aws:ResourceTag/key-name

    • 使用此键可将您在策略中指定的标签键/值对与附加到资源的键/值对进行比较。例如,您可能会要求只有在资源具有附加的标签键 Dept 和值 Marketing 时才允许访问该资源。有关更多信息,请参阅控制对 Amazon 资源的访问

  • aws:RequestTag/key-name

    • 使用此键可将请求中传递的标签键/值对与您在策略中指定的标签对进行比较。例如,您可以检查请求是否包含标签键 Dept 并具有 Accounting 值。有关更多信息,请参阅在 Amazon 请求期间控制访问。您可以使用此条件键来限制可以在 TagResourceCreateBucket API 操作期间传递哪些标签键值对。

  • aws:TagKeys

    • 使用此键可将请求中的标签键与您在策略中指定的键进行比较。我们建议当使用策略来通过标签控制访问时,请使用 aws:TagKeys 条件键来定义允许的标签键。有关示例策略和更多信息,请参阅根据标签键控制访问。您可以使用标签创建 S3 目录存储桶。要在 CreateBucket API 操作期间支持添加标签,您必须创建同时包含 s3express:TagResources3express:CreateBucket 操作的策略。然后,您可以使用 aws:TagKeys 条件键来强制在 CreateBucket 请求中使用特定的标签。

  • s3express:BucketTag/tag-key

    • 使用此条件键,可使用标签授予对目录存储桶中特定数据的权限。使用接入点访问目录存储桶时,在针对接入点以及目录存储桶进行授权时,此条件键均会引用目录存储桶上的标签,而 aws:ResourceTag/tag-key 将仅引用它获得授权的资源的标签。

策略示例

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

1.1 - 用于创建或修改具有特定标签的存储桶的 IAM 策略

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

{ "Version": "2012-10-17", "Statement": [ { "Sid": "CreateBucketWithTags", "Effect": "Allow", "Action": [ "s3express:CreateBucket", "s3express:TagResource" ], "Resource": "*", "Condition": { "StringEquals": { "aws:RequestTag/project": [ "Trinity" ] } } } ] }
1.2 - 使用标签限制对存储桶的操作的存储桶策略

在此存储桶策略中,IAM 主体(用户和角色)只有在存储桶的 project 标签的值与主体的 project 标签的值匹配时,才会使用 CreateSession 操作对存储桶执行操作。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowObjectOperations", "Effect": "Allow", "Principal": { "AWS": "111122223333" }, "Action": "s3express:CreateSession", "Resource": "arn:aws:s3express:us-west-2:111122223333:bucket/amzn-s3-demo-bucket--usw2-az1--x-s3", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }
1.3 - 修改现有资源上的标签以维护标签治理的 IAM 策略

在此 IAM 策略中,IAM 主体(用户或角色)只有在存储桶的 project 标签的值与主体的 project 标签的值匹配时,才会修改存储桶上的标签。这些目录存储桶只允许使用在 aws:TagKeys 条件键中指定的四个标签 projectenvironmentownercost-center。这有助于强制执行标签治理,防止未经授权修改标签,并使标签架构跨存储桶保持一致。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "EnforceTaggingRulesOnModification", "Effect": "Allow", "Action": [ "s3express:TagResource" ], "Resource": "arn:aws:s3express:*:*:bucket/*", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "project", "environment", "owner", "cost-center" ] } } } ] }
1.4 - 使用 s3express:BucketTag 条件键

在此 IAM 策略中,条件语句仅在存储桶具有标签键 Environment 和标签值 Production 时,才支持访问存储桶的数据。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToSpecificAccessPoint", "Effect": "Allow", "Action": "*", "Resource": "arn:aws:s3express:*:*:accesspoint/*", "Condition": { "StringEquals": { "s3express:BucketTag/Environment": "Production" } } } ] }

使用标签

您可以使用 Amazon S3 控制台、Amazon 命令行界面(CLI)、Amazon SDK 或以下 S3 API 为 S3 目录存储桶添加或管理标签:TagResourceUntagResourceListTagsForResource。有关更多信息,请参阅: