如何解决当我尝试修改 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(您无权编辑桶策略)

简短描述

出现此错误的原因如下:

如需解决这些问题,请尝试以下方法:

  • 检查 IAM 用户或角色是否具有 s3:GetBucketPolicy 桶策略查看权限以及 s3:PutBucketPolicy 编辑权限。添加 IAM 用户策略以授予您访问权限(如果不存在)。
  • 如果您的权限被拒绝,请使用具有桶访问权限的另一个 IAM 身份,然后编辑桶策略。或者,如果没有人能够访问桶策略,请将其删除并重新创建桶策略。
  • 如果您正在尝试添加公共读取策略,请关闭桶的“S3 屏蔽公共访问权限”功能。
  • 如果使用 AWS Organizations,请确认您没有任何明确拒绝 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 的访问。

7.    检查桶策略中是否应用了 aws:PrincipalArn 等条件,以限制您的 IAM 身份的 s3:GetBucketPolicys3:PutBucketPolicy 操作。如果这些条件限制访问权限,请删除或更新这些条件。

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

如果桶策略拒绝所有人访问 s3:GetBucketPolicys3:PutBucketPolicy 或所有 Amazon S3 操作(s3:*),请删除该桶策略。如果无法删除桶策略,请尝试以 AWS 账户根用户身份删除该策略。删除策略后,您可以创建新的桶策略。

关闭“S3 屏蔽公共访问权限”

如果您的桶策略授予公共访问权限,请检查该桶是否已启用“S3 屏蔽公共访问权限”,然后将其关闭。为防止将来对您设为公共的 S3 桶的访问被拒绝,请确认您没有为该账户启用“S3 屏蔽公共访问权限”。

有关详细信息,请参阅屏蔽对您的 Amazon S3 存储的公共访问。另请参阅“公共”的含义

**注意:**在账户级别关闭“S3 屏蔽公共访问权限”之前,请确认您已在桶级别为私有桶启用该功能。这是防止不必要地公共访问这些私有桶所必需的。

对于 AWS Organizations,删除不允许 Amazon S3 访问的服务控制策略

如果您使用的是 AWS Organizations,请检查服务控制策略是否有任何语句明确拒绝 s3:PutBucketPolicy 操作或任何其他 S3 操作。根据贵组织的安全策略,删除明确拒绝 S3 操作的服务控制策略。

例如,以下策略拒绝访问所有 S3 操作:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Deny",
      "Action": "s3:*",
      "Resource": "*"
    }
  ]
}
AWS 官方
AWS 官方已更新 1 年前