ZooKeeper アクセス制御

このセクションでは、Solr で ZooKeeper アクセス制御リスト (ACL) を使用する方法について説明します。

ZooKeeper ACL の詳細については、ZooKeeper ACL ドキュメントを参照してください。

ZooKeeper ACL について

SolrCloud は、共有情報と調整のために ZooKeeper を使用します。

このセクションでは、作成する ZooKeeper コンテンツにより制限の厳しい ACL を追加するように Solr を構成する方法と、ZooKeeper のコンテンツにアクセスするために必要な資格情報を Solr に通知する方法について説明します。ZooKeeper ノードで ACL を使用する場合は、この機能をアクティブ化する必要があります。デフォルトでは、Solr の動作はすべての場所でオープンで安全でない ACL であり、資格情報は使用しません。

ZooKeeper に保存されたコンテンツは、SolrCloud クラスタの動作に不可欠です。ZooKeeper 上の SolrCloud コンテンツへのオープンアクセスは、さまざまな問題につながる可能性があります。例えば

  • 構成を変更すると、Solr が失敗したり、意図しない動作をしたりする可能性があります。

  • クラスタの状態情報を誤ったものまたは矛盾したものに変更すると、SolrCloud クラスタが奇妙に動作する可能性があります。

  • Overseer によって実行される削除コレクションジョブを追加すると、クラスタからデータが削除されます。

信頼しないエンティティに ZooKeeper アンサンブルへのアクセスを許可する場合、または、例えば次の結果として発生する不正なアクションのリスクを軽減したい場合は、Solr で ZooKeeper ACL を有効にすることができます。

  • システムに侵入したマルウェア。

  • 同じ ZooKeeper アンサンブルを使用する他のシステム (「悪いこと」が偶然に行われる可能性があります)。

ZooKeeper に誰もが知るべきではないものがあると思う場合は、読み取りアクセスを制限することもできます。または、単に一般的に必要最小限の知識に基づいて作業することができます。

ZooKeeper 自体を保護することは、さまざまなことを意味する可能性があります。このセクションでは、ZooKeeper の Solr コンテンツの保護について説明します。ZooKeeper コンテンツは基本的にディスクに永続化され、(部分的に) ZooKeeper プロセスのメモリに存在します。このセクションでは、ストレージまたは ZooKeeper プロセスレベルでの ZooKeeper データの保護については説明しません。それは ZooKeeper が対処する問題です。

しかし、このコンテンツは ZooKeeper API を介して「外部」からも利用可能です。外部プロセスは ZooKeeper に接続し、コンテンツの作成/更新/削除/読み取りを行うことができます。たとえば、SolrCloud クラスタ内の Solr ノードは作成/更新/削除/読み取りを行い、SolrJ クライアントはクラスタから読み取りを行いたいとします。コンテンツを作成/更新する外部プロセスは、コンテンツに ACL を設定する責任があります。ACL は、誰が読み取り、更新、削除、作成などを許可されているかを記述します。ZooKeeper 内の各情報 (znode/コンテンツ) には、独自の ACL セットがあり、継承や共有はできません。Solr のデフォルトの動作では、作成するすべてのコンテンツに 1 つの ACL が追加されます。これは、誰でも何でも実行できる権限を与える ACL です (ZooKeeper の用語では「オープン・アンセーフ ACL」と呼ばれます)。

Solr から ZooKeeper への ACL のワークフロー

  • Solr から ZooKeeper への認証情報と ACL は、3 つのインターフェースで制御されます。 ZkCredentialsInjectorZkCredentialsProvider、および ZkACLProvider です。

  • これらの 3 つのインターフェースを実装するクラスは、solr.xml で定義されたプロパティ名を使用して、システムプロパティを介して Solr に渡されます (詳細は、solr.xml の設定を参照してください)。デフォルトのプロパティ名は、zkCredentialsInjectorzkACLProvider、および zkCredentialsProvider です。詳細については、以下のセクションを参照してください。

  • データフローは次のとおりです。認証情報ソース → ZkCredentialsInjectorZkCredentialsProvider/ZkACLProvider → ZooKeeper。

ZkCredentialsInjector は、何らかのソースから認証情報を取得し、それを ZkCredentialsProvider および ZkACLProvider に注入します。「ソース」は、システムプロパティ、ファイル、シークレットマネージャー、またはその他のローカルまたはリモートソースである可能性があります。

  • 2 つの役割セットがサポートされています。

    • ALL ユーザー: すべてを実行できるユーザー (CREATEREADWRITEDELETE、および ADMIN のすべてに対応)。

    • READ ユーザー: 読み取り操作のみが許可されている読み取り専用ユーザー。

  • コンテンツへのアクセスは常に、管理者ユーザーと読み取り専用ユーザーの 2 人のユーザーに制限することで保護し、さらに、作成したコンテンツ/znode に対して何でも実行できるように、常に同じ管理者ユーザーに対応する認証情報で接続します。

SolrCloud クラスタの「クライアント」に読み取り専用の認証情報を与えることができます。たとえば、SolrJ クライアントで使用する場合です。これにより、機能する SolrJ クライアントを実行するために必要なものを読み取ることができますが、ZooKeeper 内のコンテンツを変更することはできません。

ACL を有効にする方法

  • 以下のことをできるようにする必要があります。

    1. Solr が ZooKeeper 接続に使用する認証情報を制御します。認証情報は、ZooKeeper で操作を実行する権限を取得するために使用されます。

    2. Solr が ZooKeeper で作成する znode (ZooKeeper のファイル/フォルダー) に追加する ACL を制御します。

    3. これを「外部」から制御できるようにし、Solr コードを修正したり再コンパイルしたりせずにこれを有効にできるようにします。

Solr ノード、クライアント、およびツール (例: ZkCLI) は、常に SolrZkClient という Java クラスを使用して、ZooKeeper の処理を行います。ここで説明するソリューションの実装は、すべて SolrZkClient の変更に関するものです。アプリケーションで SolrZkClient を使用している場合、以下の説明はアプリケーションにも当てはまります。

  • 認証情報と ACL の制御は、3 つのステップで行われます。認証情報を何らかのソースから読み取り、それを ZooKeeper に接続するために Solr が使用する ZkCredentialsProvider に注入する ZkCredentialsInjector を設定します。ZkACLProvider は、同じ認証情報を使用して ACL を設定します。

いくつかのすぐに使用できる例を示す前に、これらの 3 つのステップについて詳しく説明します。

  1. ZkCredentialsInjector を設定します。

  2. ZkCredentialsProvider を設定します。

  3. ZkACLProvider を設定します。

認証情報インジェクターの設定

  • 認証情報インジェクターは、外部ソースから認証情報を取得し、Solr に注入します。

    • どの認証情報を注入するかを制御するには、solr.xml<solrcloud> セクションで zkCredentialsInjector プロパティを、ZkCredentialsInjector インターフェースを実装するクラス (クラスパス上) の名前に設定します。
      Solr ディストリビューションの server/solr/solr.xml ファイルでは、zkCredentialsInjector が定義されており、同じ名前の zkCredentialsInjector システムプロパティが定義されている場合 (たとえば、solr.in.sh/.cmdSOLR_ZK_CREDS_AND_ACLS 環境変数の定義のコメントを外すことによって - 以下を参照)、またはそうでない場合は、DefaultZkCredentialsInjector 実装がデフォルトになるように設定されています。

すぐに使用できる認証情報インジェクターの実装

  • Solr には、次の ZkCredentialsInjectors が付属しています。

    • org.apache.solr.common.cloud.DefaultZkCredentialsInjector: その getCredentials() メソッドは、長さ 0 のリスト、つまり「認証情報が使用されない」を返します。これがデフォルトです。

    • org.apache.solr.common.cloud.VMParamsZkCredentialsInjector: ユーザー名とパスワードは、システムプロパティ名 zkDigestUsernamezkDigestPassword によって定義されます。ユーザー名とパスワードの両方が提供されている場合、この認証情報のセットは、getCredentials() によって返される認証情報のリストに追加されます。

      • 上記の認証情報のセットがリストに追加されない場合、この実装はデフォルトの動作に戻り、DefaultZkCredentialsInjector からの (空の) 認証情報リストを使用します。

      • または、zkDigestCredentialsFile システムプロパティを設定して、認証情報をシステムプロパティとして公開する代わりに、ファイルから zkDigestUsernamezkDigestPassword をロードすることもできます。提供されるファイルは、Java プロパティファイルであり、zkDigestUsername プロパティと zkDigestPassword プロパティの両方を含める必要があります。

      • 使用法 (完全な例は後のページを参照してください)

-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector
-DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD
-DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD

# Or using a Java property file containing the credentials:
-DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector
-DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties
  • ZkCredentialsInjector を実装し、zkCredentialsInjector 名前を使用してシステムプロパティを介して渡すことで、独自の認証情報インジェクターを作成できます。

-DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName

認証情報が注入された後、ZkCredentialsProvider で使用されます。

認証情報プロバイダーの設定

ZkCredentialsProvider は、ZkCredentialsInjector から認証情報を取得し、それらを使用して Zookeeper に接続します。

  • どの認証情報を使用するかを制御するには、solr.xml<solrcloud> セクションで zkCredentialsProvider プロパティを、ZkCredentialsProvider インターフェースを実装するクラス (クラスパス上) の名前に設定します。
    Solr ディストリビューションの server/solr/solr.xml ファイルでは、zkCredentialsProvider が定義されており、同じ名前の zkCredentialsProvider システムプロパティが定義されている場合 (たとえば、solr.in.sh/.cmdSOLR_ZK_CREDS_AND_ACLS 環境変数の定義のコメントを外すことによって - 以下を参照)、またはそうでない場合は、DefaultZkCredentialsProvider 実装がデフォルトになるように設定されています。

すぐに使用できる認証情報の実装

常に独自の実装を作成できますが、Solr には 2 つの実装が付属しています。

  • 認証情報なし

org.apache.solr.common.cloud.DefaultZkCredentialsProvider: その getCredentials() は、長さ 0 のリスト、つまり「認証情報が使用されない」を返します。これがデフォルトです。

  • digest スキームに基づく credentialsProvider

org.apache.solr.common.cloud.DigestZkCredentialsProvider: 使用されるスキームは digest であり、指定された ZkCredentialsInjector から ALL ユーザー認証情報 (perms=all) を取得します。

ALL ユーザー (ユーザー名とパスワードの両方が提供されている) を持つ ZkCredentialsInjector が定義されていない場合、デフォルトの動作に戻り、DefaultZkCredentialsProvider からの (空の) 認証情報リストを使用します。

ACL プロバイダーの設定

  • どの ACL を追加するかを制御するには、solr.xml<solrcloud> セクションで zkACLProvider プロパティを、ZkACLProvider インターフェースを実装するクラス (クラスパス上) の名前に設定します。
    Solr ディストリビューションの server/solr/solr.xml ファイルでは、zkACLProvider が定義されており、同じ名前の zkACLProvider システムプロパティが定義されている場合 (たとえば、solr.in.sh/.cmdSOLR_ZK_CREDS_AND_ACLS 環境変数の定義のコメントを外すことによって - 以下を参照)、またはそうでない場合は、DefaultZkACLProvider 実装がデフォルトになるように設定されています。

すぐに使用できる ACL の実装

常に独自の実装を作成できますが、Solr には以下が付属しています。

  • org.apache.solr.common.cloud.DefaultZkACLProvider: すべての zNodePath に対して長さ 1 のリストを返します。リスト内の単一の ACL エントリは「オープン・アンセーフ」です。これがデフォルトです。

  • org.apache.solr.common.cloud.DigestZkACLProvider: これにより、定義された ZkCredentialsInjector を使用して ACL を定義できます。その getACLsToAdd() 実装は、SecurityAwareZkACLProvider (/security.json および /security/*) によって定義された事前定義済みの機密性の高いパスにのみ管理者 ACL を適用し、残りのコンテンツには管理者とユーザーの両方の ACL を適用します。all および read ユーザーは、このページで前述した ZkCredentialsInjector を介して注入されます。

  • org.apache.solr.common.cloud.SaslZkACLProvider: SASL 認証が必要です。SASL を使用する場合、システムプロパティ solr.authorization.superuser (デフォルト: solr) で指定されたユーザーに対してすべての権限を付与し、他のすべてのユーザーに対して読み取り権限を付与します。構成が既に設定されており、変更されない場合、または構成の変更が Solr API を介して制御されるように設計されています。このプロバイダーは、Kerberos 環境での管理に役立ちます。このような環境では、管理者は、Kerberos を介して ZooKeeper で認証する唯一の方法であるため、Solr が SASL を使用して ZooKeeper で認証することを望んでいます。

  • 上記の ACL がリストに追加されていない場合、DefaultZkACLProvider の (空の) ACL リストがデフォルトで使用されます。

以下の例は、digest スキームのものです。

 <str name="zkCredentialsInjector">${zkCredentialsInjector:org.apache.solr.common.cloud.DefaultZkCredentialsInjector}</str>

システムプロパティ経由

  • ZK 認証情報は、DzkDigestUsernameDzkDigestPasswordDzkDigestReadonlyUsername、および DzkDigestReadonlyPassword プロパティ名を使用して、システムプロパティを介して渡されます。

*nix

solr.in.sh
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
  -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
  -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
zkcli.sh
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
  -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
  -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"

Windows

solr.in.cmd
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
 -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
 -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
 -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
 -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
zkcli.bat
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
 -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
 -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
 -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
 -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD

ファイル経由

  • 認証情報を含む Java プロパティファイルを作成します。たとえば、zookeepercredentials.properties という名前で、次の形式で認証情報を含めます。

zkDigestUsername=admin-user
zkDigestPassword=CHANGEME-ADMIN-PASSWORD
zkDigestReadonlyUsername=readonly-user
zkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
  • ファイルパスをシステムプロパティを介して渡します。

*nix

solr.in.sh
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
  -DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties"
SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
zkcli.sh
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
  -DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties"

Windows

solr.in.cmd
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
 -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
 -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
 -DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties
set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
zkcli.bat
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
 -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
 -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
 -DzkDigestCredentialsFile=SOLR_HOME_DIR/server/etc/zookeepercredentials.properties

カスタム認証情報インジェクター経由

  • または、ZkCredentialsInjector を実装し、DzkCredentialsInjector 変数名を使用してシステムプロパティを介して渡すことで、独自の認証情報インジェクターを作成できます。

*nix

solr.in.sh
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
  -DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName"
SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
zkcli.sh
# Settings for ZK ACL
SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
  -DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName

Windows

solr.in.cmd
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
 -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
 -DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName
set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
zkcli.bat
REM Settings for ZK ACL
set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
 -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
 -DzkCredentialsInjector=fully.qualified.class.CustomInjectorClassName

Solr スクリプトにおける ZooKeeper ACL

ZooKeeper ACL に影響を与えるスクリプトが 2 つあります。

  • *nix システムの場合: bin/solr および server/scripts/cloud-scripts/zkcli.sh

  • Windowsシステムの場合: bin/solr.cmdserver/scripts/cloud-scripts/zkcli.bat

すべてが機能するためには、solr.in.* ファイルと zkcli.* ファイルの両方を同じパスワードで更新する必要があります。内容は冗長に見えるかもしれませんが、スクリプトは操作中に相互に参照することはありません。

これらのSolrスクリプトは、適切なシステムプロパティを設定することで、ZooKeeper ACLの使用を有効にできます。

  • VMParamsZkCredentialsInjectorを使用した例

以下のコメントを解除し、パスワードを選択したもので置き換えて、以下のファイルでパラメータとACLクレデンシャルプロバイダを有効にします。

*nix

solr.in.sh
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
#  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
#  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
#  -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
#  -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"
#SOLR_OPTS="$SOLR_OPTS $SOLR_ZK_CREDS_AND_ACLS"
zkcli.sh
# Settings for ZK ACL
#SOLR_ZK_CREDS_AND_ACLS="-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider \
#  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider \
#  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector \
#  -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD \
#  -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD"

Windows

solr.in.cmd
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
REM  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
REM  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
REM  -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM  -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD
REM set SOLR_OPTS=%SOLR_OPTS% %SOLR_ZK_CREDS_AND_ACLS%
zkcli.bat
REM Settings for ZK ACL
REM set SOLR_ZK_CREDS_AND_ACLS=-DzkACLProvider=org.apache.solr.common.cloud.DigestZkACLProvider ^
REM  -DzkCredentialsProvider=org.apache.solr.common.cloud.DigestZkCredentialsProvider ^
REM  -DzkCredentialsInjector=org.apache.solr.common.cloud.VMParamsZkCredentialsInjector ^
REM  -DzkDigestUsername=admin-user -DzkDigestPassword=CHANGEME-ADMIN-PASSWORD ^
REM  -DzkDigestReadonlyUsername=readonly-user -DzkDigestReadonlyPassword=CHANGEME-READONLY-PASSWORD

ACLスキームの変更

Solrクラスターの運用中に、セキュリティ保護されていないZooKeeperからセキュリティ保護されたインスタンスに移行することを決定する場合があります。solr.xmlで設定されたzkACLProviderを変更すると、新しく作成されたノードが安全になることが保証されますが、既存のデータは保護されません。

既存のすべてのACLを変更するには、SolrのZkCLIでupdateaclsコマンドを使用できます。まず、server/scripts/cloud-scripts/zkcli.sh (またはWindowsの場合はzkcli.bat)のSOLR_ZK_CREDS_AND_ACLS環境変数定義のコメントを解除し、上記のSolrスクリプトでのZooKeeper ACLで説明したように、管理者ユーザーと読み取り専用ユーザーのパスワードを入力します。

次に、オペレーティングシステムに適した以下のコマンドを実行します。

*nix

$ ./server/scripts/cloud-scripts/zkcli.sh -cmd updateacls /zk-path

Windows

C:\\ server\scripts\cloud-scripts\zkcli.bat cmd updateacls /zk-path

ZooKeeperのACLの変更は、SolrCloudクラスターが停止している間のみ行う必要があります。Solrの実行中にこれを行おうとすると、状態が不整合になり、一部のノードがアクセス不能になる可能性があります。

zkcli.sh/.batSOLR_ZK_CREDS_AND_ACLS環境変数に含まれるVMプロパティzkCredentialsInjectorzkACLProvider、およびzkCredentialsProviderは、変換を制御します。

  • Credentials Injectorはクレデンシャルを読み取り、それをCredentials Providerに渡します。省略した場合、プロセスはクレデンシャルを使用しません(安全でない構成に適しています)。

  • Credentials Providerは、ノードに対する管理者権限を持つユーザーのクレデンシャルを使用します。省略した場合、プロセスはクレデンシャルを使用しません(安全でない構成に適しています)。

  • ACL Providerは、新しいACLを計算するために使用されます。省略した場合、プロセスはすべてのユーザーにすべてのアクセス許可を設定し、存在するすべてのセキュリティを削除します。

zkcli.sh/.batでコメントが解除されたSOLR_ZK_CREDS_AND_ACLS環境変数は、クレデンシャルとACLプロバイダを、ページの前半で説明したVMParamsZkCredentialsInjectorDigestZkCredentialsProvider、およびDigestZkACLProviderの実装に設定します。