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

2 分钟阅读
0

我正在尝试使用 Amazon S3 控制台将文件上传到 Amazon Simple Storage Service(Amazon S3)桶。但是,我遇到了“403 Forbidden”(403 禁止访问)错误。

简短描述

“403 Forbidden”(403 禁止访问)错误可能是由于以下原因造成的:

解决方法

检查您的 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/S3 作为默认加密密钥。这是因为无法修改 AWS 托管式密钥策略。

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

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

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

**重要事项:**在保存带有 "Effect": "Deny" 的桶策略之前,请务必检查是否有任何语句阻止访问 S3 桶。如果您无法访问 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),则这将会将相关 S3 对象设为公共。如果为此账户或桶启用了 S3 屏蔽公共访问权限功能,则您的上传请求将被拒绝。

注意: 除非您的用例需要,否则不推荐将对象设为公共。

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

要在账户级别配置 S3 屏蔽公共访问权限设置,请参阅配置账户的屏蔽公共访问权限设置。要在桶级别配置设置,请参阅配置 S3 桶的屏蔽公共访问权限设置。另请参阅“公共”的含义

查看 AWS Organizations 的服务控制策略

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

相关信息

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

如何解决当我尝试修改 Amazon S3 中的桶策略时出现的错误“You don't have permissions to edit bucket policy”(您无权编辑桶策略)?

AWS 官方
AWS 官方已更新 1 年前