将标签与 S3 目录存储桶结合使用
AWS 标签是保存有关资源的元数据的键值对,在本例中为 Amazon S3 目录存储桶。您可以在创建 S3 目录存储桶时为其添加标签,也可以管理现有目录存储桶上的标签。在超过标准 S3 API 请求速率的目录存储桶上使用标签无需额外付费。有关更多信息,请参阅 Amazon S3 定价
标签的工作原理
Amazon S3 目录存储桶支持两种类型的标签:
-
AWS 生成的标签:AWS 自动应用这些标签,您无法修改或移除它们。要了解有关 AWS 生成的标签的更多信息,请参阅 Using AWS-generated tags。
-
用户定义的标签:您可以将这些标签应用于 S3 目录存储桶或其它资源并对其进行管理。
用户定义的标签
用户定义的标签是您用来为资源添加标记的标签键值对。用户定义的标签由一个必需的键和一个可选的值组成。以下是用户定义的标签的主要组成部分:
标签键
标签键是标签的名称,属于必填内容。例如,project
是以下标签键值对中的标签键:
键 | 值 |
---|---|
project |
Trinity |
标签键是一个区分大小写的字符串,它必须包含 1 到 128 个 Unicode 字符。
标签值
标签值是一个可选字符串。例如,Trinity
是此标签键值对中的标签值:
键 | 值 |
---|---|
project |
Trinity |
标签值是一个区分大小写的字符串,它可以包含 0 到 256 个 Unicode 字符。
有关用户定义的标签中支持的字符以及其它限制的详细信息,请参阅《AWS 账单与成本管理 User Guide》中的 User-Defined Tag Restrictions。
标签集
每个 S3 目录存储桶都有一个标签集,其中包含分配给该存储桶的所有标签键和值对。一个标签集可以包含多达 50 个用户定义的标签,也可以为空。
虽然每个键在标签集中必须是唯一的,但您可以多次使用相同的值。例如,您可以为以下两个标签键使用相同的值 Trinity
:
键 | 值 |
---|---|
project |
Trinity |
cost-center |
Trinity |
在存储桶内,当您要添加的标签与现有标签具有相同的键时,则新值会覆盖旧值。
AWS不会对您的标签应用任何语义意义。我们严格按字符串解释标签。
要添加、列出、修改或删除标签,您可以使用 Amazon S3 控制台、AWS 命令行界面(AWS CLI)或 Amazon S3 API。
使用标签的常用方法
使用 S3 目录存储桶上的标签来执行以下操作:
-
成本分配:在 AWS 账单与成本管理中按存储桶标签跟踪存储成本。
-
基于属性的访问权限控制(ABAC):根据标签扩展访问权限并授予对 S3 目录存储桶的访问权限。
注意
您可以将相同的标签同时用于成本分配和访问权限控制。
将标签用于成本分配
通过将标签应用于 S3 目录存储桶并激活这些标签来进行成本分配,跟踪您的 Amazon S3 存储成本。
开始跟踪成本:
-
向 S3 目录存储桶添加标签或使用现有标签。有关如何向目录存储桶添加用户定义的标签的更多信息,请参阅使用标签。例如,您可以使用标识一个项目或一组项目的标签来标记存储桶。
-
在 AWS 账单与成本管理控制台中激活标签来进行成本分配。请参阅《AWS 账单与成本管理 User Guide》中的 Activating user-defined cost allocation tags。您可以激活用户定义的标签或 AWS 生成的标签。有关更多信息,请参阅 Organizing and tracking costs using AWS cost allocation tags。
AWS 使用激活的标签在各种账单和成本管理工具中整理资源成本,例如:
-
成本分配报告
提供按您激活的标签整理的成本概要视图。有关更多信息,请参阅《AWS Billing User Guide》中的 Using the monthly cost allocation report。
-
成本和使用情况报告(CUR)
提供最详细的一组 AWS 成本和使用情况数据,包括基于标签的成本明细。有关更多信息,请参阅《AWS Data Export User Guide》中的 What are AWS Cost and Usage Reports?
使用标签进行基于属性的访问权限控制(ABAC)
基于属性的访问权限控制(ABAC)是一种授权策略,该策略基于属性(即标签)来定义权限。您可以将标签附加到 AWS Identity and Access Management(IAM)实体(用户或角色)以及 AWS 资源,如 Amazon S3 目录存储桶。然后,您可以在访问权限控制策略中使用基于标签的条件来控制对这些资源的权限,以便在满足这些条件时允许或拒绝操作。
适用于 S3 目录存储桶的 ABAC
Amazon S3 目录存储桶支持使用标签进行基于属性的访问权限控制(ABAC)。在您的 AWS 组织、IAM 和 S3 目录存储桶策略中使用基于标签的条件键。对于企业,Amazon S3 中的 ABAC 支持跨多个 AWS 账户进行授权。
在 IAM 策略中,可以使用以下全局条件键,根据存储桶的标签来控制对 S3 目录存储桶的访问权限:
-
aws:ResourceTag/key-name
-
使用此键可将您在策略中指定的标签键/值对与附加到资源的键/值对进行比较。例如,您可能会要求只有在资源具有附加的标签键
Dept
和值Marketing
时才允许访问该资源。有关更多信息,请参阅控制对 AWS 资源的访问。
-
-
aws:RequestTag/key-name
-
使用此键可将请求中传递的标签键/值对与您在策略中指定的标签对进行比较。例如,您可以检查请求是否包含标签键
Dept
并具有Accounting
值。有关更多信息,请参阅在 AWS 请求期间控制访问。您可以使用此条件键来限制可以在TagResource
和CreateBucket
API 操作期间传递哪些标签键值对。
-
-
aws:TagKeys
-
使用此键可将请求中的标签键与您在策略中指定的键进行比较。我们建议当使用策略来通过标签控制访问时,请使用
aws:TagKeys
条件键来定义允许的标签键。有关示例策略和更多信息,请参阅根据标签键控制访问。您可以使用标签创建 S3 目录存储桶。要在CreateBucket
API 操作期间支持添加标签,您必须创建同时包含s3express:TagResource
和s3express: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/", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }
amzn-s3-demo-bucket--usw2-az1--x-s3
1.3 - 修改现有资源上的标签以维护标签治理的 IAM 策略
在此 IAM 策略中,IAM 主体(用户或角色)只有在存储桶的 project
标签的值与主体的 project
标签的值匹配时,才会修改存储桶上的标签。这些目录存储桶只允许使用在 aws:TagKeys
条件键中指定的四个标签 project
、environment
、owner
和 cost-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 控制台、AWS 命令行界面(CLI)、AWS SDK 或以下 S3 API 为 S3 目录存储桶添加或管理标签:TagResource、UntagResource 和 ListTagsForResource。有关更多信息,请参阅: