自己管理型 LDAP プロキシ認証
項目一覧
MongoDB Enterpriseは、 LDAP(Lightweight Directory Access Protocol)サービスへの認証リクエストのプロキシ機能をサポートしています。
MongoDB は LDAP サーバーへのシンプル バインディングと SASL バインディングをサポートしています。
via | 説明 |
---|---|
オペレーティング システム ライブラリ | MongoDB はオペレーティング システム ライブラリ経由の LDAP サーバーへのバインディングをサポートしています。 これにより、Linux および Windows 上の MongoDB サーバーは認証に LDAP サーバーを使用できるようになります。 以前のバージョンでは、Microsoft Windows 上の MongoDB は LDAP サーバーに接続できません。 |
| Linux 上の MongoDB サーバーは、 Windows 上の MongoDB では使用できません。 |
Considerations
LDAP の完全な説明は、このドキュメントの範囲外です。このページは LDAP に関する予備知識を前提としています。
このドキュメントは、MongoDB LDAP 認証についてのみ説明し、LDAP 上の他のリソースを置き換えるものではありません。 LDAP 認証を設定する前に、LDAP とそれに関連する事柄について十分に理解することをお勧めします。
MongoDBは、MongoDBの配置向けの LDAP 認証の最適な構成のためのプロフェッショナル サービスを提供できます。
接続プール
認証および承認のために LDAP サーバーに接続する場合、MongoDB はデフォルトで次のことを行います。
次の場合は、接続プーリングを使用します。
Windows の場合または
MongoDB Enterprise バイナリがlibldap_r にリンクされている Linux の場合。
次の場合は、接続プーリングを使用しません。
MongoDB Enterprise バイナリがlibldap にリンクされている Linux の場合。
接続プーリングの動作を変更するには、 ldapUseConnectionPool
パラメータをアップデートします。
saslauthd
およびディレクトリ権限
重要
security.sasl.saslauthdSocketPath
または--setParameter saslauthdPath
に指定されたsaslauthd
Unix ドメイン ソケット ファイルの親ディレクトリには、次のいずれかの読み取りおよび実行( r-x
)権限が付与されている必要があります。
mongod
またはmongos
は、 saslauthd
ディレクトリとその内容に対する指定された権限がなければ、 saslauthd
経由で正常に認証できません。
libldap
および libldap_r
libldap
にリンクされた MongoDB 4.2 Enterprise バイナリ(RHEL で実行している場合など)の場合、libldap
へのアクセスは同期され、パフォーマンスおよびレイテンシのコストが発生します。
libldap_r
にリンクされた MongoDB 4.2 Enterprise バイナリの場合、前の MongoDB バージョンから動作に変更はありません。
MongoDB サーバーでの LDAP ユーザーの管理
LDAP認可なしで LDAP認証を使用する場合、ユーザー管理には LDAPサーバーとMongoDBサーバーの両方でユーザーを管理する必要があります。MongoDBでは、LDAP 経由で認証するユーザーごとに、名前が認証ユーザー名と完全に一致する $external
データベースのユーザーが必要です。LDAPサーバー上のユーザーを変更するには、対応するMongoDB $external
ユーザーを変更する必要がある場合があります。
$external
認証ユーザー(Kerberos、LDAP、または x.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10k バイトより大きくすることはできません。
例
ユーザーはsam@dba.example.com
として認証します。 MongoDB サーバーは LDAP サーバーにバインドし、任意のusername transformations
に基づいてユーザーを認証します。 認証が成功すると、MongoDB サーバーは次に$external
データベースでユーザーsam@dba.example.com
を確認し、そのユーザーに関連付けられたロールと特権を認証されたユーザーに付与します。
MongoDB サーバー上のユーザーを管理するには、対応する MongoDB $external
ユーザーが$external
データベースに対してユーザー管理特権( userAdmin
によって提供されるものなど)を持つ LDAP ユーザーとして認証する必要があります。
重要
$external
データベースでユーザー管理特権を持つ$external
ユーザーがいない場合、LDAP 認証のユーザー管理を実行することはできません。 このシナリオは、LDAP 認証を有効にする前にユーザーを設定し、適切なユーザー管理者を作成しない場合に発生することがあります。
既存の非 LDAP ユーザーの管理
$external
データベースに 存在しない既存のユーザーが存在する場合、継続的なアクセスを保証するには、各ユーザーに対して次の要件を満たす必要があります。
ユーザーは LDAP サーバー上に対応するユーザー オブジェクトを持っています。
同等のロールと特権を持つユーザーは
$external
データベースに存在
$external
データベースに 存在しないユーザーによるアクセスを引き続き許可する場合は、必要に応じてSCRAM-SHA-1
やSCRAM-SHA-256
を含むようにsetParameter
authenticationMechanisms
を構成する必要があります。 その後、ユーザーは認証時に--authenticationMechanism SCRAM-SHA-1
またはSCRAM-SHA-256
を指定する必要があります。
レプリカセットでの LDAP 認証の配置
レプリカセット の場合は、 プライマリ を構成する前に、まず セカンダリ ノードと アービタ ノードで LDAP 認証を構成します。これは、シャード レプリカセット、またはコンフィギュレーションサーバー レプリカセットにも適用されます。 書き込みの可用性のために大多数のノードを維持するには、一度に 1 つのレプリカセット ノードを構成します。
シャーディングされたクラスターでの LDAP 認証の配置
シャーディングされたクラスターでは、 コンフィギュレーションサーバーとクラスター レベルのユーザーに対して各mongos
で LDAP 認証を構成する必要があります。 オプションとして、シャード ローカル ユーザーに対し、各シャードで LDAP 認可を構成できます。
オペレーティング システムの LDAP ライブラリ経由の LDAP 認証
バージョン 3.4 で追加。
OS ライブラリ経由の LDAP 認証プロセスの概要は次のとおりです。
クライアントは MongoDB に認証を行い、ユーザーの認証情報を提供します。
LDAP サーバーにバインディングする前にユーザー名を LDAP DN にマッピングする必要がある場合、MongoDB は構成された
security.ldap.userToDNMapping
設定に基づいて変換を適用できます。MongoDB は、指定されたユーザー名を使用して、または変換が適用された場合は変換されたユーザー名を使用して、
security.ldap.servers
で指定された LDAP サーバーにバインドします。MongoDB はデフォルトで単純バインディングを使用しますが、
security.ldap.bind.method
とsecurity.ldap.bind.saslMechanisms
で構成されている場合はsasl
バインディングを使用することもできます。変換に LDAP サーバーをクエリする必要がある場合、または LDAP サーバーが匿名バインドを許可していない場合、MongoDB は提供されたユーザー認証情報の認証を試みる前に、
security.ldap.bind.queryUser
とsecurity.ldap.bind.queryPassword
に指定されたユーザー名とパスワードを使用して LDAP サーバーにバインドします。LDAP サーバーは MongoDB へのバインド試行の結果を返します。 成功すると、MongoDB はユーザーの認可を試みます。
MongoDB サーバーはユーザー名を
$external
データベースのユーザーにマッピングし、一致するユーザーに関連付けられたロールまたは特権をそのユーザーに割り当てます。 MongoDB が一致するユーザーを 見つけられない場合 、認証は失敗します。クライアントは、MongoDB が認証されたユーザーにロールまたは特権を付与したアクションを実行できます。
オペレーティング システム ライブラリ経由の認証に LDAP を使用するには、 mongod
またはmongos
構成ファイルの一部として次の設定を指定します。
オプション | 説明 | 必須 |
---|---|---|
| はい | |
デフォルトは | いいえ。ただし、LDAP サーバーへのバインディングに | |
いいえ。ただし、 | ||
識別名(DN)または SASL 名によって識別される LDAP エンティティで、MongoDB サーバーは LDAP サーバーに接続するときに認証またはバインドします。
指定されたユーザーには、LDAP サーバーでクエリを実行するための適切な特権が必要です。 | いいえ。ただし、 | |
いいえ。ただし、 | ||
Windows MongoDB 配置では、LDAP サーバーに接続するときに、認証またはバインディングで | いいえ。ただし、 | |
クライアントは、構成された
変換の一部として LDAP クエリを使用する | いいえ。ただし、クライアントが変換を必要とするユーザー名を使用して認証する場合を除きます。 |
による LDAP 認証 saslauthd
警告
MongoDB Enterprise for Windows はsaslauthd
経由のバインディングをサポートしていません。
Considerations
Linux MongoDB サーバーは、
saslauthd
デーモンを介した LDAP サーバーへのバインディングをサポートしています。クライアントとサーバー間、および
saslauthd
と LDAP サーバー間で安全な暗号化または信頼できる接続を使用します。 LDAP サーバーはSASL PLAIN
メカニズムを使用して、プレーンテキストでデータを送受信します。 VPN などの信頼できるチャネル、TLS/SSL で暗号化された接続、または信頼できるワイヤネットワークのみを使用する必要があります。
構成
経由で を使用して LDAP サーバーにバインドするように MongoDBsaslauthd
サーバーを構成するには、次のコマンドラインmongod
オプション または 次の構成ファイル設定のいずれかを使用して を起動します。
--auth
アクセス制御を有効にする--setParameter
authenticationMechanisms
がPLAIN
に設定されている 、および--setParameter
saslauthdPath
パラメータがsaslauthd
インスタンスの Unix ドメイン ソケットへのパスに設定されている 。 デフォルトの Unix ドメイン ソケット パスを使用するには、空のstring""
を指定します。
配置に必要なその他のコマンドライン オプションを含めます。 mongod
コマンドライン オプションに関する詳細なドキュメントについては、 mongod
を参照してください。
security.authorization
をenabled
に設定し、setParameter
authenticationMechanisms
パラメータがPLAIN
に設定され、かつsetParameter
with thesaslauthdPath
set to the path to the Unix-domain Socket of the saslauthd instance. デフォルトの Unix ドメイン ソケット パスを使用するには、空のstring""
を指定します。
配置に必要なその他の構成ファイル設定を含めます。 構成ファイルに関する完全なドキュメントについては、「 YAML 構成ファイル 」を参照してください。
LDAP サーバーに適したパラメータを使用してsaslauthd.conf
ファイルを作成または更新する必要があります。 saslauthd.conf
のドキュメントは、このドキュメントの範囲外です。
重要
security.sasl.saslauthdSocketPath
または--setParameter saslauthdPath
に指定されたsaslauthd
Unix ドメイン ソケット ファイルの親ディレクトリには、次のいずれかの読み取りおよび実行( r-x
)権限が付与されている必要があります。
mongod
またはmongos
は、 saslauthd
ディレクトリとその内容に対する指定された権限がなければ、 saslauthd
経由で正常に認証できません。
次のチュートリアルでは、 saslauthd.conf
を 2 つの一般的な LDAP サービスで動作するように構成する方法に関する基本情報を提供します。
作成ガイダンスについては、 saslauthd
および特定の LDAP サービスのドキュメントを参照してください。
LDAP 認証経由で MongoDB サーバーに接続する
LDAP 認証経由で MongoDB サーバーで認証するには、次のパラメータを使用して$external
データベースでdb.auth()
を使用します。
オプション | 説明 |
---|---|
| 認証するユーザー名。 |
| 認証に使用するパスワード。 |
|
|