Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
如何对尝试修改 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。
您会由于以下原因收到此错误:
- 您的 AWS Identity and Access Management (IAM) 用户或角色没有 s3:GetBucketPolicy 和 s3:PutBucketPolicy API 调用的权限。
- 存储桶策略拒绝了您的 IAM 身份对 s3:GetBucketPolicy 和 s3:PutBucketPolicy 的访问权限。
- 您已为存储桶启用 Amazon S3 屏蔽公共访问权限功能。
- AWS Organizations 服务控制策略不允许 Amazon S3 访问。
要解决此错误,请检查 IAM 用户或角色是否具有 s3:GetBucketPolicy 存储桶策略查看权限以及 s3:PutBucketPolicy 编辑权限。如果没有授予您访问权限的 IAM 用户策略,请添加一个。如果您没有所需的权限,请使用具有存储桶访问权限的另一个 IAM 身份,然后编辑存储桶策略。如果没有人能够访问存储桶策略,请使用 delete-bucket-policy AWS CLI 命令删除该策略,然后再重新创建。
如果您必须添加公共读取策略,请关闭存储桶的 Amazon S3 屏蔽公共访问权限功能。如果使用 AWS Organizations,请确认您没有任何显式拒绝 Amazon S3 操作的服务控制策略。此外,请确认您可以为您的操作添加例外。
解决方法
检查您对 s3:GetBucketPolicy 和 s3:GetBucketPolicy 的权限
要检查您的权限,请完成以下步骤:
- 打开 IAM 控制台。
- 选择用于访问存储桶策略的身份,例如 User(用户)或 Role(角色)。
- 选择您用于访问存储桶策略的 IAM 身份名称。
- 在 IAM 身份的 Permissions(权限)选项卡中,展开每个策略以查看其 JSON 策略文档。
- 在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您拥有在存储桶上执行 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作的权限。
以下示例 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 的访问。
- 确保存储桶 ARN(例如:arn:aws:s3:::DOC-EXAMPLE-BUCKET)存在于策略的 Resource(资源)部分中。
**注意:**s3:GetBucketPolicy 和 s3:PutBucketPolicy 是存储桶级别的操作。 - 检查您是否在 IAM 策略中应用了 aws:SourceIP 等任何全局条件,以限制 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。
如果存储桶策略不存在,请添加一个策略
如果找不到授予 s3:GetBucketPolicy 或 s3:PutBucketPolicy 权限的策略,请添加一个策略来向您的 IAM 身份授予这些权限。如果发现有策略拒绝对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问,请移除这些策略。有关修改 IAM 权限的说明,请参阅更改 IAM 用户的权限。
使用具有存储桶访问权限的另一个 IAM 身份来修改存储桶策略
要修改您的存储桶策略,请完成以下步骤:
- 打开 Amazon S3 控制台。
- 从存储桶列表中,打开您要更改其策略的存储桶。
- 选择 Permissions(权限)选项卡。
- 选择 Bucket policy(存储桶策略)。
- 搜索包含 "Effect": "Deny" 的语句。
- 编辑存储桶策略以更新任何 "Effect": "Deny" 语句,这些语句拒绝了 IAM 身份对 s3:GetBucketPolicy 或 s3:PutBucketPolicy 的访问。有关说明,请参阅使用 Amazon S3 控制台添加存储桶策略的创建或编辑存储桶策略部分。
- 检查存储桶策略中是否包含 aws:PrincipalArn 等条件,以限制您的 IAM 身份的 s3:GetBucketPolicy 和 s3:PutBucketPolicy 操作。如果这些条件限制访问权限,请移除或更新这些条件。
如果存储桶策略拒绝所有人访问,请将其删除并重新创建
如果存储桶策略拒绝所有人访问 s3:GetBucketPolicy、s3:PutBucketPolicy 或所有 Amazon S3 操作 (s3:*),请删除该存储桶策略。如果您意外将自己锁定在存储桶之外并且无法删除存储桶政策,请重新获得对存储桶的访问权限。删除存储桶策略后,您可以创建新的存储桶策略。
关闭 Amazon S3 屏蔽公共访问权限
如果您的存储桶策略授予公共访问权限,请关闭该存储桶的 Amazon S3 屏蔽公共访问权限。有关更多信息,请参阅屏蔽对您的 Amazon S3 存储的公共访问以及“公共”的含义。
**注意:**要阻止对私有存储桶的公共访问,请先启用存储桶的 Amazon S3 屏蔽公共访问权限,然后在 AWS 账户级别将其停用。
对于 AWS Organizations,删除不允许 Amazon S3 访问的服务控制策略
如果您使用 AWS Organizations,请查看您的服务控制政策 (SCP)。查找任何显式拒绝 s3:PutBucketPolicy 操作或任何其他 Amazon S3 策略操作的语句。当您的组织不需要策略时,请删除对 s3:* 操作应用 Deny 效果的 SCP。
以下策略示例拒绝访问所有 Amazon S3 操作:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "s3:*", "Resource": "*" } ] }

