GaussDB(DWS)云端运维系列第八期:服务权限控制(RBAC,细粒度)
在公有云上,云服务的身份认证和访问控制能力都是有IAM服务来提供的,当前IAM权限的框架主要为云上的租户提供与服务管理面的统一的权限管控,针对云服务租户面的权限管理是有云服务自身来实现的,本文主要讲述华为云管理面权限控制的两个基本模型,以及介绍GaussDB(DWS)当前已经满足的几种管控面权限管理能力。
IAM的RBAC权限管理模型
RBAC(Role-Based Access Control)指基于角色的访问控制。通俗一点讲,就是先定义某个角色能做某些事(role),再将这个角色授予某个人(授权)。当人做这些事的时候校验他的凭证(Token)里面是否携带了对应的角色,如果有对应角色,则允许他做;否则拒绝(鉴权)。
公有云定义了一部分全局内置的系统角色(RBAC),每个云服务上线,需要对接这部分系统内置角色,保证其在华为云上的统一权限控制逻辑。全局内置的系统角色主要包括:
角色名 |
操作权限控制 |
备注 |
te_admin(Tenant Administrator) |
租户admin权限,可访问和操作租户范围可访问资源的所有API。 |
可以访问除IAM外所有云服务的资源,包括增、删、改、查等操作。 |
readonly(Tenant Guest) |
租户只读权限,拥有租户范围内所有对象的查询类权限。 |
华为云早期服务均支持RBAC模型的授权/鉴权。例如DWS的dws_adm,来表示允许调用自己服务的所有API。IAM也设计了secu_admin角色,来表示拥有该角色的用户,可以调用IAM的客户面接口。
当前华为将RBAC相关权限称为"系统角色",系统角色由服务定义好,上线时向IAM注册系统角色数据,RBAC对应的系统角色只能由服务导入,不支持用户自定义。
DWS服务目前在华为云上线的系统角色有:
- DWS Administrator,该权限表示允许调用DWS服务涉及到的所有API。由于DWS为高阶服务,所以为了DWS的所有操作,则必须添加使用IaaS层云服务的权限,DWS Administrator在权限定义时,增加了Server Administrator权限的依赖和Tenant Guest权限的依赖。
- DWS Database Access,该权限表示允许调用自己服务的所有API,别的服务的API没有权限。
IAM的ABAC(细粒度)权限管理模型
ABAC(Attribute Base Access Control)指基于属性的权限控制。指设定一个访问控制策略,只有满足策略中的各个属性时,才允许做什么事。例如可以在策略中指定条件、资源、操作来表示在满足指定条件时,允许/拒绝对指定的资源执行对应的操作。鉴权时,用户需要满足对应的条件,才会拥有权限。所有用于约束的规则(操作、资源、条件)都统称为属性。
因为RBAC的R(角色)通常是某类权限的合集,并且仅通过token中的role字段判断是否具有权限,不能满足部分高阶客户的业务场景:如只允许调用用某一个API或者操作某一个资源。在此背景下,IAM推出了ABAC授权/鉴权框架。当前华为将ABAC相关权限称为"策略",系统策略由服务定义好,上线时向IAM注册系统策略数据。当系统策略不满足客户业务诉求时,客户可以创建自定义策略,来指定权限。
当前公有云上的RBAC权限模型会逐渐被细粒度权限管理模型取代。下面主要介绍细粒度授权的基本设计:
描述权限的四要素
- 效力(Effect):取值Allow或Deny,表示满足资源、操作、条件三个要素时,是允许还是拒绝执行操作
- 资源(Resource):指定用户可以操作哪些云资源,可以指定到某一个具体的云资源
- 操作(Action):云服务面向客户提供的最小能力对应的权限。需要云服务根据自身提供的云资源和操作云资源的的API设计。通常一个action仅允许调用一个API。
- 限制条件(Condition\Attribute):通常是资源、操作之外,还需要根据用户或者资源的其他属性做一些约束。如用户名以allowUser开头,或请求源IP在某个IP段内等。当前dws尚未支持改要素的权限控制。
{
"Version": "1.1", ----策略版本号,1.1表示支持ABAC方式鉴权
"Statement": [ ----权限数组,数组中的每一个权限独立进行一次鉴权
{
"Action": [ ----操作数组,表示被授予的原子操作,当Effect时Allow时,可以调用云服务action对应API;Deny时,拒绝调用。
"dws:Cluster:resize" ----单个action,<云服务CSBI缩写>:<云资源类型>:<对云资源的操作>
],
"Resource": [ ----资源数组
"DWS:*:*:cluster:dws*" ----当Effect时Allow时,可以访问云服务的资源;Deny时,拒绝访问云服务的资源。鉴权时,云服务需要传入用户当前访问的资源。取值支持"*"号通配,这句的含义为:设置权限在dws服务的cluster资源已dws字符开头命名的资源
],
"Effect": "Deny" ----资源、操作、条件都匹配成功后,允许/拒绝请求
}
]
}
授权模型
- IAM多项目授权:在IAM,使用用户组、委托等把策略授予到某一个Project(Region)上。权限绑定关系:<用户组,项目,策略>或<委托,项目,策略>。
- 企业项目授权:在EPS,企业项目管理中,将策略加入企业项目的用户组中。权限绑定关系:<用户组/用户,企业项目,策略>
使用
DWS在华为云上定义两个系统策略,分别是DWS FullAccess(数据仓库所有权限),DWS ReadOnlyAccess(数据仓库服务只读权限),如果系统策略不满足授权要求,管理员用户(secu_admin)可以创建自定义策略,并通过给用户组授予自定义策略来进行精细的访问控制,自定义策略是对系统策略的扩展和补充。目前华为云支持可视化视图和JSON视图创建自定义策略,以下面的例子来介绍可视化视图创建自定义策略的步骤。
例:当前用户只有查看数据仓库服务中以“dws”字符开头命名的资源,并且有对该资源有重启和重置密码的权限。
注意:由于权限设置要支持到原子级别,dws服务中页面操作和openapi操作分别为两个接口,若没有特意的说明,请两类操作均添加。
- 首先使用租户登录华为云控制台,并且进入IAM服务;
- 在左侧导航窗格中,单击“权限”>“创建自定义策略”;
- 选择项目级服务,策略配置方式选择可视化视图;
- 在“策略内容”下配置策略选择“允许”。
- 选择“云服务”为数据仓库服务;
- 选择“操作”,根据需求勾选产品权限
"dws:cluster:getDetail" 获取集群详情
"dws:openAPICluster:getDetail", openAPI获取集群详情
"dws:cluster:list"," 获取集群列表
"dws:openAPICluster:list", openAPI获取集群列表
"dws:cluster:restart", 重启集群
"dws:openAPICluster:restart", openAPI重启集群
"dws:cluster:resetPassword", 给集群重置密码
"dws:openAPICluster:resetPassword" openAPI为集群重置密码
- 选择资源类型,如选择“特定类型”可以点击“通过资源路径指定”来指定需要授权的资源,路径填写dws*
- 可以使用Json视图查看策略内容为{
"Version": "1.1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"dws:cluster:getDetail",
"dws:openAPICluster:getDetail",
"dws:cluster:list",
"dws:openAPICluster:list",
"dws:cluster:restart",
"dws:openAPICluster:resetPassword",
"dws:cluster:resetPassword",
"dws:openAPICluster:restart"
],
"Resource": [
"dws:*:*:cluster:dws*"
]
}
]
} - 创建用户组
- 给用户组进行权限配置
- 创建用户,将用户加入到刚才进行权限配置的用户组中。
- 使用新建用户重新登录华为云控制台,进行后续操作。
- 点赞
- 收藏
- 关注作者
评论(0)