基本認証プラグイン
Solrは、BasicAuthPlugin
を使用して、ユーザーの基本認証をサポートできます。
このプラグインはユーザー認証のみを提供します。ユーザー権限を制御するには、「ルールベースの認可プラグイン」セクションで説明されているように、認可プラグインを設定する必要がある場合があります。
基本認証を有効にする
基本認証を使用するには、最初にsecurity.json
ファイルを作成する必要があります。このファイルとその配置場所については、「security.jsonの設定」セクションで詳しく説明しています。
クラウドモードで実行している場合は、bin/solr auth
コマンドラインユーティリティを使用して、新規インストールのセキュリティを有効にできます。詳細については、bin/solr auth --help
を参照してください。
基本認証の場合、security.json
には、認証に使用されるクラスを定義するauthentication
ブロックが必要です。ユーザー名とパスワード(sha256(password + salt)ハッシュとして)は、ファイルの作成時に追加することも、後述の認証APIを使用して追加することもできます。
認証プラグインと認可プラグインがどのように連携できるかを示すために、authentication
ブロックとauthorization
ブロックを示すsecurity.json
の例を以下に示します。
{
"authentication":{ (1)
"blockUnknown": true, (2)
"class":"solr.BasicAuthPlugin",
"credentials":{"solr":"IV0EHq1OnNrj6gvRCwvFwTrZ1+z1oBbnQdiVC3otuq0= Ndd7LKvVBAaZIF0QAVi1ekCfAJXr1GGfLtRUXhgrF8c="}, (3)
"realm":"My Solr users", (4)
"forwardCredentials": false (5)
},
"authorization":{
"class":"solr.RuleBasedAuthorizationPlugin",
"permissions":[{"name":"security-edit",
"role":"admin"}],
"user-role":{"solr":"admin"}
}}
この例では、いくつかのオプションが定義されています。
1 | 最初のブロックは、使用する認証プラグインとそのパラメータを定義します。 |
2 | パラメータ"blockUnknown":true は、認証されていないリクエストの通過を許可しないことを意味します。 |
3 | パスワード'SolrRocks' を持つ「solr」というユーザーが定義されています。 |
4 | ログインプロンプトに別のテキストを表示するために、realm プロパティをオーバーライドします。 |
5 | パラメータ"forwardCredentials":false は、基本認証ヘッダーを転送する代わりに、SolrのPKI認証に分散リクエストを処理させることを意味します。 |
設定をローカルのsecurity.json
というファイルに保存します。 Solrをシングルノードインストールで使用している場合は、このファイルを$SOLR_HOME
に配置する必要があります。
blockUnknown
がsecurity.json
ファイルで定義されていない場合、デフォルトでtrue
になります。これにより、SolrへのHTTPアクセスに認証が必要になります。場合によっては、プラグインを有効にした後、認証を必要としない場合があります。たとえば、security.json
を配置したいが、認証を有効にする準備ができていない場合などです。ただし、システムへのすべてのリクエストに対して認証が確実に適用されるようにするには、blockUnknown
をtrue
に設定するか、完全に省略する必要があります。
|
realm
が定義されていない場合、デフォルトでsolr
になります。
SolrCloudを使用している場合は、security.json
をZooKeeperにアップロードする必要があります。コマンド例と設定のセキュリティ保護に関する詳細は、SolrCloudクラスタにおける認証と承認プラグインを参照してください。
注意事項
基本認証プラグインを使用する際に留意すべき点がいくつかあります。
-
資格情報はデフォルトでプレーンテキストで送信されます。SSLの有効化セクションで説明されているように、基本認証が有効になっている場合は、通信にSSLを使用することをお勧めします。
-
security.json
への書き込み権限を持つユーザーは、すべての権限とユーザー権限の割り当てを変更できます。セキュリティの編集へのアクセス権は、適切なユーザーにのみ付与するように特に注意する必要があります。 -
もちろん、ネットワークは安全である必要があります。基本認証が有効になっていても、Solrを不必要に外部に公開しないでください。
基本認証と他のスキームの組み合わせ
JWT認証プラグインなどの他の認証スキームを使用する場合でも、少数の「サービスアカウント」指向のクライアントアプリケーションに基本認証を使用したい場合があります。Solrは、複数の認証スキームをサポートするためにMultiAuthPlugin
を提供しています。たとえば、ユーザーアカウント用にSolrをOIDCプロバイダーと統合する一方で、Prometheusメトリクスエクスポーターからのリクエストの認証にBasicを使用することもできます。 MultiAuthPlugin
は、Authorization
ヘッダーのスキームを使用して、各リクエストを処理するプラグインを決定します。 MultiAuthPlugin
は、KubernetesでSolrを実行する場合に役立ちます。エンドユーザーのユーザー管理と認証をOIDCプロバイダーに委任できますが、プローブエンドポイントをテストするときにKubernetesがOIDCを使用しないように、livenessエンドポイントとreadinessエンドポイントをBasic
認証を使用して保護することもできます。
次の例は、Basic
スキームとBearer
スキームをサポートするようにMultiAuthPlugin
を設定する方法を示しています。
{
"authentication": {
"class": "solr.MultiAuthPlugin",
"schemes": [{
"scheme": "bearer",
"blockUnknown": true,
"class": "solr.JWTAuthPlugin",
"wellKnownUrl": "https://OIDC_PROVIDER_URL/.well-known/openid-configuration",
"clientId": "solr",
"redirectUris": "https://127.0.0.1:8983/solr/",
"rolesClaim": "groups"
},{
"scheme": "basic",
"blockUnknown": true,
"class": "solr.BasicAuthPlugin",
"credentials": {
"k8s-oper": "PASSWORD SALT & HASH"
},
"forwardCredentials": false
}]
}
}
Solr管理UIからの認証されていないAJAXリクエスト(つまり、Authorization
ヘッダーのないリクエスト)の場合、MultiAuthPlugin
はリクエストをschemes
リストに最初にリストされているプラグインに転送します。上記の例では、ユーザーは管理UIにログインするためにOIDCプロバイダーに認証する必要があります。
基本認証プラグイン設定の編集
認証APIでは、ユーザーIDとパスワードを変更できます。APIは、ユーザーの詳細を設定または削除するための特定のコマンドを持つエンドポイントを提供します。
APIエントリポイント
-
v1:
https://127.0.0.1:8983/solr/admin/authentication
-
v2:
https://127.0.0.1:8983/api/cluster/security/authentication
このエンドポイントはコレクション固有ではないため、ユーザーはSolrクラスタ全体に対して作成されます。ユーザーを特定のコレクションに制限する必要がある場合は、承認ルールを使用して行うことができます。
ユーザーの追加またはパスワードの編集
set-user
コマンドを使用すると、ユーザーを追加し、パスワードを変更できます。たとえば、次のコマンドは2人のユーザーとそのパスワードを定義しています
V1 API
curl --user solr:SolrRocks https://127.0.0.1:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{"set-user": {"tom":"TomIsCool", "harry":"HarrysSecret"}}'
V2 API
curl --user solr:SolrRocks https://127.0.0.1:8983/api/cluster/security/authentication -H 'Content-type:application/json' -d '{"set-user": {"tom":"TomIsCool", "harry":"HarrysSecret"}}'
ユーザーの削除
delete-user
コマンドを使用すると、ユーザーを削除できます。ユーザーを削除するためにユーザーパスワードを送信する必要はありません。次の例では、ユーザーID「tom」と「harry」をシステムから削除するように要求しています。
V1 API
curl --user solr:SolrRocks https://127.0.0.1:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{"delete-user": ["tom", "harry"]}'
V2 API
curl --user solr:SolrRocks https://127.0.0.1:8983/api/cluster/security/authentication -H 'Content-type:application/json' -d '{"delete-user": ["tom", "harry"]}'
プロパティの設定
認証プラグインのプロパティを設定します。現在、基本認証プラグインでサポートされているプロパティは、blockUnknown
、realm
、およびforwardCredentials
です。
V1 API
curl --user solr:SolrRocks https://127.0.0.1:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{"set-property": {"blockUnknown":false}}'
V2 API
curl --user solr:SolrRocks https://127.0.0.1:8983/api/cluster/security/authentication -H 'Content-type:application/json' -d '{"set-property": {"blockUnknown":false}}'
認証レルムはデフォルトでsolr
で、WWW-Authenticate
HTTPヘッダーと管理UIログインページに表示されます。レルムを変更するには、realm
プロパティを設定します
V1 API
curl --user solr:SolrRocks https://127.0.0.1:8983/solr/admin/authentication -H 'Content-type:application/json' -d '{"set-property": {"realm":"My Solr users"}}'
V2 API
curl --user solr:SolrRocks https://127.0.0.1:8983/api/cluster/security/authentication -H 'Content-type:application/json' -d '{"set-property": {"realm":"My Solr users"}}'
MultiAuthPluginを使用したプラグイン設定の編集
MultiAuthPlugin
を使用する場合、scheme
を識別する単一キーオブジェクトでコマンドデータをラップする必要があります。たとえば、Basic
プラグインのset-user
コマンドは次のようになります。
{
"set-user": {
"basic": {"tom":"TomIsCool", "harry":"HarrysSecret"}
}
}
MultiAuthPlugin
を使用する場合、Basic
プラグインのプロパティを設定します
{
"set-property": {
"basic": {"realm":"My Solr users"}
}
}
SolrJでの基本認証の使用
基本認証によって保護されているSolrサーバーでSolrJを使用するには、主に2つの方法があります。権限を個々のリクエストごとに設定するか、基になるHTTPクライアントが送信するすべてのリクエストに資格情報を追加するように設定できます。
リクエストごとの基本認証資格情報
SolrJで基本認証を設定する最も簡単な方法は、この例のように、各リクエストでsetBasicAuthCredentials
メソッドを使用することです
SolrRequest req ;//create a new request object
req.setBasicAuthCredentials(userName, password);
solrClient.request(req);
クエリの例
QueryRequest req = new QueryRequest(new SolrQuery("*:*"));
req.setBasicAuthCredentials(userName, password);
QueryResponse rsp = req.process(solrClient);
このメソッドはシンプルですが、必要なすべての場所で資格情報が提供されていることを確認するのは不便な場合があります。また、SolrRequest
オブジェクトを使用しない多くのSolrClient
メソッドでは機能しません。
クライアントごとの資格情報
Http2SolrClientは、クライアントを構築するときにクライアントレベルで資格情報を設定することをサポートしています。これにより、この特定のクライアントで発行されたすべてのリクエストに基本認証ヘッダーが設定されます。
Http2SolrClient client = new Http2SolrClient.Builder(solrUrl)
.withBasicAuthCredentials(userName, password).build();
QueryResponse rsp = req.process(client);
CloudHttp2SolrClientは、内部クライアントを作成するためのHttp2SolrClient.Builder
インスタンスの受信をサポートしているため、クライアントレベルで資格情報を設定するには、次のようなコードを使用できます。
Http2SolrClient.Builder http2ClientBuilder = Http2SolrClient.Builder().withBasicAuthCredentials(userName, password);
CloudHttp2SolrClient client = new CloudHttp2SolrClient.Builder(zkHostList, chroot)
.withInternalClientBuilder(http2ClientBuilder).build();
QueryResponse rsp = req.process(client);
グローバル(JVM)基本認証資格情報
または、ユーザーはSolrJのPreemptiveBasicAuthClientBuilderFactory
を使用して、すべてのリクエストに基本認証資格情報を自動的に追加できます。この機能を有効にするには、システムプロパティ-Dsolr.httpclient.builder.factory=org.apache.solr.client.solrj.impl.PreemptiveBasicAuthClientBuilderFactory
を設定する必要があります。 PreemptiveBasicAuthClientBuilderFactory
を使用すると、アプリケーションは2つの異なる方法で資格情報を提供できます
-
資格情報を直接含む
basicauth
システムプロパティを渡すことができます(例:-Dbasicauth=username:password
)。このオプションは簡単ですが、設定方法によっては、コマンドラインで資格情報が公開される場合があります。 -
資格情報を保持するプロパティファイルへのパスを含む
solr.httpclient.config
システムプロパティを渡すことができます。このファイル内では、ユーザー名とパスワードをそれぞれhttpBasicAuthUser
とhttpBasicAuthPassword
として指定できます。httpBasicAuthUser=my_username httpBasicAuthPassword=secretPassword
基本認証でのSolr制御スクリプトの使用
基本認証が有効になると、Solr制御スクリプト(bin/solr
)へのすべてのリクエストにユーザー資格情報が含まれている必要があります。これを確実にするために、solr.in.sh
またはsolr.in.cmd
ファイルに次の行を追加します。
この例では、bin/solr
コマンドラインに、認証のタイプとして「basic」を使用し、ユーザー名「solr」とパスワード「SolrRocks」で資格情報を渡すように指示しています。
SOLR_AUTH_TYPE="basic"
SOLR_AUTHENTICATION_OPTS="-Dbasicauth=solr:SolrRocks"
または、SOLR_AUTHENTICATION_OPTS
は、次のようにファイルへのパスを受け取ることができます。
SOLR_AUTH_TYPE="basic"
SOLR_AUTHENTICATION_OPTS="-Dsolr.httpclient.config=/path/to/solr-9.5.0/server/solr/basicAuth.conf"