このトピックでは、Alibaba Cloud Elasticsearch インスタンスの Lightweight Directory Access Protocol (LDAP) 認証を設定する方法について説明します。これにより、割り当てられたロールを持つ LDAP ユーザーがインスタンスにアクセスできるようになります。
前提条件
以下の前提条件を満たしている必要があります。
Alibaba Cloud Elasticsearch インスタンスを作成済みであること。このトピックでは、バージョン 6.7 のインスタンスを例として使用します。
詳細については、「Alibaba Cloud Elasticsearch インスタンスの作成」をご参照ください。
Alibaba Cloud Elasticsearch インスタンスと同じ VPC に LDAP サービスとユーザーデータを設定済みであること。このトピックでは、OpenLDAP 2.4.44 を例として使用します。
詳細については、LDAP の公式ドキュメントをご参照ください。LDAP データの例:phpLDAPadmin を使用して表示した場合、ディレクトリツリーのルートノードは
dc=yaobili,dc=comで、複数の組織単位 (ou) とユーザーエントリ (cn) が含まれています。組織単位 (ou) による設定はサポートされていません。cn とグループのみがサポートされています。
注意事項
2020 年 10 月以降、Alibaba Cloud Elasticsearch はさまざまなリージョンでネットワークアーキテクチャを調整しました。この変更は、新しく作成されたインスタンスに影響します。
古いネットワークアーキテクチャで作成されたインスタンスの場合は、SNAT または自己管理の NGINX プロキシを使用してインターネットにアクセスできます。
新しいネットワークアーキテクチャで作成されたインスタンスの場合、LDAP 機能にはネットワーク制限が適用されます。PrivateLink を使用して、VPC 間のプライベート接続を確立できます。PrivateLink の設定方法の詳細については、「インスタンスのプライベート接続の設定」をご参照ください。インターネットにアクセスする必要がある場合は、リクエストを転送するように NGINX プロキシを設定する必要があります。
古いネットワークアーキテクチャで作成されたインスタンスの場合、Alibaba Cloud Elasticsearch は単一のアベイラビリティゾーンでのみ LDAP 認証をサポートします。
ネットワークアーキテクチャの詳細については、「[お知らせ] ネットワークアーキテクチャの調整」をご参照ください。
操作手順
ステップ1:エンドポイントドメイン名の取得 (任意)
2020 年 10 月以降に作成された Elasticsearch クラスターは、新しいネットワークアーキテクチャにデプロイされます。これらの Elasticsearch クラスターは、Elasticsearch サービスアカウントの VPC 内に存在します。ご利用の Elasticsearch クラスターが新しいネットワークアーキテクチャにデプロイされている場合は、PrivateLink サービスを使用して、VPC とご利用の VPC との間にプライベート接続を確立する必要があります。その後、将来使用するために、関連するエンドポイントのドメイン名を取得します。エンドポイントのドメイン名を取得するには、次の手順を実行します。
- 作成した Elasticsearch クラスターと同じ VPC に存在する、PrivateLink サービスをサポートする Classic Load Balancer (CLB) インスタンスを作成します。
詳細については、「PrivateLink 接続の設定」をご参照ください。
ロードバランサーインスタンスを設定します。
インスタンスを設定する際、LDAP サービスをホストするサーバーをバックエンドサーバーとして設定し、リスナーポートを 389 に設定します。
詳細については、「PrivateLink 接続の設定」をご参照ください。
- エンドポイントサービスを作成します。
詳細については、「PrivateLink 接続の設定」をご参照ください。
- Elasticsearch クラスターへのプライベート接続を設定します。
詳細については、「PrivateLink 接続の設定」をご参照ください。
- エンドポイントサービスへのアクセスに使用されるエンドポイントのドメイン名を取得します。
詳細については、「PrivateLink 接続の設定」をご参照ください。
説明 取得したドメイン名は、後続の設定で使用するため、記録しておいてください。
ステップ2:LDAP 認証の設定
X-Pack の LDAP 認証は、次の 2 つのモードのいずれかで設定できます。
ユーザー検索モード
DN テンプレートモード
ユーザー検索モードは最も一般的なメソッドです。このモードでは、特権ユーザーが LDAP ディレクトリを検索して、認証されるユーザーの識別名 (DN) を見つけます。この検索では、X-Pack が受信したユーザー名と LDAP 属性フィルターが使用されます。DN を見つけた後、X-Pack は DN とパスワードでディレクトリにバインドしてユーザーを認証します。詳細については、「LDAP レルムの設定」をご参照ください。
次の例は、LDAP 管理 DN がどのようにマッピングされるかを示しています。必要な設定を Elasticsearch YML ファイルに追加する必要があります。詳細については、「YML パラメーターの設定」をご参照ください。設定は、Alibaba Cloud Elasticsearch インスタンスのバージョンによって異なります。
バージョン 6.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" xpack.security.authc.realms.ldap1.bind_dn: "admin@yaobili.com" xpack.security.authc.realms.ldap1.bind_password: "yourPassword" xpack.security.authc.realms.ldap1.user_search.base_dn: "dc=yaobili,dc=com" xpack.security.authc.realms.ldap1.user_search.filter: "(cn={0})" xpack.security.authc.realms.ldap1.group_search.base_dn: "dc=yaobili,dc=com" xpack.security.authc.realms.ldap1.unmapped_groups_as_roles: falseバージョン 7.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" xpack.security.authc.realms.ldap.ldap1.bind_dn: "admin@yaobili.com" xpack.security.authc.realms.ldap.ldap1.bind_password: "yourPassword" xpack.security.authc.realms.ldap.ldap1.user_search.base_dn: "dc=yaobili,dc=com" 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" xpack.security.authc.realms.ldap.ldap1.unmapped_groups_as_roles: false
パラメーター | 説明 |
type | レルムのタイプ。このパラメーターは ldap に設定する必要があります。 |
order | レルムの優先度。値が小さいほど優先度が高くなります。設定で複数のレルムを指定する場合は、このパラメーターを設定することを推奨します。システムは、order の値が小さいレルムに最初にアクセスします。 説明 バージョン 8.x の場合、order の値は一意である必要があります。値を 2 に設定することを推奨します。 |
url | LDAP サーバーの URL とポート。ldap プロトコルはポート 389 での標準接続を示します。ldaps プロトコルはポート 636 での SSL 経由のセキュアな接続を示します。 重要 新しいネットワークアーキテクチャの場合、このパラメーターを エンドポイントドメイン名:ポート に設定する必要があります。エンドポイントドメイン名 は、「ステップ1:エンドポイントドメイン名の取得 (任意)」で取得できます。このトピックでは、 |
bind_dn | LDAP にバインドして検索を実行するために使用されるユーザーの DN。このパラメーターは、ユーザー検索モードにのみ適用されます。 |
bind_password | LDAP ディレクトリへのバインドに使用されるユーザーのパスワード。 |
user_search.base_dn | ユーザー検索用のコンテナ DN。 |
group_search.base_dn | ユーザーが所属するグループを検索するために使用されるコンテナ DN。このパラメーターが指定されていない場合、Elasticsearch は user_group_attribute で指定された属性を検索してグループメンバーシップを決定します。 |
unmapped_groups_as_roles | デフォルト値は false です。このパラメーターが true に設定されている場合、マッピングされていない LDAP グループの名前がロール名として使用され、ユーザーに割り当てられます。 |
パラメーターの詳細については、「Elasticsearch のセキュリティ設定」をご参照ください。
ステップ3:LDAP ユーザーアカウントとロールのマッピング
ご利用の Elasticsearch クラスターの Kibana コンソールにログインします。
手順については、「Kibana コンソールへのログイン」をご参照ください。
説明ここでの例では Elasticsearch V6.7.0 を使用しています。他のバージョンでは操作が若干異なる場合があります。
左側のナビゲーションペインで、Developer Tools をクリックします。
[コンソール] で、次のコマンドを実行して、
zhang*に一致する LDAP ユーザーをsuperuserロールにマッピングします。バージョン 8.x
POST _security/role_mapping/ldap_super_user1?pretty { "roles": [ "superuser" ], "enabled": true, "rules": { "any": [ { "field": { "username": "zhang*" } } ] } }その他のバージョン
POST _xpack/security/role_mapping/ldap_super_user1?pretty { "roles": [ "superuser" ], "enabled": true, "rules": { "any": [ { "field": { "username": "zhang*" } } ] } }詳細については、ご利用の Elasticsearch バージョンのドキュメントをご参照ください。
ステップ4:結果の検証
権限を付与された
zhang*ユーザーとして、Alibaba Cloud Elasticsearch インスタンスの Kibana コンソールにログインします。左側のナビゲーションペインで、Developer Tools をクリックします。
[コンソール] で、次のコマンドを実行して、
zhang*ユーザーがクラスター設定を変更する権限を持っていることを確認します。PUT _cluster/settings { "persistent": { "action.auto_create_index": true } }コマンドが成功すると、次の応答が返されます。
{ "acknowledged" : true, "persistent" : { "action" : { "auto_create_index" : "true" } }, "transient" : { } }