すべてのプロダクト
Search
ドキュメントセンター

Elasticsearch:X-Packを使用してLDAP認証を設定する

最終更新日:Jan 11, 2025

このトピックでは、LDAPユーザーが必要なロールでクラスターにアクセスできるように、Alibaba Cloud ElasticsearchクラスターのLightweight Directory Access Protocol (LDAP)認証を設定する方法について説明します。

前提条件

以下の操作を実行します。

  • Alibaba Cloud Elasticsearchクラスターを作成します。この例では、Elasticsearch V6.7クラスターを使用します。

    詳細については、「Alibaba Cloud Elasticsearchクラスターを作成する」をご参照ください。

  • Elasticsearchクラスターが存在する仮想プライベートクラウド (VPC)でLDAPサービスをアクティブ化し、ユーザーデータを準備します。このトピックでは、OpenLDAP 2.4.44を使用します。

    詳細については、「公式LDAPドキュメント」をご参照ください。 LDAP認証を設定する場合、ouプロパティは設定できません。 cnプロパティとGroupプロパティのみを設定できます。

注意事項

2020年10月以降、異なるリージョンにおけるAlibaba Cloud Elasticsearchのネットワークアーキテクチャが調整されました。この調整は、クラスターに以下の影響を与えます。

  • 元のネットワークアーキテクチャにデプロイされているクラスターをインターネットに接続する場合、SNATが有効になっているECSインスタンスを使用するか、NGINXプロキシを使用してリクエストを転送できます。

  • 新しいネットワークアーキテクチャでは、LDAP認証機能は制限されています。 PrivateLinkサービスを使用して、VPC間のプライベート接続を確立できます。 詳細については、「Elasticsearchクラスターのプライベート接続を設定する」をご参照ください。 新しいネットワークアーキテクチャにデプロイされているクラスターをインターネットに接続する場合は、NGINXプロキシを設定してリクエストを転送します。

  • 元のネットワークアーキテクチャでは、シングルゾーンElasticsearchクラスターのみがLDAP認証をサポートしています。

説明

ネットワークアーキテクチャの詳細については、「[お知らせ] ネットワークアーキテクチャの調整」をご参照ください。

手順

  1. 手順 1: (オプション) エンドポイントのドメイン名を取得する

  2. 手順 2: LDAP認証を設定する

  3. 手順 3: ユーザーをロールにマッピングする

  4. 手順 4: 結果を確認する

手順 1: (オプション) エンドポイントのドメイン名を取得する

2020年10月以降に作成されたElasticsearchクラスターは、新しいネットワークアーキテクチャにデプロイされています。 これらのElasticsearchクラスターは、ElasticsearchサービスアカウントのVPC内にあります。 Elasticsearchクラスターが新しいネットワークアーキテクチャにデプロイされている場合は、PrivateLinkサービスを使用して、VPCとご自身のVPC間のプライベート接続を確立する必要があります。 その後、関連するエンドポイントのドメイン名を取得して、後で使用する必要があります。 エンドポイントのドメイン名を取得するには、次の手順を実行します。

  1. PrivateLinkサービスをサポートし、作成されたElasticsearchクラスターと同じVPCにあるClassic Load Balancer (CLB)インスタンスを作成します。

    詳細については、「手順 1: CLBインスタンスを作成および設定する」をご参照ください。

  2. CLBインスタンスを設定します。

    設定中に、バックエンドサーバーとしてLDAPサーバーを指定し、リスニングポートとしてポート 389 を指定する必要があります。

    詳細については、「Elasticsearchクラスターのプライベート接続を設定する」をご参照ください。

  3. エンドポイントサービスを作成します。

    詳細については、「手順 2: エンドポイントサービスを作成する」をご参照ください。

  4. Elasticsearchクラスターへのプライベート接続を設定します。

    詳細については、「手順 3: Elasticsearchクラスターのプライベート接続を作成する」をご参照ください。

  5. エンドポイントサービスにアクセスするために使用されるエンドポイントのドメイン名を取得します。

    詳細については、「Elasticsearchクラスターのプライベート接続を設定する」をご参照ください。

    説明 取得したドメイン名を記録します。これは後続の設定で使用されます。

手順 2: LDAP認証を設定する

X-Packを使用して、次のモードでLDAP認証を設定できます。

  • ユーザー検索モード

  • 識別名 (DN) テンプレートベースのモード

ユーザー検索モードは一般的に使用されます。 ユーザー検索モードでは、LDAPディレクトリを照会する権限を持つユーザーを使用して、認証するユーザーのDNを検索します。 検索は、X-Packによって提供されるユーザー名とLDAP属性に基づいて実行されます。 ユーザーのDNが見つかった後、X-PackはDNと関連するパスワードを使用してユーザーをLDAPディレクトリにバインドしようと試み、ユーザーを認証します。 詳細については、「LDAPレルムを設定する」をご参照ください。

次のサンプルコードは、DNを管理するためにLDAPが必要とするマッピング設定を提供します。 ElasticsearchクラスターのYMLファイルに設定を追加する必要があります。 詳細については、「YMLファイルを設定する」をご参照ください。

  • Elasticsearch V6.7クラスターの設定

    xpack.security.authc.realms.ldap1.type: ldap  // レルムのタイプ
    xpack.security.authc.realms.ldap1.order: 2 // レルムの優先順位
    xpack.security.authc.realms.ldap1.url: "ldap://ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389" // LDAPサーバーに接続するために使用されるURLとポート番号
    xpack.security.authc.realms.ldap1.bind_dn: "admin@yaobili.com" // LDAPディレクトリに検索してバインドするユーザーのDN
    xpack.security.authc.realms.ldap1.bind_password: "yourPassword" // ユーザーのパスワード
    xpack.security.authc.realms.ldap1.user_search.base_dn: "dc=yaobili,dc=com" // ユーザーを検索するために使用されるコンテナDN
    xpack.security.authc.realms.ldap1.user_search.filter: "(cn={0})" // ユーザー検索フィルター
    xpack.security.authc.realms.ldap1.group_search.base_dn: "dc=yaobili,dc=com" // ユーザーが属するグループを検索するために使用されるコンテナDN
    xpack.security.authc.realms.ldap1.unmapped_groups_as_roles: false // マッピングされていないLDAPグループをロール名として使用するかどうか
  • Elasticsearch V7.10以降のクラスターの設定

    xpack.security.authc.realms.ldap.ldap1.order: 2 // レルムの優先順位
    xpack.security.authc.realms.ldap.ldap1.url: "ldap://ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389" // LDAPサーバーに接続するために使用されるURLとポート番号
    xpack.security.authc.realms.ldap.ldap1.bind_dn: "admin@yaobili.com" // LDAPディレクトリに検索してバインドするユーザーのDN
    xpack.security.authc.realms.ldap.ldap1.bind_password: "yourPassword" // ユーザーのパスワード
    xpack.security.authc.realms.ldap.ldap1.user_search.base_dn: "dc=yaobili,dc=com" // ユーザーを検索するために使用されるコンテナDN
    xpack.security.authc.realms.ldap.ldap1.user_search.filter: "(cn={0})" // ユーザー検索フィルター
    xpack.security.authc.realms.ldap.ldap1.group_search.base_dn: "dc=yaobili,dc=com" // ユーザーが属するグループを検索するために使用されるコンテナDN
    xpack.security.authc.realms.ldap.ldap1.unmapped_groups_as_roles: false // マッピングされていないLDAPグループをロール名として使用するかどうか

パラメーター

説明

type

レルムのタイプ。 このパラメーターは ldap に設定する必要があります。

order

レルムの優先順位。 値が小さいほど優先順位が高くなります。 複数のレルムを指定する場合は、このパラメーターを設定することをお勧めします。 レルムには、優先順位の高い order の順にアクセスされます。

説明

Elasticsearch V8.Xクラスターの場合、このパラメーターの値は異なるリクエスト間で一意である必要があります。 このパラメーターを 2 に設定することをお勧めします。

url

LDAPサーバーに接続するために使用されるURLとポート番号。 ldap は、共通接続とポート 389 が使用されることを示します。 ldaps は、SSL暗号化接続とポート 636 が使用されることを示します。

重要

Elasticsearchクラスターが新しいネットワークアーキテクチャにデプロイされている場合は、エンドポイントのドメイン名:ポート番号 の形式でこのパラメーターの値を指定する必要があります。 手順 1: (オプション) エンドポイントのドメイン名を取得する の手順に従って、エンドポイントのドメイン名を取得できます。 この例では、ep-bp1dhpobznlgjhj9****-cn-hangzhou-i.epsrv-bp1q8tcj2jjt5dwr****.cn-hangzhou.privatelink.aliyuncs.com:389 が使用されています。

bind_dn

検索してLDAPディレクトリにバインドするユーザーのDN。 このパラメーターは、ユーザー検索モードでのみ有効です。

bind_password

ユーザーのパスワード。

user_search.base_dn

ユーザーを検索するために使用されるコンテナDN。

group_search.base_dn

ユーザーが属するグループを検索するために使用されるコンテナDN。 このパラメーターを設定しない場合、Elasticsearchは user_group_attribute パラメーターで指定された属性を検索して、ユーザーが属するグループを特定します。

unmapped_groups_as_roles

このパラメーターのデフォルト値は false です。 このパラメーターを true に設定すると、マッピングされていないLDAPグループの名前がロール名として使用されます。

パラメーターの詳細については、「Elasticsearchのセキュリティ設定」をご参照ください。

手順 3: ユーザーをロールにマッピングする

  1. ElasticsearchクラスターのKibanaコンソールにログインし、プロンプトに従ってKibanaコンソールのホームページに移動します。

    Kibanaコンソールへのログイン方法の詳細については、「Kibanaコンソールにログインする」をご参照ください。

    説明

    この例では、Elasticsearch V6.7.0クラスターを使用しています。 他のバージョンのクラスターでの操作は異なる場合があります。 コンソールでの実際の操作が優先されます。

  2. 表示されるページの左側のナビゲーションペインで、[dev Tools] をクリックします。

  3. 表示されるページの [console] タブで、次のコマンドを実行して、zhang* ユーザーを管理者ロールにマッピングします。

    V8.X

    POST _security/role_mapping/ldap_super_user1?pretty // ロールマッピングを作成または更新するAPIリクエスト
    {
      "roles": [ "superuser" ], // マッピングするロールのリスト。この例ではsuperuserロール
      "enabled": true, // ロールマッピングが有効かどうか
      "rules": { // ロールマッピングルール
        "any": [ // いずれかのルールが一致すればマッピングが適用される
          {
            "field": {
              "username": "zhang*" // ユーザー名がzhang*で始まるユーザーにマッピングする
            }
          }
        ]
      }
    }

    その他のバージョン

    POST _xpack/security/role_mapping/ldap_super_user1?pretty // ロールマッピングを作成または更新するAPIリクエスト
    {
      "roles": [ "superuser" ], // マッピングするロールのリスト。この例ではsuperuserロール
      "enabled": true, // ロールマッピングが有効かどうか
      "rules": { // ロールマッピングルール
        "any": [ // いずれかのルールが一致すればマッピングが適用される
          {
            "field": {
              "username": "zhang*" // ユーザー名がzhang*で始まるユーザーにマッピングする
            }
          }
        ]
      }
    }

    詳細については、「Elasticのバージョン」をご参照ください。

手順 4: 結果を確認する

  1. zhang* ユーザーを使用して、ElasticsearchクラスターのKibanaコンソールにログインします。

    登录Kibana

  2. 表示されるページの左側のナビゲーションペインで、[dev Tools] をクリックします。

  3. 表示されるページの [console] タブで、次のコマンドを実行して、zhang* ユーザーがクラスターの設定を変更する権限を持っているかどうかを確認します。

    PUT _cluster/settings // クラスター設定を更新するAPIリクエスト
    {
      "persistent": { // 永続設定
        "action.auto_create_index": true // インデックスの自動作成を有効にする
      }
    }

    次の図に示す結果が返された場合、ユーザーはクラスターの設定を変更する権限を持っています。返回结果