Hadoop 身份验证插件

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

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

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

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

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

有两个插件类

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

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

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

插件配置

class

必需

默认值:无

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

type

必需

默认值:无

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

sysPropPrefix

必需

默认值:无

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

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

authConfigs

必需

默认值:无

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

defaultConfigs

可选

默认值:无

authConfigs 属性指定的配置参数的默认值。默认值被指定为键值对的集合(即,"属性名称": "默认值")。

enableDelegationToken

可选

默认值:无

如果为 true,则将启用委托令牌功能。有关示例,请参见 使用委托令牌的简单身份验证 部分。

initKerberosZk

可选

默认值:无

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

proxyUserConfigs

可选

默认值:无

为底层 Hadoop 身份验证机制配置代理用户。此配置表示为键值对的集合(即,"属性名称": "默认值")。

clientBuilderFactory

可选

默认值:无

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

配置示例

使用 Hadoop 身份验证插件进行 Kerberos 身份验证

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

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

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

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

此配置假设您的服务器使用 solr principal,并且允许模拟来自任何其他主机的请求的任何其他用户。为了获得额外的安全性,请考虑将主机列表设置为与您的集群节点匹配。 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"
        }
    }
}