他の認証システムとの統合

Elasticsearchのセキュリティ機能でサポートされていない認証システムを使用している場合、ユーザーを認証するためにそれと対話するカスタムレルムを作成できます。カスタムレルムは、通常のElasticsearchプラグインの一部として読み込まれるSPI拡張として実装します。

カスタムレルムの実装

カスタムレルムの構造と実装を示すサンプルコードは、https://github.com/elastic/elasticsearch/tree/8.15/x-pack/qa/security-example-spi-extensionに提供されています。このコードを出発点として、自分のレルムを作成できます。

カスタムレルムを作成するには、次の手順が必要です:

  • 1. org.elasticsearch.xpack.security.authc.Realmを拡張して、ユーザーを認証するために認証システムと通信します。
  • 2. カスタムレルムを作成するために使用されるクラスでorg.elasticsearch.xpack.security.authc.Realm.Factoryインターフェースを実装します。
  • 3. カスタムレルムを使用する際の認証失敗を処理するためにorg.elasticsearch.xpack.security.authc.DefaultAuthenticationFailureHandlerを拡張します。

カスタムレルムをプラグインとしてパッケージ化するには:

  • 1. org.elasticsearch.xpack.core.security.SecurityExtensionを拡張するレルムの拡張クラスを実装します。そこで、次のメソッドの1つ以上をオーバーライドする必要があります:

Java

  1. @Override
  2. public Map<String, Factory> getRealms() {
  3. ...
  4. }
  1. #### Java
  2. ``````java
  3. @Override
  4. public AuthenticationFailureHandler getAuthenticationFailureHandler() {
  5. ...
  6. }
  7. `
  1. #### Java
  2. ``````java
  3. @Override
  4. public List<String> getSettingsFilter() {
  5. ...
  6. }
  7. `
  1. - 2*.* プラグインのビルド構成ファイルを作成します。Gradleを推奨します。
  2. - 3*.* `````META-INF/services/org.elasticsearch.xpack.core.security.SecurityExtension`````拡張のための記述子ファイルを作成し、`````org.elasticsearch.xpack.core.security.SecurityExtension`````実装の完全修飾クラス名を含めます。
  3. - 4*.* すべてを単一のzipファイルにまとめます。
  4. ## ユーザーを認証するためのカスタムレルムの使用
  5. カスタムレルムを使用するには:
  6. - 1*.* クラスター内の各ノードにレルム拡張をインストールします。`````bin/elasticsearch-plugin``````````install`````サブコマンドで実行し、拡張を含むzipファイルを指すURLを指定します。例えば:
  7. #### Shell
  8. ``````shell
  9. bin/elasticsearch-plugin install file:///<path>/my-realm-1.0.zip
  10. `
  • 2. xpack.security.authc.realms名前空間の下でelasticsearch.ymlに適切なレルムタイプのレルム構成を追加します。拡張によって定義されたタイプに一致する名前空間内でレルムを定義する必要があります。設定できるオプションは、カスタムレルムによって公開される設定に依存します。最低限、認証中にレルムが参照される順序を制御するためにorder属性を明示的に設定する必要があります。また、各構成されたレルムが異なるorder設定を持つことを確認する必要があります。2つ以上のレルムが同じorderを持つ場合、ノードは起動に失敗します。
    elasticsearch.ymlでレルムを構成する場合、指定したレルムのみが認証に使用されます。nativeまたはfileレルムも使用したい場合は、それらをレルムチェーンに含める必要があります。
  • 3. Elasticsearchを再起動します。