跳至内容

当我尝试在 Amazon S3 中上传文件时,为什么会出现“403 Forbidden”(403 禁止访问)错误?

2 分钟阅读
0

我正在尝试通过 Amazon S3 控制台将文件上传到 Amazon Simple Storage Service (Amazon S3) 存储桶。但是,我遇到了“403 Forbidden”错误。

简短描述

“403 Forbidden”错误可能由于以下原因而导致:

解决方法

检查您的 s3:PutObject 或 s3:PutObjectAcl 的权限

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

  1. 打开 AWS Identity and Access Management(IAM)控制台
  2. 导航到用于访问桶的身份,例如 User(用户)或 Role(角色)。选择身份的名称。
  3. 选择 Permissions(权限)选项卡,然后展开每个策略,以查看其 JSON 策略文档。
  4. 在 JSON 策略文档中,搜索与 Amazon S3 访问相关的策略。然后,确认您拥有在桶上执行 s3:PutObjects3:PutObjectAcl 操作的权限。

申请使用 AWS KMS 密钥的权限

要上传使用 AWS KMS 加密的对象,您必须拥有执行 AWS KMS 操作的权限。您必须至少能够执行 kms:Decrypt 和 kms:GenerateDataKey 操作。

**重要事项:**如果您要将对象上传到其他 AWS 账户中的存储桶,则不能使用 AWS 托管式密钥 aws/S3 作为默认加密密钥。这是因为您无法修改 AWS 托管式密钥策略。

检查存储桶策略中是否存在显式拒绝语句

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

  1. 打开 Amazon S3 控制台
  2. 从存储桶列表中,打开要将文件上传到的存储桶。
  3. 选择 Permissions(权限)选项卡。
  4. 选择桶策略
  5. 搜索带有 "Effect": "Deny" 的语句。
  6. 查看这些语句,确保它们不会阻止上传文件到桶的操作。

**重要事项:**在保存带有 "Effect": "Deny" 的存储桶策略之前,请务必检查是否存在任何拒绝访问该 S3 存储桶的语句。如果您被锁定,请参阅不小心拒绝所有人访问 Amazon S3 后如何重新获得访问权限?

以下示例语句显式拒绝访问 example-bucket 上的 s3:PutObject,除非上传请求使用 ARN 与 arn:aws:kms:us-east-1:111122223333:key 匹配的 AWS KMS 密钥给对象进行了加密:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ExampleStmt",
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Deny",
      "Resource": "arn:aws:s3:::example-bucket/*",
      "Condition": {
        "StringNotLikeIfExists": {
          "s3:x-amz-server-side-encryption-aws-kms-key-id": "arn:aws:kms:us-east-1:111122223333:key/*"
        }
      },
      "Principal": "*"
    }
  ]
}

从您的请求中删除公共 ACL 或关闭 S3 屏蔽公共访问权限

如果您在 PUT 请求中传递了一个公共 ACL(例如 public-readauthenticated-read),则该公共 ACL 会将相关 S3 对象设为公共。如果为此账户或存储桶启用了 S3 屏蔽公共访问权限功能,则您的上传请求会被拒绝。

注意: 最佳做法是仅在您的使用案例需要时才将对象设为公共对象。

要成功将对象作为公共对象上传,请根据需要修改 S3 屏蔽访问功能。如果您的使用案例不要求将对象设为公共对象,请从 PUT 请求中删除上述公共 ACL。

要在账户级别配置 S3 屏蔽公共访问权限设置,请参阅为账户配置屏蔽公共访问权限设置。要在存储桶级别配置设置,请参阅为 S3 存储桶配置屏蔽公共访问权限设置。此外,有关公共访问权限设置的详细信息,请参阅“公共”的含义

查看 AWS Organizations 的服务控制策略

如果您使用 AWS Organizations,请检查其服务控制策略是否显式拒绝 Amazon S3 操作。如果是,请根据需要修改此策略。

相关信息

如何解决来自 Amazon S3 的 403 Access Denied(访问被拒绝)错误?

如何解决当我尝试修改 Amazon S3 中的存储桶策略时出现的错误“You don't have permissions to edit bucket policy”?

排查 Amazon S3 中的 access denied (403 Forbidden) 错误

AWS 官方已更新 4 个月前