本文介绍YARN高安全特性以及相关配置项。

背景信息

创建集群时,如果打开Kerberos身份认证开关,则创建的集群为高安全集群,可以使用E-MapReduce(简称EMR)提供的高安全特性。在高安全集群中YARN服务默认开启了以下特性,对使用行为做了一定的限制,来保证集群的数据安全:

Kerberos认证

创建高安全集群时,EMR为YARN自动配置了Kerberos相关的配置项,无需您手动配置。Kerberos的详细信息,请参见Kerberos概述

针对高安全集群,使用客户端时必须在Kerberos认证后才能访问YARN的RPC服务和HTTP服务,示例如下。
kinit
yarn node -list
kdestroy

kinit
curl --negotiate -u: http://master-1-1:8088/ws/v1/cluster/nodes
kdestroy

ACL授权

高安全集群中,YARN ACL(Access Control List)功能默认开启,并且默认只授权服务账户所在的hadoop组进行YARN服务管理和所有队列管理(包括作业提交)。YARN ACL功能总开关为yarn.acl.enable=true

YARN服务管理权限

默认高安全配置为yarn.admin.acl= hadoop,其中hadoop前有单个空格,表示授权给hadoop组(EMR的服务启动Linux用户通常都是使用hadoop组)作为服务管理员。Hadoop中用户默认的组映射来自节点操作系统的组信息。

说明 yarn.admin.acl= hadoop配置值的通常格式为用户 用户组,前面是用户,后面是用户组,中间使用空格分割,用户和用户组可配置多个,均使用逗号(,)分割。例如,user1,user2 group1,group2,只有用户组的情况下,必须在最前面加上空格;只有单个空格表示不授权给任何用户和用户组。

YARN队列管理权限

YARN队列权限有提交作业SUBMIT_APPLICATIONS和管理队列两类。

创建EMR高安全集群时,YARN服务的capacity-scheduler.xml中Capacity Scheduler调度器的默认配置yarn.scheduler.capacity.root.acl_submit_applications= (配置值为单个空格)和yarn.scheduler.capacity.root.acl_administer_queue= hadoophadoop前有单个空格),表示所有队列默认将队列管理权限授权给hadoop组,此时非hadoop组的用户无法提交作业到任何队列(您可以使用id命令查看当前用户的组信息)。

如果您集群的用户比较少,不需要进行管理ACL功能,则可以删除上面的两个配置项,然后在YARN服务的状态页面,单击ResourceManager组件操作列的refresh queues进行队列配置热更新,关闭队列ACL功能。

队列管理使用方案:
  • 如果您需要使用ACL功能管理,建议配合Ranger使用,可以可视化配置和动态管理用户的队列权限。
    说明 Ranger目前仅支持Capacity Scheduler调度器,详情请参见配置YARN开启Ranger权限控制
  • 手动编辑capacity-scheduler.xml,新增配置项yarn.scheduler.capacity.root.<queue-path>.acl_submit_applicationsyarn.scheduler.capacity.root.<queue-path>.acl_administer_queue进行队列ACL授权,详情请参见Queue Properties队列ACL配置

    队列ACL可以结合Capacity Scheduler调度器队列映射(Queue Mapping)特性使用,在capacity-scheduelr.xml配置文件中使用yarn.scheduler.capacity.queue-mappings配置用户或用户组提交作业的默认队列规则,通过yarn.scheduler.capacity.queue-mappings-override.enable=true使提交作业强制使用Queue Mappings中规定的映射。

YARN作业管理权限

YARN作业权限有查看作业信息的权限VIEW_APP和修改作业的权限MODIFY_APP两类。

  • 查看作业信息的权限:主要指YARN各个组件中获取作业信息和日志查看的权限,不包括引擎侧自身对用户VIEW_APP行为的限制。

    MapReduce引擎在mapred-site.xml中默认配置mapreduce.job.acl-view-job=*,放开了该权限。

  • 修改作业的权限:在YARN中终止作业时,直接使用管理队列的权限ADMINISTER_QUEUE进行ACL管理。

LCE安全容器

非高安全集群YARN服务运行容器默认使用的实现类为DefaultContainerExecutor,如果用户容器使用hadoop账户进行操作,则无法通过认证鉴权的方式进行隔离。用户可以恶意访问修改服务自身相关文件和配置,不同租户之间也存在恶意访问他人资源的可能性。EMR高安全集群默认配置使用Linux Container Executor(LCE)安全模式运行安全容器。LCE基于Linux setuid机制让容器用作业提交用户的账户运行,从而回收了容器高危且非必需的权限。

使用LCE安全容器必须保证NodeManager上有作业提交用户对应的Linux账户。一种方案(推荐)是使用EMR控制台上的用户管理功能来添加账号,这种方式会将用户添加到EMR集群的OpenLDAP中,并通过每个节点的Nslcd服务映射该用户为Linux用户(集群必须安装OpenLDAP服务)。另外一种方案是对Linux账号进行手动管理,在每个节点上添加YARN对应的Linux账户,并且添加对应的引导脚本,保证在扩容节点上也会自动执行账户添加操作。