将标签与通用存储桶的 S3 接入点结合使用
AWS 标签是保存有关资源的元数据的键值对,在本例中为 Amazon S3 接入点。可以在创建接入点时为其添加标签,也可以管理现有接入点上的标签。有关标签的一般信息,请参阅添加标签以进行成本分配或基于属性的访问权限控制(ABAC)。
注意
在超过标准 S3 API 请求速率的接入点上使用标签无需额外付费。有关更多信息,请参阅 Amazon S3 定价
将标签和接入点结合使用的常用方法
基于属性的访问权限控制(ABAC)支持您根据标签扩展访问权限并授予对接入点的访问权限。有关 Amazon S3 中的 ABAC 的更多信息,请参阅 Using tags for ABAC。
适用于 S3 接入点的 ABAC
Amazon S3 接入点支持使用标签进行基于属性的访问权限控制(ABAC)。在您的 AWS 组织、IAM 和接入点策略中使用基于标签的条件键。对于企业,Amazon S3 中的 ABAC 支持跨多个 AWS 账户进行授权。
在 IAM 策略中,可以使用以下全局条件键,根据接入点的标签来控制对接入点的访问权限:
-
aws:ResourceTag/key-name
-
使用此键可将您在策略中指定的标签键/值对与附加到资源的键/值对进行比较。例如,您可能会要求只有在资源具有附加的标签键
Dept
和值Marketing
时才允许访问该资源。有关更多信息,请参阅控制对 AWS 资源的访问。
-
-
aws:RequestTag/key-name
-
使用此键可将请求中传递的标签键/值对与您在策略中指定的标签对进行比较。例如,您可以检查请求是否包含标签键
Dept
并具有Accounting
值。有关更多信息,请参阅在 AWS 请求期间控制访问。您可以使用此条件键来限制可以在TagResource
和CreateAccessPoint
API 操作期间传递哪些标签键值对。
-
-
aws:TagKeys
-
使用此键可将请求中的标签键与您在策略中指定的键进行比较。我们建议当使用策略来通过标签控制访问时,请使用
aws:TagKeys
条件键来定义允许的标签键。有关示例策略和更多信息,请参阅根据标签键控制访问。可以创建带有标签的接入点。要在CreateAccessPoint
API 操作期间支持添加标签,您必须创建同时包含s3:TagResource
和s3:CreateAccessPoint
操作的策略。然后,您可以使用aws:TagKeys
条件键来强制在CreateAccessPoint
请求中使用特定的标签。
-
-
s3:AccessPointTag/tag-key
-
使用此条件键,可通过使用标签的接入点授予对特定数据的权限。在 IAM 策略中使用
aws:ResourceTag/tag-key
时,接入点以及该接入点指向的存储桶都需要具有与在授权期间考虑这两者时相同的标签。如果想特意通过接入点标签来控制对数据的访问权限,可以使用s3:AccessPointTag/tag-key
条件键。
-
接入点的 ABAC 策略示例
请参阅以下有关 Amazon S3 接入点的 ABAC 策略的示例。
1.1 - 用于创建或修改具有特定标签的存储桶的 IAM 策略
在此 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 - 使用标签限制对接入点的操作的接入点策略
在此接入点策略中,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/", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" } } } ] }
my-access-point
1.3 - 修改现有资源上的标签以维护标签治理的 IAM 策略
在此 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/", "Condition": { "StringEquals": { "aws:ResourceTag/project": "${aws:PrincipalTag/project}" }, "ForAllValues:StringEquals": { "aws:TagKeys": [ "
my-access-point
project
", "environment
", "owner
", "cost-center
" ] } } } ] }
1.4 - 使用 s3:AccessPointTag 条件键
在此 IAM 策略中,如果接入点具有标签键 Environment
和标签值 Production
,则条件语句支持访问存储桶的数据。
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowAccessToSpecificAccessPoint", "Effect": "Allow", "Action": "*", "Resource": "arn:aws::s3:
region
:111122223333
:accesspoint/", "Condition": { "StringEquals": { "s3:AccessPointTag/Environment": "Production" } } } ] }
my-access-point
1.5 - 使用存储桶委托策略
在 Amazon S3 中,可以将 S3 存储桶策略的访问权限或控制权委托给其它 AWS 账户或另一个账户中的特定 AWS Identity and Access Management(IAM)用户或角色。委托存储桶策略向该其它账户、用户或角色授予访问存储桶及其对象的权限。有关更多信息,请参阅权限委托。
如果使用委托存储桶策略,如下所示:
{ "Version": "2012-10-17", "Statement": { "Principal": {"AWS": "*"}, "Effect": "Allow", "Action": ["s3:*"], "Resource":["arn:aws::s3:::
/*", "arn:aws::s3:::
amzn-s3-demo-bucket
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/", "Condition": { "StringEquals": { "s3:AccessPointTag/Environment": "Production" } } } ] }
my-access-point
将标签与通用存储桶的接入点结合使用
可以使用 Amazon S3 控制台、AWS 命令行界面(CLI)、AWS SDK 或以下 S3 API 为接入点添加或管理标签:TagResource、UntagResource 和 ListTagsForResource。有关更多信息,请参阅: