當可信實體通過阿里雲控制台、API或CLI扮演RAM角色時,需要執行權限原則的判定流程,根據判定結果決定是否允許扮演RAM角色(AssumeRole)。本文為您介紹扮演RAM角色時的權限原則判定流程。

说明 扮演RAM角色時的權限原則判定流程,遵從阿里雲通用的權限原則判定流程,僅在合并判定結果時不同。如果您瞭解通用的權限原則判定流程,您只需關注本文所述的合并判定結果章節。

建立RAM角色時需要為RAM角色添加信任策略,該信任策略用於指定允許扮演RAM角色的可信實體,是一種基於資源的策略。當可信實體扮演某個RAM角色時,又需要擁有扮演RAM角色的相應許可權,這是可信實體的基於身份的策略。

當可信實體扮演RAM角色時,判定程式會按照下圖所示的順序依次進行權限原則判定,此時可信實體是訪問身份,被扮演的RAM角色是訪問資源。

RAM角色信任策略判定流程

RAM角色扮演請求涉及多種類型的權限原則,每種權限原則內部的判定都遵從最小單元判定流程,完整的判定流程如下:

  1. 管控策略判定

    管控策略(Control Policy)是資來源目錄中對成員帳號訪問定義的許可權邊界。如果請求扮演的RAM角色所屬帳號是資來源目錄的成員帳號,並且管控策略已開啟,判定程式會按照最小單元判定流程執行管控策略判定。否則,判定程式會跳過此步。

    根據管控策略的判定結果,作出下一步判定。具體如下:

    • 管控策略的判定結果是Explicit Deny(顯式拒絕)或Implicit Deny(隱式拒絕):判定結束,管控策略的判定結果就是最終的判定結果。
    • 管控策略的判定結果是Allow(允許):繼續進行下一步判定。
  2. 會話策略判定

    會話策略(Session Policy)是在以編程方式扮演RAM角色(調用AssumeRole API)的過程中建立臨時會話時,在參數中傳遞的策略,用於進一步限制會話的許可權。如果發起訪問請求的身份是RAM角色,並且擁有會話策略,判定程式會按照最小單元判定流程執行會話策略判定。否則,判定程式會跳過此步。

    说明 進行角色SSO時,沒有會話策略,因此判定程式會跳過此步。

    根據會話策略的判定結果,作出下一步判定。具體如下:

    • 會話策略的判定結果是Explicit Deny(顯式拒絕)或Implicit Deny(隱式拒絕):判定結束,會話策略的判定結果就是最終的判定結果。
    • 會話策略的判定結果是Allow(允許):繼續進行下一步判定。
  3. 基於身份的策略判定和基於資源的策略判定

    同時進行基於身份的策略(Identity-based Policy)判定和基於資源的策略(Resource-based Policy)判定,並將兩者的判定結果緩衝。

    • 基於身份的策略判定

      對於RAM使用者,基於身份的策略包括直接授權的策略和從RAM使用者組中繼承的策略。對於RAM角色,基於身份的策略為直接授權的策略。基於身份的策略因授權範圍不同,又分為帳號層級和資源群組層級,帳號層級的策略優先順序高於資源群組層級的策略。

      说明 進行角色SSO時,由於使用者還未登入成功,所以沒有基於身份的策略,判定程式會跳過此步,直接以基於資源的策略判定結果作為最終結果。
      判定流程如下:
      1. 檢查發起請求的RAM身份是否擁有帳號層級的基於身份的策略。
        • 是:判定程式按照最小單元判定流程執行帳號層級的身份策略判定。判定結果說明如下:
          • 如果判定結果是Explicit Deny(顯式拒絕)或Allow(允許):基於身份策略的判定結束,將結果緩衝到判定結果A。
          • 如果判定結果是Implicit Deny(隱式拒絕):繼續進行下一步判定。
        • 否:繼續進行下一步判定。
      2. 檢查發起請求的RAM身份是否擁有資源群組層級的基於身份的策略。
        • 是:判定程式按照最小單元判定流程執行資源組層級的身份策略判定,並將結果緩衝到判定結果A。
        • 否:直接儲存判定結果A為Implicit Deny(隱式拒絕)。
    • 基於資源的策略判定

      檢查請求扮演的RAM角色是否擁有信任策略。

      • 是:判定程式按照最小單元判定流程執行基於資源的策略判定,並將結果緩衝到判定結果B。
      • 否:直接儲存判定結果B為Implicit Deny(隱式拒絕)。
  4. 合并判定結果

    將基於身份策略的判定結果A和基於資源策略的判定結果B進行合并。合并邏輯與通用的權限原則判定流程不同,只有當基於身份的策略判定(判定結果A)和基於資源的策略判定(判定結果B)全部是Allow(允許)時,扮演RAM角色的請求才會被允許,其他情況均會被拒絕。

    具體如下:

    • 如果判定結果A和判定結果B中存在任意一個Explicit Deny(顯式拒絕):合并後的最終判定結果為Explicit Deny(顯式拒絕),判定結束。
    • 如果判定結果A和判定結果B全部是Allow(允許):合并後的最終判定結果為Allow(允許),判定結束。
    • 除上述兩種外的其他情況:合并後的最終判定結果為Implicit Deny(隱式拒絕),判定結束。