亚马逊AWS官方博客
为 Amazon S3 通用存储桶引入基于属性的访问控制
随着组织规模的扩大,存储资源的访问权限管理变得日益复杂且耗时。随着新成员加入团队、现有员工岗位变动以及新 S3 存储桶创建,组织必须持续更新多种类型的访问策略,以管理其 S3 存储桶的访问权限。在多租户 S3 环境中,这一挑战尤为突出,管理员必须时常更新这些策略,以控制共享数据集和众多用户之间的访问权限。
今天,我们推出适用于 Amazon Simple Storage Service(S3)通用存储桶的基于属性的访问权限控制(ABAC)。通过此项新能力,您可借助 S3 通用存储桶上的标签控制数据访问权限,从而自动管理用户和角色的权限。无需单独管理权限,您可以使用基于标签的 IAM 策略或存储桶策略,根据用户、角色与 S3 通用存储桶之间的标签自动授予或拒绝访问权限。基于标签的授权,让您可以根据项目、团队、成本中心、数据分类或其他存储桶属性(而非存储桶名称)轻松授予 S3 访问权限,这极大简化大型组织的权限管理。
ABAC 的工作原理
常见情况如下:作为管理员,我想让开发人员能够访问所有用于开发环境的 S3 存储桶。
借助 ABAC,我可以在开发环境的 S3 存储桶上添加 environment:development 等键值对标签,然后将 ABAC 策略附加到 AWS Identity and Access Managemen(IAM)主体,以检查是否存在相同的 environment:development 标签。如果存储桶标签符合策略中的条件,则授予主体访问权限。
让我们查看其工作原理。
开始使用
首先,对于每个使用基于标签的授权的 S3 通用存储桶,我需要显式启用 ABAC。
我导航至 Amazon S3 控制台,选择通用存储桶,然后转到属性页面,在此处查找可为此存储桶启用 ABAC 的选项。
我还可以使用 AWS 命令行界面(AWS CLI),通过调用新的 PutBucketAbac API 以编程方式启用该功能。在此处,我可在美国东部(俄亥俄州)us-east-2 AWS 区域名为 my-demo-development-bucket 的存储桶上启用 ABAC。
aws s3api put-bucket-abac --bucket my-demo-development-bucket abac-status Status=Enabled --region us-east-2
或者,如果您使用 AWS CloudFormation,可在模板中将 AbacStatus 属性设置为已启用,以便启用 ABAC。
接下来,我们将为 S3 通用存储桶添加标签。我添加了 environment:development 标签,该标签将成为基于标签授权的条件。
现在,我的 S3 存储桶已添加标签,我将创建一项 ABAC 策略,用于验证匹配的 environment:development 标签,并将该策略附加到名为 dev-env-role 的 IAM 角色上。通过管理开发人员对此角色的访问权限,我可以在单一位置控制所有开发环境存储桶的权限。
我导航至 IAM 控制台,选择策略,然后选择创建策略。 在策略编辑器中,我切换至 JSON 视图并创建允许用户读取、写入和列出 S3 对象的策略,但前提是用户附加键值为“environment”的标签,且其值与 S3 存储桶上声明的值相匹配。我将此策略命名为 s3-abac-policy 并保存。
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject",
"s3:PutObject",
"s3:ListBucket"
],
"Resource": [
"*"
],
"Condition": {
"StringEquals": {
"aws:ResourceTag/environment": "development"
}
}
}
]
}
然后我将此 s3-abac-policy 附加到 dev-env-role 上。
一切搞定! 现在,代入 dev-role 的用户可访问任何启用 ABAC 且带有 environment:development 标签的存储桶,例如 my-demo-development-bucket。
使用现有标签
请注意,虽然您可以继续使用现有标签实现 ABAC,但由于这些标签现在将用于访问控制,我们建议您在启用该功能前查看当前标签配置。这包括审查您现有的存储桶标签和基于标签的策略,以防止意外访问,并更新标签工作流程以使用标准的 TagResource API(因为在存储桶上启用 ABAC 将阻止使用 PutBucketTagging API)。您可以使用 AWS Config 检查哪些存储桶已启用 ABAC,并通过 AWS CloudTrail 管理事件查看应用程序中 PutBucketTagging API 的使用情况。
此外,您用于 ABAC 的相同标签也可作为 S3 存储桶的成本分配标签。在 AWS Billing Console 或通过 API 将其作为成本分配标签激活,您的 AWS Cost Explorer 成本管理服务和成本与使用情况报告将自动根据这些标签整理支出数据。
创建时强制使用标签
为帮助标准化整个组织的访问控制,您现在可使用 aws:TagKeys 和 aws:RequestTag 条件键,通过服务控制策略(SCP)或 IAM 策略强制执行存储桶创建时的标签要求。然后,您可以在这些存储桶上启用 ABAC,从而在整个组织中提供一致的访问控制模式。要在创建存储桶时添加标签,您可以在 CloudFormation 模板中添加标签,或在调用现有 S3 CreateBucket API 的请求正文中提供标签。例如,我可以强制执行一项策略,即要求开发人员创建带有标签 environment=development 的存储桶,确保所有存储桶都准确标记以进行成本分配。如果需使用相同标签实现访问控制,可为这些存储桶启用 ABAC。
注意事项
借助适用于 Amazon S3 的 ABAC,您现在可以在 S3 存储桶中实现可扩展、基于标签的访问控制。此功能确保写入访问控制策略更为简便,并减少因主体和资源的增减而需要更新策略的情况。这有助于您在扩展过程中降低管理开销,同时保持强大的安全治理能力。
Amazon S3 通用存储桶的基于属性的访问控制现已通过 AWS 管理控制台、API、AWS SDK、AWS CLI 和 AWS CloudFormation 提供,无需额外费用。标准 API 请求费率依据 Amazon S3 定价执行。S3 资源的标签存储不收取额外费用。
您可以使用 AWS CloudTrail 审核访问请求,并了解哪些策略已授予或拒绝对您资源的访问权限。
您还可以将 ABAC 用于其他 S3 资源,例如 S3 目录存储桶、S3 接入点以及 S3 表存储桶和表。如需了解有关 S3 存储桶上 ABAC 的更多信息,请参阅 Amazon S3 用户指南。
您也可以将用于访问控制的相同标签用于成本分配。您可通过 AWS Billing Console 或 API 将其作为成本分配标签进行激活。有关如何使用成本分配标签的更多详细信息,请参阅文档。
AWS 架构师中心: 云端创新的引领者探索 AWS 架构师中心,获取经实战验证的最佳实践与架构指南,助您高效构建安全、可靠的云上应用 |
![]() |




