本文档介绍如何为 Hadoop 配置和管理服务级别授权。
确保已正确安装、配置和设置 Hadoop。有关更多信息,请参阅
服务级别授权是确保连接到特定 Hadoop 服务的客户端具有必要的预配置权限并被授权访问给定服务的初始授权机制。例如,MapReduce 集群可以使用此机制允许配置的用户/组列表提交作业。
$HADOOP_CONF_DIR/hadoop-policy.xml
配置文件用于定义各种 Hadoop 服务的访问控制列表。
服务级别授权在其他访问控制检查(例如文件权限检查、作业队列访问控制等)之前执行。
本部分介绍如何通过配置文件 $HADOOP_CONF_DIR/hadoop-policy.xml
配置服务级别授权。
默认情况下,Hadoop 禁用服务级别授权。若要启用它,请在 $HADOOP_CONF_DIR/core-site.xml
中将配置属性 hadoop.security.authorization 设置为 true。
本部分列出了各种 Hadoop 服务及其配置旋钮
属性 | 服务 |
---|---|
security.client.protocol.acl | ClientProtocol 的 ACL,通过 DistributedFileSystem 由用户代码使用。 |
security.client.datanode.protocol.acl | ClientDatanodeProtocol 的 ACL,用于块恢复的客户端到数据节点协议。 |
security.datanode.protocol.acl | DatanodeProtocol 的 ACL,由数据节点用于与名称节点通信。 |
security.inter.datanode.protocol.acl | InterDatanodeProtocol 的 ACL,用于更新生成时间戳的节点间协议。 |
security.namenode.protocol.acl | NamenodeProtocol 的 ACL,由辅助名称节点用于与名称节点通信的协议。 |
security.job.client.protocol.acl | JobSubmissionProtocol 的 ACL,由作业客户端用于与资源管理器通信以提交作业、查询作业状态等。 |
security.job.task.protocol.acl | TaskUmbilicalProtocol 的 ACL,由映射和缩减任务用于与父节点管理器通信。 |
security.refresh.policy.protocol.acl | RefreshAuthorizationPolicyProtocol 的 ACL,由 dfsadmin 和 rmadmin 命令用于刷新生效的安全策略。 |
security.ha.service.protocol.acl | HAService 协议的 ACL,由 HAAdmin 用于管理名称节点的活动和备用状态。 |
$HADOOP_CONF_DIR/hadoop-policy.xml
为每个 Hadoop 服务定义访问控制列表。每个访问控制列表都有一个简单的格式
用户和组的列表都是用逗号分隔的名称列表。这两个列表用空格分隔。
示例:user1,user2 group1,group2
。
如果只提供组列表,则在行首添加一个空格,等效地,一个逗号分隔的用户列表后跟一个空格或什么都不跟表示只给定一组用户。
*
的特殊值表示允许所有用户访问该服务。
如果未为服务定义访问控制列表,则应用 security.service.authorization.default.acl
的值。如果未定义 security.service.authorization.default.acl
,则应用 *
。
在某些情况下,需要为服务指定阻止的访问控制列表。这指定了无权访问该服务的用户和组列表。阻止的访问控制列表的格式与访问控制列表的格式相同。可以通过 $HADOOP_CONF_DIR/hadoop-policy.xml
指定阻止的访问控制列表。属性名称通过后缀 “.blocked” 派生而来。
示例:security.client.protocol.acl
的阻止的访问控制列表的属性名称将为 security.client.protocol.acl.blocked
对于一项服务,可以同时指定访问控制列表和阻止的控制列表。如果用户在访问控制列表中且不在阻止的访问控制列表中,则授权该用户访问该服务。
如果未为服务定义阻止的访问控制列表,则应用 security.service.authorization.default.acl.blocked
的值。如果未定义 security.service.authorization.default.acl.blocked
,则应用空的阻止的访问控制列表。
可以根据访问该服务的客户端的 IP 地址控制对服务的访问。可以通过指定 IP 地址、主机名和 IP 范围的列表来限制对服务的访问。每个服务的属性名称都派生自相应的 ACL 的属性名称。如果 ACL 的属性名称是 security.client.protocol.acl,则主机列表的属性名称将是 security.client.protocol.hosts。
如果未为服务定义主机列表,则应用 security.service.authorization.default.hosts
的值。如果未定义 security.service.authorization.default.hosts
,则应用 *
。
可以指定一个被阻止的主机列表。只有主机列表中但不在被阻止主机列表中的那些机器才能获得对该服务的访问权限。属性名称通过添加后缀“.blocked”派生而来。
示例:security.client.protocol.hosts
的被阻止主机列表的属性名称将是 security.client.protocol.hosts.blocked
如果未为服务定义被阻止主机列表,则应用 security.service.authorization.default.hosts.blocked
的值。如果未定义 security.service.authorization.default.hosts.blocked
,则应用空被阻止主机列表。
NameNode 和 ResourceManager 的服务级别授权配置可以在不重新启动任何 Hadoop 主守护进程的情况下进行更改。集群管理员可以在主节点上更改 $HADOOP_CONF_DIR/hadoop-policy.xml
,并指示 NameNode 和 ResourceManager 分别通过 -refreshServiceAcl
开关重新加载其各自的配置到 dfsadmin
和 rmadmin
命令。
刷新 NameNode 的服务级别授权配置
$ bin/hdfs dfsadmin -refreshServiceAcl
刷新 ResourceManager 的服务级别授权配置
$ bin/yarn rmadmin -refreshServiceAcl
当然,可以在 $HADOOP_CONF_DIR/hadoop-policy.xml
中使用 security.refresh.policy.protocol.acl
属性来限制刷新服务级别授权配置的能力对某些用户/组的访问。
仅允许用户 alice
、bob
和 mapreduce
组中的用户向 MapReduce 集群提交作业
<property> <name>security.job.client.protocol.acl</name> <value>alice,bob mapreduce</value> </property>
仅允许作为属于 datanodes 组的用户运行的数据节点与 NameNode 通信
<property> <name>security.datanode.protocol.acl</name> <value>datanodes</value> </property>
允许任何用户作为 DFSClient 与 HDFS 集群通信
<property> <name>security.client.protocol.acl</name> <value>*</value> </property>