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

上次更新日期:2021 年 4 月 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 权限。 启用 Amazon S3 阻止公有访问时,您对存储桶策略的更改不会授予公有访问权限。 AWS Organizations 服务控制策略允许 Amazon S3 访问。 如果存储桶策略拒绝所有人访问 s3:GetBucketPolicys3:PutBucketPolicy 或所有 Amazon S3 操作 (s3:*),则删除该存储桶策略。
注意:
如果您无法删除存储桶策略,请尝试以 AWS 账户根用户身份删除策略。 解决方法 您的 IAM 身份具有 s3:GetBucketPolicy 和 s3:PutBucketPolicy 的权限

1.打开 IAM 控制台。

2.选择用于访问存储桶策略的实体,例如用户角色

3.选择您用于访问存储桶策略的 IAM 用户或角色名称。

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

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

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

{
  "Version": "2012-10-17",
  "Statement": ,
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::DOC-EXAMPLE-BUCKET"
    },
    {
      "Sid": "AccessS3Console",
      "Action": ,
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::*"
    }
  ]
}

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

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

7.如果您找不到授予 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" 语句。

启用 Amazon S3 阻止公有访问时,您对存储桶策略的更改不会授予公有访问权限

检查存储桶策略更改,了解该更改是否授予对存储桶的公有访问权限。然后,检查是否在存储桶或账户上启用了 Amazon S3 阻止公有访问 。如果启用了 S3 阻止公有访问,则当您尝试保存授予公有访问权限的存储桶策略时,会出现“访问被拒绝”错误。

AWS Organizations 服务控制策略允许 Amazon S3 访问

如果您使用的是 AWS Organizations,请检查服务控制策略中是否存在任何明确拒绝 Amazon S3 访问的语句。特别是要检查服务控制策略中是否存在拒绝 s3:PutBucketPolicy 操作的语句。

例如,以下策略明确拒绝访问所有 Amazon S3 操作并导致“访问被拒绝”错误。

{
    "Version": "2012-10-17",
    "Statement": 
}
如果存储桶策略拒绝所有人访问 s3:GetBucketPolicy、s3:PutBucketPolicy 或所有 Amazon S3 操作 (s3:*),则删除该存储桶策略

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