本文档介绍如何配置 Hadoop HTTP Web 控制台以要求用户身份验证。
默认情况下,Hadoop HTTP Web 控制台(ResourceManager、NameNode、NodeManagers 和 DataNodes)允许在没有任何形式的身份验证的情况下进行访问。
Hadoop HTTP Web 控制台可以配置为使用 HTTP SPNEGO 协议(受 Firefox 和 Internet Explorer 等浏览器支持)要求 Kerberos 身份验证。
此外,Hadoop HTTP Web 控制台支持相当于 Hadoop 的伪/简单身份验证。如果启用此选项,则必须在使用 user.name 查询字符串参数的第一个浏览器交互中指定用户名。例如,http://localhost:8088/cluster?user.name=babu
。
如果 HTTP Web 控制台需要自定义身份验证机制,则可以实现一个插件来支持备用身份验证机制(有关编写 AuthenticationHandler
的详细信息,请参阅 Hadoop hadoop-auth)。
下一部分介绍如何配置 Hadoop HTTP Web 控制台以要求用户身份验证。
以下属性应位于群集中所有节点的 core-site.xml
中。
属性名称 | 默认值 | 说明 |
---|---|---|
hadoop.http.filter.initializers |
将 org.apache.hadoop.security.AuthenticationFilterInitializer 初始化程序类添加到此属性。 | |
hadoop.http.authentication.type |
simple |
定义用于 HTTP Web 控制台的身份验证。支持的值:simple | kerberos | #AUTHENTICATION_HANDLER_CLASSNAME# 。 |
hadoop.http.authentication.token.validity |
36000 |
指示身份验证令牌在必须续订之前有效的时长(以秒为单位)。 |
hadoop.http.authentication.token.max-inactive-interval |
-1 (已禁用) |
指定服务器在客户端请求之间使令牌失效的时间(以秒为单位)。 |
hadoop.http.authentication.signature.secret.file |
$user.home/hadoop-http-auth-signature-secret |
用于对身份验证令牌进行签名的签名密钥文件。群集中的每项服务(ResourceManager、NameNode、DataNode 和 NodeManager)都应使用不同的密钥。只有运行守护程序的 Unix 用户才能读取此文件。 |
hadoop.http.authentication.cookie.domain |
用于存储身份验证令牌的 HTTP Cookie 要使用的域。为了在群集中的所有节点上正确运行身份验证,必须正确设置域。没有默认值,HTTP Cookie 将没有域,只能与发出 HTTP Cookie 的主机名一起使用。 | |
hadoop.http.authentication.cookie.persistent |
false (会话 Cookie) |
指定 HTTP Cookie 的持久性。如果值为 true,则 Cookie 是持久 Cookie。否则,它是一个会话 Cookie。重要提示:使用 IP 地址时,浏览器会忽略具有域设置的 Cookie。为了使此设置正常工作,群集中的所有节点都必须配置为在其上生成带有 hostname.domain 名称的 URL。 |
hadoop.http.authentication.simple.anonymous.allowed |
true |
指示在使用“simple”身份验证时是否允许匿名请求。 |
hadoop.http.authentication.kerberos.principal |
HTTP/_HOST@$LOCALHOST |
指示在使用“kerberos”身份验证时用于 HTTP 端点的 Kerberos 主体。根据 Kerberos HTTP SPNEGO 规范,主体简称必须为 HTTP 。_HOST (如果存在)将替换为 HTTP 服务器的绑定地址。 |
hadoop.http.authentication.kerberos.keytab |
$user.home/hadoop.keytab |
用于 HTTP 端点所使用的 Kerberos 主体的凭据的 keytab 文件的位置。 |
要启用跨域支持 (CORS),请设置以下配置参数
将 org.apache.hadoop.security.HttpCrossOriginFilterInitializer 添加到 core-site.xml 中的 hadoop.http.filter.initializers。您还需要在 core-site.xml 中设置以下属性 -
属性 | 默认值 | 说明 |
---|---|---|
hadoop.http.cross-origin.enabled | false |
为所有 Web 服务启用跨域支持 |
hadoop.http.cross-origin.allowed-origins | * |
允许的来源的逗号分隔列表。以 regex: 为前缀的值被解释为正则表达式。也可能包含通配符 (* ) 的值,此处生成正则表达式,不鼓励使用,仅为向后兼容性提供支持。 |
hadoop.http.cross-origin.allowed-methods | GET,POST,HEAD |
允许的方法的逗号分隔列表 |
hadoop.http.cross-origin.allowed-headers | X-Requested-With,Content-Type,Accept,Origin |
允许的标题的逗号分隔列表 |
hadoop.http.cross-origin.max-age | 1800 |
预先请求可以缓存的秒数 |
受信任代理增加了使用最终用户而不是代理用户执行操作的支持。它从 doAs 查询参数中获取最终用户。要启用受信任代理,请设置以下配置参数
将 org.apache.hadoop.security.authentication.server.ProxyUserAuthenticationFilterInitializer 添加到 core-site.xml 中的 hadoop.http.filter.initializers,而不是 org.apache.hadoop.security.AuthenticationFilterInitializer。