OpenLDAP で自己管理型 SASL と LDAP を使用して認証する
注意
MongoDB 8.0以降、 LDAP認証と認可は非推奨です。 LDAP は使用可能であり、 MongoDB 8のサポート期間中に変更されずに動作し続けます。 LDAP は将来のメジャー リリースで削除される予定です。
詳しくは、「 LDAP の非推奨」を参照してください。
MongoDB Enterprise provides support for proxy authentication of users. これにより、管理者は、指定された LDAP(Lightweight Directory Access Protocol)サービスへの認証リクエストをプロキシすることで、ユーザーを認証するように MongoDB クラスターを構成できます。
注意
libldap
にリンクされた MongoDB 4.2 Enterprise バイナリ(RHEL で実行している場合など)の場合、 libldap
へのアクセスは同期され、パフォーマンスおよびレイテンシのコストが発生します。
libldap_r
にリンクされた MongoDB 4.2 Enterprise バイナリの場合、前の MongoDB バージョンから動作に変更はありません。
Considerations
警告
MongoDB Enterprise for Windows はsaslauthd
経由のバインディングをサポートしていません。
Linux MongoDB サーバーは、
saslauthd
デーモンを介した LDAP サーバーへのバインディングをサポートしています。クライアントとサーバー間、および
saslauthd
と LDAP サーバー間で安全な暗号化または信頼できる接続を使用します。 LDAP サーバーはSASL PLAIN
メカニズムを使用して、プレーンテキストでデータを送受信します。 VPN などの信頼できるチャネル、TLS/SSL で暗号化された接続、または信頼できるワイヤネットワークのみを使用する必要があります。
構成する saslauthd
ユーザー認証の LDAP サポートには、 saslauthd
デーモン プロセスと MongoDB サーバーを適切に構成する必要があります。
キャッシュの動作を調整します。
特定の Linux ディストリビューションでは、 saslauthd
は 認証情報のキャッシュ を有効にして起動します。 が再起動されるまで、またはキャッシュの有効期限が切れるまで、 saslauthd
は LDAP サーバーに接続して、認証キャッシュ内のユーザーを再認証しません。 これにより、LDAP サーバーがダウンしている場合や、キャッシュされたユーザーの認証情報が取り消されている場合でも、 saslauthd
はキャッシュ内のユーザーを正常に認証できます。
認証キャッシュの有効期限(秒単位)を設定するには、 -t オプション saslauthd
を参照してください。 の
OpenLDAP で LDAP オプションを構成する。
saslauthd.conf
ファイルが存在しない場合は、作成します。 saslauthd.conf
ファイルは通常、 /etc
フォルダーにあります。 別のファイルパスを指定する場合は、 -O オプション を参照してください のsaslauthd
。
OpenLDAP サーバーに接続するには、次の構成オプションでsaslauthd.conf
ファイルを更新します。
ldap_servers: <ldap uri> ldap_search_base: <search base> ldap_filter: <filter>
ldap_servers
は、認証に使用される LDAP サーバーの URI を指定します。 一般に、ローカルマシンにインストールされている OpenLDAP の場合は、値ldap://localhost:389
を指定できます。TLS/SSL 経由で LDAP を使用する場合は、値ldaps://localhost:636
を指定できます。
ldap_search_base
は、検索が相対的である識別名を指定します。 検索には、以下の基本 または オブジェクトが含まれます。
ldap_filter
は、検索フィルターを指定します。
これらの構成オプションの値は、テストに固有の値に対応する必要があります。 たとえば、メールでフィルタリングするには、代わりにldap_filter: (mail=%n)
を指定します。
OpenLDAP の例
OpenLDAP のサンプルsaslauthd.conf
ファイルには次のコンテンツが含まれています。
ldap_servers: ldaps://ad.example.net ldap_search_base: ou=Users,dc=example,dc=com ldap_filter: (uid=%u)
このサンプル OpenLDAP 構成を使用するには、uid
属性(ログイン名)を持つユーザーを作成し、ドメインUsers
ou
コンポーネント(dc
example
とcom
の下に配置します。
saslauthd
構成の詳細については、 http://www.openldap.org/doc/admin24 /guide.html#Cconfig saslauthd を参照してください 。
saslauthd
の構成をテストします。
testsaslauthd
ユーティリティを使用して、 saslauthd
の構成をテストします。 例:
testsaslauthd -u testuser -p testpassword -f /var/run/saslauthd/mux
0: OK "Success"
は、認証が成功したことを示します。0: NO "authentication failed"
は、ユーザー名、パスワード、または設定エラーを示します。
ホスト オペレーティング システム上のsaslauthd
ディレクトリのロケーションに応じてファイルパスを変更します。
重要
security.sasl.saslauthdSocketPath
または--setParameter saslauthdPath
に指定されたsaslauthd
Unix ドメイン ソケット ファイルの親ディレクトリには、次のいずれかの読み取りおよび実行( r-x
)権限が付与されている必要があります。
mongod
またはmongos
は、 saslauthd
ディレクトリとその内容に対する指定された権限がなければ、 saslauthd
経由で正常に認証できません。
MongoDB の設定
認証用にユーザーを MongoDB に追加します。
MongoDB の$external
データベースにユーザーを追加します。 ユーザーの特権を指定するには、ユーザーにロールを割り当てます。
$external
認証ユーザー(Kerberos、LDAP、または x.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10k バイトより大きくすることはできません。
たとえば、次の例では、 records
データベースへの読み取り専用アクセス権を持つユーザーを追加します。
db.getSiblingDB("$external").createUser( { user : <username>, roles: [ { role: "read", db: "records" } ] } )
必要に応じて、追加のプリンシパルを追加します。 ユーザーの作成と管理の詳細については、「ユーザー管理コマンド 」を参照してください。
MongoDB サーバーを設定します。
プロキシ認証にsaslauthd
インスタンスを使用するように MongoDB サーバーを構成するには、 mongod
の起動時に次のオプションを含めます。
--auth
コマンドライン オプションまたはsecurity.authorization
設定authenticationMechanisms
パラメータをPLAIN
に設定し、かつsaslauthdPath
パラメータは、saslauthd
インスタンスの Unix ドメイン ソケットへのパスに設定されます。重要
security.sasl.saslauthdSocketPath
または--setParameter saslauthdPath
に指定されたsaslauthd
Unix ドメイン ソケット ファイルの親ディレクトリには、次のいずれかの読み取りおよび実行(r-x
)権限が付与されている必要があります。mongod
またはmongos
は、saslauthd
ディレクトリとその内容に対する指定された権限がなければ、saslauthd
経由で正常に認証できません。
認証を強制するには、 authorization
オプションを使用する場合、ユーザーを作成するには特権が必要です。
特定の saslauthd
ソケット パスを使用します。
/<some>/<path>/saslauthd
のソケット パスの場合は、次のコマンドラインの例のように、 saslauthdPath
を/<some>/<path>/saslauthd/mux
に設定します。
mongod --auth --setParameter saslauthdPath=/<some>/<path>/saslauthd/mux --setParameter authenticationMechanisms=PLAIN
構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ip
を指定します。
または、 YAML 形式の構成ファイルを使用する場合は、ファイルに次の設定を指定します。
security: authorization: enabled setParameter: saslauthdPath: /<some>/<path>/saslauthd/mux authenticationMechanisms: PLAIN
または、古い構成ファイル形式を使用している場合は、以下を実行します。
auth=true setParameter=saslauthdPath=/<some>/<path>/saslauthd/mux setParameter=authenticationMechanisms=PLAIN
デフォルトの Unix ドメイン ソケット パスを使用します。
デフォルトの Unix ドメイン ソケット パスを使用するには、次のコマンドラインの例のように、 saslauthdPath
に空のstring ""
を設定します。
mongod --auth --setParameter saslauthdPath="" --setParameter authenticationMechanisms=PLAIN
構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ip
を指定します。
または、 YAML 形式の構成ファイルを使用する場合は、ファイルに次の設定を指定します。
security: authorization: enabled setParameter: saslauthdPath: "" authenticationMechanisms: PLAIN
または、古い構成ファイル形式を使用している場合は、以下を実行します。
auth=true setParameter=saslauthdPath="" setParameter=authenticationMechanisms=PLAIN
構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを使用して配置に接続する場合や、配置ノードを異なるホスト上で実行する場合は、 net.bindIp
設定を指定します。
mongosh
でユーザーを認証します。
接続中にコマンドラインから認証することも、最初に接続してからdb.auth()
メソッドを使用して認証することもできます。
mongosh
で接続するときに認証するには、次のコマンドライン オプションを使用してmongosh
を実行し、 <host>
と<user>
を置き換え、パスワードの入力を求められたら入力します。
mongosh --host <host> --authenticationMechanism PLAIN --authenticationDatabase '$external' -u <user> -p
または、認証情報を指定せずに接続し、 $external
データベースでdb.auth()
メソッドを呼び出します。 "PLAIN"
mechanism
フィールドに値user
pwd
、それぞれ フィールドと フィールドにユーザーとパスワードを指定します。次の例のように、サーバーはsaslauthd
に転送するためにダイジェスト化されていないパスワードを受信する必要があるため、デフォルトのdigestPassword
値( false
)を使用します。
Tip
passwordPrompt()
メソッドを様々なユーザー認証管理メソッドやコマンドと組み合わせて使用すると、メソッドやコマンドの呼び出しでパスワードを直接指定する代わりに、パスワードの入力を求めるプロンプトが表示されます。ただし、以前のバージョンの mongo
シェルと同様に、パスワードを直接指定することもできます。
db.getSiblingDB("$external").auth( { mechanism: "PLAIN", user: <username>, pwd: passwordPrompt() // or cleartext password } )
パスワードの入力を求められたら、入力します。
サーバーはパスワードをプレーン テキストで転送します。 一般に、 は信頼できるチャネル(VPN、TLS/SSL、信頼できるワイヤネットワーク)でのみ使用します。 「 考慮事項 」を参照してください。