更新时间:2024-04-15 GMT+08:00

策略语法

下面以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可以有多个,表示不同的授权项。

图1 策略结构

策略参数

策略参数包含Version和Statement两部分,下面介绍策略参数详细说明。了解策略参数后,您可以根据场景自定义策略,如自定义策略使用样例

表1 策略参数说明

参数

含义

Version

策略的版本。

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":["specialCharacter"]}:表示当用户输入的用户名以"specialCharacter"结尾时该条statement生效。

Resource: 资源类型

策略所作用的资源。

格式为“服务名:region:domainId:资源类型:资源路径”, 资源类型支持通配符号*,通配符号*表示所有。

示例:

  • "obs:*:*:bucket:*": 表示所有的OBS桶。
  • "obs:*:*:object:my-bucket/my-object/*": 表示my-bucket桶my-object目录下的所有对象。
  • 条件键
    条件键表示策略语句的 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用户名

  • 运算符

    运算符与条件键、条件值一起构成完整的条件判断语句,当请求信息满足该条件时,策略才能生效,详情请参见:运算符。运算符可以增加后缀“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