配置MRS多用户访问OBS细粒度权限
开启细粒度权限时,用户通过该指导配置访问OBS权限,实现MRS用户对OBS文件系统下的目录权限控制。
如需对MRS的用户访问OBS的资源进行详细控制,可通过该功能实现。例如,您只允许用户组A访问某一OBS文件系统中的日志文件,您可以执行以下操作来实现:
- 为MRS集群配置OBS访问权限的委托,实现使用ECS自动获取的临时AK/SK访问OBS。避免了AK/SK直接暴露在配置文件中的风险。
- 在IAM中创建一个只允许访问某一OBS文件系统中的日志文件的策略,并创建一个绑定该策略权限的委托。
- 在MRS集群中,新建的委托与MRS集群中的用户组A进行绑定,即可实现用户组A只拥有访问某一OBS文件系统中的日志文件的权限。
- spark-beeline在安全集群中提交作业的内置用户名为spark,在普通集群中提交作业的内置用户名为omm。
- hbase shell在安全集群提交作业的内置用户名为hbase,在普通集群中提交作业的内置用户名为omm。
- Presto在安全集群提交作业的内置用户名为omm、hive,在普通集群提交作业的内置用户名为omm(当通过“组件管理 > Presto > 服务配置”,选择“全部配置”并搜索修改参数hive.hdfs.impersonation.enabled的值为true可以实现MRS多用户访问OBS细粒度权限功能)。
前提条件
- 开启细粒度权限控制的用户,权限管理请参考创建MRS操作用户。
- 需要对IAM的委托(请参考IAM服务用户指南 > 委托)和OBS细粒度策略有一定了解。
步骤一:给集群配置有OBS访问权限的委托
请参考配置存算分离集群(委托方式)配置OBS访问权限的委托。
配置的委托对该集群上所有用户(包括内置用户)及用户组生效,如需对集群上的用户及用户组访问OBS的权限进行控制请继续执行后续步骤。
配置OBS路径权限时,如果配置了写权限,需要同步配置对应的回收站路径。
默认回收站路径为 /user/${current.user}/.Trash/,${current.user}代表当前使用的用户。
步骤二:在IAM服务创建策略及委托
创建拥有不同访问权限的策略,并将策略与委托进行绑定,具体操作请参考在IAM服务创建策略及委托。
步骤三:在MRS集群详情页面配置OBS权限控制映射关系
- 在MRS控制台,选择“集群列表 > 现有集群”并单击集群名称。
- 在“概览”页签的基本信息区域,单击“OBS权限控制”右侧的“单击管理”。
- 单击“添加映射”,并参考表1配置相关参数。
表1 OBS权限控制参数 参数
说明
IAM委托
选择2中创建的委托。
类型
- User:在用户级别进行映射
- Group:用户组级别进行映射
说明:- 用户级别的映射优先级大于用户组级别的映射。若选择Group,建议在“MRS用户(组)”一栏,填写用户的主组名称。
- 请避免同个用户名(组)出现在多个映射记录上的情况。
MRS 用户(组)
MRS中的用户(组)的名称,以英文逗号进行分隔。
说明:- 对于没有配置在OBS权限控制的用户,且没有配置AK、SK时,将以MRS_ECS_DEFAULT_AGENCY中的OBS Operator的权限访问OBS。对于组件内置用户不建议绑定在委托中。
- 如需对组件内置用户在以下场景提交作业时配置委托,要求如下:
- 如需对spark-beeline的操作进行权限控制,安全集群时配置用户名“spark”,普通集群时配置用户名“omm”。
- 如需对hbase shell的操作进行权限控制,安全集群时配置用户名“hbase”,普通集群时配置用户名“omm”。
- 如需对Presto的操作进行权限控制,安全集群时配置用户名“omm”、“hive”和登录客户端的用户名,普通集群时配置用户名“omm”和登录客户端的用户名。
- 如需使用Hive在beeline模式下创建表时,配置内置用户“hive”。
- 单击“确定”。
- 勾选“我同意授权MRS用户(组)与IAM委托之间的信任关系。”,并单击“确定”,完成MRS用户与OBS权限的映射关系。
当集群详情页面“概览”页签的“OBS权限控制”后出现或OBS权限控制的映射表已刷新,表示映射生效(过程大约需要1分钟)。
在关系列表的“操作”列可以对已添加的关系进行编辑和删除。
- 对于没有配置在OBS权限控制的用户,且没有配置AK、SK时,将以集群配置的委托在“对象存储服务”项目下所拥有的权限访问OBS。
- 无论用户是否配置OBS权限控制,只要配置AK、SK时,将以AK、SK的权限访问OBS。
- 映射关系的修改、创建、删除需要用户有Security Administrator权限。
- 修改映射关系后,若想使之在spark-beeline中生效,需要重启Spark服务,若想使之在hive beeline中生效,需要退出beeline重新进入,若想使之在Presto服务中生效,需要重启Presto服务。
在开启OBS权限控制功能时各组件访问OBS的说明
- 以root用户登录集群任意一个节点,密码为用户创建集群时设置的root密码。
- 配置环境变量(客户端默认安装路径为“/opt/Bigdata/client”,具体以实际为准。)。
source /opt/Bigdata/client/bigdata_env
- 如果当前集群已启用Kerberos认证,执行以下命令认证当前用户。如果当前集群未启用Kerberos认证,则无需执行此命令。
kinit MRS集群用户
例如, kinit admin
- 如果当前集群未启用Kerberos认证,执行如下命令登录执行操作的用户,该用户需要属于supergroup组,创建用户可参考创建用户,将XXXX替换成用户名。
mkdir /home/XXXX
chown XXXX /home/XXXX
su - XXXX
- 访问OBS。无需再配置AK、SK和endpoint。OBS路径格式:obs://buck_name/XXX。
例如:hadoop fs -ls "obs://obs-example/job/hadoop-mapreduce-examples-3.1.2.jar"
- 如需使用hadoop fs删除OBS上文件,请使用hadoop fs -rm -skipTrash来删除文件。
- spark-sql、spark-beeline在创建表时,若不涉及数据导入,则不会访问OBS。即若在一个无权限的OBS目录下创建表,CREATE TABLE仍会成功,但插入数据会报403 AccessDeniedException。
在IAM服务创建策略及委托
- 在IAM服务创建策略。
- 登录IAM服务控制台。
- 单击“权限 > 创建自定义策略”。
- 参考表2填写参数。
表2 策略参数 参数
说明
策略名称
只能包含如下字符:大小写字母、数字、空格和特殊字符(-_.,)。
作用范围
选择全局级服务,OBS为全局服务。
配置策略方式
选择可视化视图。
策略内容
- “允许”选择“允许”。
- “云服务”选择“对象存储服务 (OBS)”。
- “操作”勾选所有“写”、“列表”和“只读”权限。
- “特定资源”选择:
- “object”选择“通过资源路径指定”,并单击“添加资源路径”分别输入路径obs_bucket_name/tmp/和obs_bucket_name/tmp/*。此处以/tmp目录为例,如需其他目录权限请参考该步骤添加对应目录及该目录下所有对象的资源路径。
- “bucket”选择“通过资源路径指定”,并单击“添加资源路径”输入路径obs_bucket_name。
- (可选)请求条件,暂不添加。
策略描述
可选,对策略的描述。
各个组件的写数据操作若通过rename的方式实现时,写数据时要配置删除对象的权限。
- 单击“确定”保存策略。
- 在IAM服务创建委托。
- 登录IAM服务控制台。
- 单击“委托 > 创建委托”。
- 参考表3填写参数。
表3 委托参数 参数
说明
委托名称
只能包含如下字符:大小写字母、数字、空格和特殊字符(-_.,)。
委托类型
选择普通账号。
委托的账号
填写本用户的云账号,即使用手机号开通的账号,不能是联邦用户或者IAM用户。
持续时间
请根据需要选择。
描述
可选,对委托的描述。
权限选择
- 在“项目”列对应的“对象存储服务”行,单击“操作”列的“修改”。
- 勾选1中创建的策略,使之出现在“已选择策略中”。
- 单击“确定”。
- 单击“确定”保存委托。
当使用该委托访问过OBS后,再修改该委托及其绑定的策略时,最长需要等待15分钟,修改的内容才能生效。