OpenLDAP で自己管理型 SASL と 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、信頼できるワイヤネットワーク)でのみ使用します。 「 考慮事項 」を参照してください。