跳至内容

如何对尝试修改 Amazon S3 中的存储桶策略时出现的 "You don't have permissions to edit bucket policy" 错误进行故障排除?

2 分钟阅读
0

当我修改 Amazon Simple Storage Service (Amazon S3) 存储桶的策略时,我收到 "You don't have permissions to edit bucket policy" 错误。

简短描述

**注意:**如果您在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

您会由于以下原因收到此错误:

要解决此错误,请检查 IAM 用户或角色是否具有 s3:GetBucketPolicy 存储桶策略查看权限以及 s3:PutBucketPolicy 编辑权限。如果没有授予您访问权限的 IAM 用户策略,请添加一个。如果您没有所需的权限,请使用具有存储桶访问权限的另一个 IAM 身份,然后编辑存储桶策略。如果没有人能够访问存储桶策略,请使用 delete-bucket-policy AWS CLI 命令删除该策略,然后再重新创建。

如果您必须添加公共读取策略,请关闭存储桶的 Amazon S3 屏蔽公共访问权限功能。如果使用 AWS Organizations,请确认您没有任何显式拒绝 Amazon S3 操作的服务控制策略。此外,请确认您可以为您的操作添加例外。

解决方法

检查您对 s3:GetBucketPolicy 和 s3:GetBucketPolicy 的权限

要检查您的权限,请完成以下步骤:

  1. 打开 IAM 控制台
  2. 选择用于访问存储桶策略的身份,例如 User(用户)或 Role(角色)。
  3. 选择您用于访问存储桶策略的 IAM 身份名称。
  4. 在 IAM 身份的 Permissions(权限)选项卡中,展开每个策略以查看其 JSON 策略文档。
  5. 在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您拥有在存储桶上执行 s3:GetBucketPolicys3:PutBucketPolicy 操作的权限。
    以下示例 IAM 策略允许 IAM 身份在 DOC-EXAMPLE-BUCKET 上执行 s3:GetBucketPolicys3:PutBucketPolicy 操作:
    {  "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:::*"  
        }  
      ]  
    }
    **注意:**上述 IAM 策略中的 AccessS3Console 语句授予 Amazon S3 控制台访问权限。并不特定于存储桶策略的更改。
  6. 在 JSON 策略文档中,搜索包含 "Effect": "Deny" 的语句。然后,确认这些语句不会拒绝您的 IAM 身份对 s3:GetBucketPolicys3:PutBucketPolicy 的访问。
  7. 确保存储桶 ARN(例如:arn:aws:s3:::DOC-EXAMPLE-BUCKET)存在于策略的 Resource(资源)部分中。
    **注意:**s3:GetBucketPolicys3:PutBucketPolicy 是存储桶级别的操作。
  8. 检查您是否在 IAM 策略中应用了 aws:SourceIP 等任何全局条件,以限制 s3:GetBucketPolicys3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。

如果存储桶策略不存在,请添加一个策略

如果找不到授予 s3:GetBucketPolicys3:PutBucketPolicy 权限的策略,请添加一个策略来向您的 IAM 身份授予这些权限。如果发现有策略拒绝对 s3:GetBucketPolicys3:PutBucketPolicy 的访问,请移除这些策略。有关修改 IAM 权限的说明,请参阅更改 IAM 用户的权限

使用具有存储桶访问权限的另一个 IAM 身份来修改存储桶策略

要修改您的存储桶策略,请完成以下步骤:

  1. 打开 Amazon S3 控制台
  2. 从存储桶列表中,打开您要更改其策略的存储桶。
  3. 选择 Permissions(权限)选项卡。
  4. 选择 Bucket policy(存储桶策略)。
  5. 搜索包含 "Effect": "Deny" 的语句。
  6. 编辑存储桶策略以更新任何 "Effect": "Deny" 语句,这些语句拒绝了 IAM 身份对 s3:GetBucketPolicys3:PutBucketPolicy 的访问。有关说明,请参阅使用 Amazon S3 控制台添加存储桶策略创建或编辑存储桶策略部分。
  7. 检查存储桶策略中是否包含 aws:PrincipalArn 等条件,以限制您的 IAM 身份的 s3:GetBucketPolicys3:PutBucketPolicy 操作。如果这些条件限制访问权限,请移除或更新这些条件。

如果存储桶策略拒绝所有人访问,请将其删除并重新创建

如果存储桶策略拒绝所有人访问 s3:GetBucketPolicys3: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": "*"  
    }  
  ]  
}
AWS 官方已更新 4 个月前