联 系 我 们
售前咨询
售后咨询
微信关注:星环科技服务号
更多联系方式 >
4.4 Quark安全
更新时间:8/5/2024, 3:21:25 AM

以下内容同时适用于Inceptor, ArgoDB与StellarDB的Quark。

用户认证

访问Quark

Quark可以有6种认证模式:无认证、Kerberos, LDAP, Guardian Access Token, CAS Ticket, Guardian Federation Access Token。

  • 如果Quark未开启安全认证,您可以直接使用以下方式连接Quark:

    beeline -u "jdbc:hive2://<inceptor_server_ip/hostname>:10000/default;"
    复制
  • 如果您的Quark已开启安全,并且处于Kerberos认证模式,您可以按照《Guardian使用手册》通过Kerberos认证中的步骤获取一张有效的TGT。然后执行下面的指令:

    beeline -u "jdbc:hive2://<inceptor_server_ip/hostname>:10000/default;principal=<princpal_name>"
    复制

    <principal_name>处填写您想要连接的Quark server的principal,它一般的形式是hive/<inceptor_server_hostname>@<realm>。

  • 如果您的Quark已开启安全,并且处于使用LDAP认证模式,您可以执行下面的命令通过LDAP的认证连接到Quark:

    beeline -u "jdbc:hive2://<inceptor_server_ip/hostname>:10000/default" -n <username> -p <password>
    复制

    这里,<username>和<password>分别是您在LDAP中的用户名和密码。

  • 如果您的Quark已开启安全,处于Kerberos/LDAP认证模式,并且按照《Guardian使用手册》获取Guardian Access Token中的步骤获取到了Token,则可额外通过以下方式连接到Quark:

    beeline -u "jdbc:hive2://<inceptor_server_ip/hostname>:10000/default;guardianToken=<guardian_access_token>"
    复制

    <guardian_access_token>处填写获取到的Guardian Access Token的值。

  • 如果您的Quark已开启安全,处于Kerberos/LDAP认证模式,并且按照《Guardian使用手册》获取CAS Ticket中的步骤获取到了Ticket,则可额外通过以下方式连接到Quark:

    beeline -u "jdbc:hive2://<inceptor_server_ip/hostname>:10000/default;casTicket=<cas_ticket>"
    复制

    <cas ticket>处填写获取到的CAS Ticket的值。

  • 如果您的Quark已开启安全,并且按照《Guardian使用手册》使用Guardian Federation Access Token中的步骤获取到了Token,可以使用以下方式配置:

    beeline -u "jdbc:hive2://inceptor-server:10000/default;oauth2Token=<federation_access_token>"
    复制

    <federation_access_token>处填写获取到的Federation Access Token的值。

暂不支持使用Guardian Federation Access Token访问TDC集群中的Quark。

代理其他用户

在集群中,如果需要以某用户的名义去访问服务、提交任务等,但该用户并不具有访问服务的权限,可以通过管理员代理操作的方式实现。例如,需要以用户A(UserA)的名义去访问Inceptor,但用户A并没有权限,此时Inceptor的管理员hive用户可以通过设置,以A的名义,使用自己的CAS Ticket或Access Token来访问。

在hive用户能够代理用户A之前,需要确保自己有代理权限。检查Name Node节点上的 /etc/hdfs<ID>/conf/core-site.xml 文件中是否包含以下参数,如果没有,需手动添加:

<property>
  <name>hadoop.proxyuser.hive.groups</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hive.hosts</name>
  <value>*</value>
</property>
复制

以上参数表示hive用户可以从任意主机上代理任意组的用户访问。

设置好代理权限后,hive用户可以通过以下命令行代理用户A来访问服务,例如:

  • 使用Guardian Access Token代理用户A访问Quark:

    beeline -u "jdbc:hive2://<inceptor_server_ip/hostname>:10000/default;guardianToken=<hive_access_token>;hive.server2.proxy.user=UserA"
    复制
  • 使用CAS Ticket代理用户A访问Quark:

    beeline -u "jdbc:hive2://<inceptor_server_ip/hostname>:10000/default;casTicket=<hive_cas_ticket>;hive.server2.proxy.user=UserA"
    复制

权限管理

Quark的管理员为hive。普通用户在经过hive授权之前在Quark中可以进行的操作非常有限。

在多用户场景下,Quark的安全管理可以通过命令行交互和Guardian图形界面两种方式。本章节将介绍如何使用Guardian来管理Quark安全。关于如何使用命令行管理Quark安全,请参考《Quark使用手册》。

在Guardian主页上方导航栏中点击“权限”,选择您要管理的Quark服务,如:

guardian choose inceptor service

Quark安全管理页面分为数据库/表权限、存储过程权限、队列权限、存储配额、计算配额模块。Quark中的所有操作权限,都可以在全局级别上进行管理。全局权限赋予用户在整个Quark服务中执行该操作的能力。

数据库/表权限
权限设置

在Quark安全管理页面点击“数据库/表权限”,进入数据库和表的权限管理页面。使用页面上方的搜索工具可以快速找到数据库,注意检索范围只限于同层级的资源(就当前所处页面来说,即只检索所有的数据库名,而不包括数据库内的表名称)。

guardian inceptor grant db

权限的级别可以是全局、DATABASE、TABLE和VIEW。权限管理页面的第一项"GLOBAL"对应Quark服务全局的权限,例如上图中,tdt用户拥有对Quark全局的CREATE权限;public角色具有全局ACCESS权限,因此拥有public角色的用户均获得了ACCESS权限(只有拥有ACCESS权限的用户才可以访问HDFS服务)。示例集群中通过对每个允许访问Quark1服务的用户都赋予public角色,来对ACCESS权限进行统一的管理。

其余各项对应Quark1的数据库项,实现Database层级甚至Table和View级别的更细粒度的权限划分。例如您可以对Bob赋予所有数据库的Access权限,再单独赋予cubes数据库中某个表的ADMIN权限。

权限

对象

Global

Database

Table

Create

创建Database的权限

可在数据库内创建表的权限

Select

对全局所有表的SELECT权限

对数据库中所有表的SELECT权限

对表的SELECT权限

Insert

对全局所有表的INSERT权限

对数据库中所有表的INSERT权限

对表的INSERT权限

Update

对全局所有表的UPDATE权限

对数据库中所有表的UPDATE权限

对表的UPDATE权限

Delete

对全局所有表的DELETE权限

删除数据库下所有的表数据

删除表数据的权限

Admin

对全局的管理权限,删除数据库

对数据库和数据库中所有表的ADMIN权限

可以删除表,管理该表的权限

Access

对当前Quark服务的访问权限。ACCESS是服务级别的权限,只能在GLOBAL中进行权限编辑。

  1. 当用户拥有对某张表或某个数据库的ADMIN权限时,他可以管理该表/数据库的权限分配。

  2. Guardian 提供了服务级别的权限控制,只有当用户对于服务拥有ACCESS权限的时候,才能访问相应的服务,否则即使拥有该服务资源的权限也是无法访问服务的,管理员可以从服务级别直接控制用户的访问。

点击任意数据库项或GLOBAL右侧的 edit icon,可以管理用户/组/角色对数据库的权限。对组的权限赋予相当于赋予了该组内所有用户同样的权限,对角色的权限赋予相当于赋予了拥有该角色的用户同样的权限。以alice_db数据库为例,点击“编辑”:

alice db grant

以上图中alice用户为例:

  • 为alice用户勾选SELECT权限,表示赋予alice对alice_db数据库中所有表的SELECT权限;

  • 取消选中所有权限或直接点击 delete user icon,则删去alice对此数据库的全部权限;

  • 点击用户/组/角色列表最后一行末尾的 add user icon,可以为其他用户/组/角色赋予alice_db的权限。只有对alice_db拥有ADMIN权限的用户才可以将此数据库的权限赋予其他用户/组/角色。

或通过点击页面右上角的 add permission icon,您可以快捷地为数据库或表添加权限。

点击任意数据库名,可进一步查看和精准管理数据库中所有表的权限。

guardian tables in data prepare

在此页面右上角点击 add permission icon,您可以快捷地为数据库中的表添加权限。或点击某一张表右侧的 edit icon,可以管理用户/组/角色对该表的权限。只有对某张表拥有ADMIN权限的用户才可以将该表的权限赋予其他用户/组/角色。

guardian test table grant
判权逻辑

Quark的Guardian插件在判断用户的数据库/表权限时,或按照下列的优先级进行权限的判断:

  1. 如果当前用户是所操作库/表的所属者,则该用户有权执行操作。Quark中所有库/表的所属者信息可以在Quark权限管理界面的“所属者信息”一栏中浏览。

    inceptor owner
  2. 如果在“策略”界面设置了该Quark上的策略,则再根据策略的设置判断是否允许/拒绝该操作,如果命中,则返回结果。

  3. 根据“数据库/表/列”中的设置判断是否允许/进行该操作。

存储过程权限

Guardian还提供了管理Quark存储过程权限的功能。此功能默认为不开启,如要使用此功能,请先在所有Server角色所在节点,将下列参数添加到 /etc/quark<ID>/conf/guardian-site.xml 文件中:

<property>
    <name>guardian.client.inceptor.enable.plsql.check</name>
    <value>true</value>
</property>
复制

如能在Quark的配置页面中找到该配置项,也可采用直接在Manager中配置的方式。

点击“存储过程权限”标签,进入存储过程权限管理页面:

guardian plsql tab

您可以看到有以下几种权限设置:

权限

对象

Global

Database

Function

CREATE_FUNC

全局创建存储过程的权限

在数据库中创建存储过程的权限

REPLACE_FUNC

全局使用CREATE OR REPLACE创建存储过程的权限

在数据库中使用CREATE OR REPLACE创建存储过程的权限

EXEC_FUNC

全局执行存储过程权限

执行数据库中所有存储过程的权限

执行此存储过程的权限

ACCESS

对当前Quark服务的访问权限。ACCESS是服务级别的权限,只能在GLOBAL中进行权限编辑。

  1. 当用户拥有对某张表或某个数据库的ADMIN权限时,他可以管理该表/数据库的权限分配。

  2. 只有当用户对于服务拥有ACCESS权限的时候,才能访问相应的服务,否则即使拥有该服务资源的权限也是无法访问服务的,管理员可以从服务级别直接控制用户的访问。

点击右上角的“编辑”,可以管理用户/组/角色对存储过程的权限。对组的权限赋予相当于赋予了该组内所有用户同样的权限,对角色的权限赋予相当于赋予了拥有该角色的用户同样的权限。只有对当前对象(Global/Database/Function)有ADMIN权限才可以赋予其他用户/组/角色权限。

guardian plsql add rights

如果需要添加新的权限,点击右上角 add permission icon,在弹出窗口中配置权限:

guardian plsql new access

添加完成后,可以看到:

guardian plsql new access done
队列权限

在Quark安全管理页面点击“队列权限”,进入Quark队列权限管理页面。

guardian inceptor queue

队列权限管理页面的第一项"GLOBAL"对应Quark服务全局的权限,其余各项对应Quark的队列项,实现队列层级的更细粒度的权限划分。例如您可以对Bob赋予root的SUBMIT权限,再单独赋予子队列root.default的ADMIN权限。

权限

对象

Global

队列

Submit

全局提交job的权限

可以提交sql到对应队列,及其所有子队列

Admin

对全局队列的管理权限

可以杀掉该队列及其子队列的所有的sql任务

Access

对当前Quark服务的访问权限。ACCESS是服务级别的权限,只能在GLOBAL中进行权限编辑。 拥有Global:ACCESS权限的用户(组,角色)才可以提交sql任务。

  1. 当用户拥有对某个队列的ADMIN权限时,可以管理该队列的权限分配。

  2. Guardian3.2.6提供了服务级别的权限控制,只有当用户对于服务拥有ACCESS权限的时候,才能访问相应的服务,否则即使拥有该服务资源的权限也是无法访问服务的,管理员可以从服务级别直接控制用户的访问。

点击任意队列项或GLOBAL右侧的 edit icon,可以管理用户/组/角色对队列的权限。对组的权限赋予相当于赋予了该组内所有用户同样的权限,对角色的权限赋予相当于赋予了拥有该角色的用户同样的权限。以root.default队列为例,点击“编辑”:

guardian inceptor queue grant

或通过点击页面右上角的 add permission icon,您可以快捷地为数据库或表添加权限。

存储配额

Quark的配额依赖于HDFS的配额功能,其注意事项请参考配额管理章节。

在Quark安全管理页面点击“存储配额”,进入存储配额管理页面。Quark的配额信息分为两种,数据库配额,临时空间配额。数据库配额分为各数据库本身的配额和在该数据库下用户的配额,临时空间配额同样也是分为临时空间总的配置和分配给用户的配额。

guardian inceptor quota

点击搜索框下方的 db or temp icon在数据库配额模块或临时空间配额模块间切换。

设置数据空间配额

点击“数据库”模块,页面中展示现有的数据库空间配额情况,包括数据库总空间、各数据库允许用户使用的空间配额等。

guardian inceptor quota

点击数据库项操作栏中的 add quota op icon为此数据库添加新的配额项;

点击某项操作栏中的 edit quota icon编辑对应配额;

点击某项操作栏中的 delete quota icon删除该项配额;

点击 add quota icon可以添加新的数据库空间配额。

设置临时空间配额

点击“临时空间”模块,页面中展示现有的临时空间总配额和分配给用户的配额情况。

guardian inceptor temp quota

点击 add quota op icon,添加可使用临时空间的用户,并为其分配一块空间;

点击某项操作栏中的 edit quota icon,编辑对应配额项;

点击某项操作栏中的 delete quota icon删除该项配置;

点击 add quota icon 修改临时空间总大小:

guardian inceptor add temp space
计算配额

在Quark安全管理页面点击“计算配额”,进入计算配额管理页面,您可以设置每个队列的权重、预留CPU核数,预留CPU百分比,最大CPU核数,最大CPU百分比,以及调度策略。关于调度策略的更多信息,请参考《Quark使用手册》。

guardian inceptor calc quota

点击“Furion调度配置”栏右侧的 edit icon,进入编辑状态:

guardian inceptor calc quota edit
  • 点击队列对应的 edit quota icon 可以对其队列配额进行编辑:

    guardian inceptor edit calc quota
  • 点击 add icon 可以添加一个新队列,并为其设置队列配额:

    guardian inceptor add new queue quota

另外,Guardian还提供配置单个队列、单个连接和单个用户可以向Quark提交的最大SQL数量,可以在用户设置默认配置两栏中配置:

  • 用户设置栏中点击 add quota icon 添加用户可以提交的最大SQL数量:

    inceptor add compute quota
  • 不在用户设置中的用户将采用默认配置,如下所示。点击右侧的 edit icon 可以编辑默认配置:

    default maximum sqls