云服务器内容精选

  • 处理建议 在使用DRS进行迁移或同步时,连接目标数据库的账号需要满足一定的权限要求,才能启动任务。不同引擎的任务,需要的账号权限也不同。DRS会在“预检查”阶段对数据库账号权限进行自动检查,并给出处理建议。 以MySQL的迁移为例,目标数据用户权限要求如下: SELECT、CREATE、ALTER、DROP、DELETE、INSERT、UPDATE、INDEX、EVENT、CREATE VIEW、CREATE ROUTINE、TRIGGER、REFEREN CES 、WITH GRANT OPTION。当目标库为8.0.14-8.0.18版本时,还需要有SESSION_VARIABLES_ADMIN权限。 参考语句:GRANT SELECT, CREATE, ALTER, DROP, DELETE, INSERT, UPDATE, INDEX, EVENT, CREATE VIEW, CREATE ROUTINE, TRIGGER, REFERENCES ON [待迁移数据库].* TO 'user1' WITH GRANT OPTION;
  • 角色管理相关操作 在“角色管理”页面,您还可以进行如表2所示的操作。 表2 角色管理相关操作 操作 描述 编辑角色 在“角色管理”页面,单击待编辑角色记录“操作”列的“编辑”,根据实际情况修改角色对应参数取值。 删除角色 在“角色管理”页面,单击待删除角色记录“操作”列的“删除”,删除角色。 查询角色 在“角色管理”页面,在角色列表上方输入框输入“角色代码”或“角色名称”信息,再单击“查询”,查询角色。
  • 权限机制 MRS 集群采用LDAP存储用户和用户组的数据;角色的定义信息保存在关系数据库中,角色和权限的对应关系则保存在组件侧。 MRS使用Kerberos进行统一认证。 用户权限校验流程大致如下: 客户端(用户终端或MRS组件服务)调用MRS认证接口。 MRS使用登录用户名和密码,到Kerberos进行认证。 如果认证成功,客户端会发起访问服务端(MRS组件服务)的请求。 服务端会根据登录的用户,找到其属于的用户组和角色。 服务端获得用户组拥有的所有权限和角色拥有的所有权限的并集。 服务端判断客户端是否有权限访问其请求的资源。 示例场景(RBAC): HDFS中有三个文件fileA、fileB、fileC。 定义角色roleA对fileA有读和写权限,角色roleB对fileB有读权限。 定义groupA属于roleA;groupB属于roleB。 定义userA属于groupA和roleB,userB属于GroupB。 当userA登录成功并访问HDFS时: HDFS获得useA属于的所有角色(roleB)。 HDFS同时还会获得userA属于的所有用户组所属于的角色(roleA)。 此时,userA拥有roleA和roleB对应权限的并集。 因此对于fileA,则userA有读写权限;对fileB,有读权限;对于fileC,无任何权限。 同理userB登录后: userB只拥有roleB对应的权限。 对于fileA,则userB无权限;对fileB,有读权限;对于fileC,无任何权限。
  • 基于策略的权限控制 Ranger组件通过PBAC(policy-based access control,基于策略的权限控制)方式进行权限管理,可对HDFS、Hive、HBase等组件进行更加细粒度的数据访问控制。 组件同时只支持一种权限控制机制,当组件启用Ranger权限控制策略后,通过 FusionInsight Manager创建的角色中关于该组件的权限将失效(HDFS与Yarn的组件ACL规则仍将生效),用户需通过Ranger管理界面添加策略进行资源的赋权。 Ranger的权限模型由多条权限策略组成,权限策略主要由以下几方面组成: 资源 组件所提供的可由用户访问的对象,例如HDFS的文件或文件夹、Yarn中的队列、Hive中的数据库/表/列等。 用户 系统的访问者,每个用户的权限由该用户关联的策略来获得。LDAP中的用户、用户组、角色信息会周期性的同步至Ranger。 权限 策略中针对资源可配置各种访问条件,例如文件的读写,具体可以配置允许条件、拒绝条件以及例外条件等。
  • 基于角色的权限控制 MRS集群通过采用RBAC(role-based access control,基于角色的权限控制)方式对大数据系统进行权限管理,将系统中各组件零散的权限管理功能集中呈现和管理,对普通用户屏蔽掉了内部的权限管理细节,对管理员简化了权限管理的操作方法,提升权限管理的易用性和用户体验。 MRS集群权限模型由“用户-用户组-角色-权限”四类对象构成。 图1 权限模型 权限 由组件侧定义,允许访问组件某个资源的能力。不同组件针对自己的资源,有不同的权限。 例如: HDFS针对文件资源权限,有读、写、执行等权限。 HBase针对表资源权限,有创建、读、写等权限。 角色 组件权限的一个集合,一个角色可以包含多个组件的多个权限,不同的角色也可以拥有同一个组件的同一个资源的权限。 用户组 用户的集合,当用户组关联某个或者多个角色后,该用户组内的用户就将拥有这些角色所定义的组件权限。 不同用户组可以关联同一个角色,一个用户组也可以不关联任何角色,该用户组原则上将不具有任何组件资源的权限。 部分组件针对特定的默认用户组,系统默认赋予了部分权限。 用户 系统的访问者,每个用户的权限由该用户关联的用户组和角色所对应的权限构成,用户需要加入用户组或者关联角色来获得对应的权限。
  • 安全模式 安全模式的集群统一使用Kerberos认证协议进行安全认证。Kerberos协议支持客户端与服务端进行相互认证,提高了安全性,可有效消除使用网络发送用户凭据进行模拟认证的安全风险。集群中由KrbServer服务提供Kerberos认证支持。 Kerberos用户对象 Kerberos协议中,每个用户对象即一个principal。一个完整的用户对象包含两个部分信息:用户名和 域名 。在运维管理或应用开发的场景中,需要在客户端认证用户身份后才能连接到集群服务端。系统操作运维与业务场景中主要使用的用户分为“人机”用户和“机机”用户。二者主要区别在于“机机”用户密码由系统随机生成。 Kerberos认证 Kerberos认证支持两种方式:密码认证及keytab认证。认证有效时间默认为24小时。 密码认证:通过输入用户正确的密码完成身份认证。主要在运维管理场景中使用“人机”用户进行认证,命令为kinit 用户名。 keytab认证:keytab文件包含了用户principal和用户凭据的加密信息。使用keytab文件认证时,系统自动使用加密的凭据信息进行认证无需输入用户密码。主要在组件应用开发场景中使用“机机”用户进行认证。keytab文件也支持在kinit命令中使用。
  • 普通模式 普通模式的集群不同组件使用原生开源的认证机制,不支持kinit认证命令。FusionInsight Manager(含DBService、KrbServer和LdapServer)使用的认证方式为用户名密码方式。组件使用的认证机制如表1所示。 表1 组件认证方式一览表 服务 认证方式 IoTDB simple认证 CDL 无认证 ClickHouse simple认证 Flume 无认证 HBase WebUI:无认证 客户端:simple认证 HDFS WebUI:无认证 客户端:simple认证 HetuEngine WebUI:无认证 客户端:无认证 Hive simple认证 Hue 用户名密码认证 Kafka 无认证 Loader WebUI:用户名密码认证 客户端:无认证 Mapreduce WebUI:无认证 客户端:无认证 Oozie WebUI:用户名密码认证 客户端:simple认证 Spark2x WebUI:无认证 客户端:simple认证 Storm 无认证 Yarn WebUI:无认证 客户端:simple认证 ZooKeeper simple认证 认证方式解释如下: “simple认证”:在客户端连接服务端的过程中,默认以客户端执行用户(例如操作系统用户“root”或“omm”)自动进行认证,管理员或业务用户不显式感知认证,不需要kinit完成认证过程。 “用户名密码认证”:使用集群中“人机”用户的用户名与密码进行认证。 “无认证”:默认任意的用户都可以访问服务端。
  • 同步 IAM 用户 创建用户并授权使用MRS服务,具体请参考创建IAM用户并授权使用MRS。 登录MRS控制台并创建集群,具体请参考自定义购买MRS集群。 在左侧导航栏中选择“现有集群”,单击集群名称进入集群详情页面。 在“概览”页签单击“IAM用户同步”右侧的“单击同步”进行IAM用户同步。 在弹窗“IAM用户同步”的“待同步”页面,搜索需要同步IAM用户所在的用户组,单击对应的用户组名称。在“用户”中勾选需要同步的IAM用户,单击“同步”。 如需同步所有的用户,在“待同步”中勾选“全部同步”即可。 如只勾选“用户组”,该用户组下的用户不会同步,必须勾选“用户组”下对应的用户名称才能同步。 在“IAM用户同步”页面会显示所有的用户组,所有灰色不能选择的用户组和用户则不能进行IAM用户同步。 同步请求下发后,返回MRS控制台在左侧导航栏中选择“操作日志”页面查看同步是否成功,日志相关说明请参考查看MRS云服务操作日志。 同步成功后,即可使用IAM同步用户进行后续操作。 当IAM用户的用户组的所属策略从MRS ReadOnlyAccess向MRS CommonOperations、MRS FullAccess、MRS Administrator变化时,由于集群节点的SSSD(System Security Services Daemon)缓存刷新需要时间,因此同步完成后,请等待5分钟,等待新修改策略生效之后,再进行提交作业。否则,会出现提交作业失败的情况。 当IAM用户的用户组的所属策略从MRS CommonOperations、MRS FullAccess、MRS Administrator向MRS ReadOnlyAccess变化时,由于集群节点的SSSD缓存刷新需要时间,因此同步完成后,请等待5分钟,新修改策略才能生效。 单击“IAM用户同步”右侧的“同步”后,集群详情页面会出现短时间空白,这是由于正在进行用户数据同步中,请耐心等待,数据同步完成后,页面将会正常显示。 安全集群提交作业:安全集群中用户可通过界面“作业管理”功能提交作业,具体请参考运行MapReduce作业。 集群详情页面页签显示完整(包含“组件管理”,“租户管理”和“备份恢复”)。 登录Manager页面。 使用admin账号登录Manager,具体请参考访问MRS集群Manager。 初始化IAM同步用户密码,具体请参考初始化MRS集群用户密码。 修改用户所在用户组绑定的角色,精确控制Manager下用户权限,具体请参考管理MRS集群用户组修改用户组绑定的角色,如需创建修改角色请参考添加角色。用户所在用户组绑定的组件角色修改后,权限生效需要一定时间,请耐心等待。 使用IAM同步用户及7.b初始化后的密码登录Manager。 当IAM用户权限发生变化时,需要执行4进行二次同步。对于系统用户,二次同步后用户的权限为IAM系统策略定义的权限和用户在Manager自行添加角色的权限的并集。对于自定义用户,二次同步后用户的权限以Manager配置的权限为准。 系统用户:如果IAM用户所在用户组全部都绑定系统策略(RABC策略和细粒度策略均属于系统策略),则该用户为系统用户。 自定义用户:如果IAM用户所在用户组只要有绑定任何自定义策略,则该用户为自定义用户。 取消IAM用户同步。 需要取消某个IAM用户同步时,在“已同步”的“用户”中勾选需要取消的用户名称,单击“取消同步”。 需要取消某个IAM用户组下的所有用户同步时,在“已同步”的“用户组”中勾选需要取消的用户组,单击“取消同步”。
  • 操作场景 使用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)
  • 前提条件 获取一个拥有管理员权限的用户,例如“admin”。 请参考创建Hive角色,在Manager界面创建一个角色,例如“hrole”,不需要设置Hive权限、设置提交HQL命令到Yarn执行的权限。 在Manager界面创建两个使用Hive的“人机”用户并加入“hive”组,例如“huser1”和“huser2”。“huser2”需绑定“hrole”。使用“huser1”创建一个数据库“hdb”,并在此数据库中创建表“htable”。
  • 安全认证 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操作。