服务级别授权是一种初始授权机制,可确保连接到特定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,辅助namenode用于与namenode通信的协议。 |
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 | HAAdmin用于HAService协议的ACL,用于管理namenode的活动和备用状态。 |
$ 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,并通过-refreshServiceAcl开关分别将dfsadmin和rmadmin命令切换到dfsadmin和rmadmin命令,以指示NameNode和ResourceManager重新加载各自的配置。
刷新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集群:
<属性> <name> security.job.client.protocol.acl </ name> <value> alice,bob mapreduce </ value> </ property>
仅允许以属于组datanode的用户身份运行的DataNode与NameNode通信:
<属性> <name> security.datanode.protocol.acl </ name> <value>数据节点</ value> </ property>
允许任何用户作为DFSClient与HDFS群集进行对话:
<属性> <name> security.client.protocol.acl </ name> <value> * </ value> </ property>