策略语法
下面以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 
 
    