文档首页 > > 用户指南> 权限管理> 策略语法:细粒度策略

策略语法:细粒度策略

分享
更新时间: 2019/08/06 14:28

策略结构

策略结构包括:Version(策略版本号)和Statement(策略权限语句),其中Statement可以有多个,表示不同的授权项。

图1 策略结构

策略语法

如下以“DMS Viewer”策略为例,说明策略语法组成。

{
        "Version": "1.1",
        "Statement": [
                {
                        "Effect": "Allow",
                        "Action": [
                                "dms:*:get*",
                                "dms:*:list*",
                                "vpc:*:list*",
                                "vpc:*:get*",
                                "obs:*:list*",
                                "obs:*:get*"
                        ]
                },
                {
                        "Effect": "Deny",
                        "Action": [
                                "dms:instance:create",
                                "dms:instance:delete",
                                "dms:instance:scale",
                                "dms:instance:modify",
                                "dms:instance:modifyStatus",
                                "dms:instance:resetAuthInfo",
                                "dms:instance:modifyAuthInfo",
                                "dms:instance:deleteBackgroundTask",
                                "dms:instance:connector",
                                "dms:instance:createConnectorSinkTask",
                                "dms:instance:deleteConnectorSinkTask"
                        ]
                }
        ]
}
  • Version:标识策略的版本号。
  • Statement:策略授权语句,描述策略的详细信息,包含Effect(作用)和Action(授权项)。
    • Effect(作用)

      作用包含两种:Allow(允许)和Deny(拒绝),系统预置策略仅包含允许的授权语句,自定义策略中可以同时包含允许和拒绝的授权语句,当策略中既有允许又有拒绝的授权语句时,遵循Deny优先的原则。

    • Action(授权项)

      对资源的具体操作权限,格式为:服务名:资源类型:操作,支持单个或多个操作权限,支持通配符号*,通配符号表示所有。

      示例:

      • "dms:*:get*",其中dms为服务名,*为资源类型,get*为操作,该授权项表示dms所有的资源类型的查询权限。
      • "dms:*:list*",其中dms为服务名,*为资源类型,list*为操作,该授权项表示查询dms实例列表。

多个授权项策略

一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务或都是全局级服务。多个授权语句策略描述如下:

{
        "Version": "1.1",
        "Statement": [
                {
                        "Effect": "Allow",
                        "Action": [
                                "dms:*:get*",
                                "dms:*:list*",
                                "vpc:*:list*",
                                "vpc:*:get*",
                                "obs:*:list*",
                                "obs:*:get*"
                        ]
                },
                {
                        "Effect": "Deny",
                        "Action": [
                                "dms:instance:create",
                                "dms:instance:delete",
                                "dms:instance:scale",
                                "dms:instance:modify",
                                "dms:instance:modifyStatus",
                                "dms:instance:resetAuthInfo",
                                "dms:instance:modifyAuthInfo",
                                "dms:instance:deleteBackgroundTask",
                                "dms:instance:connector",
                                "dms:instance:createConnectorSinkTask",
                                "dms:instance:deleteConnectorSinkTask"
                        ]
                }
        ]
}

拒绝策略

拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Alow和Deny,则遵循Deny优先。

如果您给用户授予DMS Admin的系统策略,但不希望用户拥有DMS admin中定义的删除DMS实例权限(dms:instance:delete),您可以创建一条相同Action的自定义策略,并将自定义策略的Effect设置为Deny,然后同时将DMS Admin和拒绝策略授予用户,根据Deny优先原则,则用户可以对DMS执行除了删除DMS实例外的所有操作。以下策略样例表示:拒绝用户删除实例。

{
        "Version": "1.1",
        "Statement": [
                {
                        "Effect": "Deny",
                        "Action": [
                                "dms:instance:delete"
                        ]
                }
        ]
}

检查规则

当用户被授予多个策略,或者一个策略中包含多个授权语句,这些策略中既有Allow又有Deny的授权语句时,遵循Deny优先的原则。在用户访问资源时,权限检查逻辑如下:

图2 系统鉴权逻辑图
说明:

每条策略做评估时, Action之间是或(or)的关系。

  1. 用户访问系统,发起操作请求。
  2. 系统评估用户被授予的访问策略,鉴权开始。
  3. 在用户被授予的访问策略中,系统将优先寻找显式拒绝指令。如找到一个适用的显式拒绝,系统将返回Deny决定。
  4. 如果没有找到显式拒绝指令,系统将寻找适用于请求的任何Allow指令。如果找到一个显式允许指令,系统将返回Allow决定。
  5. 如果找不到显式允许,最终决定为Deny,鉴权结束。
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区