策略语法

2025-06-06 08:55:36

以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: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布尔值请求值等于条件值
IpAddressIP地址请求值在条件值所设置的IP地址范围内
NotIpAddressIP地址请求值不在条件值所设置的IP地址范围内
IsNullOrEmpty空值请求值为null或者空字符串
IsNull空值请求值为null
IsNotNull空值请求值不为null