OSS 403問題

OSS 403指OSS返回的HTTP狀態碼是403,可以簡單的理解為沒有許可權訪問,伺服器收到請求但拒絕提供服務。OSS 403錯誤及原因如下表:

錯誤 錯誤碼錯誤資訊 錯誤原因 解決辦法
SignatureDoesNotMatch ErrorCode: SignatureDoesNotMatchErrorMessage: The request signature we calculated does not match the signature you provided. Check your key and signing method. 客戶端和服務計算的簽名不符 OSS 403錯誤及排查
PostObject ErrorCode: AccessDeniedErrorMessage: Invalid according to Policy: Policy expired.ErrorCode: AccessDenied ErrorMessage: Invalid according to Policy: Policy Condition failed: … PostObject中Policy無效 PostObject
Cors ErrorCode: AccessForbiddenErrorMessage: 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沒有配置或配置不對 OSS設定跨域訪問
Refers ErrorCode: AccessDeniedErrorMessage: You are denied by bucket referer policy. 請檢查Bucket的Referer配置 OSS防盜鏈
AccessDenied 見以下許可權常見錯誤 無許可權 下面詳細講述

其中,許可權問題是403錯誤的一部分。許可權問題的錯誤是AccessDenied。以下將詳細講述這類錯誤。

許可權常見錯誤

許可權問題是目前使用者沒有指定操作的許可權。OSS返回的錯誤及原因見下表:

序號 錯誤 原因
1 ErrorCode: AccessDeniedErrorMessage: The bucket you are attempting to access must be addressed using the specified endpoint. Please send all future requests to this endpoint. Bucket和Endpoint不符
2 ErrorCode: AccessDeniedErrorMessage: You are forbidden to list buckets. 無listBuckets許可權
3 ErrorCode: AccessDeniedErrorMessage: You do not have write acl permission on this object 無setObjectAcl許可權
4 ErrorCode: AccessDeniedErrorMessage: You do not have read acl permission on this object. 無getObjectAcl許可權
5 ErrorCode: AccessDeniedErrorMessage: The bucket you visit is not belong to you. 子用戶沒有Bucket管理的許可權(如getBucketAcl CreateBucket、deleteBucket setBucketReferer、 getBucketReferer等)
6 ErrorCode: AccessDeniedErrorMessage: You have no right to access this object because of bucket acl. 子用戶/臨時用戶沒有訪問Object的許可權(如putObject getObject、appendObject deleteObject、postObject)等
7 ErrorCode: AccessDeniedErrorMessage: Access denied by authorizer’s policy. 臨時用戶訪問無許可權,該臨時使用者角色扮演指定授權策略,該授權策略無許可權
8 ErrorCode: AccessDeniedErrorMessage: You have no right to access this object. 子用戶/臨時用戶無當前操作許可權(如initiateMultipartUpload等)

許可權問題排查

辨別密鑰是主用戶、子用戶還是臨時用戶的。

  • 是否是主用戶的密鑰:

    需要到控制台查看AccessKeyID是否存在,如果存在說明是主用戶。

  • 查看子用戶的許可權,即該子用戶的授權策略:

    在控制台存取控制 > 用戶管理 > 管理 > 用戶詳情 > 用戶AccessKey,查看子用戶的AccessKeyID,並找到對應的子用戶;在控制台存取控制 > 用戶管理 > 管理 > 用戶授權策略 > 個人授權策略/加入組的授權策略 > 查看子賬戶的許可權

  • 查看臨時用戶的許可權,即對應角色的許可權:

    臨時用戶的密鑰的AccessKeyID,以STS開頭比較好辨認,如“STS.MpsSonrqGM8bGjR6CRKNMoHXe”。 在控制台存取控制 > 角色管理 > 管理 > 角色授權策略 > 查看許可權

存取權限錯誤流程如下圖:

許可權檢查流程如下:

  1. 列出需要的許可權和資源。
  2. 檢查Action是否有需要的操作。
  3. Resource是否是需要的操作對象。
  4. Effect是否是Allow而不是Deny。
  5. Condition是否正確。

如果檢查無法發現錯誤,需要調試步驟如下:

  1. 如果有Condition的話先將其去掉。
  2. Effect中去除Deny。
  3. Resource換成”Resource”: “*”。
  4. Action換成”Action”: “oss:*”。
说明