在通用存储桶中启用 ABAC
基于属性的访问权限控制(ABAC)是一种授权策略,您可以利用这种策略基于属性(即标签)来定义权限。默认情况下,ABAC 在所有 Amazon S3 通用存储桶中禁用。要为通用存储桶使用 ABAC,您必须启用它。
在为通用存储桶启用 ABAC 之前,建议您先完成以下主题中描述的任务:
在启用 ABAC 之前审计策略
在为存储桶启用 ABAC 之前,如果您的存储桶有标签,请审计您的访问控制策略,检查基于标签的条件是否引用了存储桶上的任何现有标签。如果有引用,请确认这些策略按照预期进行设置,并且启用基于标签的访问控制不会对您的 Amazon S3 工作流造成意外的授权更改。这样做有助于确保在存储桶上启用 ABAC 后,您的策略正常运行。有关将基于属性的条件与标签结合使用的示例,请参阅将标签与 S3 通用存储桶结合使用。
在 IAM 策略中包含所需的权限
您需要以下 Amazon S3 权限来为存储桶启用 ABAC:
s3:PutBucketAbac:更新通用存储桶的 ABAC 状态。s3:GetBucketAbac:查看通用存储桶的 ABAC 状态。
启用 ABAC 后,您之前用于向存储桶添加标签或从存储桶中删除标签的权限(PutBucketTagging 或 DeleteBucketTagging)将不再有效。而是改为使用 TagResource 和 UntagResource API 来执行这些任务。
建议您在存储桶上启用 ABAC 之前,使用 TagResource 和 UntagResource API 来管理标签事宜。现在,Amazon S3 控制台和 Amazon CloudFormation 默认使用 TagResource 和 UntagResource API。您也可以使用 PutBucketAbac API 在存储桶上禁用 ABAC。您可以使用 GetBucketTagging 列出存储桶上的标签。在为存储桶启用 ABAC 后,此 API 可继续使用。或者,您也可以使用 ListTagsForResource 列出存储桶上的所有标签。
您需要以下权限才能将在通用存储桶上应用和删除标签。
s3:TagResource:向 Amazon 资源(例如 Amazon S3 通用存储桶)添加标签。s3:UntagResource:从 Amazon 资源(例如 Amazon S3 通用存储桶)删除标签。s3:ListTagsForResource:查看应用到 Amazon 资源(例如 Amazon S3 通用存储桶)上的标签。
以下 IAM 策略授予为存储桶启用 ABAC 和查看其状态的权限。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutBucketAbac", "s3:GetBucketAbac" ], "Resource": "arn:aws:s3:::my-s3-bucket/*" } ] }
有关标记通用存储桶的更多信息以及用于通用存储桶的 ABAC 策略示例,请参阅将标签与 S3 通用存储桶结合使用。
Steps
如果您拥有通用存储桶的 s3:PutBucketAbac 权限,则可以使用 Amazon S3 控制台、Amazon 命令行界面(Amazon CLI)、Amazon S3 REST API 和 Amazon SDK 为存储桶启用 ABAC。
要使用 Amazon S3 控制台为通用存储桶启用 ABAC,请执行以下操作:
登录到 Amazon S3 控制台,网址为:https://console.aws.amazon.com/s3/
。 在左侧导航窗格中,选择存储桶。
选择存储桶名称。
选择属性选项卡。
在存储桶 ABAC 面板中,选择编辑。
选择启用开关。
在启用 ABAC 之后,请检查并确认管理标签所需的权限:
TagResource、UntagResource和ListTagsForResource。选择保存更改。
有关 Amazon S3 REST API 支持向通用存储桶添加标签的相关信息,请参阅《Amazon Simple Storage Service API 参考》中的以下部分:
要安装 Amazon CLI,请参阅《Amazon Command Line Interface 用户指南》中的安装 Amazon CLI。
以下 CLI 示例说明如何使用为 Amazon CLI 通用存储桶启用 ABAC。要使用该命令,请将用户输入占位符 替换为您自己的信息。
请求
# Enable ABAC on a general purpose bucket aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Enabled --region us-east-2 # Disable ABAC on a general purpose bucket aws s3api put-bucket-abac --bucket amzn-s3-demo-bucket --abac-status Status=Disabled --region us-east-2 # Get ABAC status on a general purpose bucket aws s3api get-bucket-abac --bucket amzn-s3-demo-bucket --region us-east-2