當我嘗試使用 Amazon S3 主控台上傳檔案時,為什麼會收到「HTTP 403 禁止」錯誤?

上次更新日期:2020-10-20

我正在嘗試使用 Amazon S3 主控台將文件上傳至我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。但收到了「HTTP 403 禁止」錯誤。如何對此錯誤進行疑難排解?

簡短描述

若要從 Amazon S3 主控台對 HTTP 403 Forbidden 錯誤進行疑難排解,請檢查以下內容:

  • 缺少 s3:PutObject 或 s3:PutObjectAcl 許可
  • 缺少使用 AWS Key Management Service (AWS KMS) 金鑰的許可
  • 儲存貯體政策中的明確拒絕語句 
  • 儲存貯體存取控制清單 (ACL) 不允許 AWS 帳戶的根使用者寫入物件
  • AWS Organizations 服務控制政策不允許存取 Amazon S3

解決方案

缺少 s3:PutObject 或 s3:PutObjectAcl 許可

驗證您正在使用的 AWS Identity and Access Management (IAM) 使用者或角色,是否具有在儲存貯體執行 s3:PutObject 動作的許可。若沒有該許可,則會收到「HTTP 403 禁止」錯誤。 

如果您在上傳期間嘗試修改物件的 ACL,則您的 IAM 使用者或角色也必須具有 s3:PutObjectAcl 動作的許可。 

缺少使用 AWS KMS 金鑰的許可

若要使用自訂 AWS KMS 金鑰來存取使用預設加密的 S3 儲存貯體,必須具有使用該金鑰的許可。 

若要取得使用金鑰的許可,金鑰管理員必須授予您有關金鑰政策的許可。若要將物件上傳至加密儲存貯體,您的 IAM 使用者或角色必須至少具有 kms:Encrypt kms:GenerateDataKey 許可。 

儲存貯體政策中的明確拒絕語句

除非滿足特定條件,否則請檢閱儲存貯體政策,以了解 s3:PutObject 的任何明確拒絕 ("Effect": "Deny") 許可語句。驗證您的上傳是否滿足存取 s3:PutObject 動作的儲存貯體政策要求。 

例如,如果您的儲存貯體政策明確拒絕 s3:PutObject,除非請求包含使用 AWS KMSAmazon 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": "*"
    }
  ]
}

警告:在使用明確拒絕語句儲存儲存貯體政策之前,必須仔細檢閱明確拒絕存取的參數。如果不小心被鎖定,請參閱我不小心拒絕所有人存取我的 Amazon S3 儲存貯體。如何重新取得存取權?

Bucket ACL 不允許根使用者寫入對象

如果您使用根使用者帳戶將物件上傳至 S3 儲存貯體,請驗證儲存貯體的 ACL 是否授予根使用者對寫入物件進行存取的許可。如需了解詳細資訊,請參閱如何設定 ACL 儲存貯體許可? 

AWS Organizations 服務控制政策不允許存取 Amazon S3

如果您正在使用 AWS Organizations,則請查閱服務控制政策,以確保允許存取 Amazon S3。

例如,您在嘗試存取 Amazon S3 時,以下政策會導致「HTTP 403 禁止」錯誤,因為它明確拒絕存取:

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

如需 AWS Organizations 功能的詳細資訊,請參閱啟用組織中的所有功能