Hadoop 文档

General

Common

HDFS

MapReduce

MapReduce REST APIs

YARN

YARN REST APIs

YARN Service

Submarine

Hadoop Compatible File Systems

Auth

Tools

Reference

Configuration

服务器端配置设置

AuthenticationFilter过滤器是Hadoop Auth的服务器端组件。

必须在所有需要经过身份验证的请求的Web应用程序资源的前面配置此过滤器。例如:

Hadoop Auth和相关的JAR文件必须位于Web应用程序的类路径(通常为WEB-INF / lib目录)中。

Hadoop Auth使用SLF4J-API进行日志记录。Auth Maven POM依赖关系定义了SLF4J API依赖关系,但未定义具体日志记录实现上的依赖关系,必须将其显式添加到Web应用程序中。例如,如果Web应用程序使用Log4j,则SLF4J-LOG4J12和LOG4J jar文件必须是Web应用程序类路径以及Log4j配置文件的一部分。

通用配置参数

  • config.prefix:如果指定,则所有其他配置参数名称必须以前缀开头。缺省值为无前缀。

  • [PREFIX。] type:认证类型关键字(simple
    kerberos)或认证处理程序实现。

  • [PREFIX。] signature.secret.file:当signer.secret.provider设置为file时,这是文件的位置,包括用于签署HTTP cookie的密钥。

  • [PREFIX。] token.validity:生成的身份验证令牌的有效性(以秒为单位)。默认值为36000秒。当signer.secret.provider设置为randomzookeeper时,这也用于过渡间隔。

  • [PREFIX。] cookie.domain:用于存储身份验证令牌的HTTP cookie的域。

  • [PREFIX。] cookie.path:用于存储身份验证令牌的HTTP cookie的路径。

  • signer.secret.provider:指示要使用的SignerSecretProvider类的名称。可能的值为:filerandomzookeeper或类名。如果未指定,将使用文件实现;否则,将使用随机实现。如果要使用“文件”,则需要指定signature.secret.file并指向机密文件。

Kerberos配置

重要信息:必须配置并运行KDC。

要将Kerberos SPNEGO用作身份验证机制,必须使用以下初始化参数配置身份验证过滤器:

  • [PREFIX。] type:关键字kerberos

  • [PREFIX。] kerberos.principal:Web应用程序的Kerberos主体名称。Kerberos主体名称必须以HTTP / ...开头。例如:HTTP / localhost @ LOCALHOST。没有默认值。

  • [PREFIX。] kerberos.keytab:密钥表文件的路径,该文件包含kerberos主体的凭据。例如:/Users/tucu/tucu.keytab。没有默认值。

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <filter-name> kerberosFilter </ filter-name>
            <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class>
            <init-param>
                <param-name>类型</ param-name>
                <param-value> kerberos </ param-value>
            </ init-param>
            <init-param>
                <param-name>令牌。有效性</ param-name>
                <param-value> 30 </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.domain </ param-name>
                <param-value> .foo.com </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.path </ param-name>
                <param-value> / </ param-value>
            </ init-param>
            <init-param>
                <param-name> kerberos.principal </ param-name>
                <param-value> HTTP / localhost @ LOCALHOST </ param-value>
            </ init-param>
            <init-param>
                <param-name> kerberos.keytab </ param-name>
                <param-value> /tmp/auth.keytab </ param-value>
            </ init-param>
        </ filter>

        <过滤器映射>
            <filter-name> kerberosFilter </ filter-name>
            <url-pattern> / kerberos / * </ url-pattern>
        </ filter-mapping>

        ...
    </ web-app>

伪/简单配置

要将Pseudo / Simple用作身份验证机制(信任查询字符串参数'user.name'的值),必须使用以下初始化参数配置身份验证过滤器:

  • [PREFIX。] type:关键字simple

  • [PREFIX。] simple.anonymous.allowed:是一个布尔参数,指示是否允许匿名请求。默认值为false

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <filter-name> simpleFilter </ filter-name>
            <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class>
            <init-param>
                <param-name>类型</ param-name>
                <param-value>简单</ param-value>
            </ init-param>
            <init-param>
                <param-name>令牌。有效性</ param-name>
                <param-value> 30 </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.domain </ param-name>
                <param-value> .foo.com </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.path </ param-name>
                <param-value> / </ param-value>
            </ init-param>
            <init-param>
                <param-name> simple.anonymous.allowed </ param-name>
                <param-value> false </ param-value>
            </ init-param>
        </ filter>

        <过滤器映射>
            <filter-name> simpleFilter </ filter-name>
            <url-pattern> /简单/ * </ url-pattern>
        </ filter-mapping>

        ...
    </ web-app>

AltKerberos配置

重要信息:必须配置并运行KDC。

AltKerberos身份验证机制是Kerberos SPNEGO身份验证机制的部分实现的衍生物,该机制允许“混合”形式的身份验证,其中非浏览器使用Kerberos SPNEGO,而另一种身份验证形式(由用户实现)用于浏览器。要将AltKerberos用作身份验证机制(提供实现),除了前面提到的Kerberos SPNEGO参数外,还必须使用以下初始化参数配置身份验证筛选器:

  • [PREFIX。] type:要使用的AltKerberosAuthenticationHandler实现的完整类名。

  • [PREFIX。] alt-kerberos.non-browser.user-agents:以逗号分隔的列表,其中应将哪些用户代理视为非浏览器。

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <filter-name> kerberosFilter </ filter-name>
            <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class>
            <init-param>
                <param-name>类型</ param-name>
                <param-value> org.my.subclass.of.AltKerberosAuthenticationHandler </ param-value>
            </ init-param>
            <init-param>
                <param-name> alt-kerberos.non-browser.user-agents </ param-name>
                <param-value> java,curl,wget,perl </ param-value>
            </ init-param>
            <init-param>
                <param-name>令牌。有效性</ param-name>
                <param-value> 30 </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.domain </ param-name>
                <param-value> .foo.com </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.path </ param-name>
                <param-value> / </ param-value>
            </ init-param>
            <init-param>
                <param-name> kerberos.principal </ param-name>
                <param-value> HTTP / localhost @ LOCALHOST </ param-value>
            </ init-param>
            <init-param>
                <param-name> kerberos.keytab </ param-name>
                <param-value> /tmp/auth.keytab </ param-value>
            </ init-param>
        </ filter>

        <过滤器映射>
            <filter-name> kerberosFilter </ filter-name>
            <url-pattern> / kerberos / * </ url-pattern>
        </ filter-mapping>

        ...
    </ web-app>

LDAP配置

重要信息:必须配置并运行LDAP服务器。当启用TLS与LDAP服务器通信时(通过ldaps方案或“ start TLS”扩展名),请在本地信任库中配置LDAP服务器的公共证书。

LDAP身份验证机制使用HTTP基本身份验证方案来针对配置的LDAP(或Active Directory)服务器验证用户指定的凭据。认证过滤器必须配置以下初始化参数:

  • [PREFIX。] type:关键字ldap

  • [PREFIX。] ldap.providerurl:LDAP服务器的URL。

  • [PREFIX。] ldap.basedn:LDAP服务器要使用的基本专有名称(DN)。此值将附加到提供的用户标识中,以进行认证。对于Active Directory服务器,此属性没有用。

  • [PREFIX。] ldap.binddomain:与LDAP服务器一起使用的LDAP绑定域值。此属性是可选的,仅在Active Directory服务器(例如example.com)的情况下有用。

  • [PREFIX。] ldap.enablestarttls:一个布尔值,用于定义LDAP服务器是否支持'StartTLS'扩展名。

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <filter-name> authFilter </ filter-name>
            <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class>
            <init-param>
                <param-name>类型</ param-name>
                <param-value> ldap </ param-value>
            </ init-param>
            <init-param>
                <param-name> ldap.providerurl </ param-name>
                <param-value> ldap:// ldap-server-host:8920 </ param-value>
            </ init-param>
            <init-param>
                <param-name> ldap.basedn </ param-name>
                <param-value> ou = users,dc = example,dc = com </ param-value>
            </ init-param>
            <init-param>
                <param-name> ldap.enablestarttls </ param-name>
                <param-value> true </ param-value>
            </ init-param>
         </ filter>

        <过滤器映射>
            <filter-name> authFilter </ filter-name>
            <url-pattern> / ldap / * </ url-pattern>
        </ filter-mapping>

        ...
    </ web-app>

多方案配置

重要说明:此配置一起支持多种身份验证机制(例如kerberos,ldap等)。有关配置的详细信息,请参阅每个方案的文档。

多方案身份验证机制通过实现HTTP身份验证协商机制(请参阅RFC-2616)来支持多种身份验证机制(例如kerberos,ldap等)。为了启用每种类型的身份验证机制(例如ldap),必须配置相应的身份验证处理程序。请参考以下配置参数:

  • [PREFIX。] type:关键字multi-scheme

  • [PREFIX。] multi-scheme-auth-handler.schemes:此处理程序支持的HTTP认证机制的逗号分隔列表。它是必填参数,没有默认值(例如,multi-scheme-auth-handler.schemes = basic,negotiate)。

  • [PREFIX。] multi-scheme-auth-handler.schemes。<方案名称> .handler:用于指定认证方案的认证处理程序实现。它没有默认值(例如,multi-scheme-auth-handler.schemes.negotiate.handler = kerberos)。为配置的每个方案添加此处理程序配置。

除了这些参数之外,还请为每个配置的处理程序指定初始化参数。

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <filter-name> authFilter </ filter-name>
            <filter-class> org.apache.hadoop.security.authentication.server.AuthenticationFilter </ filter-class>
            <init-param>
                <param-name>类型</ param-name>
                <param-value>多种方案</ param-value>
            </ init-param>
            <init-param>
                <param-name> multi-scheme-auth-handler.schemes </ param-name>
                <param-value>基本,协商</ param-value>
            </ init-param>
            <init-param>
                <param-name> multi-scheme-auth-handler.basic.handler </ param-name>
                <param-value> ldap </ param-value>
            </ init-param>
            <init-param>
                <param-name> multi-scheme-auth-handler.negotiate.handler </ param-name>
                <param-value> kerberos </ param-value>
            </ init-param>
            <init-param>
                <param-name> ldap.providerurl </ param-name>
                <param-value> ldap:// ldap-server-host:8920 </ param-value>
            </ init-param>
            <init-param>
                <param-name> ldap.basedn </ param-name>
                <param-value> ou = users,dc = example,dc = com </ param-value>
            </ init-param>
            <init-param>
                <param-name> ldap.enablestarttls </ param-name>
                <param-value> true </ param-value>
            </ init-param>
            <init-param>
                <param-name>令牌。有效性</ param-name>
                <param-value> 30 </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.domain </ param-name>
                <param-value> .foo.com </ param-value>
            </ init-param>
            <init-param>
                <param-name> cookie.path </ param-name>
                <param-value> / </ param-value>
            </ init-param>
            <init-param>
                <param-name> kerberos.principal </ param-name>
                <param-value> HTTP / localhost @ LOCALHOST </ param-value>
            </ init-param>
            <init-param>
                <param-name> kerberos.keytab </ param-name>
                <param-value> /tmp/auth.keytab </ param-value>
            </ init-param>
         </ filter>

        <过滤器映射>
            <filter-name> authFilter </ filter-name>
            <url-pattern> / multi-scheme / * </ url-pattern>
        </ filter-mapping>

        ...
    </ web-app>

SignerSecretProvider配置

SignerSecretProvider用于为用于签署HTTP Cookies的秘密提供更高级的行为。

这些是相关的配置属性:

  • signer.secret.provider:指示要使用的SignerSecretProvider类的名称。可能的值为:“文件”,“随机”,“动物园管理员”或类名。如果未指定,将使用“文件”实现;否则,将使用“随机”实现。如果要使用“文件”,则需要指定signature.secret.file并指向机密文件。

  • [PREFIX。] signature.secret.file:将signer.secret.provider设置为file或未指定时,这是用于签署HTTP cookie的密钥的值。

  • [PREFIX。] token.validity:生成的身份验证令牌的有效性(以秒为单位)。默认值为36000秒。当signer.secret.provider设置为randomzookeeper时,这也用于过渡间隔。

以下配置属性特定于zookeeper实现:

  • signer.secret.provider.zookeeper.connection.string:表示要连接的ZooKeeper连接字符串。默认值为localhost:2181

  • signer.secret.provider.zookeeper.path:指示用于存储和检索机密的ZooKeeper路径。所有需要协调其机密的服务器都应指向同一路径

  • signer.secret.provider.zookeeper.auth.type:指示要使用的身份验证类型。支持的值为nonesasl。默认值为none

  • signer.secret.provider.zookeeper.kerberos.keytab:将其设置为Kerberos keytab文件的路径。仅在使用Kerberos时才需要。

  • signer.secret.provider.zookeeper.kerberos.principal:将此设置为要使用的Kerberos主体。仅在使用Kerberos时才需要。

  • signer.secret.provider.zookeeper.disconnect.on.shutdown:关闭提供程序时是否关闭ZooKeeper连接。默认值为true。仅在提供自定义Curator客户端并且断开连接正在其他位置处理时,才将其设置为false

如果需要,还可以在ServletContext中设置以下属性:* signer.secret.provider.zookeeper.curator.client:可以在此处传递CuratorFramework客户端对象。如果提供的话,“ zookeeper”实现将使用此Curator客户端而不是创建其自己的客户端,如果您已经拥有Curator客户端或想要对其配置进行更多控制,这将非常有用。

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <!-未显示AuthenticationHandler配置->
            <init-param>
                <param-name> signer.secret.provider </ param-name>
                <param-value>文件</ param-value>
            </ init-param>
            <init-param>
                <param-name> signature.secret.file </ param-name>
                <param-value> / myapp / secret_file </ param-value>
            </ init-param>
        </ filter>

        ...
    </ web-app>

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <!-未显示AuthenticationHandler配置->
            <init-param>
                <param-name> signer.secret.provider </ param-name>
                <param-value>随机</ param-value>
            </ init-param>
            <init-param>
                <param-name>令牌。有效性</ param-name>
                <param-value> 30 </ param-value>
            </ init-param>
        </ filter>

        ...
    </ web-app>

范例

    <web-app version =“ 2.5” xmlns =“ http://java.sun.com/xml/ns/javaee”>
        ...

        <过滤器>
            <!-未显示AuthenticationHandler配置->
            <init-param>
                <param-name> signer.secret.provider </ param-name>
                <param-value>动物园管理员</ param-value>
            </ init-param>
            <init-param>
                <param-name>令牌。有效性</ param-name>
                <param-value> 30 </ param-value>
            </ init-param>
            <init-param>
                <param-name> signer.secret.provider.zookeeper.connection.string </ param-name>
                <param-value> zoo1:2181,zoo2:2181,zoo3:2181 </ param-value>
            </ init-param>
            <init-param>
                <param-name> signer.secret.provider.zookeeper.path </ param-name>
                <param-value> / myapp / secrets </ param-value>
            </ init-param>
            <init-param>
                <param-name> signer.secret.provider.zookeeper.kerberos.keytab </ param-name>
                <param-value> /tmp/auth.keytab </ param-value>
            </ init-param>
            <init-param>
                <param-name> signer.secret.provider.zookeeper.kerberos.principal </ param-name>
                <param-value> HTTP / localhost @ LOCALHOST </ param-value>
            </ init-param>
        </ filter>

        ...
    </ web-app>