当我尝试修改存储桶策略时,为什么从 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": [
    {
      "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: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": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

如果存储桶策略拒绝所有人访问 s3:GetBucketPolicy、s3:PutBucketPolicy 或所有 Amazon S3 操作 (s3:*),则删除该存储桶策略

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


这篇文章对您有帮助吗?


您是否需要账单或技术支持?