鉴权流程详解

RAM身份(RAM用户或RAM角色)通过阿里云控制台、APICLI对表格存储资源发起访问请求时,都需要执行权限策略的判定流程,只有判定成功才允许访问资源。本文为您介绍权限策略详细的判定流程。

鉴权说明

收到用户请求时,表格存储会通过管控策略判定、身份验证、基于角色的会话策略、基于身份的策略(RAM Policy)、Instance Policy、Network ACL等鉴权结果来判断是允许或拒绝该请求。

image

以上鉴权流程包含的权限状态说明如下:

  • Allow:允许访问请求,即比对Policy命中了Allow规则,且没有命中Deny规则。

  • Explicit Deny:显式拒绝访问请求,即比对Policy命中了Deny规则。

  • Implicit Deny:隐式拒绝访问请求,即Policy不存在、比对Policy未命中AllowDeny规则。

重要
  • 如果请求同时命中了AllowDeny语句,遵循Deny优先原则,判定结果为显式拒绝。

  • RAM身份默认没有执行任何操作的权限,没有被显式允许执行的操作都会判定为隐式拒绝。

鉴权流程

表格存储完整的鉴权流程如下:

  1. 检查请求访问资源所属账号是否为资源目录RD(Resource Directory)成员账号且已启用管控策略。

    • 如果请求访问资源所属账号不是RD成员账号或是RD成员但未启用管控策略,则继续进行身份验证检查。

    • 如果请求访问资源所属账号是RD成员账号,且已启用管控策略,则进行管控策略判定。

      • 如果管控策略的判定结果为Explicit DenyImplicit Deny,则拒绝访问。

      • 如果管控策略的判定结果为Allow,则继续进行身份验证检查。

  2. 检查身份验证是否成功。

    表格存储会对请求携带的签名和服务端计算的签名进行比对。

    • 如果请求签名不匹配,则拒绝访问。

    • 如果请求签名匹配,则继续判断是否为基于角色的会话策略。

  3. 判断是否为基于角色的会话策略。

    • 如果判断结果是基于角色的会话策略,则表格存储会对Session Policy进行权限比对。

      • 如果比对结果为Explicit DenyImplicit Deny,则拒绝访问。

      • 如果比对结果为Allow,则继续检查请求接口来源。

    • 如果判断结果不是基于角色的会话策略,则会继续检查请求接口来源。

  4. 判断请求接口来源。

    表格存储的管控类API请求包括实例操作,例如CreateInstance。数据类API请求包括数据表相关操作、时序表相关操作、基础数据操作等,例如CreateTable。更多信息,请参见管控类API概览数据类API概览

    • 如果请求接口来源为管控类API请求,则继续检查RAM Policy。

    • 如果请求接口来源为数据类API请求,则继续进行Network ACL的鉴权。

      根据Network ACL进行鉴权时,需要结合请求用户是否为实例Owner进行判断。

      • 如果判断结果为未拒绝访问,则继续检查RAM PolicyInstance Policy。

      • 如果判断结果为拒绝访问,则拒绝访问。

  5. 检查RAM PolicyInstance Policy。

    • RAM Policy是基于身份的策略。您可以使用RAM Policy控制用户可以访问您名下哪些资源的权限。对于用户级别的访问,需要根据请求的账号类别判断是否允许或拒绝访问请求。

      • 如果使用RAM用户AccessKeySTSAccessKey访问,但是访问的实例不属于阿里云账号或者RAM角色Owner,则直接返回Implicit Deny。

      • 如果调用RAM服务提供的鉴权接口对普通请求进行身份鉴权,表格存储支持RAM服务通过账号和Instance所属资源组进行鉴权,则检查返回结果为Allow、Explicit DenyImplicit Deny。

    • Instance Policy是基于资源的授权策略,实例Owner可以通过Instance PolicyRAM用户授予实例或实例内资源精确的操作权限。

      • 如果未设置Instance Policy,则直接返回Implicit Deny。

      • 如果设置了Instance Policy,表格存储会对Instance Policy进行鉴权,则检查返回结果为Allow、Explicit DenyImplicit Deny。

  6. 检查合并结果中是否存在Explicit Deny策略。

    • 如果存在Explicit Deny策略,则拒绝访问。

    • 如果不存在Explicit Deny策略,则继续检查是否存在Allow策略。

  7. 检查是否存在Allow策略。

    • 如果存在Allow策略,则允许访问。

    • 如果不存在Allow策略,则拒绝访问。

相关文档