更新时间:2024-04-02 GMT+08:00
策略语言说明
策略内容
细粒度授权策略内容包括策略版本号(Version)及策略授权语句(Statement)列表。
- 策略版本号:Version,标识策略的版本号,主要用于区分Role-Based Access Control策略和细粒度策略。
- 1.0:Role-Based Access Control(RBAC))策略。RBAC策略是将服务作为一个整体进行授权,授权后,用户可以拥有这个服务的所有权限,RBAC策略只能由系统预置。
- 1.1:细粒度策略。相比RBAC策略,细粒度策略基于服务的API接口进行权限拆分,授权更加精细。授权后,用户可以对这个服务执行特定的操作。细粒度策略包括系统预置和用户自定义两种:
- 系统预置策略:系统预置服务常用的权限集,包括服务的只读权限或管理员权限。
- 用户自定义策略:由用户自己创建和管理的权限集,是对系统策略的扩展和补充。例如:针对ECS服务,控制用户仅能变更云服务器规格。
- 策略授权语句:Statement,描述的是策略的详细信息,包含作用(Effect)、授权项(Action)、资源类型(Resource)、条件(Condition)。
- 作用(Effect)
作用包含两种:允许(Allow)和拒绝(Deny),一个自定义策略中可以同时包含允许和拒绝的授权语句,当策略中既有允许又有拒绝的授权语句时,遵循Deny优先的原则。
- 授权项(Action)
格式为:服务名:资源类型:操作,例如:vpc:ports:create。
- 资源类型(Resource)
格式为:服务名:region:domainId:资源类型:资源路径, 通配符号*表示所有。
示例:
- "obs:*:*:bucket:*": 表示所有的OBS桶。
- "obs:*:*:object:my-bucket/my-object/*": 表示my-bucket桶my-object目录下的所有对象。
- 条件(Condition)
使策略生效的特定条件,包括条件键和运算符。条件键表示策略语句的 Condition 元素中的键值,分为全局级条件键和服务级条件键(由云服务定义,请参见云服务帮助中心)。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。
格式为:条件运算符: {条件名:[条件值1, 条件值2]}。
示例:
- "StringEndWithIfExists":{"g:UserName":["specialCharactor"]}:表示当用户输入的用户名以"specialCharactor"结尾时该条statement生效。
- 服务名:产品名称,例如ecs、evs和vpc等,服务名仅支持小写。
- 资源类型和操作没有大小写要求,支持通配符号*,用户不需要罗列全部授权项,通过配置通配符号*可以方便快捷地实现授权。
- 作用(Effect)
策略样例
- 支持单个操作权限,例如:查询弹性云服务器详情权限
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:servers:list", "ecs:servers:get", "ecs:serverVolumes:use", "ecs:diskConfigs:use", "ecs:securityGroups:use", "ecs:serverKeypairs:get", "vpc:securityGroups:list", "vpc:securityGroups:get", "vpc:securityGroupRules:get", "vpc:networks:get", "vpc:subnets:get", "vpc:ports:get", "vpc:routers:get" ] } ] }
- 支持多个操作权限,例如:锁定云服务器和创建云硬盘权限。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:servers:lock", "evs:volumes:create" ] } ] }
- 通配符号*用法示例:对IMS服务资源的所有权限。
{ "Version": "1.1", "Statement": [ { "Action": [ "ims:*:*", "ecs:*:list", "ecs:*:get", "evs:*:get" ], "Effect": "Allow" } ] }
- 拒绝以TestUser命名开头的用户查看以TestBucket命名开头的桶。
{ "Version": "1.1", "Statement": [ { "Action": [ "obs:bucket:ListAllMybuckets", "obs:bucket:HeadBucket", "obs:bucket:ListBucket", "obs:bucket:GetBucketLocation" ], "Effect": "Deny", "Resource": [ "obs:*:*:bucket:TestBucket*" ], "Condition": { "StringStartWith": { "g:UserName": [ "TestUser" ] } } } ] }
当前仅部分服务支持资源级授权,对于不支持资源级别授权的服务,若自定义策略中含有资源类型,则无法创建成功。
检查规则
系统根据用户被授予的策略,对用户进行鉴权。系统鉴权逻辑如下:
图1 系统鉴权逻辑图
每条策略做评估时, Action之间是或(or)的关系。
- 用户访问系统,发起操作请求。
- 系统评估用户被授予的访问策略,鉴权开始。
- 在用户被授予的访问策略中,系统将优先寻找显式拒绝指令。如找到一个适用的显式拒绝,系统将返回Deny决定。
- 如果没有找到显式拒绝指令,系统将寻找适用于请求的任何Allow指令。如果找到一个显式允许指令,系统将返回Allow决定。
- 如果找不到显式允许,最终决定为Deny,鉴权结束。
父主题: 权限管理