本文介绍 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" | "NotAction") : 
    ("*" | [<action_string>, <action_string>, ...])
<resource_block> = ("Resource" | "NotResource") : 
    ("*" | [<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> = ("String" | "Number" | "Boolean")
权限策略语法说明:
  • 版本:当前支持的权限策略版本为 1。
  • 授权语句:一个权限策略可以有多条授权语句。
    • 每条授权语句的效力为:AllowDeny
      说明 一条授权语句中,操作(Action)和资源(Resource)都支持多值。
    • 每条授权语句都支持独立的限制条件(Condition)。
      说明 一个条件块可以支持多种条件操作类型,以及多种条件的逻辑组合。
  • Deny 优先原则: 一个用户可以被授予多个权限策略,当这些权限策略同时包含AllowDeny时,遵循 Deny 优先原则。
  • 元素取值:
    • 当元素取值为数字(Number)或布尔值(Boolean)时,与字符串类似,需要使用双引号。
    • 当元素取值为字符串值(String)时,支持使用*?进行模糊匹配。
      • *代表 0 个或多个任意的英文字母。 例如:ecs:Describe* 表示 ECS 的所有以Describe开头的操作。
      • ?代表 1 个任意的英文字母。

权限策略格式检查

RAM 仅支持 JSON 格式。当创建或更新权限策略时,RAM 会首先检查 JSON 格式的正确性。

  • 关于 JSON 的语法标准请参考:RFC 7159
  • 您也可以使用一些在线的 JSON 格式验证器和编辑器来校验 JSON 文本的有效性。