策略结构&语法
策略结构包括:Version(策略版本号)和Statement(策略权限语句),其中Statement可以有多个,表示不同的授权项。
图1 策略结构
策略语法,示例:
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"obs:bucket:HeadBucket",
"obs:bucket:ListBucket",
"obs:bucket:GetBucketLocation"
],
"Resource": [
"obs:*:*:bucket:*"
],
"Condition": {
"StringEndWithIfExsits": {
"g:UserName": ["specialCharacter"]
},
"Bool": {
"g:MFAPresent": ["true"]
}
}
}
]
}
表3 策略语法参数
参数 |
说明 |
Version |
标识策略的版本号:
- 1.0:RBAC策略。RBAC策略是将服务作为一个整体进行授权,授权后,用户可以拥有这个服务的所有权限。
- 1.1:细粒度策略。相比RBAC策略,细粒度策略基于服务的API接口进行权限拆分,授权更加精细,可以精确到具体操作和具体资源。例如:您可以限制子用户只能访问某一个OBS桶中某一个目录下的对象。
|
Statement |
策略授权语句,描述策略的详细信息,包含Effect(效果)、Action(动作)、Resource(资源)和Condition(条件)。其中Resource和Condition为可选。
- Effect(效果)
作用包含两种:Allow(允许)和Deny(拒绝),系统预置策略仅包含允许的授权语句,自定义策略中可以同时包含允许和拒绝的授权语句,当策略中既有允许又有拒绝的授权语句时,遵循Deny优先的原则。
- Action(动作)
对资源的具体操作权限,格式为:服务名:资源类型:操作,支持单个或多个操作权限,支持通配符号*,通配符号表示所有。OBS只有两种资源类型:bucket和object。
详细的Action描述请参见桶相关授权项和对象相关授权项。
- Resource(资源)
策略所作用的资源,格式为:服务名:region:domainId:资源类型:资源路径,支持通配符号*,通配符号表示所有。在JSON视图中,不带Resource表示对所有资源生效。
Resource支持以下字符:-_0-9a-zA-Z*./\,如果Resource中包含不支持的字符,请采用通配符号*。
OBS是全局级服务,region填“*”;domainId表示资源拥有者的账号ID,建议填写“*”简单地表示所填资源的账号ID。
示例:
- "obs:*:*:bucket:*": 表示所有的OBS桶。
- "obs:*:*:object:my-bucket/my-object/*": 表示桶my-bucket中“my-object”目录下的所有对象。
- Condition(条件)
您可以在创建自定义策略时,通过Condition元素来控制策略何时生效。Condition包括条件键和运算符,条件键表示策略语句的Condition元素,分为全局级条件键和服务级条件键。全局级条件键(前缀为g:)适用于所有操作,服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作。运算符与条件键一起使用,构成完整的条件判断语句。
OBS通过 IAM 预置了一组条件键,例如,您可以先使用obs:SourceIp条件键检查请求者的IP地址,然后再允许执行操作。
OBS支持的条件键和运算符与桶策略的Condition一致,在IAM配置时需要在前面加上“obs:”。详细的Condition介绍请参见桶策略参数说明。
Condition的条件值仅支持以下字符:-,./ a-zA-Z0-9_@#$%&,如果条件值中包含不支持的字符,请考虑使用模糊匹配的条件运算符,如:StringMatch等。
示例:
- "StringEndWithIfExists":{"g:UserName":["specialCharacter"]}:表示当用户输入的用户名以"specialCharacter"结尾时该条statement生效。
- "StringLike":{"obs:prefix":["private/"]}:表示在列举桶内对象时,需要指定prefix为private/或者包含private/这一子字符串。
|
- Resource(资源)级别细粒度授权特性会逐步在各个区域上线,需要使用该特性时请确保桶所在区域已经支持。
- 使用Resource(资源)级别细粒度授权特性前,请提交工单到OBS,申请开通Resource(资源)级别细粒度授权特性白名单。