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。