請(qǐng)求類型
請(qǐng)求類型分為非匿名請(qǐng)求和匿名請(qǐng)求兩種。
非匿名請(qǐng)求鑒權(quán)
鑒權(quán)說明
收到用戶非匿名請(qǐng)求時(shí),OSS會(huì)通過身份驗(yàn)證、基于角色的會(huì)話策略、基于身份的策略(RAM Policy)、Bucket Policy、Object ACL、Bucket ACL等鑒權(quán)結(jié)果來判斷是允許或拒絕該請(qǐng)求。
以上鑒權(quán)流程包含的權(quán)限狀態(tài)說明如下:
Allow:允許訪問請(qǐng)求,即比對(duì)Policy命中了Allow規(guī)則。
Explicit Deny:顯式拒絕訪問請(qǐng)求,即比對(duì)Policy命中了Deny規(guī)則。
Implicit Deny:隱式拒絕訪問請(qǐng)求,即Policy不存在、比對(duì)Policy未命中Allow或Deny規(guī)則。
鑒權(quán)流程
帶身份驗(yàn)證的鑒權(quán)流程如下:
檢查身份驗(yàn)證是否成功。
收到用戶請(qǐng)求后,OSS會(huì)對(duì)請(qǐng)求攜帶的簽名和服務(wù)端計(jì)算的簽名進(jìn)行比對(duì)。
判斷是否為基于角色的會(huì)話策略。
如果判斷結(jié)果是基于角色的會(huì)話策略,則OSS會(huì)對(duì)Session Policy進(jìn)行權(quán)限比對(duì)。
如果判斷結(jié)果不是基于角色的會(huì)話策略,也會(huì)繼續(xù)檢查RAM Policy和Bucket Policy。
分別檢查RAM Policy和Bucket Policy。
RAM Policy是基于身份的策略。您可以使用RAM Policy控制用戶可以訪問您名下哪些資源的權(quán)限。對(duì)于用戶級(jí)別的訪問,需要根據(jù)請(qǐng)求的賬號(hào)類別判斷允許或拒絕訪問請(qǐng)求。
如果使用阿里云賬號(hào)AccessKey訪問,則直接返回Implicit Deny。
如果使用RAM用戶AccessKey或STS的AccessKey訪問,但是訪問的Bucket不屬于阿里云賬號(hào)或者RAM角色Owner,則直接返回Implicit Deny。
如果調(diào)用RAM服務(wù)提供的鑒權(quán)接口對(duì)普通請(qǐng)求進(jìn)行身份鑒權(quán),OSS支持RAM服務(wù)通過賬號(hào)和Bucket所屬資源組進(jìn)行鑒權(quán),則檢查返回結(jié)果為Allow、Explicit Deny或Implicit Deny。
Bucket Policy是基于資源的授權(quán)策略,Bucket Owner可以通過Bucket Policy為RAM用戶或其他賬號(hào)授權(quán)Bucket或Bucket內(nèi)資源精確的操作權(quán)限。
檢查合并結(jié)果中是否存在Explicit Deny策略。
如果存在Explicit Deny策略,則拒絕訪問。如果不存在Explicit Deny策略,則檢查是否存在Allow策略。
檢查RAM Policy或Bucket Policy中是否存在Allow策略。
如果存在Allow策略,則允許訪問。如果不存在Allow策略,則判斷請(qǐng)求來源。
判斷請(qǐng)求來源。
如果為管控類API請(qǐng)求,則拒絕訪問。如果為數(shù)據(jù)類API請(qǐng)求,則繼續(xù)進(jìn)行Object ACL或Bucket ACL的鑒權(quán)。
管控類API請(qǐng)求包括Service操作(GetService (ListBuckets))、Bucket相關(guān)操作(例如PutBucket、GetBucketLifecycle等)、LiveChannel相關(guān)操作(例如PutLiveChannel、DeleteLiveChannel等)。
數(shù)據(jù)類API請(qǐng)求包括Object相關(guān)操作,例如PutObject、GetObject等。
鑒權(quán)Object ACL和Bucket ACL。
根據(jù)Object ACL進(jìn)行鑒權(quán)時(shí),需要結(jié)合請(qǐng)求用戶是否為Bucket Owner以及請(qǐng)求類型為讀請(qǐng)求或?qū)懻?qǐng)求進(jìn)行判斷。
如果判斷結(jié)果為Allow,則允許訪問。
如果判斷結(jié)果為Deny,則拒絕訪問。
如果Object ACL為繼承Bucket,則繼續(xù)檢查Bucket ACL。
根據(jù)Bucket ACL進(jìn)行鑒權(quán)時(shí),需要結(jié)合請(qǐng)求用戶是否為Bucket Owner進(jìn)行判斷。
如果判斷結(jié)果為Allow,則允許訪問。
如果判斷結(jié)果為Deny,則拒絕訪問。
匿名請(qǐng)求鑒權(quán)
鑒權(quán)說明
收到用戶匿名請(qǐng)求時(shí),OSS會(huì)跳過身份驗(yàn)證、基于角色的會(huì)話策略、RAM Policy等鑒權(quán)步驟,只根據(jù)Bucket Policy、Object ACL以及Bucket ACL進(jìn)行鑒權(quán)。
鑒權(quán)流程
匿名請(qǐng)求鑒權(quán)流程如下:
檢查Bucket Policy。
檢查Object ACL和Bucket ACL。
如果Object ACL為私有,則判斷結(jié)果為Deny,并拒絕訪問。
如果Object ACL為公共讀或公共讀寫,則判斷結(jié)果為Allow,并允許訪問。
如果Object ACL為繼承Bucket,則繼續(xù)檢查Bucket ACL。