全部產品
Search
文件中心

Object Storage Service:OSS鑒權詳解

更新時間:Feb 28, 2024

預設情況下,為保證儲存在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規則。

鑒權流程

帶身分識別驗證的鑒權流程如下:

  1. 檢查身分識別驗證是否成功。

    收到使用者請求後,OSS會對請求攜帶的簽名和服務端計算的簽名進行比對。

    • 如果請求籤名不匹配,則拒絕訪問。

    • 如果請求籤名匹配,則繼續判斷是否為基於角色的會話策略。

  2. 判斷是否為基於角色的會話策略。

    如果判斷結果是基於角色的會話策略,則OSS會對Session Policy進行許可權比對。

    • 如果比對結果為Explicit Deny或Implicit Deny,則拒絕訪問。

    • 如果比對結果為Allow,則繼續檢查RAM Policy和Bucket Policy。

    如果判斷結果不是基於角色的會話策略,也會繼續檢查RAM Policy和Bucket Policy。

  3. 分別檢查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。

  4. 檢查合并結果中是否存在Explicit Deny策略。

    如果存在Explicit Deny策略,則拒絕訪問。如果不存在Explicit Deny策略,則檢查是否存在Allow策略。

    1. 檢查RAM Policy或Bucket Policy中是否存在Allow策略。

      如果存在Allow策略,則允許訪問。如果不存在Allow策略,則判斷請求來源。

    2. 判斷請求來源。

      如果為管控類API請求,則拒絕訪問。如果為資料類API請求,則繼續進行Object ACL或Bucket ACL的鑒權。

      管控類API請求包括Service操作(GetService (ListBuckets))、Bucket相關操作(例如PutBucketGetBucketLifecycle等)、LiveChannel相關操作(例如PutLiveChannelDeleteLiveChannel等)。

      資料類API請求包括Object相關操作,例如PutObjectGetObject等。

  5. 鑒權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進行鑒權。

鑒權流程

匿名請求鑒權流程如下:

  1. 檢查Bucket Policy。

    • 如果判斷結果為Deny,則拒絕訪問。

    • 如果判斷結果為Allow,則允許訪問。

    • 如果判斷結果為Ignore,則繼續檢查Object ACL。

  2. 檢查Object ACL和Bucket ACL。

    • 如果Object ACL為私人,則判斷結果為Deny,並拒絕訪問。

    • 如果Object ACL為公用讀取或公用讀寫,則判斷結果為Allow,並允許訪問。

    • 如果Object ACL為繼承Bucket,則繼續檢查Bucket ACL。

      • 如果Bucket ACL為公用讀取或公用讀寫,則判斷結果為Allow,並允許訪問。

      • 如果Bucket ACL為私人,則判斷結果為Deny,並拒絕訪問。