阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

基于Hadoop SLA认证机制实现权限控制

127次阅读
没有评论

共计 6041 个字符,预计需要花费 16 分钟才能阅读完成。

Hadoop 集群上存储数据,同时基于 MapReduce 计算框架可以实现计算任务,那么无论是从数据保护的角度,还是从提交计算任务占用资源的角度来看,都需要存在一种权限管理与分配机制,能够很好地限制哪些人可以在 HDFS 上存储数据,哪些人可以利用集群的资源来处理特定的计算任务。当然,如果能够非常完美地解决这些问题是最好的。当前 Hadoop 本身提供的权限管理功能还不能满足普遍的需要,或者我们从 Hadoop 已有的一些简单或复杂的认证机制选择适合自己所在组织机构需要的,或者我们在外围开发一些权限管理系统与 Hadoop 整合作为补充。
对比 Kerberos 认证(Authentication)配置方式与 SLA 授权(Service Level Authorization)方式,Kerberos 配置相当复杂,而且还要依赖于外部的密钥分发中心 KDC(Key Distribution Center)服务器,如果 KDC 出现问题,那么就会导致依赖于 KDC 认证的整个 Hadoop 集群无法使用,鉴于此,对于一些相对小的开发团队来说还是更倾向于粗粒度的 Hadoop SLA 授权机制。
Hadoop SLA 基于 Hadoop 的各种服务(基于协议来划分)与 Linux 系统的用户、用户组来实现。Hadoop 通过制定接口协议的方式来实现节点之间服务调用的逻辑,这样每一个协议所指定的一组服务就是一个认证单元,再基于底层 Linux 系统的用户和用户组来限制用户(可能是节点服务)有权限执行某一种协议所包含的操作集合,下面我们看一下 Hadoop 中的各种协议:

协议名称 范围 说明
ClientProtocol HDFS 用户代码基于 DistributedFileSystem 与 NameNode 交互,可以操作 Hadoop 的 Namespace,以及打开 / 关闭文件流操作。
ClientDatanodeProtocol HDFS 客户端与 DataNode 交互协议,用来实现数据库恢复(Block Recovery)。
DatanodeProtocol HDFS DataNode 与 NameNode 通信的协议,DataNode 基于此协议向 NameNode 发送 block report,以及 DataNode 当前状态信息(如负载情况)。
InterDatanodeProtocol HDFS DataNode 之间进行通信的协议,用来更新 Block 副本(replica)信息,如时间戳、长度等信息。
NamenodeProtocol HDFS SecondaryNameNode 与 NameNode 进行通信的协议,用来获取 NameNode 的状态信息,如进行 checkpoint 的 edits 与 fsimage。
AdminOperationsProtocol HDFS HDFS 管理操作协议。
RefreshUserMappingsProtocol HDFS、MR 用来刷新缓存中用户与用户组映射关系信息,因为无论是操作 HDFS,还是运行 MapReduce Job,都会用到用户信息。
RefreshAuthorizationPolicyProtocol HDFS、MR 用来更新认证策略(Authorization Policy)配置,对应于配置文件 /etc/hadoop/hadoop-policy.xml,控制执行 hdfs dfsadmin -refreshServiceAcl 和 yarn rmadmin -refreshServiceAcl 的权限。
HAServiceProtocol HDFS HDFS HA 操作协议,用来管理 Active NameNode 与 Stand-by NameNode 状态。
ZKFailoverController HDFS ZooKeeper Failover 控制器操作权限,用于 HDFS HA。
QJournalProtocol HDFS QuorumJournalManager 与 JournalNode 之间通信的协议,用于 HDFS HA,用来同步 edits,并协调 Active NameNode 与 Stand-by NameNode 状态。
HSClientProtocol HDFS 客户端与 MR History Server 之间通讯的协议,用来查看 Job 历史信息。
ResourceTracker YARN ResourceManager 与 NodeManager 之间通信的协议。
ResourceManagerAdministrationProtocol YARN ResourceManager 管理操作协议。
ApplicationClientProtocol YARN YARN 客户端(Application)与 ResourceManager 通信的协议,包括 Job 提交、Job 取消,查询 Application 状态信息等。
ApplicationMasterProtocol YARN ApplicationMaster 与 ResourceManager 之间进行通信的协议,包括 AM 向 RM 发送注册或注销请求(获取或释放资源)。
ContainerManagementProtocol YARN ApplicationMaster 与 NodeManager 之间进行通信的协议,包括启动 / 停止 Container 调用请求。
LocalizationProtocol YARN NodeManager 与 ResourceLocalizer 之间进行通信的协议。
TaskUmbilicalProtocol MR Map/Reduce Task 进程与后台父进程(向 MR ApplicationMaster 请求创建 Map/Reduce Task)之间进行通信的协议。
MRClientProtocol MR MR JobClient 与 MR ApplicationMaster 之间进行通信的协议,包括查询 Job 状态等。

上表中是基于 SLA 划分的不同服务级别,要想使 SLA 认证生效,首相需要在 Hadoop 配置文件 /etc/hadoop/core-site.xml 中增加如下配置内容:

<property><name>hadoop.security.authorization</name><value>true</value></property>

该配置属性 hadoop.security.authorization 默认是 false,如果集群已经运行,修改了该配置需要重新启动 Hadoop 集群。然后需要进行 SLA 认证的详细配置,修改配置文件 /etc/hadoop/hadoop-policy.xml,该配置文件中的配置项与对应的 SLA 协议之间的对应关系如下表所示:

配置项 协议名称
security.client.protocol.acl ClientProtocol
security.client.datanode.protocol.acl ClientDatanodeProtocol
security.datanode.protocol.acl DatanodeProtocol
security.inter.datanode.protocol.acl InterDatanodeProtocol
security.namenode.protocol.acl NamenodeProtocol
security.admin.operations.protocol.acl AdminOperationsProtocol
security.refresh.usertogroups.mappings.protocol.acl RefreshUserMappingsProtocol
security.refresh.policy.protocol.acl RefreshAuthorizationPolicyProtocol
security.ha.service.protocol.acl HAServiceProtocol
security.zkfc.protocol.acl ZKFailoverController
security.qjournal.service.protocol.acl QJournalProtocol
security.mrhs.client.protocol.acl HSClientProtocol
security.resourcetracker.protocol.acl ResourceTracker
security.resourcemanager-administration.protocol.acl ResourceManagerAdministrationProtocol
security.applicationclient.protocol.acl ApplicationClientProtocol
security.applicationmaster.protocol.acl ApplicationMasterProtocol
security.containermanagement.protocol.acl ContainerManagementProtocol
security.resourcelocalizer.protocol.acl LocalizationProtocol
security.job.task.protocol.acl TaskUmbilicalProtocol
security.job.client.protocol.acl MRClientProtocol

配置 SLA 权限,实际上是增加 ACL(配置用户或用户组)基本格式要求如下:

  • 如果既有用户,又有用户组,配置内容格式:user1,user2 group1,group2
  • 如果只有用户组,配置内容前面增加一个空格:group1,group2
  • 配置内容为 *,表示所有用户都具有对应的服务操作权限

下面, 我们给定如下的需求:

  • hadoop 用户作为 Hadoop 集群的管理员角色,可以执行任何操作
  • 为了防止其他用户使用 hadoop 用户,使 hadoop 用户归属于用户组 g_super_adm,使属于该组的用户具有集群管理员权限
  • 只有 hadoop 用户具有修改 SLA 认证权限的配置
  • Storm 集群使用 storm 用户运行 Topology,将实时数据写入 HDFS,storm 用户只具有操作 HDFS 权限
  • 用户组 g_dfs_client 具有操作 HDFS 权限
  • 用户组 g_mr_client 具有在 Hadoop 上运行 MapReduce Job 的权限
  • 用户 stater 只具有操作 HDFS 和运行 MapReduce Job 的权限

通过进行配置实践,来满足上述要求。修改配置文件 /etc/hadoop/hadoop-policy.xml 中的部分配置项,具体修改的内容如下所示:

<property><name>security.client.protocol.acl</name><value>stater,storm g_super_adm,g_dfs_client</value><description>ACL for ClientProtocol, which is used by user code
               via the DistributedFileSystem.
               The ACL is a comma-separated list of user and group names. The user and
               group list is separated by a blank. For e.g. "alice,bob users,wheel".
               A special value of "*" means all users are allowed.
          </description></property><property><name>security.refresh.policy.protocol.acl</name><value>hadoop</value><description>ACL for RefreshAuthorizationPolicyProtocol, used by the
               dfsadmin and mradmin commands to refresh the security policy in-effect.
               The ACL is a comma-separated list of user and group names. The user and
               group list is separated by a blank. For e.g. "alice,bob users,wheel".
               A special value of "*" means all users are allowed.
          </description></property><property><name>security.job.client.protocol.acl</name><value>stater g_super_adm,g_mr_client</value><description>ACL for MRClientProtocol, used by job clients to
               communciate with the MR ApplicationMaster to query job status etc.
               The ACL is a comma-separated list of user and group names. The user and
               group list is separated by a blank. For e.g. "alice,bob users,wheel".
               A special value of "*" means all users are allowed.
          </description></property>

其他的配置属性值保持默认值不变即可。为了保证整个 Hadoop 集群配置相同,需要将修改的配置文件同步到整个集群的所有节点上。
然后,为了使上述配置内容生效,需要执行如下命令:

hdfs dfsadmin -refreshServiceAcl
yarn rmadmin -refreshServiceAcl

修改 SLA 认证配置,不需要重启服务,根据修改内容执行上述命令就可以生效。
后面参考链接中,有些关于 Hadoop SLA 的文档内容貌似没有随着 Hadoop 版本升级而更新,与实际 Hadoop 发行版本中配置文件的内容有一定差别,可以参考,具体以实际版本的情况为准。

参考链接

  • http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/ServiceLevelAuth.html
  • http://hadoop.apache.org/docs/r2.2.0/hadoop-auth/Configuration.html

更多 Hadoop 相关信息见 Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-07/133366.htm

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计6041字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中