更新时间:2022-08-16 GMT+08:00
策略语法:细粒度策略
策略结构
策略结构包括:Version(策略版本号)和Statement(策略权限语句),其中Statement可以有多个,表示不同的授权项。
图1 策略结构
策略语法
在IAM左侧导航窗格中,单击“策略”,单击策略名称,可以查看策略的详细内容,以“DWS ReadOnlyAccess”为例,说明细粒度策略的语法。
图2 设置策略
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "dws:*:get*", "dws:*:list*", "ecs:*:get*", "ecs:*:list*", "vpc:*:get*", "vpc:*:list*", "evs:*:get*", "evs:*:list*", "mrs:*:get*", "bss:*:list*", "bss:*:get*" ] } ] }
- Version:标识策略的版本号,主要用于区分Role-Based Access Control(RBAC)策略和细粒度策略。
- 1.0:RBAC策略。RBAC策略是将服务作为一个整体进行授权,授权后,用户可以拥有这个服务的所有权限。
- 1.1:细粒度策略。相比RBAC策略,细粒度策略基于服务的API接口进行权限拆分,授权更加精细。授权后,用户可以对这个服务执行特定的操作。细粒度策略包括系统预置和用户自定义两种。
- Statement:策略授权语句,描述策略的详细信息,包含Effect(作用)和Action(授权项)。
多个授权项策略
一个自定义策略中可以包含多个授权项,且除了可以包含本服务的授权项外,还可以包含其他服务的授权项,可以包含的其他服务必须跟本服务同属性,即都是项目级服务。多个授权语句策略描述如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Allow", "Action": [ "ecs:cloudServers:resize", "ecs:cloudServers:delete", "ecs:cloudServers:rebuild" ] }, { "Effect": "Allow", "Action": [ "dws:*:get*", "dws:*:list*", "dws:cluster:create" ] } ] }
拒绝策略
拒绝策略需要同时配合其他策略使用,否则没有实际作用。用户被授予的策略中,一个授权项的作用如果同时存在Allow和Deny,则遵循Deny优先。
如果您给用户授予DWS FullAccess的系统策略,但不希望用户拥有DWS FullAccess中定义的删除集群权限,您可以创建一条拒绝删除集群的自定义策略,然后同时将DWS FullAccess和拒绝策略授予用户,根据Deny优先原则,则用户可以对GaussDB(DWS) 执行除了删除集群外的所有操作。拒绝策略示例如下:
{ "Version": "1.1", "Statement": [ { "Effect": "Deny", "Action": [ "dws:cluster:delete" ] } ] }
检查规则
当用户被授予多个策略,或者一个策略中包含多个授权语句,这些策略中既有Allow又有Deny的授权语句时,遵循Deny优先的原则。在用户访问资源时,权限检查逻辑如下。
图3 系统鉴权逻辑图
每条策略做评估时, Action之间是或(or)的关系。
- 用户访问系统,发起操作请求。
- 系统评估用户被授予的访问策略,鉴权开始。
- 在用户被授予的访问策略中,系统将优先寻找显式拒绝指令。如找到一个适用的显式拒绝,系统将返回Deny决定。
- 如果没有找到显式拒绝指令,系统将寻找适用于请求的任何Allow指令。如果找到一个显式允许指令,系统将返回Allow决定。
- 如果找不到显式允许,最终决定为Deny,鉴权结束。
父主题: 权限管理