策略是定义和描述一条或多条权限的语法规范。它可以精确地描述被授权的资源集、操作集以及授权条件。通过给子用户或用户组关联策略,子用户或用户组中的所有用户就能获得策略中指定的访问权限。
策略的应用规则:遵循 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 |
---|---|---|---|---|
StringNotLike | NumericGreaterThanEquals | DateGreaterThanEquals | - | - |
StringNotEqualsIgnoreCase | NumericLessThanEquals | DateLessThanEquals | - | - |
StringNotEquals | NumericNotEquals | DateNotEquals | - | NotIpAddress |
StringLike | NumericGreaterThan | DateGreaterThan | - | - |
StringEqualsIgnoreCase | NumericLessThan | DateLessThan | - | - |
StringEquals | NumericEquals | DateEquals | Bool | IpAddress |
权限策略样例
该样例描述为:允许对资源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.单击 确认删除。