以OBS的自定义策略为例,说明策略的语法。
{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"obs:bucket:ListAllMyBuckets",
"obs:bucket:HeadBucket",
"obs:bucket:ListBucket",
"obs:bucket:GetBucketLocation"
],
"Condition": {
"StringEndWithIfExists": {
"g:UserName": [
"specialCharactor"
]
},
"Bool": {
"g:MFAPresent": [
"true"
]
}
},
"Resource": [
"obs:*:*:bucket:*"
]
}
]
}
策略结构
策略结构包括Version(策略版本号)和Statement(策略权限语句)两部分,其中Statement可以有多个,表示不同的授权项。
图 策略结构
策略参数
策略参数包含Version和Statement两部分,下面介绍策略参数详细说明。了解策略参数后,您可以根据场景自定义策略。
表 策略参数说明
参数 含义 值 Version 策略的版本。 1.0:代表基于角色的访问控制。
1.1:代表基于策略的访问控制。Statement:
策略的授权语句Effect:作用 定义Action中的操作权限是否允许执行。
Allow:允许执行。
Deny:不允许执行。
说明
当同一个Action的Effect既有Allow又有Deny时,遵循Deny优先的原则。Action:授权项 操作权限。 格式为“服务名:资源类型:操作”。授权项支持通配符号*,通配符号*表示所有。
示例:
"obs:bucket:ListAllMybuckets":表示查看OBS桶列表权限,其中obs为服务名,bucket为资源类型,ListAllMybuckets为操作。
您可以在对应服务的API接口资料中查看该服务所有授权项。Condition:条件 使策略生效的特定条件,包括条件键和运算符。 格式为“条件运算符:{条件键:[条件值1,条件值2]}”。
如果您设置多个条件,同时满足所有条件时,该策略才生效。
示例:
"StringEndWithIfExists":{"g:UserName":["specialCharactor"]}:表示当用户输入的用户名以"specialCharactor"结尾时该条statement生效。Resource: 资源类型 策略所作用的资源。 格式为“服务名:region:domainId:资源类型:资源路径”, 资源类型支持通配符号*,通配符号表示所有。 示例:
"obs:::bucket:": 表示所有的OBS桶。
"obs:::object:my-bucket/my-object/*": 表示my-bucket桶my-object目录下的所有对象。
-
条件键条件键表示策略语句的Condition 元素中的键值。根据适用范围,分为全局条件键和服务条件键。
- 全局级条件键(前缀为g:)适用于所有操作,IAM提供 通用全局条件键 。
- 通用全局条件键:在鉴权过程中,云服务不需要提供用户身份信息,IAM将自动获取并鉴权。详情请参见表-通用全局条件键
- 服务级条件键(前缀为服务缩写,如obs:)仅适用于对应服务的操作,详情请参见对应云服务的用户指南。
- 全局级条件键(前缀为g:)适用于所有操作,IAM提供 通用全局条件键 。
表 通用全局条件键
全局条件键 | 类型 | 说明 |
---|---|---|
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用户名 |
- 运算符
运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,策略才能生效,详情请参见下表。运算符可以增加后缀“IfExists”,表示对应请求值为空或满足条件的请求值均使策略生效,如“StringEqualsIfExists”表示请求值为空或请求值等于条件值均使策略生效。
表 运算符(字符串型运算符,如未增加说明,不区分大小写。)
运算符 | 类型 | 说明 |
---|---|---|
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 |