AWS Builder Center: Learn, Build and Connect with builders in the AWS community
AWS Builder Center is the official home for builders on AWS. Share and read what others are working on, follow people who inspire you, explore training and workshops, and find tools to support what you're building.
如何解决我在修改 Amazon S3 中的存储桶策略时收到的“You don't have permissions to edit bucket policy”错误?
我必须解决我在修改 Amazon Simple Storage Service (Amazon S3) 存储桶的存储桶策略时收到的“You don't have permissions to edit bucket policy”错误。
简短描述
**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅排查 AWS CLI 错误。此外,请确保您使用的是最新版本的 AWS CLI。
您的用户收到“You don't have permissions to edit bucket policy”错误,原因如下:
- 您的 AWS Identity and Access Management (IAM) 用户或角色没有执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy API 操作的权限。
- 存储桶策略拒绝了您的 IAM 身份对 s3:GetBucketPolicy 和 s3:PutBucketPolicy 的访问权限。
- 您已为存储桶启用 Amazon S3 屏蔽公共访问权限功能。
- AWS Organizations 服务控制策略 (SCP) 不允许 Amazon S3 访问。
要解决上述问题,请完成以下故障排除步骤。
解决方法
检查您对 s3:GetBucketPolicy 和 s3:PutBucketPolicy 的权限
完成以下步骤:
- 打开 IAM 控制台。
- 在导航窗格中,选择用于访问存储桶策略的身份,例如 User(用户)或 Role(角色)。
- 选择您用于访问存储桶策略的 IAM 身份名称。
- 在 IAM 身份的 Permissions(权限)选项卡中,展开每个策略以查看其 JSON 策略文档。
- 在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您拥有在存储桶上执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作的权限。
**注意:**如果没有包含 s:3GetBucketPolicy 和 s3:PutBucketPolicy 操作的策略,请将这些权限添加到策略中。有关如何修改 IAM 权限的说明,请参阅更改 IAM 用户的权限。
以下示例 IAM 策略允许 IAM 身份在 DOC-EXAMPLE-BUCKET 上执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作:
**注意:**上述 IAM 策略中的 AccessS3Console 语句授予 Amazon S3 控制台访问权限,并不特定于存储桶策略的更改。{ "Version": "2012-10-17", "Statement": [ { "Sid": "ModifyBucketPolicy", "Action": [ "s3:GetBucketPolicy", "s3:PutBucketPolicy" ], "Effect": "Allow", "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET" }, { "Sid": "AccessS3Console", "Action": [ "s3:GetBucketLocation", "s3:ListAllMyBuckets" ], "Effect": "Allow", "Resource": "arn:aws:s3:::*" } ] } - 在 JSON 策略文档中,搜索包含 "Effect": "Deny" 的语句。然后,确认这些语句不会拒绝您的 IAM 身份对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问。
- 确保在策略的 Resource(资源)部分中包含存储桶的 Amazon 资源名称 (ARN)。在上述示例中,ARN 为 aws:s3:::DOC-EXAMPLE-BUCKET。
**注意:**s3:GetBucketPolicy 和 s3:PutBucketPolicy 是存储桶级别的操作。 - 检查您是否在 IAM 策略中应用了 aws:SourceIP 等全局条件,以限制 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。
如果存储桶策略不存在,请添加一个策略
如果找不到授予 s3:GetBucketPolicy 或 s3:PutBucketPolicy 权限的策略,请添加一个策略向您的 IAM 身份授予这些权限。如果发现有策略拒绝对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问,请移除这些策略。
使用具有存储桶访问权限的另一个 IAM 身份来修改存储桶策略
完成以下步骤:
- 打开 Amazon S3 控制台。
- 在左侧导航窗格中,选择 General purpose buckets(通用存储桶)或 Directory buckets(目录存储桶)。
- 从存储桶列表中,打开您要更改其策略的存储桶。
- 选择 Permissions(权限)选项卡。
- 选择 Bucket policy(存储桶策略)。
- 搜索包含 "Effect": "Deny" 的语句。
- 编辑存储桶策略以更新任何 "Effect": "Deny" 语句,这些语句拒绝了 IAM 身份对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问。
- 检查存储桶策略中是否包含 aws:PrincipalArn 等条件,这些条件会限制您的 IAM 身份执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。
删除并重新创建拒绝所有人访问的存储桶策略
如果没有人能够访问 s3:GetBucketPolicy、s3:PutBucketPolicy 或所有 Amazon S3 操作 (s3:*),请使用 delete-bucket-policy AWS CLI 命令删除该策略:
delete-bucket-policy -bucket example_bucket
**注意:**请将 example_bucket 替换为您的存储桶名称。
如果您意外将自己锁定在存储桶之外并且无法删除存储桶策略,请重新获得对存储桶的访问权限。删除存储桶策略后,您可以创建新的存储桶策略。
关闭 Amazon S3 屏蔽公共访问权限
如果您的存储桶策略授予公共访问权限,请关闭该存储桶的 Amazon S3 屏蔽公共访问权限。有关更多信息,请参阅屏蔽对您的 Amazon S3 存储的公共访问以及“公共”的含义。
**注意:**要阻止对私有存储桶的公共访问,请先启用存储桶的 Amazon S3 屏蔽公共访问权限,然后在 AWS 账户级别将其停用。
对于 AWS Organizations,删除不允许 Amazon S3 访问的 SCP
如果您使用 AWS Organizations,请查看您的服务 (SCP)。查找任何显式拒绝 s3:PutBucketPolicy 操作或其他 Amazon S3 策略操作的语句。当您的组织不需要策略时,请删除对 s3:* 操作应用 Deny 效果的 SCP。
以下策略示例拒绝对所有 Amazon S3 操作的访问:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }

