权限策略语法和结构

本文介绍RAM中权限策略的语法和结构,帮助您正确理解权限策略语法,以完成创建或更新权限策略。

前提条件

运用策略语法前,您应了解策略字符及其使用规则。

  • 权限策略字符如下:

    • 权限策略中所包含的JSON字符:{ } [ ] " , :

    • 描述语法使用的特殊字符:= < > ( ) |

  • 字符使用规则如下:

    • 当一个元素允许多值时,可以使用下述两种方式表达,效果相同。

      • 使用半角逗号(,)和省略号(...)进行表达。例如:[ <action_string>, <action_string>, ...]

      • 使用单值进行表达。例如:"Action": [<action_string>]"Action": <action_string>

    • 元素带有半角问号(?)表示此元素是一个可选元素。例如:<condition_block?>

    • 多值之间用竖线(|)隔开,表示取值只能选取这些值中的某一个。例如:("Allow" | "Deny")

    • 使用双引号("")的元素,表示此元素是文本串。例如:<version_block> = "Version" : ("1")

权限策略结构

权限策略结构包括:

  • 版本号。

  • 授权语句列表。每条授权语句包括授权效果(Effect)、操作(Action)、资源(Resource)以及条件(Condition,可选项)。

权限策略结构

权限策略语法

policy  = {
     <version_block>,
     <statement_block>
}
<version_block> = "Version" : ("1")
<statement_block> = "Statement" : [ <statement>, <statement>, ... ]
<statement> = { 
    <effect_block>,
    <action_block>,
    <resource_block>,
    <condition_block?>
}
<effect_block> = "Effect" : ("Allow" | "Deny")  
<action_block> = "Action" : 
    ("*" | <action_string> | [<action_string>, <action_string>, ...])
<resource_block> = "Resource" : 
    ("*" | <resource_string> | [<resource_string>, <resource_string>, ...])
<condition_block> = "Condition" : <condition_map>
<condition_map> = {
  <condition_type_string> : { 
      <condition_key_string> : <condition_value_list>,
      <condition_key_string> : <condition_value_list>,
      ...
  },
  <condition_type_string> : {
      <condition_key_string> : <condition_value_list>,
      <condition_key_string> : <condition_value_list>,
      ...
  }, ...
}  
<condition_value_list> = (<condition_value> | [<condition_value>, <condition_value>, ...])
<condition_value> = ("String" | "Number" | "Boolean" | "Date and time" | "IP address")

权限策略语法说明:

  • 版本:当前支持的权限策略版本,固定为1,不允许修改。

  • 授权语句:一个权限策略可以有多条授权语句。

    • 每条授权语句的效果为:AllowDeny

      说明

      一条授权语句中,操作(Action)和资源(Resource)都支持多值。

    • 每条授权语句都支持独立的条件(Condition)。

      说明

      一个条件块支持多个条件的组合,每个条件的操作类型可以不同。

  • Deny优先原则: 一个用户可以被授予多个权限策略。当这些权限策略同时包含AllowDeny时,遵循Deny优先原则。

  • 元素取值:

    • 当元素取值为字符串类型(String)、数字类型(Number)、日期类型(Date and time)、布尔类型(Boolean)和IP地址类型(IP address)时,需要使用双引号("")。

    • 当元素取值为字符串值(String)时,支持使用*?进行模糊匹配。

      • *代表0个或多个任意的英文字母。 例如:ecs:Describe* 表示ECS的所有以Describe开头的操作。

      • ?代表1个任意的英文字母。

权限策略格式检查

权限策略支持JSON格式。当您创建或更新权限策略时,系统会检查JSON格式的正确性。您也可以使用第三方JSON格式验证器和编辑器自行检查JSON格式的正确性。关于JSON语法标准,请参见RFC 7159