更新时间:2025-09-26 GMT+08:00
分享

策略语法

该部分提供了用于在IAM中创建JSON策略的正式语法。提供此语法的目的是为了便于您理解如何构造和验证策略。

策略的JSON视图

策略在IAM控制台中是以JSON视图表示的。当您创建或编辑JSON视图时,IAM可以执行策略验证以帮助您创建有效的策略。IAM可识别JSON语法错误,而IAM Access Analyzer将提供额外的策略检查和建议,以帮助您进一步优化策略。要了解有关IAM Access Analyzer策略检查的更多信息,请参见验证自定义身份策略

一些基本的 JSON 规则介绍如下:

  • 各实体间允许使用空格。
  • 值使用引号括起来。
  • 大部分 JSON 元素可以采用 JSON 数组作为值。数组可以采用一个或多个值。如果包含多个值,则数组用方括号 ([ 和 ]) 括起来并用逗号分隔,如以下示例中所示:
    "Action": ["iam:users:createUserV5", "iam:users:getUserV5", "iam:users:listUsersV5", "iam:users:deleteUserV5"]
  • 基本JSON数据类型 (布尔型、数字和字符串) 需符合RFC 7159中的定义。

策略语法约定

策略语法采用以下约定:

  • 以下字符是JSON的结构字符,包含在策略中:

    { } [ ] " , :

  • 以下字符是策略语法中的特殊字符,用于策略语法的辅助描述,不包含在策略中:

    = < > ( ) |

  • 当一个元素允很多个值时,使用重复值、逗号分隔符和省略号 (...) 进行表示。示例:

    [<action_string>, <action_string>, ...]

    允许多个值时,只包含一个值也是有效的。只有一个值时,尾部不能添加逗号。

  • 元素后的问号 (?) 表示该元素是可选的。示例:

    <sid_block?>

  • 元素之间的竖线 (|) 表示可选项。在语法中,小括号定义了可选项的范围。示例:

    ("Action" | "NotAction")

  • 必须为字符串的元素括在双引号 (") 中。示例:

    <version_block> = "Version" : ("5.0")

策略语法

下面示例描述了完整的策略语法。有关此示例中采用的约定,请参见策略语法约定。有关更多信息,请参见策略语法说明
policy = {
  <version_block>,
  <statement_block>
}

<version_block> = "Version" : ("5.0")

<statement_block> = "Statement" : [ <policy_statement>, <policy_statement>, ... ]

<policy_statement> = {
  <sid_block?>,
  <effect_block>,
  <action_block>,
  <resource_block?>,
  <condition_block?>
}

<sid_block> = "Sid" : <sid_string>

<effect_block> = "Effect" : ("Allow" | "Deny")

<action_block> = ("Action" | "NotAction") : [ <action_string>, <action_string>, ... ]

<resource_block> = "Resource" : [ <resource_string>, <resource_string>, ... ]

<condition_block> = "Condition" : { <condition_map> }

<condition_map> = {
  <condition_type_string> : { <condition_key_string> : <condition_value_list> },
  <condition_type_string> : { <condition_key_string> : <condition_value_list> },
  ...
}

<condition_value_list> = ( <condition_value> | [ <condition_value>, <condition_value>, ... ] )

<condition_value> = "string"

策略语法说明

  • 身份策略整体的大小不能超过6144字节数。
  • 一个策略可以包含一组statement。
  • 单个元素不能包含同一个键的多个实例。例如,不能在同一statement中包含两个Effect块。
  • 各个块的描述顺序没有影响。例如,在身份策略中,effect_block、principal_block、action_block 在statement中可以按照任何顺序进行描述。
  • principal_block 元素应该包含在资源策略中(例如,OBS的桶策略和IAM的信任策略),而不会出现在身份策略中。
  • 每个字符串值 (sid_string、action_string、resource_string、condition_key_string 、condition_type_string) 都有其自己要求的格式或允许的值。

字符串值的说明

该部分提供了在策略的不同元素中使用的字符串值的详细信息。

  • action_string

    授权项(Action)是三段式的,大小写不敏感,格式为:

    <service-name>:<type-name>:<action-name>

    • service-name:云服务简称,例如 'ecs','vpc';
    • type-name:云服务资源类型名称;
    • action-name:操作名称。
    在action_string中也可以使用通配符,示例如下:
    "Action": [
        "iam:users:createUserV5",
        "iam:users:getUserV5",
        "iam:users:listUsersV5",
        "iam:users:deleteUserV5"
    ]
    
    "Action": [
        "IAM:*:*"
    ]
    
    "Action": [
        "*"
    ]
  • sid_string
    用于标识单个Statement,示例如下:
    "Sid": "11" 
    
    "Sid": "ThisStatementID"
  • resource_string
    表示资源URN,要了解URN的更多信息,请参见使用URN标识华为云资源。您可以在URN的资源部分使用通配符,示例如下:
    "Resource": [
        "iam:*:*:user:*"
    ]
  • condition_type_string
    标识条件的类型,例如 StringEquals和Bool 等。有关条件类型的完整列表,请参见JSON元素参考中的运算符
    "Condition": {
        "StringEquals": {
            "g:UserName": [
    	    "bob"
    	]
        }
    }
  • condition_key_string
    表示条件键,例如iam:ResourceIsRootUser等。条件键分为全局条件键和服务级条件键,全局级条件键(前缀为g:)适用于所有操作,有关全局条件键的完整列表,请参见全局条件键;服务级条件键(前缀为服务缩写)仅适用于对应服务的操作,请参见身份策略授权参考,然后打开指定云服务的章节,并导航至“条件”小节。
    "Condition": {
        "Bool": {
            "iam:ResourceIsRootUser": [
                "true"
            ]
        }
    }
  • condition_value_list
    标识 condition_key_string 的值,该值决定了是否满足条件。有关条件类型的值的说明,请参见JSON元素参考中的运算符
    "Condition": {
        "ForAllValues:StringEquals": {
            "g:UserName": [
                "bob",
                "alice"
            ]
        }
    }

相关文档