鉴权流程详解

更新时间:
复制为 MD 格式

OSS鉴权是验证请求合法性并判断是否允许访问的机制。当用户发起访问请求时,OSS根据请求类型、身份信息和权限策略进行综合评估,最终决定允许或拒绝该请求。

工作原理

请求类型

OSS根据请求是否携带身份信息,将访问请求分为两类:

请求类型

说明

非匿名请求

在请求头部或URL中携带签名等身份相关信息。

匿名请求

在请求头部或URL中未携带任何身份相关信息。

鉴权原则

OSS鉴权遵循显式拒绝优先原则,按以下优先级顺序判断请求:

  1. Explicit Deny(最高优先级):匹配到Deny规则时,请求立即被拒绝。

  2. Allow:无Deny规则匹配时,若匹配到Allow规则,请求被允许。

  3. Implicit Deny(默认):无任何规则匹配时,请求默认被拒绝。

非匿名请求鉴权流程

非匿名请求需要经过身份验证、会话策略、RAM Policy、Bucket Policy、ACL等多层鉴权。

image

鉴权流程具体步骤如下:

  1. 身份验证:OSS将请求携带的签名与服务端计算的签名进行比对验证。

    • 不匹配:拒绝访问。

    • 匹配:继续下一步。

  2. 检查Session Policy:判断当前请求是否为基于角色的会话策略。

    • 是:检查Session Policy,若为Explicit DenyImplicit Deny则拒绝访问,Allow则继续执行。

    • 否:跳过此步骤继续执行。

  3. 检查RAM PolicyBucket Policy:分别检查两种策略并合并结果。

    • RAM Policy:基于身份的策略,控制RAM用户可访问的资源。对于用户级别的访问,需根据请求的账号类别判断:

      • 阿里云账号AccessKey:直接返回Implicit Deny。

      • RAM用户AccessKeySTS AccessKey:Bucket不属于该阿里云账号或RAM角色Owner时,直接返回Implicit Deny;否则由RAM服务进行鉴权,返回Allow、Explicit DenyImplicit Deny。

    • Bucket Policy:基于资源的策略,控制Bucket或其内资源的访问权限。

      • 未设置策略:直接返回Implicit Deny。

      • 已设置策略:返回Allow、Explicit DenyImplicit Deny。

  4. 检查合并结果:根据RAM PolicyBucket Policy的检查结果进行综合判断。

    • 存在Explicit Deny:拒绝访问。

    • 存在Allow:允许访问。

    • 均为Implicit Deny:继续下一步。

  5. 判断请求接口来源:根据API接口类型决定后续处理。

    • 管控类API(如GetService、PutBucket、PutLiveChannel等):拒绝访问。

    • 数据类API(如PutObject、GetObject等):继续检查ACL。

  6. 检查Object ACLBucket ACL:根据检查结果允许或拒绝访问。

    • 检查Object ACL时,需结合请求用户是否为Bucket Owner以及请求类型(读请求或写请求)进行判断。

    • Object ACL为继承Bucket,则继续检查Bucket ACL。检查Bucket ACL时,同样需结合请求用户是否为Bucket Owner进行判断。

匿名请求鉴权流程

匿名请求跳过身份验证和RAM Policy检查,仅根据Bucket PolicyACL进行鉴权。

image

鉴权流程具体步骤如下:

  1. 检查Bucket Policy

    • Deny:拒绝访问。

    • Allow:允许访问。

    • Ignore(未设置或未匹配):继续下一步。

  2. 检查Object ACLBucket ACL

    • Object ACL为私有:拒绝访问。

    • Object ACL为公共读或公共读写:允许访问。

    • Object ACL为继承Bucket:继续检查Bucket ACL。

      • Bucket ACL为公共读或公共读写:允许访问。

      • Bucket ACL为私有:拒绝访问。

相关文档