STS鑑權流程
1.建立RAM子用戶
在控制檯完成,只能由子用戶申請角色扮演,主用戶、臨時用戶不能夠。子用戶必須授予AliyunSTSAssumeRoleAccess系統權限後,才能申請角色扮演進行臨時訪問。
須要保存AK 信息,AK 信息只會在建立時顯示,請您妥善保管。爲安全起見, RAM 不提供 AK 信息查詢跨域
2. 建立OSS角色安全
3.新建OSS角色受權策略服務器
在控制檯頁面的訪問控制裏面進行自定義受權策略app
系統受權策略,阿里雲提供的一組通用受權策略,主要針對不一樣產品的只讀權限、全部權限。對於阿里雲提供的這組受權策略,用戶只能用於受權,不能編輯和修改,用戶自定義的受權策略能夠進行編輯修改。ide
4. 給OSS角色進行受權post
將新建的角色受權策略受權給oss角色this
5. 新建OSS用戶受權策略
oss角色的roleArn阿里雲
將Resource改成oss角色的roleArn.net
6.將OSS用戶受權策略受權給RAM子用戶code
這樣就完成了配置!
在STS鑑權的時候須要用到新建立子用戶中的參數
AccessKey Id , AccessKey Secret , RoleArn
建立訪問密鑰(AK)
爲須要經過 API 進行調用的用戶建立訪問密鑰(AK),操做步驟以下:
登陸 RAM 控制檯。
在用戶管理頁面,找到須要建立 AccessKey 的用戶(可以使用用戶名進行模糊查詢),而後單擊其用戶名或其操做列下的管理按鈕。
在用戶詳情頁面,單擊 建立 AccessKey。
在彈出的對話框中,查看新建的 AK 信息,並可選擇 保存 AK 信息。
注意:
AK 信息只會在建立時顯示,請您妥善保管。爲安全起見, RAM 不提供 AK 信息查詢。
若是 AK 泄露或丟失,則須要建立新的 AK。
而且AK最多隻能建立兩個
RoleArn的查看 角色管理>角色詳情
角色扮演常見問題
序號 問題 緣由
1 ErrorCode: NoPermission
ErrorMessage: Roles may not be assumed by root accounts. 使用主用戶的密鑰調用AssumeRole,請使用子用戶的密鑰。
2 ErrorCode: MissingSecurityToken
ErrorMessage: SecurityToken is mandatory for this action. 使用臨時用戶的密鑰調用AssumeRole,請使用子用戶的密鑰。
3 Error code: InvalidAccessKeyId.NotFound
Error message: Specified access key is not found AccessKeyId無效,請檢查是否寫錯,特別是先後不能後空格。
4 Error code: InvalidAccessKeyId.Inactive
Error message: Specified access key is disabled. 使用的子用戶的密鑰,已經被禁止,請啓用密鑰或更換密鑰。 密鑰是否被禁止,請控制檯的「訪問控制->用戶管理->管理->用戶詳情->用戶AccessKey」確認,並開啓。
5 ErrorCode: InvalidParameter.PolicyGrammar
ErrorMessage: The parameter Policy has not passed grammar check. 角色扮演時指定的受權策略無效。AssumeRole時能夠指定受權(Policy),也能夠不指定。若是指定受權策略,則臨時用戶的權限是指定的受權策略和角色權限的交集;若是不指定受權策略,臨時用戶的權限是角色的權限。
報該錯誤時,請檢查指定的受權策略Policy。不推薦臨時用戶扮演角色時指定受權策略。若是的確須要使用受權策略,強烈建使用 RAM Policy Editor 生成受權策略。
6 ErrorCode: InvalidParameter.RoleSessionName
ErrorMessage: The parameter RoleSessionName is wrongly formed. 角色扮演時指定RoleSessionName無效。此參數用來區分不一樣的Token,以標明誰在使用此Token,便於審計; 格式:^[a-zA-Z0-9.@-_]+$,2-32個字符,瞭解更多請參看 扮演角色操做接口。如命名a,1,abc\*abc,忍者神龜等都是非法的
7 ErrorCode: InvalidParameter.DurationSeconds
Error message: The Min/Max value of DurationSeconds is 15min/1hr. 角色扮演時指定的過時時間無效,即AssumeRoleRequest.setDurationSeconds參數無效。角色扮演時能夠指定過時時間,單位爲秒,有效時間是900 ~ 3600,如assumeRoleRequest.setDurationSeconds(60L * 20); 20分鐘內有效。
8 ErrorCode: NoPermission
ErrorMessage: No permission perform sts:AssumeRole on this Role. Maybe you are not authorized to perform sts:AssumeRole or the specified role does not trust you 緣由1:AssumeRole的子用戶沒有權限,請給子用戶授予AliyunSTSAssumeRoleAccess系統受權策略。請在「訪問控制->用戶管理->受權->可選受權策略名稱」中給子用戶受權AliyunSTSAssumeRoleAccess。
緣由2:申請角色扮演的子用戶的雲帳號ID與角色的「受信雲帳號ID」不符,請角色建立者確認並修改。子用戶的雲帳號ID,即建立子用戶的主用戶的ID;角色的雲帳號ID,即建立角色的主用戶的雲帳號ID。請在以下位置確認修改 訪問控制 -> 角色管理 -> 管理 -> 角色詳細 -> 編輯基本信息 中確認修改。
緣由3:角色的類型錯誤,若是角色的類型分爲「用戶角色」和「服務角色」,服務角色不能使用AssumeRole扮演臨時用戶。
常見問題及排查
OSS 403問題
OSS返回的常見錯誤,請參看 OSS的錯誤響應。
其中403錯誤及緣由以下表:
| 錯誤 | 錯誤碼錯誤信息 | 錯誤緣由 | 解決辦法 |
| -------------- | --------------------------- | ---------------------------------------- | ------------------ |
| UserDisable.UserDisable | ErrorCode: UserDisable
ErrorMessage: UserDisable | 用戶欠費或者由於安全緣由被禁止訪問 | OSS常見錯誤及排查 |
| RequestTimeTooSkewed | ErrorCode: RequestTimeTooSkewed
ErrorMessage: The difference between the request time and the current time is too large. | 發起請求的時間和服務器時間超出15分鐘,通常是客戶端系統時間錯誤 | OSS常見錯誤及排查 |
| InvalidAccessKeyId | ErrorCode: InvalidAccessKeyId
ErrorMessage: The OSS Access Key Id you provided does not exist in our records. | AccessKeyId無效/被禁止或者過時。 | OSS常見錯誤及排查 |
| SignatureDoesNotMatch | ErrorCode: SignatureDoesNotMatch
ErrorMessage: The request signature we calculated does not match the signature you provided. Check your key and signing method. | 客戶端和服務計算的簽名不符 | OSS常見錯誤及排查 |
| PostObject | ErrorCode: AccessDenied
ErrorMessage: Invalid according to Policy: Policy expired.
ErrorCode: AccessDenied
ErrorMessage: Invalid according to Policy: Policy Condition failed: … | PostObject中Policy無效 | PostObject |
| Cors | ErrorCode: AccessForbidden
ErrorMessage: 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: AccessDenied
ErrorMessage: You are denied by bucket referer policy. | 請檢查Bucket的Refers配置 | OSS防盜鏈 |
| AccessDenied | 見下面表權限問題錯誤及緣由 | 無權限 | 下面詳細講述 |
| 其它小類錯誤 | | | |
權限問題
權限問題錯誤及緣由見下表: 序號 錯誤 緣由 1 ErrorCode: AccessDenied ErrorMessage: 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: AccessDenied ErrorMessage: You are forbidden to list buckets. 沒有listBuckets權限 3 ErrorCode: AccessDenied ErrorMessage: You do not have write acl permission on this object 無setObjectAcl權限 4 ErrorCode: AccessDenied ErrorMessage: You do not have read acl permission on this object. 無getObjectAcl權限 5 ErrorCode: AccessDenied ErrorMessage: The bucket you visit is not belong to you. 子用戶沒有Bucket管理的權限(如getBucketAcl CreateBucket、deleteBucket setBucketReferer、 getBucketReferer等) 6 ErrorCode: AccessDenied ErrorMessage: You have no right to access this object because of bucket acl. 子用戶/臨時用戶沒有訪問Object的權限(如putObject getObject、appendObject deleteObject、postObject)等 7 ErrorCode: AccessDenied ErrorMessage: Access denied by authorizer's policy. 臨時用戶訪問無權限,該臨時用戶角色扮演指定受權策略,該受權策略無權限 8 ErrorCode: AccessDenied ErrorMessage: You have no right to access this object. 子用戶/臨時用戶無當前操做權限(如initiateMultipartUpload等)