Hadoop HTTP Web 控制台的身份验证

简介

本文档介绍如何配置 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

要启用跨域支持 (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。