策略语法
下面以OBS的自定义策略为例,说明策略的语法。
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "obs:bucket:ListAllMyBuckets", "obs:bucket:HeadBucket", "obs:bucket:ListBucket", "obs:bucket:GetBucketLocation" ], "Condition": { "StringEndWithIfExists": { "g:UserName": [ "specialCharacter" ] }, "Bool": { "g:MFAPresent": [ "true" ] } }, "Resource": [ "obs:*:*:bucket:*" ] } ] }
策略结构
策略结构包括Version(策略版本号)和Statement(策略权限语句)两部分,其中Statement可以有多个,表示不同的授权项。
策略参数
策略参数包含Version和Statement两部分,下面介绍策略参数详细说明。了解策略参数后,您可以根据场景自定义策略,如自定义策略使用样例。
参数 |
含义 |
值 |
|
---|---|---|---|
Version |
策略的版本。 |
1.1:代表基于策略的访问控制。 |
|
Statement: 策略的授权语句 |
Effect:作用 |
定义Action中的操作权限是否允许执行。 |
说明:
当同一个Action的Effect既有Allow又有Deny时,遵循Deny优先的原则。 |
Action:授权项 |
操作权限。 |
格式为“服务名:资源类型:操作”。授权项支持通配符号*,通配符号*表示所有。 示例: "obs:bucket:ListAllMybuckets":表示查看OBS桶列表权限,其中obs为服务名,bucket为资源类型,ListAllMybuckets为操作。 您可以在对应服务“API参考”资料中查看该服务所有授权项。 |
|
Condition:条件 |
格式为“条件运算符:{条件键:[条件值1,条件值2]}”。 如果您设置多个条件,同时满足所有条件时,该策略才生效。 示例: "StringEndWithIfExists":{"g:UserName":["specialCharacter"]}:表示当用户输入的用户名以"specialCharacter"结尾时该条statement生效。 |
||
Resource: 资源类型 |
策略所作用的资源。 |
格式为“服务名:region:domainId:资源类型:资源路径”, 资源类型支持通配符号*,通配符号*表示所有。 示例:
|
- 条件键
条件键表示策略语句的 Condition 元素中的键值。根据适用范围,分为全局条件键和服务条件键。
- 全局级条件键(前缀为g:)适用于所有操作,IAM提供两种全局条件键:通用全局条件键和其他全局条件键。
- 通用全局条件键:在鉴权过程中,云服务不需要提供用户身份信息,IAM将自动获取并鉴权。详情请参见:通用全局条件键。
- 其他全局条件键:在鉴权过程中,IAM通过云服务获取条件信息并鉴权。
- 服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作,详情请参见对应云服务的用户指南。
表2 通用全局条件键 全局条件键
类型
说明
g:CurrentTime
时间
接收到鉴权请求的时间。以 ISO 8601 格式表示,例如:2012-11-11T23:59:59Z
g:DomainName
字符串
账号名称
g:MFAPresent
布尔值
是否使用MFA多因素认证方式获取Token
g:MFAAge
数值
通过MFA多因素认证方式获取的Token的生效时长。该条件需要和g:MFAPresent一起使用
g:ProjectName
字符串
项目名称
g:ServiceName
字符串
服务名称
g:UserId
字符串
IAM用户ID
g:UserName
字符串
IAM用户名
- 全局级条件键(前缀为g:)适用于所有操作,IAM提供两种全局条件键:通用全局条件键和其他全局条件键。
- 运算符
运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,策略才能生效,详情请参见:运算符。运算符可以增加后缀“IfExists”,表示对应请求值为空或满足条件的请求值均使策略生效,如“StringEqualsIfExists”表示请求值为空或请求值等于条件值均使策略生效。
表3 运算符(字符串型运算符,如未增加说明,不区分大小写。) 运算符
类型
说明
StringEquals
字符串
请求值等于条件值(区分大小写)
StringNotEquals
字符串
请求值不等于条件值(区分大小写)
StringEqualsIgnoreCase
字符串
请求值等于条件值
StringNotEqualsIgnoreCase
字符串
请求值不等于条件值
StringLike
字符串
请求值包含条件值
StringNotLike
字符串
请求值不包含条件值
StringStartWith
字符串
请求值以条件值开头
StringEndWith
字符串
请求值以条件值结尾
StringNotStartWith
字符串
请求值不以条件值开头
StringNotEndWith
字符串
请求值不以条件值结尾
StringEqualsAnyOf
字符串
可配置多个条件值,请求值与任意一个条件值相同(区分大小写)
StringNotEqualsAnyOf
字符串
可配置多个条件值,请求值与所有条件值都不同(区分大小写)
StringEqualsIgnoreCaseAnyOf
字符串
可配置多个条件值,请求值与任意一个条件值相同
StringNotEqualsIgnoreCaseAnyOf
字符串
可配置多个条件值,请求值与所有条件值都不同
StringLikeAnyOf
字符串
可配置多个条件值,请求值包含任意一个条件值
StringNotLikeAnyOf
字符串
可配置多个条件值,请求值不包含所有条件值
StringStartWithAnyOf
字符串
可配置多个条件值,请求值以任意一个条件值开头
StringEndWithAnyOf
字符串
可配置多个条件值,请求值以任意一个条件值结尾
StringNotStartWithAnyOf
字符串
可配置多个条件值,请求值不以任意一个条件值开头
StringNotEndWithAnyOf
字符串
可配置多个条件值,请求值不以任意一个条件值结尾
NumberEquals
数值
请求值等于条件值
NumberNotEquals
数值
请求值不等于条件值
NumberLessThan
数值
请求值小于条件值
NumberLessThanEquals
数值
请求值小于或等于条件值
NumberGreaterThan
数值
请求值大于条件值
NumberGreaterThanEquals
数值
请求值大于或等于条件值
NumberEqualsAnyOf
数值
可配置多个条件值,请求值与任意一个条件值相同
NumberNotEqualsAnyOf
数值
可配置多个条件值,请求值与所有条件值都不同
DateLessThan
时间
请求值早于条件值
DateLessThanEquals
时间
请求值早于或等于条件值
DateGreaterThan
时间
请求值晚于条件值
DateGreaterThanEquals
时间
请求值晚于或等于条件值
Bool
布尔值
请求值等于条件值
IpAddress
IP地址
请求值在条件值所设置的IP地址范围内
NotIpAddress
IP地址
请求值不在条件值所设置的IP地址范围内
IsNullOrEmpty
空值
请求值为null或者空字符串
IsNull
空值
请求值为null
IsNotNull
空值
请求值不为null