当我尝试在 Amazon S3 中上载文件时,为什么会收到“403 禁止访问”错误?

上次更新日期:2022 年 4 月 27 日

我尝试使用 Amazon S3 控制台将文件上载到 Amazon Simple Storage Service (Amazon S3) 存储桶中。但是,我却收到“403 禁止访问”错误。

简短描述

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

  • s3:PutObject 添加对象或 s3:PutObjectAcl 修改对象的 ACL,缺少权限。
  • 缺少使用 AWS Key Management Service (AWS KMS) 密钥的权限。
  • 存储桶策略中有显式拒绝语句。
  • 已启用 Amazon S3 阻止公有访问
  • 存储桶访问控制列表 (ACL) 不允许 AWS 账户根用户写入对象。
  • AWS Organizations 服务控制策略不允许访问 Amazon S3。

解决方法

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

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

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

请求使用 AWS KMS 密钥的权限

要访问使用自定义 AWS KMS 密钥的原定设置加密的 S3 存储桶,密钥管理员必须授予您对密钥策略的权限

要将对象上载至已加密的存储桶,您的 IAM 用户或角色必须至少拥有对 kms:Encryptkms:GenerateDataKeyAWS KMS 权限

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

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

  1. 打开 Amazon S3 控制台
  2. 从存储桶列表中,打开您要向其中上载文件的存储桶。
  3. 选择 Permissions(权限)选项卡。
  4. 选择 Bucket policy(存储桶策略)。
  5. 搜索包含 "Effect": "Deny" 的语句。
  6. 验证您的存储桶策略是否包含正确的针对 s3:PutObject 的 URI 请求参数,以满足特定条件。

重要信息:在保存具有 "Effect": "Deny" 的存储桶策略之前,请务必检查是否有任何拒绝访问 S3 存储桶的语句。如果您被意外锁定,请参阅我意外拒绝了所有人对我的 Amazon S3 存储桶的访问。如何重新获得访问权限?

以下示例语句显式拒绝对 awsdoc-example-bucket 上的 s3:PutObject 的访问,除非上载请求包括使用 AWS KMS 密钥 arn:aws:kms:us-east-1:111122223333:key 进行的加密:

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

禁用 S3 阻止公有访问

如果您是在上载请求中传递公有 ACL,并且启用了 S3 阻止公有访问功能,请在上载文件前将其禁用。

有关在账户级别配置 S3 阻止公有访问设置的更多信息,请参阅为账户配置阻止公有访问权限设置。要在存储桶级别配置设置,请参阅为 S3 存储桶配置阻止公有访问设置

授予根用户写入对象的权限

配置存储桶的 ACL 权限可授予根用户访问写入对象的权限。

删除 AWS Organizations 的服务控制策略

如果您使用 AWS Organizations,请删除任何可显式拒绝 S3 操作的服务控制策略