本文介紹OSS返回403錯誤的原因和解決方案。
AccessDenied
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint
問題原因:訪問Bucket時使用的Endpoint不正確。
解決方案:確保使用正確的Endpoint訪問Bucket。例如Bucket所在地區為
oss-cn-hangzhou
,則外網Endpoint為oss-cn-hangzhou.aliyuncs.com
。關於Endpoint的更多資訊,請參見OSS訪問網域名稱使用規則。
This request is forbidden by kms
問題原因:沒有KMS使用許可權。
解決方案:請確保對指定的CMK ID具有使用許可權。詳情請參見伺服器端加密。
AccessDenied
問題原因:沒有相應的存取權限。
解決方案:
確認使用了正確的AccessKey ID和AccessKey Secret。詳情請參見建立AccessKey。
確認RAM使用者是否擁有Bucket或Object相關操作許可權。
You have no right to access this object
問題原因:RAM使用者無權訪問此Object。
解決方案:確認RAM使用者是否擁有Object相關操作許可權。根據使用情境設定不同存取權限的詳情,請參見教程樣本:使用RAM Policy控制OSS的存取權限。
Anonymous user has no right to access this bucket
問題原因:匿名使用者無權訪問此Bucket。
解決方案:請通過Bucket Policy授權匿名使用者存取目標Bucket。詳情請參見通過Bucket Policy授權使用者訪問指定資源。
Anonymous user has no right to access this object
問題原因:匿名使用者無權訪問此Object。
解決方案:請通過Bucket Policy授權匿名使用者存取目標Bucket中的指定資源。詳情請參見通過Bucket Policy授權使用者訪問指定資源。
You are denied by bucket referer policy
問題原因:防盜鏈校正
解決方案:通過設定Referer白名單以及是否允許空Referer,限制僅白名單中的網域名稱可以訪問Bucket內的資源。詳情請參見設定防盜鏈。
Invalid according to Policy: Policy expired
問題原因:PostObject中的Policy表單域無效。
解決方案:Post請求的Policy表單域用於驗證請求的合法性。Policy為一段經過UTF-8和Base64編碼的JSON文本,聲明了Post請求必須滿足的條件。Post Policy格式如下:
{ "expiration": "2014-12-01T12:00:00.000Z", "conditions": [ {"bucket": "johnsmith" }, ["starts-with", "$key", "user/eric/"] ] }
關於Policy中支援的Conditions詳情,請參見附錄:Post Policy。
Invalid according to Policy: Policy Condition failed: " + RelatedUnit; //XXX
問題原因:Policy表單域中指定的Conditions無效。
解決方案:確保在Policy表單域中指定有效Conditions。關於Policy表單域中支援的Conditions以及Conditions匹配方式詳情,請參見附錄:Post Policy。
Invalid according to Policy: Policy Condition failed: ["eq", "$Content-Type", "image/png"]
問題原因:上傳的檔案類型與指定的Content-Type類型不符。
解決方案:Policy中的Content-Type用於限制表單上傳時的檔案類型。如果Content-Type限制為image/png,則僅支援上傳image/png類型的檔案。如果您需要上傳其他類型的檔案,請添加對應的Content-Type類型。關於常見的Content-Type類型列表,請參見如何設定Content-Type(MIME)?。
Target object does not reside in the same data center as source object
問題原因:不支援跨地區拷貝檔案。
解決方案:僅支援拷貝同一地區下相同或不同儲存空間(Bucket)之間的檔案(Object)。詳情請參見CopyObject。
Query string authentication requires the Signature, Expires and OSSAccessKeyId parameters
問題原因:URL簽名缺少必要參數。
解決方案:URL簽名必須至少包含Signature、Expires和OSSAccessKeyId參數。URL簽名樣本為
http://oss-example.oss-cn-hangzhou.aliyuncs.com/oss-api.pdf?OSSAccessKeyId=nz2pc56s936**9l&Expires=1141889120&Signature=vjbyPxybdZaNmGa%2ByT272YEAiv****
。關於URL簽名的詳情,請參見在URL中包含簽名。
Invalid date (should be seconds since epoch)
問題原因:請求的時間戳記無效。
解決方案:Expires參數的值是一個Unix time(自UTC時間1970年1月1號開始的秒數),用於標識該URL的逾時時間。
Request has expired
問題原因:請求已到期。
解決方案:請結合實際使用情境,設定合理的Expires。關於在上傳檔案時如何設定Expires,請參見PutObject、PostObject、AppendObject和InitiateMultipartUpload。
You do not have read permission on this object
問題原因:沒有該Object的讀取許可權。
解決方案:請聯絡Object擁有者授予您對Object的讀取許可權。
You do not have write permission on this object
問題原因:沒有該Object的寫入許可權。
解決方案:請聯絡Object擁有者授予您對Object的寫入許可權。
You do not have read acl permission on this object
問題原因:沒有該Object的ACL讀取許可權。
解決方案:請聯絡Object擁有者授予您GetObjectACL的許可權。
You do not have write acl permission on this object
問題原因:沒有該Object的ACL寫入許可權。
解決方案:請聯絡Object擁有者授予您PutObjectACL的許可權。
You have no right to access this object because of bucket acl
問題原因:沒有該Object的存取權限。
解決方案:請授予訪問者OSS相關存取權限,例如PutObject、GetObject、AppendObject等。詳情請參見RAM Policy常見樣本。
Anonymous access is forbidden for this operation
問題原因:匿名使用者沒有該操作的對應許可權。
解決方案:請通過Bucket Policy授權匿名使用者存取目標Bucket中的指定資源。詳情請參見通過Bucket Policy授權使用者訪問指定資源。
Access denied by bucket policy
問題原因:通過Bucket Policy的授權訪問被拒絕。
解決方案:請結合不同的使用情境靈活配置Bucket Policy。詳情請參見通過Bucket Policy授權使用者訪問指定資源。
Access denied by VPC endpoint policy
問題原因:用戶端所在VPC添加了Policy授權策略,導致未授權的Bucket無法在VPC環境內訪問。
解決方案:請檢查您的用戶端所在VPC配置的Policy授權策略。
Hierarchical namespace is disabled
問題原因:Bucket未開啟階層命名空間。
解決方案:您需要在建立Bucket時開啟階層命名空間,然後對目錄或檔案進行重新命名操作。關於階層命名空間支援的地區以及使用情境等更多資訊,請參見開啟階層命名空間。
Access denied by authorizer's policy
AccessForbidden
CORSResponse: This CORS request is not allowed. This is usually because the evalution of Origin, request method / Access-Control-Request-Method or Access-Control-Requet-Headers are not whitelisted by the resource's CORS spec
問題原因:沒有配置CORS或CORS配置錯誤。
解決方案:請參見設定跨域資源共用進行排查。
PermanentRedirect
The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint
問題原因:通過SDK訪問OSS中的Bucket時,未指定Endpoint或者指定的Endpoint有誤。例如建立的Bucket位於青島地區,使用了預設配置的
oss-cn-hangzhou.aliyuncs.com
的Endpoint地址發起請求,則出現該報錯。解決方案:確認請求的Endpoint地址與Bucket實際的Endpoint地址一致。例如需要訪問青島和杭州兩個節點的Bucket,建議建立多個ossclient,並在ossclient中添加
oss-cn-hangzhou.aliyuncs.com
和oss-cn-qingdao.aliyuncs.com
兩個Endpoint。
SecondLevelDomainForbidden
The bucket you are attempting to access must be addressed using OSS third level domain
問題原因:Bucket的請求網域名稱不為第三層網域名。
解決方案:針對OSS的網路請求,請確保除了GetService (ListBuckets)API以外,其他所有請求的網域名稱均由帶有指定Bucket資訊的第三層網域名組成。其中,訪問網域名稱結構為
BucketName.Endpoint
,BucketName為您的儲存空間名稱,Endpoint為儲存空間對應的地區網域名稱。例如https://examplebucket.oss-cn-hangzhou.aliyuncs.com
。
Please use virtual hosted style to access
問題原因:Host錯誤。
解決方案:通過外網訪問OSS服務時,以URL的形式表示訪問的OSS資源。OSS的URL結構為
<Schema>://<Bucket>.<外網Endpoint>/<Object>
。其中Schema包含HTTP或者HTTPS,Bucket表示儲存空間名稱,外網Endpoint為Bucket所在資料中心供外網訪問的Endpoint,Object填寫上傳到OSS上的檔案的訪問路徑。例如您的Region為華東1(杭州),Bucket名稱為examplebucket,Object訪問路徑為
destfolder/example.txt
,則外網訪問地址為https://examplebucket.oss-cn-hangzhou.aliyuncs.com/destfolder/example.txt
。
NonStandardHostForbidden
Your host is invalid. Please use Open Storage Service standard host
問題原因:Host錯誤。
解決方案:請使用標準的網域名稱格式訪問OSS資源。詳情請參見OSS訪問網域名稱使用規則。
KmsUbsmsInvalidBid
Your account partner does not have KMS Service
問題原因:要求者未開通KMS服務。
解決方案:使用SSE-KMS對OSS資料進行加密前,請先開通KMS服務。詳情請參見開通Key Management Service。
KmsInDebt
Current user is indebted
問題原因:當您的阿里雲賬戶進入欠費狀態時,您會收到相應的通知。同時,您對Key Management Service(Key Management Service)的訪問會被拒絕。
解決方案:如需正常使用KMS服務時,請確保您的阿里雲賬戶不欠費。
WORMConfigurationLocked
The WORM Configuration is locked
問題原因:合規保留原則鎖定後試圖刪除策略。
解決方案:若保留原則已提交鎖定,則不允許刪除此策略,且無法縮短策略保護周期,僅可以延長保護周期。詳情請參見保留原則。
BucketNotBelongTo
The bucket you access does not belong to you
問題原因:目前使用者不是目標Bucket的擁有者。
解決方案:僅Bucket擁有者有許可權執行此操作。
InvalidAccessKeyId
The OSS Access Key Id you provided is disabled
錯誤原因:AccessKey ID處于禁用狀態。
解決方案:重新啟用AccessKey。
The OSS Access Key Id you provided does not exist in our records
錯誤原因:臨時訪問憑證已到期,到期後自動失效。
解決方案:請使用臨時存取金鑰(AccessKeyId和AccessKeySecret)向App伺服器申請新的臨時訪問憑證。具體操作,請參見擷取臨時訪問憑證。
The OSS Access Key Id contains non-acceptable characters, which accepts only alphanumeric characters[0-9a-zA-Z] and several special characters[._=]
錯誤原因:輸入了無效的AccessKey ID。
解決方案:請重新輸入RAM使用者或者阿里雲帳號的AccessKey ID。更多資訊,請參見建立AccessKey。
SignatureDoesNotMatch
The request signature we calculated does not match the signature you provided
問題原因:使用API介面或者SDK訪問OSS時,用戶端需要攜帶簽名資訊以供OSS服務端進行身份認證。如果伺服器返回如上所示的響應,說明您在請求中提供的簽名與服務端計算的不一致,導致請求被拒絕。
解決方案:請參考以下步驟進行排查。
確認簽名所用的AccessKey ID與AccessKey Secret是否填寫正確。
您可以使用AccessKey ID與AccessKey Secret登入ossbrowser來驗證正確性。具體步驟,請參見安裝並登入ossbrowser。
檢查簽名演算法是否正確。
OSS提供兩種攜帶簽名的請求方式,分別為在Header中包含簽名和在URL中包含簽名。關於這兩種簽名方式的演算法說明如下:
在Header中包含簽名
StringToSign = VERB + "\n" + Content-MD5 + "\n" + Content-Type + "\n" + Date + "\n" + CanonicalizedOSSHeaders + CanonicalizedResource Signature = base64(hmac-sha1(AccessKeySecret, StringToSign)
在URL中包含簽名
StringToSign = VERB + "\n" + CONTENT-MD5 + "\n" + CONTENT-TYPE + "\n" + EXPIRES + "\n" + CanonicalizedOSSHeaders + CanonicalizedResource Signature = urlencode(base64(hmac-sha1(AccessKeySecret, StringToSign)))
如果業務情境允許,推薦您使用SDK訪問OSS,免去手動計算簽名的過程。具體步驟,請參見使用阿里雲SDK發起請求概述。
比對響應體中的
StringToSign
欄位與您發起請求的內容是否存在差異。StringToSign
欄位表示待簽字串,即簽名演算法中需要使用AccessKey Secret進行加密的內容。請求樣本如下:
PUT /bucket/abc?acl Date: Wed, 24 May 2023 02:12:30 GMT Authorization: OSS qn6q**************:77Dv**************** x-oss-abc: mymeta
以上請求計算得到的待簽字串應為:
PUT\n\n\nWed, 24 May 2023 02:12:30 GMT\nx-oss-abc:mymeta\n/bucket/abc?acl
TransferAccelerationDisabled
Transfer acceleration is disabled
問題原因:未開啟傳輸加速服務。
解決方案:如果您需要遠距離資料轉送加速、加速上傳和下載GB或TB級大檔案以及非靜態、非熱點資料下載加速等情境,請開啟傳輸加速服務。詳情請參見傳輸加速。
InvalidSecurityToken
The security token you provided is invalid
問題原因:臨時訪問憑證無效。
解決方案:請參見使用STS臨時訪問憑證訪問OSS進行排查。
AccessKeyIdAndSecurityTokenNotMatch
The OSS access key id and security token you provided does not match
問題原因:使用者提供的AccessKey和臨時訪問憑證不匹配。
解決方案:請參見使用STS臨時訪問憑證訪問OSS進行排查。
SecurityTokenExpired
The security token you provided has expired
問題原因:臨時訪問憑證已到期。
解決方案:重新請求STS服務擷取臨時訪問憑證。
AbnormalBucketOwnerStatus
The status of the bucket owner is abnormal
問題原因:暫未向目標Bucket的所屬使用者提供服務。
解決方案:請檢查使用者的阿里雲帳號是否已登出或因安全等原因被管控,是否因欠費原因被電訊廠商暫停服務。
SecurityTokenNotSupported
This interface does not support security token
問題原因:當前介面暫不允許通過臨時訪問憑證許可權進行調用。
解決方案:STS Token僅適用於臨時授權給特定使用者訪問OSS資源。如果您需要將Bucket開放給他人訪問,請參見存取控制概述選擇適用的授權機制。
Security token is not supported in this region
問題原因:暫不支援在當前地區使用STS Token。
解決方案:關於哪些地區支援使用STS Token的詳情,請參見接入地址。
RequestTimeTooSkewed
The difference between the request time and the current time is too large
問題原因:請求發起的時間超過OSS伺服器目前時間15分鐘。
解決方案:請檢查發送請求裝置的系統時間,並根據時區調整到正確時間。
發送請求的機器或裝置的系統時間,調整標準如下:
OSS的系統時間採用GMT時間,您的裝置的系統時間需要調整到GMT時間,或與其相對應的時區時間。GMT是零時區的區時,即世界標準時間。
Windows系統查看時區的方法:單擊
。例如,時區欄的+08:00表示您的裝置系統時區是東八區。
Linux或Unix系統查看時區的方法:執行date -R查看時間和時區。
下圖中的+0800表示您的裝置系統時區是東八區。
支援在多個地區使用OSS。每個地區都使用GMT時間,您發送請求的裝置系統時間也是GMT時間。
ImageDamage
The image file may be damaged
問題原因:圖片檔案有部分資訊丟失或損壞,導致無法正常識別或處理。
排查方法:請確保源檔案沒有損壞,如有損壞請重新上傳本地檔案。
UserDisable
UserDisable
問題原因:
帳號欠費或者由於安全原因,帳號被禁用。
未開通OSS服務。
解決方案:
請檢查帳號是否已欠費,或聯絡支援人員進行安全受限核查。
開通OSS服務。
BucketDisable
BucketDisable
問題原因:Bucket因安全原因被禁用。
解決方案:請檢查帳號是否已欠費,或聯絡支援人員進行安全受限核查。
CnameDenied
The cname belongs to another user
問題原因:該網域名稱已綁定至其他Bucket。
解決方案:請更換網域名稱或通過驗證網域名稱所有權強制綁定網域名稱,驗證網域名稱所有權會解除網域名稱與其他Bucket的綁定關係。請參見綁定自訂網域名進行排查。
InvalidObjectState
The operation is not valid for the object's state
問題原因:下載歸檔類型Object時,以下兩種情況會導致報錯無效的Object狀態。
未提交RestoreObject請求或者上一次提交RestoreObject已逾時。
已提交RestoreObject請求,但資料的RestoreObject操作還沒有完成。
解決方案:請參見RestoreObject進行排查。