策略语法
该部分提供了用于在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中的定义。
策略语法约定
策略语法采用以下约定:
策略语法
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
- condition_value_list
标识 condition_key_string 的值,该值决定了是否满足条件。有关条件类型的值的说明,请参见JSON元素参考中的运算符。
"Condition": { "ForAllValues:StringEquals": { "g:UserName": [ "bob", "alice" ] } }