当我尝试在 Amazon S3 中修改存储桶策略时,为什么会收到“403 Access Denied(403 访问被拒绝)”错误?

上次更新日期:2022 年 5 月 16 日

当我尝试修改 Amazon Simple Storage Service(Amazon S3)存储桶的存储桶策略时,不断收到“403 Access Denied(403 访问被拒绝)”错误。

简短描述

由于以下原因,可能会出现 “403 访问被拒绝” 错误:

如要解决这些错误,请执行如下操作:

  • 检查 IAM 用户或角色是否具有查看存储桶策略的 s3:Get:BucketPolicy 权限和编辑存储桶策略的 s3:PutBucketPolicy 权限。添加 IAM 用户策略,以便在不存在时授予您访问权限。
  • 如果您的权限被拒绝,请使用另一个具有存储桶访问权限的 IAM 身份并编辑存储桶策略。或者,如果没有人有权访问存储桶策略,请将其删除并重新创建。
  • 如果您尝试添加公有读策略,请禁用存储桶的 S3 阻止公有访问。
  • 如果您使用 AWS Organizations,请确认您没有任何显式拒绝 S3 操作的服务控制策略。另外,请确认您可以为操作添加例外。

解决方法

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

请按照以下步骤执行操作:

1.    打开 IAM console(IAM 控制台)。

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

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

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

如果您找不到授予 s3:GetBucketPolicys3:PutBucketPolicy 的权限,则添加授予您的 IAM 身份这些权限的策略。如果您发现拒绝访问 s3:GetBucketPolicys3:PutBucketPolicy 的策略,请移除这些策略。有关如何修改 IAM 权限的说明,请参阅更改 IAM 用户的权限

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

请按照以下步骤修改存储桶策略:

1.    打开 Amazon S3 控制台

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

3.    选择Permissions (权限)选项卡。

4.    选择存储桶策略

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

6.    编辑存储桶策略 以更新任何拒绝 IAM 身份访问 s3:GetBucketPolicys3:PutBucketPolicy"Effect": "Deny" 语句。

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

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

禁用 S3 阻止公有访问

如果您的存储桶策略授予公有访问权限,请检查是否在存储桶上启用了 S3 阻止公有访问权限并将其禁用。为防止将来拒绝对您设为公有的 S3 存储桶的访问,请确认您没有为该账户启用 S3 阻止公有访问。

注意:在账户级别禁用 S3 阻止公有访问之前,请确认已在存储桶级别为私有存储桶启用该功能,以防止不必要的公有访问。

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

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

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

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Deny",
            "Action": "s3:*",
            "Resource": "*"
        }
    ]
}

这篇文章对您有帮助吗?


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