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 つのインターフェースで制御されます。
ZkCredentialsInjector
、ZkCredentialsProvider
、およびZkACLProvider
です。 -
これらの 3 つのインターフェースを実装するクラスは、
solr.xml
で定義されたプロパティ名を使用して、システムプロパティを介して Solr に渡されます (詳細は、solr.xml の設定を参照してください)。デフォルトのプロパティ名は、zkCredentialsInjector
、zkACLProvider
、およびzkCredentialsProvider
です。詳細については、以下のセクションを参照してください。 -
データフローは次のとおりです。認証情報ソース →
ZkCredentialsInjector
→ZkCredentialsProvider/ZkACLProvider
→ ZooKeeper。
ZkCredentialsInjector
は、何らかのソースから認証情報を取得し、それを ZkCredentialsProvider
および ZkACLProvider
に注入します。「ソース」は、システムプロパティ、ファイル、シークレットマネージャー、またはその他のローカルまたはリモートソースである可能性があります。
-
2 つの役割セットがサポートされています。
-
ALL
ユーザー: すべてを実行できるユーザー (CREATE
、READ
、WRITE
、DELETE
、およびADMIN
のすべてに対応)。 -
READ
ユーザー: 読み取り操作のみが許可されている読み取り専用ユーザー。
-
-
コンテンツへのアクセスは常に、管理者ユーザーと読み取り専用ユーザーの 2 人のユーザーに制限することで保護し、さらに、作成したコンテンツ/znode に対して何でも実行できるように、常に同じ管理者ユーザーに対応する認証情報で接続します。
SolrCloud クラスタの「クライアント」に読み取り専用の認証情報を与えることができます。たとえば、SolrJ クライアントで使用する場合です。これにより、機能する SolrJ クライアントを実行するために必要なものを読み取ることができますが、ZooKeeper 内のコンテンツを変更することはできません。
ACL を有効にする方法
-
以下のことをできるようにする必要があります。
-
Solr が ZooKeeper 接続に使用する認証情報を制御します。認証情報は、ZooKeeper で操作を実行する権限を取得するために使用されます。
-
Solr が ZooKeeper で作成する znode (ZooKeeper のファイル/フォルダー) に追加する ACL を制御します。
-
これを「外部」から制御できるようにし、Solr コードを修正したり再コンパイルしたりせずにこれを有効にできるようにします。
-
Solr ノード、クライアント、およびツール (例: ZkCLI) は、常に SolrZkClient
という Java クラスを使用して、ZooKeeper の処理を行います。ここで説明するソリューションの実装は、すべて SolrZkClient
の変更に関するものです。アプリケーションで SolrZkClient
を使用している場合、以下の説明はアプリケーションにも当てはまります。
-
認証情報と ACL の制御は、3 つのステップで行われます。認証情報を何らかのソースから読み取り、それを ZooKeeper に接続するために Solr が使用する
ZkCredentialsProvider
に注入するZkCredentialsInjector
を設定します。ZkACLProvider
は、同じ認証情報を使用して ACL を設定します。
いくつかのすぐに使用できる例を示す前に、これらの 3 つのステップについて詳しく説明します。
-
ZkCredentialsInjector
を設定します。 -
ZkCredentialsProvider
を設定します。 -
ZkACLProvider
を設定します。
認証情報インジェクターの設定
-
認証情報インジェクターは、外部ソースから認証情報を取得し、Solr に注入します。
-
どの認証情報を注入するかを制御するには、
solr.xml
の<solrcloud>
セクションでzkCredentialsInjector
プロパティを、ZkCredentialsInjector
インターフェースを実装するクラス (クラスパス上) の名前に設定します。
Solr ディストリビューションのserver/solr/solr.xml
ファイルでは、zkCredentialsInjector
が定義されており、同じ名前のzkCredentialsInjector
システムプロパティが定義されている場合 (たとえば、solr.in.sh/.cmd
のSOLR_ZK_CREDS_AND_ACLS
環境変数の定義のコメントを外すことによって - 以下を参照)、またはそうでない場合は、DefaultZkCredentialsInjector
実装がデフォルトになるように設定されています。
-
すぐに使用できる認証情報インジェクターの実装
-
Solr には、次の
ZkCredentialsInjectors
が付属しています。-
org.apache.solr.common.cloud.DefaultZkCredentialsInjector
: そのgetCredentials()
メソッドは、長さ 0 のリスト、つまり「認証情報が使用されない」を返します。これがデフォルトです。 -
org.apache.solr.common.cloud.VMParamsZkCredentialsInjector
: ユーザー名とパスワードは、システムプロパティ名zkDigestUsername
とzkDigestPassword
によって定義されます。ユーザー名とパスワードの両方が提供されている場合、この認証情報のセットは、getCredentials()
によって返される認証情報のリストに追加されます。-
上記の認証情報のセットがリストに追加されない場合、この実装はデフォルトの動作に戻り、
DefaultZkCredentialsInjector
からの (空の) 認証情報リストを使用します。 -
または、
zkDigestCredentialsFile
システムプロパティを設定して、認証情報をシステムプロパティとして公開する代わりに、ファイルからzkDigestUsername
とzkDigestPassword
をロードすることもできます。提供されるファイルは、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/.cmd
のSOLR_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/.cmd
のSOLR_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
スキームのものです。
-
注: 既存の「solr.xml」を再利用する場合は、必ず次の行を「<solrcloud>」ブロックに追加してください。
<str name="zkCredentialsInjector">${zkCredentialsInjector:org.apache.solr.common.cloud.DefaultZkCredentialsInjector}</str>
システムプロパティ経由
-
ZK 認証情報は、
DzkDigestUsername
、DzkDigestPassword
、DzkDigestReadonlyUsername
、およびDzkDigestReadonlyPassword
プロパティ名を使用して、システムプロパティを介して渡されます。
*nix
# 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"
# 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
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%
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
# 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"
# 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
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%
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
# 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"
# 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
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%
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.cmd
とserver/scripts/cloud-scripts/zkcli.bat
すべてが機能するためには、solr.in.* ファイルと zkcli.* ファイルの両方を同じパスワードで更新する必要があります。内容は冗長に見えるかもしれませんが、スクリプトは操作中に相互に参照することはありません。 |
これらのSolrスクリプトは、適切なシステムプロパティを設定することで、ZooKeeper ACLの使用を有効にできます。
-
VMParamsZkCredentialsInjectorを使用した例
以下のコメントを解除し、パスワードを選択したもので置き換えて、以下のファイルでパラメータとACLクレデンシャルプロバイダを有効にします。
*nix
# 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"
# 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
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%
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/.bat
のSOLR_ZK_CREDS_AND_ACLS
環境変数に含まれるVMプロパティzkCredentialsInjector
、zkACLProvider
、およびzkCredentialsProvider
は、変換を制御します。
-
Credentials Injectorはクレデンシャルを読み取り、それをCredentials Providerに渡します。省略した場合、プロセスはクレデンシャルを使用しません(安全でない構成に適しています)。
-
Credentials Providerは、ノードに対する管理者権限を持つユーザーのクレデンシャルを使用します。省略した場合、プロセスはクレデンシャルを使用しません(安全でない構成に適しています)。
-
ACL Providerは、新しいACLを計算するために使用されます。省略した場合、プロセスはすべてのユーザーにすべてのアクセス許可を設定し、存在するすべてのセキュリティを削除します。
zkcli.sh/.bat
でコメントが解除されたSOLR_ZK_CREDS_AND_ACLS
環境変数は、クレデンシャルとACLプロバイダを、ページの前半で説明したVMParamsZkCredentialsInjector
、DigestZkCredentialsProvider
、およびDigestZkACLProvider
の実装に設定します。