跳至内容

如何解决我在修改 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

您的用户收到“You don't have permissions to edit bucket policy”错误,原因如下:

要解决上述问题,请完成以下故障排除步骤。

解决方法

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

完成以下步骤:

  1. 打开 IAM 控制台
  2. 在导航窗格中,选择用于访问存储桶策略的身份,例如 User(用户)或 Role(角色)。
  3. 选择您用于访问存储桶策略的 IAM 身份名称。
  4. 在 IAM 身份的 Permissions(权限)选项卡中,展开每个策略以查看其 JSON 策略文档。
  5. 在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您拥有在存储桶上执行 s3:GetBucketPolicys3:PutBucketPolicy 操作的权限。
    **注意:**如果没有包含 s:3GetBucketPolicys3:PutBucketPolicy 操作的策略,请将这些权限添加到策略中。有关如何修改 IAM 权限的说明,请参阅更改 IAM 用户的权限
    以下示例 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. 确保在策略的 Resource(资源)部分中包含存储桶的 Amazon 资源名称 (ARN)。在上述示例中,ARN 为 aws:s3:::DOC-EXAMPLE-BUCKET
    **注意:**s3:GetBucketPolicys3:PutBucketPolicy 是存储桶级别的操作。
  8. 检查您是否在 IAM 策略中应用了 aws:SourceIP 等全局条件,以限制 s3:GetBucketPolicys3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。

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

如果找不到授予 s3:GetBucketPolicys3:PutBucketPolicy 权限的策略,请添加一个策略向您的 IAM 身份授予这些权限。如果发现有策略拒绝对 s3:GetBucketPolicys3:PutBucketPolicy 的访问,请移除这些策略。

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

完成以下步骤:

  1. 打开 Amazon S3 控制台
  2. 在左侧导航窗格中,选择 General purpose buckets(通用存储桶)或 Directory buckets(目录存储桶)。
  3. 从存储桶列表中,打开您要更改其策略的存储桶。
  4. 选择 Permissions(权限)选项卡。
  5. 选择 Bucket policy(存储桶策略)。
  6. 搜索包含 "Effect": "Deny" 的语句。
  7. 编辑存储桶策略以更新任何 "Effect": "Deny" 语句,这些语句拒绝了 IAM 身份对 s3:GetBucketPolicys3:PutBucketPolicy 的访问。
  8. 检查存储桶策略中是否包含 aws:PrincipalArn 等条件,这些条件会限制您的 IAM 身份执行 s3:GetBucketPolicys3:PutBucketPolicy 操作。如果这些条件限制访问权限,请将其移除或进行更新。

删除并重新创建拒绝所有人访问的存储桶策略

如果没有人能够访问 s3:GetBucketPolicys3: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": "*"  
    }  
  ]  
}
AWS 官方已更新 10 个月前