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. | 客戶端和服務計算的簽名不符 | |
PostObject | ErrorCode: AccessDeniedErrorMessage: Invalid according to Policy: Policy expired.ErrorCode: AccessDenied ErrorMessage: Invalid according to Policy: Policy Condition failed: … | PostObject中Policy無效 | |
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沒有配置或配置不對 | |
Refers | ErrorCode: AccessDeniedErrorMessage: You are denied by bucket referer policy. | 請檢查Bucket的Referer配置 | |
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是否存在,如果存在說明是主用戶。
查看子用戶的許可權,即該子用戶的授權策略:
在控制台
,查看子用戶的AccessKeyID,並找到對應的子用戶;在控制台 。查看臨時用戶的許可權,即對應角色的許可權:
臨時用戶的密鑰的AccessKeyID,以STS開頭比較好辨認,如“STS.MpsSonrqGM8bGjR6CRKNM****”。 在控制台
。
存取權限錯誤流程如下圖:
許可權檢查流程如下:
列出需要的許可權和資源。
檢查Action是否有需要的操作。
Resource是否是需要的操作對象。
Effect是否是Allow而不是Deny。
Condition是否正確。
如果檢查無法發現錯誤,需要調試步驟如下:
如果有Condition的話先將其去掉。
Effect中去除Deny。
Resource換成”Resource”: “*”。
Action換成”Action”: “oss:*”。
權限原則的生成推薦使用OSS授權策略生成工具RAM Policy Editor。
如果想更多了解阿里雲存取控制(RAM),請參見阿里雲存取控制初探 。