当可信实体通过阿里云控制台、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(隐式拒绝),判定结束。