Hadoop認証プラグイン

Hadoop認証プラグインを使用すると、SolrはHadoop認証ライブラリを使用してSolrノードをセキュリティ保護できます。

この認証プラグインは、すべての機能をHadoop認証ライブラリに委任するシンラッパーです。ライブラリのすべての構成パラメータは、プラグインを介して渡されます。

このプラグインは、Hadoop認証ライブラリの拡張された機能セットまたは新しく利用可能な機能を活用するのに特に役立ちます。

Solrが使用するHadoopライブラリのバージョンは定期的にアップグレードされることに注意してください。Solrは、プラグイン構成の構造(つまり、このプラグインのパラメータ名)の安定性と下位互換性を確保しますが、これらのパラメータの値は、Hadoopライブラリのバージョンに基づいて変更される場合があります。このバージョンのSolrで使用されているv3.3.6のHadoopドキュメントを確認してください。

一部の認証方式(例:Kerberos)では、Solrは認証プラグインのネイティブ実装を提供します。構成、ローリングアップグレードを実行する機能、下位互換性などの点で、より安定したセットアップが必要な場合は、これらのプラグインのいずれかを使用することを検討する必要があります。Solrの認証プラグインオプションの概要については、認証と認可の設定のセクションを確認してください。

プラグインクラスは2つあります。

  • HadoopAuthPlugin: これは、SolrCloud、ユーザー管理、およびシングルノードインストール、およびノード間通信のためのPKI認証を備えたSolrCloudで使用できます。

  • ConfigurableInternodeAuthHadoopPlugin: これは、ノード間通信の認証方式を構成できるHadoopAuthPluginの拡張機能です。

ほとんどのインストールでは、HadoopAuthPluginで十分です。

プラグイン構成

クラス

必須

デフォルト: なし

プラグインのクラス名。solr.HadoopAuthPluginまたはsolr.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の実装を提供する必要があります。結果として、すべてのノード間通信は、PKI認証の代わりにKerberosメカニズムを使用します。

この構成では、サーバーが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"
        }
    }
}