为什么我会在尝试修改存储桶策略时从 Amazon S3 控制台收到“访问被拒绝”错误?

上次更新时间:2020 年 3 月 27 日

我尝试使用控制台修改我的 Amazon Simple Storage Service (Amazon S3) 存储桶策略,但我收到“访问被拒绝”错误。如何修复此问题? 

简短描述

要从 Amazon S3 控制台查看存储桶策略,您的 AWS Identity and Access Management (IAM) 用户或角色必须有权执行 s3:GetBucketPolicy 操作。要编辑现有存储桶策略,您的 IAM 身份必须有权执行 s3:PutBucketPolicy 操作。

要解决“访问被拒绝”错误,请检查以下各项:

  • 您的 IAM 身份具有 s3:GetBucketPolicys3:PutBucketPolicy 的权限。
  • 存储桶策略不会拒绝您的 IAM 身份的 s3:GetBucketPolicys3:PutBucketPolicy 权限。
  • 如果存储桶策略拒绝所有人访问 s3:GetBucketPolicys3:PutBucketPolicy,则删除存储桶策略。

解决方法

您的 IAM 身份具有 s3:GetBucketPolicy 和 s3:PutBucketPolicy 的权限

1.    打开 IAM 控制台

2.    在控制台中,打开您用来访问存储桶策略的 IAM 用户或角色。

3.    在您的 IAM 用户或角色的权限选项卡中,展开每个策略以查看其 JSON 策略文档。

4.    在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您具有在存储桶上执行 s3:GetBucketPolicys3:PutBucketPolicy 操作的权限。

例如,以下 IAM 策略允许用户或角色在 awsexamplebucket 上执行 s3:GetBucketPolicys3:PutBucketPolicy 操作:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ModifyBucketPolicy",
      "Action": [
        "s3:GetBucketPolicy",
        "s3:PutBucketPolicy"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::awsexamplebucket"
    },
    {
      "Sid": "AccessS3Console",
      "Action": [
        "s3:GetBucketLocation",
        "s3:ListAllMyBuckets"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    }
  ]
}

注意:前面的示例 IAM 策略中的“AccessS3Console”语句授予 Amazon S3 控制台访问权,且不是修改存储桶策略的特定语句。 

另举一例,以下 IAM 策略可授予用户或角色对 awsexamplebucket 上所有 Amazon S3 操作的访问权限。如果您有权执行所有 Amazon S3 操作,则无需添加 s3:GetBucketPolicys3:PutBucketPolicy 权限。 

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "S3Permissions",
      "Action": "s3:*",
      "Effect": "Allow",
      "Resource": [
        "arn:aws:s3:::awsexamplebucket/*",
        "arn:aws:s3:::awsexamplebucket"
      ]
    }
  ]
}

5.    此外,在 JSON 策略文档中,还务必要搜索包含 "Effect": "Deny" 的语句。然后,确认这些语句不会拒绝您的 IAM 用户或角色访问存储桶上的 s3:GetBucketPolicys3:PutBucketPolicy 操作。

6.    如果您无法找到授权您在存储桶上执行 s3:GetBucketPolicys3:PutBucketPolicy 策略的权限,则添加一个向您的 IAM 身份授予这些权限的策略。如果您发现任何拒绝您访问存储桶上的 s3:GetBucketPolicys3:PutBucketPolicy 的策略,请删除拒绝您访问的语句或策略。有关如何修改 IAM 权限的说明,请参阅更改 IAM 用户的权限

存储桶策略不会拒绝您的 IAM 身份的 s3:GetBucketPolicy 或 s3:PutBucketPolicy 权限

如果您确认您的 IAM 身份向您授予了正确的权限,但您仍无法修改存储桶策略,则必须使用另一个具有访问权限的 IAM 身份检查存储桶策略。此 IAM 身份必须检查该策略中是否有任何语句会阻止您访问。

请按照以下步骤来使用具有访问权限的 IAM 身份检查存储桶策略:

1.    打开 Amazon S3 控制台

2.    从存储桶列表中打开您要更改其存储桶策略的存储桶。

3.    选择权限选项卡。

4.    选择存储桶策略

5.    搜索包含 "Effect": "Deny" 的语句。

6.    修改存储桶策略,以编辑或删除会错误拒绝 IAM 用户或角色访问 s3:GetBucketPolicys3:PutBucketPolicy 的任何 "Effect": "Deny" 语句。

如果存储桶策略拒绝所有人访问 s3:GetBucketPolicy 和 s3:PutBucketPolicy,则删除存储桶策略

如果没有 IAM 身份能够查看或修改存储桶策略,则 AWS 账户根用户始终有权删除现有存储桶策略。在根用户删除现有策略后,您的 IAM 用户或角色可以创建新的存储桶策略


这篇文章对您是否有帮助?

我们可以改进什么?


需要更多帮助?