預設情況下,為保證儲存在OSS中資料的安全性,OSS資源(包括Bucket和Object)預設為私人許可權,只有資源擁有者或被授權的使用者允許訪問。如果要授權他人訪問或使用自己的OSS資源,可以通過多種許可權控制策略向他人授予資源的特定許可權。僅當所有的權限原則通過OSS鑒權後才允許訪問授權資源。
請求類型
請求類型分為非匿名請求和匿名請求兩種。
非匿名請求
在要求標頭部或在請求URL中攜帶和身份相關的簽名資訊。
匿名請求
在要求標頭部或在請求URL中未攜帶任何和身份相關的資訊。
非匿名請求鑒權
鑒權說明
收到使用者非匿名請求時,OSS會通過身分識別驗證、基於角色的會話策略、基於身份的策略(RAM Policy)、Bucket Policy、Object ACL、Bucket ACL等鑒權結果來判斷是允許或拒絕該請求。
以上鑒權流程包含的許可權狀態說明如下:
Allow:允許訪問請求,即比對Policy命中了Allow規則。
Explicit Deny:顯式拒絕訪問請求,即比對Policy命中了Deny規則。
Implicit Deny:隱式拒絕訪問請求,即Policy不存在、比對Policy未命中Allow或Deny規則。
鑒權流程
帶身分識別驗證的鑒權流程如下:
檢查身分識別驗證是否成功。
收到使用者請求後,OSS會對請求攜帶的簽名和服務端計算的簽名進行比對。
如果請求籤名不匹配,則拒絕訪問。
如果請求籤名匹配,則繼續判斷是否為基於角色的會話策略。
判斷是否為基於角色的會話策略。
如果判斷結果是基於角色的會話策略,則OSS會對Session Policy進行許可權比對。
如果比對結果為Explicit Deny或Implicit Deny,則拒絕訪問。
如果比對結果為Allow,則繼續檢查RAM Policy和Bucket Policy。
如果判斷結果不是基於角色的會話策略,也會繼續檢查RAM Policy和Bucket Policy。
分別檢查RAM Policy和Bucket Policy。
RAM Policy是基於身份的策略。您可以使用RAM Policy控制使用者可以訪問您名下哪些資源的許可權。對於使用者層級的訪問,需要根據請求的帳號類別判斷允許或拒絕訪問請求。
如果使用阿里雲帳號AccessKey訪問,則直接返回Implicit Deny。
如果使用RAM使用者AccessKey或STS的AccessKey訪問,但是訪問的Bucket不屬於阿里雲帳號或者RAM角色Owner,則直接返回Implicit Deny。
如果調用RAM服務提供的鑒權介面對普通請求進行身份鑒權,OSS支援RAM服務通過帳號和Bucket所屬資源群組進行鑒權,則檢查返回結果為Allow、Explicit Deny或Implicit Deny。
Bucket Policy是基於資源的授權策略,Bucket Owner可以通過Bucket Policy為RAM使用者或其他帳號授權Bucket或Bucket內資源精確的操作許可權。
如果未設定Bucket Policy,則直接返回Implicit Deny。
如果設定了Bucket Policy,則檢查Bucket Policy返回結果為Allow、Explicit Deny或Implicit Deny。
檢查合并結果中是否存在Explicit Deny策略。
如果存在Explicit Deny策略,則拒絕訪問。如果不存在Explicit Deny策略,則檢查是否存在Allow策略。
檢查RAM Policy或Bucket Policy中是否存在Allow策略。
如果存在Allow策略,則允許訪問。如果不存在Allow策略,則判斷請求來源。
判斷請求來源。
如果為管控類API請求,則拒絕訪問。如果為資料類API請求,則繼續進行Object ACL或Bucket ACL的鑒權。
管控類API請求包括Service操作(GetService (ListBuckets))、Bucket相關操作(例如PutBucket、GetBucketLifecycle等)、LiveChannel相關操作(例如PutLiveChannel、DeleteLiveChannel等)。
資料類API請求包括Object相關操作,例如PutObject、GetObject等。
鑒權Object ACL和Bucket ACL。
根據Object ACL進行鑒權時,需要結合請求使用者是否為Bucket Owner以及請求類型為讀請求或寫請求進行判斷。
如果判斷結果為Allow,則允許訪問。
如果判斷結果為Deny,則拒絕訪問。
如果Object ACL為繼承Bucket,則繼續檢查Bucket ACL。
根據Bucket ACL進行鑒權時,需要結合請求使用者是否為Bucket Owner進行判斷。
如果判斷結果為Allow,則允許訪問。
如果判斷結果為Deny,則拒絕訪問。
匿名請求鑒權
鑒權說明
收到使用者匿名請求時,OSS會跳過身分識別驗證、基於角色的會話策略、RAM Policy等鑒權步驟,只根據Bucket Policy、Object ACL以及Bucket ACL進行鑒權。
鑒權流程
匿名請求鑒權流程如下:
檢查Bucket Policy。
如果判斷結果為Deny,則拒絕訪問。
如果判斷結果為Allow,則允許訪問。
如果判斷結果為Ignore,則繼續檢查Object ACL。
檢查Object ACL和Bucket ACL。
如果Object ACL為私人,則判斷結果為Deny,並拒絕訪問。
如果Object ACL為公用讀取或公用讀寫,則判斷結果為Allow,並允許訪問。
如果Object ACL為繼承Bucket,則繼續檢查Bucket ACL。
如果Bucket ACL為公用讀取或公用讀寫,則判斷結果為Allow,並允許訪問。
如果Bucket ACL為私人,則判斷結果為Deny,並拒絕訪問。