GaussDB(DWS)云端运维系列第八期:服务权限控制(RBAC,细粒度)

举报
幺幺子 发表于 2020/12/06 16:21:05 2020/12/06
【摘要】        在公有云上,云服务的身份认证和访问控制能力都是有IAM服务来提供的,当前IAM权限的框架主要为云上的租户提供与服务管理面的统一的权限管控,针对云服务租户面的权限管理是有云服务自身来实现的,本文主要讲述华为云管理面权限控制的两个基本模型,以及介绍GaussDB(DWS)当前已经满足的几种管控面权限管理能力。IAM的RBAC权限管理模型RBAC(Role-Based Access ...

       在公有云上,云服务的身份认证和访问控制能力都是有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服务目前在华为云上线的系统角色有:

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*"
                ]
            }
        ]
    }
  • 创建用户组
  • 给用户组进行权限配置
  • 创建用户,将用户加入到刚才进行权限配置的用户组中。
  • 使用新建用户重新登录华为云控制台,进行后续操作。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。