策略管理

滴滴云技术支持发表于:2019年09月02日 15:12:32更新于:2020年03月30日 15:53:20

策略是定义和描述一条或多条权限的语法规范。它可以精确地描述被授权的资源集、操作集以及授权条件。通过给子用户或用户组关联策略,子用户或用户组中的所有用户就能获得策略中指定的访问权限。

策略的应用规则:遵循 Deny 优先的原则:先检查 Deny 的所有策略,如果存在一个此类策略,则该请求将被拒绝。再检查 Allow 的所有策略,如果至少一个策略语句允许请求中的操作,则将允许此请求。

IAM 支持两种类型的策略:系统策略和自定义策略。

  • 系统策略:由滴滴云创建的一组通用策略,用户只能使用不能修改和删除,策略的内容更新由滴滴云维护。

  • 自定义策略:由于系统策略的授权颗粒度较粗,可能并不能满足您的需求,那么您可以创建自定义策略,并对策略进行管理、删除。策略的内容由用户自己定义。


权限策略基本要素

基本元素

IAM Policy 包含以下基本元素:

元素名称

描述

效力(Effect)包括两种:允许(Allow)和拒绝(Deny)
操作(Action)用户的具体操作
资源(Resource)被授权的相关资源
限制条件(Condition)策略生效的限制条件

使用规则

1.效力(Effect)

取值 为 Allow 或 Deny,例如:"Effect": "Allow"。

2.操作(Action)

在滴滴云的权限策略体系中,操作(Action) 为云服务所定义的 API 操作的有限集合。用户在控制台中的每一个操作都对应一个(或多个)Action。

主用户可以通过编辑策略,将基于某些资源/某些条件的Action权限授权给子用户/用户组。

另外不同Action所支持的条件/资源有所不同,当用户在策略中添加了本Action所不支持的条件/资源时,IAM会忽略这些不支持的条件/资源。

关于滴滴云IAM功能所支持的全部Action信息,可点击 操作列表。

在策略中,Action 支持多值,取值为云服务所定义的 API 操作名称。

格式:<service-name>:<action-name>

  • service-name: 滴滴云服务名称。例如:dc2,mysql,slb 等。

  • action-name: service:相关的 API 操作接口名称。

另外,Action 支持灵活的模糊匹配,在Action字段中您可在任意位置使用"*"来模糊匹配可能的字符串。

描述样例:

"Action": ["dc2:Describe*", "mysql:Modify*", "eip:*", "slb:ModifySlb*"]

3.资源(Resource)

指操作对象,每个资源都有一个全局的滴滴云资源名称(Didicloud Resource Name,DRN)。格式:dcs:<service-type>:<region-id>:<account-id>:<service-name/resource-id>

  • dcs:Didi Cloud Service 的首字母缩写,表示滴滴云。

  • service-type:产品线标识。例如:dc2,可以用"*"代替。

  • region-id:地域标识。例如:gz,bj,可以用"*"代替。

  • account-id:账号 ID。例如:1234567890123456,可以用"*"代替。

  • resource-id:资源ID。例如:ba7d399204df57f483124fb1ae440b50,可以用"*"代替。

描述样例:"Resource": "dcs:dc2:gz:8743317448966084:ba7d399204df57f483124fb1ae440b50"

当需要泛指全部资源时,也可直接使用"*"代替,例如:"Resource":"*"

4.限制条件

选填项,描述策略生效的约束条件。条件包括条件运算符、条件键和条件值组成。

条件操作类型包括:字符串类型(String)、数字类型(Numeric)、日期类型(Data and time)、布尔类型(Boolean)和 IP 地址类型(IP address)。


String

Numeric

Date and time

Boolean

IP address

StringNotLikeNumericGreaterThanEqualsDateGreaterThanEquals--
StringNotEqualsIgnoreCaseNumericLessThanEqualsDateLessThanEquals--
StringNotEqualsNumericNotEqualsDateNotEquals-NotIpAddress
StringLikeNumericGreaterThanDateGreaterThan--
StringEqualsIgnoreCaseNumericLessThanDateLessThan--
StringEqualsNumericEqualsDateEqualsBoolIpAddress



权限策略样例

该样例描述为:允许对资源ID为12345678901234567890123456789012的dc2进行只读操作,限制条件:请求者的 IP 来源为 10.100.1.0。

{
    "Statement": [
     {
          "Effect": "Allow",
          "Action": "dc2:Describe*",
          "Resource": "dcs:iaas:*:*:dc2/12345678901234567890123456789012"
    "Condition":
          {
       "IpAddress":
               {
                    "dcs:SourceIp":"10.100.1.0"
               }
          }
     }
  ]
}


权限策略语法和结构

策略语法以 JSON 格式为基础。创建或更新的策略不满足 JSON 格式时,策略无法应用,所以用户必须要确保 JSON 格式正确。 JSON 格式标准在 RFC7159 中定义,您也可以使用在线 JSON 验证程序检查策略格式。

语法描述中有如下约定:

以下字符是包含在策略语法中的 JSON 字符:

{ } [ ] " , :

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

= < > ( ) |

当一个元素允许多个值时,使用逗号分隔符和省略号进行表示。例如:

"resource":["resource_string", "resource_string”]  
"action":["action_string", "action_string”]

允许多个值时,也可以只包含一个值。当元素只有一个值时,尾部的逗号必须去掉,且中括号"[]"标记可选。例如:

"resource":[<resource_string>]
"resource":<resource_string>

元素后的问号 (?) 表示该元素是非必填项。例如:

<condition_block?>

元素是枚举值的情况下,枚举值之间用竖线 "|" 表示,并用 "()" 括号定义枚举值的范围。例如:

("allow" | "deny")

语法描述

policy  = {     <version_block>
     <principal_block?>,     <statement_block>}<statement_block> = "statement" : [ <statement>, <statement>, ... ]<statement> = {     
    <effect_block>,    <action_block>,    <resource_block>,
    <condition_block?>
}<effect_block> = "effect" : ("allow" | "deny")  

<principal_block> = "principal": ("*" | <principal_map>)<principal_map> = { <principal_map_entry>, <principal_map_entry>, ... }<principal_map_entry> = "qcs":   
    [<principal_id_string>, <principal_id_string>, ...]<action_block> = "action": 
    ("*" | [<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> = ("string" | "number")


自定义策略

如果系统策略无法满足您的需求,您可以自主创建、更新和删除自定义策略。


创建自定义策略

您可以通过创建自定义策略实现精细化权限管理。

操作步骤

1.主账号登录控制台-在账号下拉菜单中单击 身份与访问控制

2.在左侧导航栏的管理菜单下,单击 策略管理

3.单击 新建自定义策略 

4.输入策略名称和策略描述。

5.配置策略内容选择可视化编辑或脚本编辑。

  • 若选择可视化配置:您可以单击 添加授权语句,依次选择项目、权限效力、产品/服务、操作权限、资源、限制条件(非必填)信息。您可以为该策略添加多条授权语句。

  • 若选择脚本配置,请参考上述权限策略语法和结构编辑策略内容。

6.单击 确认创建,完成自定义策略创建。


编辑自定义策略

当用户的权限发生变更时,您可以根据需要修改策略内容。

操作步骤

1.主账号登录控制台-在账号下拉菜单中单击 身份与访问控制

2.在左侧导航栏的管理菜单下,单击 策略管理

3.单击策略名称 或者 在操作中单击 查看详情

4.进入策略详情页,选择自定义策略名称、描述或者内容,单击 修改

5.修改完成后,单击 保存修改


删除自定义策略

当权限发生变化或不再需要某个自定义策略时,可以删除自定义策略。

操作步骤

1.主账号登录控制台-在账号下拉菜单中单击 身份与访问控制

2.在左侧导航栏的管理菜单下,单击 策略管理

3.在策略列表页,选择需要删除的自定义策略,在操作中单击 删除

4.单击 确认删除