RAM身份(RAM用户或RAM角色)通过阿里云控制台、API或CLI对表格存储资源发起访问请求时,都需要执行权限策略的判定流程,只有判定成功才允许访问资源。本文为您介绍权限策略详细的判定流程。
鉴权说明
收到用户请求时,表格存储会通过管控策略判定、身份验证、基于角色的会话策略、基于身份的策略(RAM Policy)、Instance Policy、Network ACL等鉴权结果来判断是允许或拒绝该请求。
以上鉴权流程包含的权限状态说明如下:
Allow:允许访问请求,即比对Policy命中了Allow规则,且没有命中Deny规则。
Explicit Deny:显式拒绝访问请求,即比对Policy命中了Deny规则。
Implicit Deny:隐式拒绝访问请求,即Policy不存在、比对Policy未命中Allow或Deny规则。
如果请求同时命中了Allow和Deny语句,遵循Deny优先原则,判定结果为显式拒绝。
RAM身份默认没有执行任何操作的权限,没有被显式允许执行的操作都会判定为隐式拒绝。
鉴权流程
表格存储完整的鉴权流程如下:
检查请求访问资源所属账号是否为资源目录RD(Resource Directory)成员账号且已启用管控策略。
如果请求访问资源所属账号不是RD成员账号或是RD成员但未启用管控策略,则继续进行身份验证检查。
如果请求访问资源所属账号是RD成员账号,且已启用管控策略,则进行管控策略判定。
如果管控策略的判定结果为Explicit Deny或Implicit Deny,则拒绝访问。
如果管控策略的判定结果为Allow,则继续进行身份验证检查。
检查身份验证是否成功。
表格存储会对请求携带的签名和服务端计算的签名进行比对。
如果请求签名不匹配,则拒绝访问。
如果请求签名匹配,则继续判断是否为基于角色的会话策略。
判断是否为基于角色的会话策略。
如果判断结果是基于角色的会话策略,则表格存储会对Session Policy进行权限比对。
如果比对结果为Explicit Deny或Implicit Deny,则拒绝访问。
如果比对结果为Allow,则继续检查请求接口来源。
如果判断结果不是基于角色的会话策略,则会继续检查请求接口来源。
判断请求接口来源。
表格存储的管控类API请求包括实例操作,例如CreateInstance。数据类API请求包括数据表相关操作、时序表相关操作、基础数据操作等,例如CreateTable。更多信息,请参见管控类API概览和数据类API概览。
如果请求接口来源为管控类API请求,则继续检查RAM Policy。
如果请求接口来源为数据类API请求,则继续进行Network ACL的鉴权。
根据Network ACL进行鉴权时,需要结合请求用户是否为实例Owner进行判断。
如果判断结果为未拒绝访问,则继续检查RAM Policy和Instance Policy。
如果判断结果为拒绝访问,则拒绝访问。
检查RAM Policy或Instance Policy。
RAM Policy是基于身份的策略。您可以使用RAM Policy控制用户可以访问您名下哪些资源的权限。对于用户级别的访问,需要根据请求的账号类别判断是否允许或拒绝访问请求。
如果使用RAM用户AccessKey或STS的AccessKey访问,但是访问的实例不属于阿里云账号或者RAM角色Owner,则直接返回Implicit Deny。
如果调用RAM服务提供的鉴权接口对普通请求进行身份鉴权,表格存储支持RAM服务通过账号和Instance所属资源组进行鉴权,则检查返回结果为Allow、Explicit Deny或Implicit Deny。
Instance Policy是基于资源的授权策略,实例Owner可以通过Instance Policy为RAM用户授予实例或实例内资源精确的操作权限。
如果未设置Instance Policy,则直接返回Implicit Deny。
如果设置了Instance Policy,表格存储会对Instance Policy进行鉴权,则检查返回结果为Allow、Explicit Deny或Implicit Deny。
检查合并结果中是否存在Explicit Deny策略。
如果存在Explicit Deny策略,则拒绝访问。
如果不存在Explicit Deny策略,则继续检查是否存在Allow策略。
检查是否存在Allow策略。
如果存在Allow策略,则允许访问。
如果不存在Allow策略,则拒绝访问。
相关文档
关于管控策略、角色会话策略判定的更多信息,请参见权限策略判定流程。
关于资源目录和管控策略的更多信息,请参见什么是资源目录和管控策略概述。
如需了解表格存储的权限控制方式,请参见权限控制概述、RAM Policy、Control Policy、Network ACL和Instance Policy。