OSS鉴权是验证请求合法性并判断是否允许访问的机制。当用户发起访问请求时,OSS根据请求类型、身份信息和权限策略进行综合评估,最终决定允许或拒绝该请求。
工作原理
请求类型
OSS根据请求是否携带身份信息,将访问请求分为两类:
请求类型 | 说明 |
非匿名请求 | 在请求头部或URL中携带签名等身份相关信息。 |
匿名请求 | 在请求头部或URL中未携带任何身份相关信息。 |
鉴权原则
OSS鉴权遵循显式拒绝优先原则,按以下优先级顺序判断请求:
Explicit Deny(最高优先级):匹配到Deny规则时,请求立即被拒绝。
Allow:无Deny规则匹配时,若匹配到Allow规则,请求被允许。
Implicit Deny(默认):无任何规则匹配时,请求默认被拒绝。
非匿名请求鉴权流程
非匿名请求需要经过身份验证、会话策略、RAM Policy、Bucket Policy、ACL等多层鉴权。
鉴权流程具体步骤如下:
身份验证:OSS将请求携带的签名与服务端计算的签名进行比对验证。
不匹配:拒绝访问。
匹配:继续下一步。
检查Session Policy:判断当前请求是否为基于角色的会话策略。
是:检查Session Policy,若为Explicit Deny或Implicit Deny则拒绝访问,Allow则继续执行。
否:跳过此步骤继续执行。
检查RAM Policy和Bucket Policy:分别检查两种策略并合并结果。
RAM Policy:基于身份的策略,控制RAM用户可访问的资源。对于用户级别的访问,需根据请求的账号类别判断:
阿里云账号AccessKey:直接返回Implicit Deny。
RAM用户AccessKey或STS AccessKey:Bucket不属于该阿里云账号或RAM角色Owner时,直接返回Implicit Deny;否则由RAM服务进行鉴权,返回Allow、Explicit Deny或Implicit Deny。
Bucket Policy:基于资源的策略,控制Bucket或其内资源的访问权限。
未设置策略:直接返回Implicit Deny。
已设置策略:返回Allow、Explicit Deny或Implicit Deny。
检查合并结果:根据RAM Policy和Bucket Policy的检查结果进行综合判断。
存在Explicit Deny:拒绝访问。
存在Allow:允许访问。
均为Implicit Deny:继续下一步。
判断请求接口来源:根据API接口类型决定后续处理。
管控类API(如GetService、PutBucket、PutLiveChannel等):拒绝访问。
数据类API(如PutObject、GetObject等):继续检查ACL。
检查Object ACL和Bucket ACL:根据检查结果允许或拒绝访问。
检查Object ACL时,需结合请求用户是否为Bucket Owner以及请求类型(读请求或写请求)进行判断。
若Object ACL为继承Bucket,则继续检查Bucket ACL。检查Bucket ACL时,同样需结合请求用户是否为Bucket Owner进行判断。
匿名请求鉴权流程
匿名请求跳过身份验证和RAM Policy检查,仅根据Bucket Policy和ACL进行鉴权。
鉴权流程具体步骤如下:
检查Bucket Policy:
Deny:拒绝访问。
Allow:允许访问。
Ignore(未设置或未匹配):继续下一步。
检查Object ACL和Bucket ACL:
Object ACL为私有:拒绝访问。
Object ACL为公共读或公共读写:允许访问。
Object ACL为继承Bucket:继续检查Bucket ACL。
Bucket ACL为公共读或公共读写:允许访问。
Bucket ACL为私有:拒绝访问。