将标签与 S3 表存储桶结合使用
AWS 标签是用于保存有关资源(在本例中为 Amazon S3 表存储桶)的元数据的键值对。您可以在创建 S3 表存储桶时为其添加标签,也可以管理现有表存储桶上的标签。有关标签的一般信息,请参阅添加标签以进行成本分配或基于属性的访问权限控制(ABAC)。
注意
在表存储桶上使用标签时,除了标准 S3 API 请求费率之外,没有任何其他费用。有关更多信息,请参阅 Amazon S3 定价
将标签与表存储桶结合使用的常用方法
使用 S3 表存储桶上的标签来执行以下操作:
基于属性的访问权限控制(ABAC):根据 S3 表存储桶的标签扩展访问权限并授予对这些存储桶的访问权限。有关更多信息,请参阅 Using tags for ABAC。
适用于 S3 表存储桶的 ABAC
Amazon S3 表存储桶支持使用标签进行基于属性的访问权限控制(ABAC)。请在您的 AWS Organizations、AWS Identity and Access Management(IAM)和 S3 表存储桶策略中使用基于标签的条件键。Amazon S3 中的 ABAC 支持跨多个 AWS 账户进行授权。
在您的 IAM 策略中,您可以使用 s3tables:TableBucketTag/tag-key 条件键或 AWS 全局条件键 aws:ResourceTag/key-name、aws:RequestTag/key-name 或 aws:TagKeys,根据表存储桶的标签控制对 S3 表存储桶的访问。
aws:ResourceTag/key-name
使用此条件键可将您在策略中指定的标签键值对与附加到资源的键值对进行比较。例如,您可能会要求仅在表存储桶具有标签键 Department 和值 Marketing 时才允许访问该表存储桶。
此条件键将应用于使用 Amazon S3 控制台、AWS 命令行界面(CLI)、S3 API 或 AWS SDK 执行的所有表存储桶操作(针对 CreateBucket API 请求的操作除外)。
有关策略示例,请参阅 1.1:用于通过标签限制对表存储桶内表的操作的表存储桶策略。
有关更多示例策略和信息,请参阅《AWS Identity and Access Management 用户指南》中的控制对 AWS 资源的访问。
注意
对于对表执行的操作,此条件键将对应用于表的标签起作用,而非应用于包含该表的表存储桶的标签。如果您希望 ABAC 策略在您执行表操作时对表存储桶的标签起作用,请改用 s3tables:TableBucketTag/tag-key。
aws:RequestTag/key-name
使用此条件键可将请求中传递的标签键值对与您在策略中指定的标签对进行比较。例如,您可以检查为表存储桶添加标签的请求是否包含标签键 Department 并具有值 Accounting。
在 TagResource 或 CreateTableBucket API 操作请求中传递标签键时,或者使用 Amazon S3 控制台、AWS 命令行界面(CLI)或 AWS SDK 标记或创建带有标签的表存储桶时,此条件键适用。
有关策略示例,请参阅 1.2:用于创建或修改具有特定标签的表存储桶的 IAM 策略。
有关更多示例策略和信息,请参阅《AWS Identity and Access Management 用户指南》中的在 AWS 请求期间控制访问。
aws:TagKeys
使用此条件键可将请求中的标签键与您在策略中指定的键进行比较,从而定义允许用于访问操作的标签键。例如,要允许在 CreateTableBucket 操作期间添加标签,必须创建一个同时允许 s3tables:TagResource 和 s3tables:CreateTableBucket 操作的策略。然后,您可以使用 aws:TagKeys 条件键来强制仅在 CreateTableBucket 请求中使用特定标签。
在 TagResource、UntagResource 或 CreateTableBucket API 操作中传递标签键时,或者使用 Amazon S3 控制台、AWS 命令行界面(CLI)或 AWS SDK 来标记、取消标记或创建带有标签的表存储桶时,此条件键适用。
有关策略示例,请参阅 1.3:用于控制对现有资源上的标签的修改以保持标签治理的 IAM 策略。
有关更多示例策略和更多信息,请参阅《AWS Identity and Access Management 用户指南》中的根据标签键控制访问。
s3tables:TableBucketTag/tag-key
使用此条件键可通过标签授予对表存储桶中特定数据的权限。此条件键主要作用于针对所有 S3 表操作分配给表存储桶的标签。即使在您创建带有标签的表时,此条件键也会对应用于包含该表的表存储桶的标签起作用。下面是一些例外情况:
当您创建带有标签的表存储桶时,此条件键会对请求中的标签起作用。
有关策略示例,请参阅 1.4:使用 s3tables:TableBucketTag 条件键。
适用于表存储桶的示例 ABAC 策略
请参阅以下适用于 Amazon S3 表存储桶的示例 ABAC 策略。
注意
如果您使用 Lake Formation 来管理对 Amazon S3 表类数据存储服务的访问,并且您拥有基于 IAM 或 S3 表类数据存储服务资源的策略(根据主体标签限制 IAM 用户和 IAM 角色),则必须将相同的主体标签附加到 Lake Formation 用来访问 Amazon S3 数据的 IAM 角色(例如,LakeFormationDataAccessRole),并为该角色授予必要的权限。这是基于标签的访问控制策略与 S3 表类数据存储服务分析集成正常协同工作所必需的。
1.1:用于通过标签限制对表存储桶内表的操作的表存储桶策略
在此表存储桶策略中,指定的 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 策略
注意
如果您使用 AWS Lake Formation 管理对 Amazon S3 表的访问,并且将 ABAC 与 Amazon S3 表类数据存储服务结合使用,请确保您还为 Lake Formation 代入的 IAM 角色授予所需的访问权限。有关为 Lake Formation 设置 IAM 角色的更多信息,请参阅《AWS Lake Formation 开发人员指南》中的将 Amazon S3 表目录与 Data Catalog 和 Lake Formation 集成的先决条件。
在此 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 策略
在此 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 条件键
在此 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" } } } ] }
管理表存储桶的标签
您可以使用 Amazon S3 控制台、AWS 命令行界面(CLI)、AWS SDK 或以下 S3 API 为 S3 表存储桶添加或管理标签:TagResource、UntagResource 和 ListTagsForResource。有关更多信息,请参阅下列内容: