當我嘗試在 Amazon S3 中上傳檔案時,為什麼會收到 "403 Forbidden" (403 禁止) 錯誤?

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

我正在嘗試使用 Amazon S3 主控台將檔案上傳至我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。但收到了 "403 Forbidden" (403 禁止) 錯誤。

簡短描述

由於以下原因,可能會出現 "403 Forbidden" (403 禁止) 錯誤:

  • 缺少用於新增物件的 s3:PutObject 許可,或缺少用於修改物件的 ACL 的 s3:PutObjectAcl 的許可。
  • 您無使用 AWS Key Management Service (AWS KMS) 金鑰的許可。
  • 儲存貯體政策中有明確拒絕語句。
  • 已啟用 Amazon S3 Block Public Access (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:Encrypt kms: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-buckets3: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 Block Public Access (S3 區塊公有存取)

如果您在上傳請求中傳遞公有 ACL,並且啟用 S3 Block Public Access (區塊公有存取) 功能,則應先將其停用,然後再上傳檔案。

關於在帳戶層級設定 S3 Block Public Access (區塊公有存取) 設定的詳細資訊,請參閱設定帳戶的區塊公有存取設定。如需在儲存貯體層級進行設定,請參閱設定 S3 儲存貯體的區塊公有存取設定

授予根使用者寫入物件的許可

設定儲存貯體的 ACL 許可,以授予根使用者對寫入物件的存取權限。

刪除 AWS Organizations 的服務控制政策

如果您使用 AWS Organizations,請刪除任何明確拒絕 S3 動作的服務控制政策