云服务器内容精选

  • 前提条件 获取一个拥有管理员权限的用户,例如“admin”。 请参考创建Hive角色,在Manager界面创建一个角色,例如“hrole”,不需要设置Hive权限,设置提交Hql命令到Yarn执行的权限。 在Manager界面创建两个使用Hive的“人机”用户并加入“hive”组,例如“huser1”和“huser2”。“huser2”需绑定“hrole”。使用“huser1”创建一个数据库“hdb”,并在此数据库中创建表“htable”。
  • 操作场景 使用Hive表或者数据库时,如果用户访问别人创建的表或数据库,需要授予对应的权限。为了实现更严格权限控制,Hive也支持列级别的权限控制。如果要访问别人创建的表上某些列,需要授予列权限。以下介绍使用Manager角色管理功能在表授权、列授权和数据库授权三个场景下的操作。 安全模式支持配置Hive表、列或数据库的权限,普通模式不支持配置Hive表、列或数据库的权限。 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Hive的Ranger访问权限策略。
  • 相关概念 表1 使用Hive表、列或数据库场景权限一览 操作场景 用户需要的权限 DESCRIBE TABLE 查询(Select) SHOW PARTITIONS 查询(Select) ANALYZE TABLE 查询(Select)、插入(Insert) SHOW COLUMNS 查询(Select) SHOW TABLE STATUS 查询(Select) SHOW TABLE PROPERTIES 查询(Select) SELECT 查询(Select) EXPLAIN 查询(Select) CREATE VIEW 查询(Select)、Select授权(Grant Of Select)、建表(Create) SHOW CREATE TABLE 查询(Select)、Select授权(Grant Of Select) CREATE TABLE 建表(Create) ALTER TABLE ADD PARTITION 插入(Insert) INSERT 插入(Insert) INSERT OVERWRITE 插入(Insert)、删除(Delete) LOAD 插入(Insert)、删除(Delete) ALTER TABLE DROP PARTITION 删除(Delete) CREATE FUNCTION Hive管理员权限(Hive Admin Privilege) DROP FUNCTION Hive管理员权限(Hive Admin Privilege) ALTER DATABASE Hive管理员权限(Hive Admin Privilege)
  • 安全认证 Flink整个系统存在三种认证方式: 使用kerberos认证:Flink yarn client与Yarn Resource Manager、JobManager与Zookeeper、JobManager与HDFS、TaskManager与HDFS、Kafka与TaskManager、TaskManager和Zookeeper。 使用security cookie进行认证:Flink yarn client与Job Manager、JobManager与TaskManager、TaskManager与TaskManager。 使用YARN内部的认证机制:Yarn Resource Manager与Application Master(简称AM)。 Flink的JobManager与YARN的AM是在同一个进程下。 如果用户集群开启Kerberos认证需要使用kerberos认证。 表1 安全认证方式 安全认证方式 说明 配置方法 Kerberos认证 当前只支持keytab认证方式。 从 FusionInsight Manager下载用户keytab,并将keytab放到Flink客户端所在主机的某个文件夹下。 在“flink-conf.yaml”上配置: keytab路径。 security.kerberos.login.keytab: /home/flinkuser/keytab/abc222.keytab 说明: “/home/flinkuser/keytab/abc222.keytab”表示的是用户目录。 principal名。 security.kerberos.login.principal: abc222 对于HA模式,如果配置了ZooKeeper,还需要设置ZK kerberos认证相关的配置。配置如下: zookeeper.sasl.disable: false security.kerberos.login.contexts: Client 如果用户对于Kafka client和Kafka broker之间也需要做kerberos认证,配置如下: security.kerberos.login.contexts: Client,KafkaClient Security Cookie 认证 - 在Flink客户端的“bin”目录下,调用“generate_keystore.sh”脚本,生成“Security Cookie”、“flink.keystore”文件和“flink.truststore”文件。 执行sh generate_keystore.sh,输入用户自定义密码。密码不允许包含#。 说明: 执行脚本后,在Flink客户端的“conf”目录下生成“flink.keystore”和“flink.truststore”文件,并且在客户端配置文件“flink-conf.yaml”中将以下配置项进行了默认赋值。 将配置项“security.ssl.keystore”设置为“flink.keystore”文件所在绝对路径。 将配置项“security.ssl.truststore”设置为“flink.truststore”文件所在的绝对路径。 将配置项“security.cookie”设置为“generate_keystore.sh”脚本自动生成的一串随机规则密码。 默认“flink-conf.yaml”中“security.ssl.encrypt.enabled: false”,“generate_keystore.sh”脚本将配置项“security.ssl.key-password”、“security.ssl.keystore-password”和“security.ssl.truststore-password”的值设置为调用“generate_keystore.sh”脚本时输入的密码。 如果需要使用密文时,设置“flink-conf.yaml”中“security.ssl.encrypt.enabled: true”,“generate_keystore.sh”脚本不会配置“security.ssl.key-password”、“security.ssl.keystore-password”和“security.ssl.truststore-password”的值,需要使用Manager明文加密API进行获取,执行curl -k -i -u user name:password -X POST -HContent-type:application/json -d '{"plainText":"password"}' 'https://x.x.x.x:28443/web/api/v2/tools/encrypt' 其中user name:password分别为当前系统登录用户名和密码;"plainText"的password为调用“generate_keystore.sh”脚本时的密码;x.x.x.x为集群Manager的浮动IP。命令中如果携带认证密码信息可能存在安全风险,在执行命令前建议关闭系统的history命令记录功能,避免信息泄露。 查看是否打开“Security Cookie”开关,即查看配置“flink-conf.yaml”文件中的“security.enable: true”,查看“security cookie”是否已配置成功,例如: security.cookie: ae70acc9-9795-4c48-ad35-8b5adc8071744f605d1d-2726-432e-88ae-dd39bfec40a9 说明: 使用 MRS 客户端预制“generate_keystore.sh”脚本获取SSL证书有效期为5年。 如果要关闭默认的SSL认证方式,需在“flink-conf.yaml”文件中配置“security.ssl.enabled”的值为“false”,并且注释如下参数:security.ssl.key-password、security.ssl.keystore-password、security.ssl.keystore、security.ssl.truststore-password、security.ssl.trustore。 YARN内部认证方式 该方式是YARN内部的认证方式,不需要用户配置。 - 当前一个Flink集群只支持一个用户,一个用户可以创建多个Flink集群。
  • 配置HDFS文件和目录的权限 HDFS支持用户进行文件和目录默认权限的修改。HDFS默认用户创建文件和目录的权限的掩码为“022”,如果默认权限满足不了用户的需求,可以通过配置项进行默认权限的修改。 参数入口: 请参考修改集群服务配置参数,进入HDFS的“全部配置”页面,在搜索框中输入参数名称。 表1 参数说明 参数 描述 默认值 fs.permissions.umask-mode 当客户端在HDFS上创建文件和目录时使用此umask值(用户掩码)。类似于linux上的文件权限掩码。 可以使用八进制数字也可以使用符号,例如:“022” (八进制,等同于以符号表示的u=rwx,g=r-x,o=r-x),或者“u=rwx,g=rwx,o=”(符号法,等同于八进制的“007”)。 说明: 8进制的掩码,和实际权限设置值正好相反,建议使用符号表示法,描述更清晰。 022
  • SparkSQL权限 类似于Hive,SparkSQL也是建立在Hadoop上的 数据仓库 框架,提供类似SQL的结构化数据。 MRS提供用户、用户组和角色,集群中的各类权限需要先授予角色,然后将用户或者用户组与角色绑定。用户只有绑定角色或者加入绑定角色的用户组,才能获得权限。 如果当前组件使用了Ranger进行权限控制,须基于Ranger配置相关策略进行权限管理,具体操作可参考添加Spark2x的Ranger访问权限策略。 Spark2x开启或关闭Ranger鉴权后,需要重启Spark2x服务,并重新下载客户端,或刷新客户端配置文件spark/conf/spark-defaults.conf: 开启Ranger鉴权:spark.ranger.plugin.authorization.enable=true 关闭Ranger鉴权:spark.ranger.plugin.authorization.enable=false
  • SparkSQL使用场景及对应权限 用户通过SparkSQL服务创建数据库需要加入Hive组,不需要角色授权。用户在Hive和HDFS中对自己创建的数据库或表拥有完整权限,可直接创建表、查询数据、删除数据、插入数据、更新数据以及授权他人访问表与对应HDFS目录与文件。 如果用户访问别人创建的表或数据库,需要授予权限。所以根据SparkSQL使用场景的不同,用户需要的权限可能也不相同。 表1 SparkSQL使用场景 主要场景 用户需要的权限 使用SparkSQL表、列或数据库 使用其他用户创建的表、列或数据库,不同的场景需要不同的权限,例如: 创建表,需要“创建”。 查询数据,需要“查询”。 插入数据,需要“插入”。 关联使用其他组件 部分场景除了SparkSQL权限,还可能需要组件的权限,例如: 使用Spark on HBase,在SparkSQL中查询HBase表数据,需要设置HBase权限。 在一些特殊SparkSQL使用场景下,需要单独设置其他权限。 表2 SparkSQL授权注意事项 场景 用户需要的权限 创建SparkSQL数据库、表、外表,或者为已经创建的表或外表添加分区,且Hive用户指定数据文件保存在“/user/hive/warehouse”以外的HDFS目录。 需要此目录已经存在,客户端用户是目录的属主,且用户对目录拥有“读”、“写”和“执行”权限。同时用户对此目录上层的每一级目录都拥有“读”和“执行”权限。 在Spark2x中,在创建HBase的外表时,需要拥有Hive端database的“创建”权限。而在Spark 1.5中,在创建HBase的外表时,需要拥有Hive端database的“创建”权限,也需要拥有HBase端Namespace的“创建”权限。 用户使用load将指定目录下所有文件或者指定文件,导入数据到表中。 数据源为Linux本地磁盘,指定目录时需要此目录已经存在,系统用户“omm”对此目录以及此目录上层的每一级目录拥有“r”和“x”的权限。指定文件时需要此文件已经存在,“omm”对此文件拥有“r”的权限,同时对此文件上层的每一级目录拥有“r”和“x”的权限。 数据源为HDFS,指定目录时需要此目录已经存在,SparkSQL用户是目录属主,且用户对此目录及其子目录拥有“读”、“写”和“执行”权限,并且其上层的每一级目录拥有“读”和“执行”权限。指定文件时需要此文件已经存在,SparkSQL用户是文件属主,且用户对文件拥有“读”、“写”和“执行”权限,同时对此文件上层的每一级目录拥有“读”和“执行”权限。 创建函数、删除函数或者修改任意数据库。 需要授予“管理”权限。 操作Hive中所有的数据库和表。 需加入到supergroup用户组,并且授予“管理”权限。 对部分datasource表赋予insert权限后,执行insert|analyze操作前需要单独对hdfs上的表目录赋予写权限。 当前对spark datasource表赋予Insert权限时,如果表格式为:text|csv|json|parquet|orc,则不会修改表目录的权限。因此,对以上几种类型的datasource表赋予Insert权限后,还需要单独对hdfs上的表目录赋予写权限,用户才能成功对表执行insert|analyze操作。
  • SparkSQL权限模型 用户使用SparkSQL服务进行SQL操作,必须对SparkSQL数据库和表(含外表和视图)拥有相应的权限。完整的SparkSQL权限模型由元数据权限与HDFS文件权限组成。使用数据库或表时所需要的各种权限都是SparkSQL权限模型中的一种。 元数据权限 元数据权限即在元数据层上进行权限控制,与传统关系型数据库类似,SparkSQL数据库包含“创建”和“查询”权限,表和列包含“查询”、“插入”、“UPDATE”和“删除”权限。SparkSQL中还包含拥有者权限“OWNERSHIP”和Spark管理员权限“管理”。 数据文件权限,即HDFS文件权限 SparkSQL的数据库、表对应的文件保存在HDFS中。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。系统自动以数据库名称和数据库中表的名称创建子目录。访问数据库或者表,需要在HDFS中拥有对应文件的权限,包含“读”、“写”和“执行”权限。 用户对SparkSQL数据库或表执行不同操作时,需要关联不同的元数据权限与HDFS文件权限。例如,对SparkSQL数据表执行查询操作,需要关联元数据权限“查询”,以及HDFS文件权限“读”和“执行”。 使用Manager界面图形化的角色管理功能来管理SparkSQL数据库和表的权限,只需要设置元数据权限,系统会自动关联HDFS文件权限,减少界面操作,提高效率。
  • Web安全 Flink Web安全加固,支持白名单过滤,Flink Web只能通过YARN代理访问,支持安全头域增强。在Flink集群中,各部件的监测端口支持范围可配置。 编码规范: 说明:Web Service客户端和服务器间使用相同的编码方式,是为了防止出现乱码现象,也是实施输入校验的基础。 安全加固:web server响应消息统一采用UTF-8字符编码。 支持IP白名单过滤: 说明:防止非法用户登录,需在web server侧添加IP Filter过滤源IP非法的请求。 安全加固:支持IP Filter实现Web白名单配置,配置项是“jobmanager.web.allow-access-address”,默认情况下只支持YARN用户接入。 安装客户端之后需要将客户端节点IP追加到jobmanager.web.allow-access-address配置项中。 禁止将文件绝对路径发送到客户端: 说明:文件绝对路径发送到客户端会暴露服务端的目录结构信息,有助于攻击者遍历了解系统,为攻击者攻击提供帮助。 安全加固:Flink配置文件中所有配置项中如果包含以/开头的,则删掉第一级目录。 同源策略: 说明:如果两个URL的协议,主机和端口均相同,则它们同源;如果不同源,默认不能相互访问;除非被访问者在其服务端显示指定访问者的来源。 安全加固:响应头“Access-Control-Allow-Origin”头域默认配置为YARN集群ResourceManager的IP地址,如果源不是来自YARN的,则不能互相访问。 防范敏感信息泄露: 说明:带有敏感数据的Web页面都应该禁止缓存,以防止敏感信息泄漏或通过代理服务器上网的用户数据互窜现象。 安全加固:添加“Cache-control”、“Pragma”、“Expires”安全头域,默认值为:“Cache-Control:no-store”,“Pragma :no-cache”,“Expires : 0”。实现了安全加固,Flink和web server交互的内容将不会被缓存。 防止劫持: 说明:由于点击劫持(ClickJacking)和框架盗链都利用到框架技术,所以需要采用安全措施。 安全加固:添加“X-Frame-Options”安全头域,给浏览器提供允许一个页面可否在“iframe”、“frame”或“object”网站中的展现页面的指示,如果默认配置为“X-Frame-Options: DENY”,则确保任何页面都不能被嵌入到别的“iframe”、“frame”或“object”网站中,从而避免了点击劫持 (clickjacking) 的攻击。 对Web Service接口调用记录日志: 说明:对“Flink webmonitor restful”接口调用进行日志记录。 安全加固:“access log”支持配置:“jobmanager.web.accesslog.enable”,默认为“true”。且日志保存在单独的“webaccess.log”文件中。 跨站请求( CS RF)伪造防范: 说明:在B/S应用中,对于涉及服务器端数据改动(如增加、修改、删除)的操作必须进行跨站请求伪造的防范。跨站请求伪造是一种挟制终端用户在当前已登录的Web应用程序上执行非本意的操作的攻击方法。 安全加固:现有请求修改的接口有2个post,1个delete,其余均是get请求,非get请求的接口均已删除。 异常处理: 说明:应用程序出现异常时,捕获异常,过滤返回给客户端的信息,并在日志中记录详细的错误信息。 安全加固:默认的错误提示页面,进行信息过滤,并在日志中记录详细的错误信息。新加四个配置项,默认配置为FusionInsight提供的跳转URL,错误提示页面跳转到固定配置的URL中,防止暴露不必要的信息。 表1 四个配置项参数介绍 参数 描述 默认值 是否必选配置 jobmanager.web.403-redirect-url web403页面,访问如果遇到403错误,则会重定向到配置的页面。 - 是 jobmanager.web.404-redirect-url web404页面,访问如果遇到404错误,则会重定向到配置的页面。 - 是 jobmanager.web.415-redirect-url web415页面,访问如果遇到415错误,则会重定向到配置的页面。 - 是 jobmanager.web.500-redirect-url web500页面,访问如果遇到500错误,则会重定向到配置的页面。 - 是 HTML5安全: 说明:HTML5是下一代的Web开发规范,为开发者提供了许多新的功能并扩展了标签。这些新的标签及功能增加了攻击面,存在被攻击的风险(例如跨域资源共享、客户端存储、WebWorker、WebRTC、WebSocket等)。 安全加固:添加“Access-Control-Allow-Origin”配置,如运用到跨域资源共享功能,可对HTTP响应头的“Access-Control-Allow-Origin”属性进行控制。 Flink不涉及如客户端存储、WebWorker、WebRTC、WebSocket等安全风险。
  • Flink认证和加密 Flink集群中,各部件支持认证。 Flink集群内部各部件和外部部件之间,支持和外部部件如YARN、HDFS、ZooKeeprer进行kerberors认证。 Flink集群内部各部件之间,如Flink client和JobManager、JobManager和TaskManager、TaskManager和TaskManager之间支持security cookie认证。 Flink集群中,各部件支持SSL加密传输;集群内部各部件之间,如Flink client和JobManager、JobManager和TaskManager、TaskManager和TaskManager之间支持SSL加密传输。
  • ACL控制 在HA模式下,支持ACL控制。 Flink在HA模式下,支持用ZooKeeper来管理集群和发现服务。ZooKeeper支持SASL ACL控制,即只有通过SASL(kerberos)认证的用户,才有往ZK上操作文件的权限。如果要在Flink上使用SASL ACL控制,需要在Flink配置文件中设置如下配置: high-availability.zookeeper.client.acl: creator zookeeper.sasl.disable: false 具体配置项介绍请参考HA。
  • Flink用户权限说明 访问并使用Flink WebUI进行业务操作需为用户赋予FlinkServer相关权限,Manager的admin用户没有FlinkServer的业务操作权限。 FlinkServer中应用(租户)是最大管理范围,包含集群连接管理、数据连接管理、应用管理、流表和作业管理等。 FlinkServer中有如表1所示三种资源权限: 表1 FlinkServer资源权限 权限名称 权限描述 备注 FlinkServer管理员权限 具有所有应用的编辑、查看权限。 是FlinkServer的最高权限。如果已经具有FlinkServer管理员权限,则会自动具备所有应用的权限。 应用编辑权限 具有当前应用编辑权限的用户,可以执行创建、编辑和删除集群连接、数据连接,创建流表、创建作业及运行作业等操作。 同时具有当前应用查看权限。 应用查看权限 具有当前应用查看权限的用户,可以查看应用。 - 父主题: Flink用户权限管理
  • Doris用户权限说明 Doris目前支持的权限如表1所示。 表1 Doris权限列表 权限名称 权限介绍 Node_priv 节点变更权限。包括FE、BE、DBroker节点的添加、删除、下线等操作。 该权限只能赋予Global级别。 Admin_priv 除NODE_PRIV以外的所有权限。 Grant_priv 权限变更权限,允许执行授权、撤权、添加/删除/变更用户/角色 等操作。 拥有该权限的用户不能赋予其他用户“node_priv”权限,除非用户本身拥有“node_priv”权限。 Select_priv 对数据库、表的只读权限。 Load_priv 对数据库、表的写权限,包括Load、Insert、Delete等。 Alter_priv 对数据库、表的更改权限。包括重命名库/表、添加/删除/变更 列、添加/删除分区等操作。 Create_priv 创建数据库、表、视图的权限。 Drop_priv 删除数据库、表、视图的权限。 Usage_priv 资源的使用权限和workload group权限。 根据权限适用范围的不同,将库表的权限分为以下四个层级: CATA LOG LEVEL:数据目录(Catalog)级权限。被授予的权限适用于指定Catalog中的任意库表。 DATABASE LEVEL:数据库级权限。被授予的权限适用于指定数据库中的任意表。 TABLE LEVEL:表级权限。被授予的权限适用于指定数据库中的指定表。 RESOURCE LEVEL: 资源级权限。被授予的权限适用于指定资源。 父主题: Doris用户权限管理
  • Hive权限模型 使用Hive组件,必须对Hive数据库和表(含外表和视图)拥有相应的权限。在MRS中,完整的Hive权限模型由Hive元数据权限与HDFS文件权限组成。使用数据库或表时所需要的各种权限都是Hive权限模型中的一种。 Hive元数据权限。 与传统关系型数据库类似,MRS的Hive数据库包含“建表”和“查询”权限,Hive表和列包含“查询”、“插入”和“删除”权限。Hive中还包含拥有者权限“OWNERSHIP”和“Hive管理员权限”。 Hive数据文件权限,即HDFS文件权限。 Hive的数据库、表对应的文件保存在HDFS中。默认创建的数据库或表保存在HDFS目录“/user/hive/warehouse”。系统自动以数据库名称和数据库中表的名称创建子目录。访问数据库或者表,需要在HDFS中拥有对应文件的权限,包含“读”、“写”和“执行”权限。 用户对Hive数据库或表执行不同操作时,需要关联不同的元数据权限与HDFS文件权限。例如,对Hive数据表执行查询操作,需要关联元数据权限“查询”,以及HDFS文件权限“读”和“写”。 使用Manager界面图形化的角色管理功能来管理Hive数据库和表的权限,只需要设置元数据权限,系统会自动关联HDFS文件权限,减少界面操作,提高效率。
  • 配置HetuEngine使用代理用户鉴权 适用于MRS 3.3.0及以后版本。 HetuEngine支持使用FusionInsight Manager用户认证时通过客户自有用户(代理用户)使用Ranger鉴权的能力。即在使用HetuEngine客户端时,通过--session-user来指定代理用户。 创建认证用户或代理用户请参考创建HetuEngine权限角色。 启用Ranger鉴权并为代理用户配置操作数据源的数据库、表、列的管理权限,具体操作请参考添加HetuEngine的Ranger访问权限策略。 集群已启用Kerberos认证(安全模式) 使用kinit指定认证用户(需为HetuEngine管理员用户,并额外添加supergroup用户组才能代理其他用户鉴权),如hetuadmin1。 kinit hetuadmin1 根据提示输入用户密码,首次登录需重置密码。 再使用--session-user指定代理用户,如user1。 hetu-cli --session-user user1 集群未启用Kerberos认证(普通模式) 使用--user指定认证用户(需拥有hetuuser用户组才能代理其他用户鉴权),如user;使用--session-user指定代理用户,如user1。 hetu-cli --user user --session-user user1 该功能不适用于HiveMetastore数据源鉴权与多用户映射共存的场景。 父主题: HetuEngine用户权限管理