Hadoop 身份验证插件

Hadoop 身份验证插件使 Solr 能够使用 Hadoop 身份验证库 来保护 Solr 节点。

此身份验证插件是一个精简包装,它将所有功能委托给 Hadoop 身份验证库。库的所有配置参数都通过插件传递。

此插件在利用 Hadoop 身份验证库中的扩展功能集或新功能时特别有用。

请注意,Solr 使用的 Hadoop 库版本会定期升级。虽然 Solr 将确保插件配置的结构的稳定性和向后兼容性(即此插件的参数名称),但这些参数的值可能会根据 Hadoop 库的版本而改变。请查看此版本的 Solr 使用的 v3.3.6 的 Hadoop 文档。

对于某些身份验证方案(例如 Kerberos),Solr 提供了身份验证插件的本机实现。如果您需要在配置、执行滚动升级、向后兼容性等方面更稳定的设置,则应考虑使用其中一个插件。请查看 配置身份验证和授权 部分,了解 Solr 中身份验证插件选项的概述。

有两个插件类

  • HadoopAuthPlugin:它可用于 SolrCloud、用户管理和单节点安装以及 SolrCloud,其中 PKI 身份验证用于节点间通信。

  • ConfigurableInternodeAuthHadoopPlugin:这是 HadoopAuthPlugin 的扩展,允许您配置用于节点间通信的身份验证方案。

对于大多数安装,HadoopAuthPlugin 应该足够了。

插件配置

必需

默认值:无

插件类名。它应该是 solr.HadoopAuthPluginsolr.ConfigurableInternodeAuthHadoopPlugin

类型

必需

默认值:无

要配置的身份验证方案的类型。请参阅 Hadoop 配置选项

sysPropPrefix

必需

默认值:无

用于定义用于配置身份验证机制的 Java 系统属性的前缀。

Java 系统属性的名称是通过将配置参数名称附加到此前缀值来定义的。例如,如果前缀是 solr,则 Java 系统属性 solr.kerberos.principal 定义配置参数 kerberos.principal 的值。

authConfigs

必需

默认值:无

type 属性定义的身份验证方案所需的配置参数。有关更多详细信息,请参阅 Hadoop 配置选项

defaultConfigs

可选

默认值:无

authConfigs 属性指定的配置参数的默认值。默认值指定为键值对集合(即 "property-name": "default_value")。

enableDelegationToken

可选

默认值:无

如果为 true,则委派令牌功能将被启用。有关示例,请参阅 使用委派令牌进行简单身份验证 部分。

initKerberosZk

可选

默认值:无

如果为 true,则在连接到 ZooKeeper(如果适用)之前将初始化 Kerberos。

proxyUserConfigs

可选

默认值:无

为底层 Hadoop 身份验证机制配置代理用户。此配置表示为键值对集合(即 "property-name": "default_value")。

clientBuilderFactory

可选

默认值:无

用于 Solr 内部通信的 HttpClientBuilderFactory 实现。仅适用于 ConfigurableInternodeAuthHadoopPlugin

示例配置

使用 Hadoop 认证插件进行 Kerberos 认证

此示例允许您配置 Solr 以使用 Kerberos 认证,类似于使用Kerberos 认证插件的方式。

在查阅 Hadoop 认证库文档后,您可以使用 solr.* 前缀提供每个主机的配置参数。

例如,Hadoop 认证库需要一个参数 kerberos.principal,在启动 Solr 节点时,可以将其作为名为 solr.kerberos.principal 的系统属性提供。有关其他典型配置参数,请参阅Kerberos 认证插件部分。

以下示例使用 ConfigurableInternodeAuthHadoopPlugin,因此您必须提供 clientBuilderFactory 实现。因此,所有节点间通信都将使用 Kerberos 机制,而不是 PKI 认证。

此配置假设您的服务器使用 solr 主体,并且将允许模拟任何其他用户,这些用户发出的请求来自任何其他主机。为了增强安全性,请考虑将主机列表设置为与集群节点匹配。Hadoop 代理用户文档包含有关可用配置选项的更多详细信息。

{
    "authentication": {
        "class": "solr.ConfigurableInternodeAuthHadoopPlugin",
        "sysPropPrefix": "solr.",
        "type": "kerberos",
        "clientBuilderFactory": "org.apache.solr.client.solrj.impl.Krb5HttpClientBuilder",
        "initKerberosZk": "true",
        "enableDelegationToken": "true",
        "authConfigs": [
            "kerberos.principal",
            "kerberos.keytab",
            "kerberos.name.rules"
        ],
        "defaultConfigs": {
        },
        "proxyUserConfigs": {
          "proxyuser.solr.hosts": "*",
          "proxyuser.solr.groups": "*"
        }
    }
}
对于 ConfigurableInternodeAuthHadoopPlugin,用户凭据代理依赖于委派令牌支持。如果没有它,转发请求将以 Solr 服务器凭据而不是真实用户凭据进行认证,并且可能会允许经过认证但未经授权的用户查询和将文档编入您的集合中。

使用委派令牌进行简单认证

与前面的示例类似,这是一个设置使用委派令牌的 Solr 集群的示例。

请参阅 Hadoop 认证库文档中的参数,或参阅Kerberos 认证插件部分以获取更多详细信息。

请注意,此示例不使用 Kerberos,并且对 Solr 发出的请求必须包含有效的委派令牌。

{
    "authentication": {
        "class": "solr.HadoopAuthPlugin",
        "sysPropPrefix": "solr.",
        "type": "simple",
        "enableDelegationToken":"true",
        "authConfigs": [
            "delegation-token.token-kind",
            "delegation-token.update-interval.sec",
            "delegation-token.max-lifetime.sec",
            "delegation-token.renewal-interval.sec",
            "delegation-token.removal-scan-interval.sec",
            "cookie.domain",
            "signer.secret.provider",
            "zk-dt-secret-manager.enable",
            "zk-dt-secret-manager.znodeWorkingPath",
            "signer.secret.provider.zookeeper.path"
        ],
        "defaultConfigs": {
            "delegation-token.token-kind": "solr-dt",
            "signer.secret.provider": "zookeeper",
            "zk-dt-secret-manager.enable": "true",
            "token.validity": "36000",
            "zk-dt-secret-manager.znodeWorkingPath": "solr/security/zkdtsm",
            "signer.secret.provider.zookeeper.path": "/token",
            "cookie.domain": "127.0.0.1"
        }
    }
}