我正在嘗試透過 Amazon S3 主控台將檔案上傳到我的 Amazon Simple Storage Service (Amazon S3) 儲存貯體。但是,我收到「403 Forbidden」錯誤。
簡短描述
發生「403 Forbidden」錯誤的原因如下:
解決方法
檢查您對 s3:PutObject 或 s3:PutObjectAcl 的權限
請遵循下列步驟:
- 開啟 AWS Identity and Access Management (IAM) 主控台。
- 瀏覽至用來存取儲存貯體的身分識別,例如,使用者或角色。選擇身分識別的名稱。
- 選擇 Permissions (權限) 索引標籤,然後展開每個政策以檢視其 JSON 政策文件。
- 在 JSON 政策文件中,搜尋與 Amazon S3 存取相關的政策。然後,確認您對儲存貯體具有 s3:PutObject 或 s3:PutObjectAcl 動作的權限。
要求使用 AWS KMS key 的權限
若要上傳使用 AWS KMS 加密的物件,您必須擁有執行 AWS KMS 動作的權限。您必須至少能夠執行 kms:Decrypt and kms:GenerateDataKey 動作。
**重要:**如果您將物件上傳到其他 AWS 帳戶中的儲存貯體,則無法使用 AWS 受管金鑰 aws/S3 作為預設加密金鑰。這是因為您無法修改 AWS 受管金鑰政策。
檢查儲存貯體政策是否有明確的拒絕陳述式
請遵循下列步驟:
- 開啟 Amazon S3 主控台。
- 從儲存貯體清單中,開啟您要上傳檔案的目標儲存貯體。
- 選擇 Permissions (權限) 索引標籤。
- 選擇「儲存貯體政策」。
- 搜尋 "Effect": "Deny" 的陳述式。
- 檢閱這些陳述式,並確保它們不會阻止上傳到儲存貯體。
**重要:**在您使用 "Effect": "Deny" 儲存儲存貯體政策之前,請務必檢查是否有任何會拒絕存取該 S3 儲存貯體的陳述式。如果您遭到封鎖,請參閱如何在不小心拒絕所有人存取後重新取得對 Amazon S3 的存取權?
下列範例陳述式明確拒絕存取 example-bucket 上的 s3:PutObject,除非上傳請求使用其 ARN 符合 arn:aws:kms:us-east-1:111122223333:key 的 AWS KMS key 加密物件:
{
"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-read 或 authenticated-read,則該公用 ACL 會使 S3 物件變為公用。如果此帳戶或儲存貯體的 S3 封鎖公開存取功能已開啟,則系統會拒絕您的上傳請求。
注意: 最佳實務是僅在使用情境確實需要時,才將物件設為公用。
若要成功將物件上傳為公開可用的物件,請視需要修改 S3 Block Access 功能。如果您的使用案例不需要公開物件,請從 PUT 要求中移除提及的公用 ACL。
若要在帳戶層級設定 S3 封鎖公開存取設定,請參閱為您的帳戶設定封鎖公開存取設定。若要在儲存貯體層級進行設定,請參閱為您的 S3 儲存貯體設定封鎖公開存取設定。此外,有關公用存取設定的更多資訊,請參閱「公用」的含義。
檢閱 AWS Organizations 的服務控制政策
如果您使用 AWS Organizations,請檢查服務控制政策是否明確拒絕 Amazon S3 動作。如果是這樣,請視需要修改政策。
相關資訊
如何對 Amazon S3 的「403 拒絕存取」錯誤進行疑難排解?
當我嘗試修改 Amazon S3 中的儲存貯體政策時,如何對「You don't have permissions to edit bucket policy」錯誤進行疑難排解?
對 Amazon S3 中的存取遭拒 (403 Forbidden) 錯誤進行疑難排解