Linux で Kerberos 認証を使用して自己管理型 MongoDB を構成する
Overview
MongoDB Enterpriseは、 Kerberos サービス を使用した認証をサポートしています。 Kerberos は、大規模なクライアント/サーバーシステム向けの業界標準の認証プロトコルです。 MongoDB Enterpriseは Kerberos の MIT実装 のみをサポートしています。
前提条件
MongoDB Enterprise を使用していることを確認するには、 --version
コマンドライン オプションをmongod
またはmongos
に渡します。
mongod --version
このコマンドの出力で string modules:
subscription
またはmodules: enterprise
を探し、MongoDB Enterprise バイナリを使用していることを確認します。
レプリカセットとシャーディングされたクラスターの場合は、IP アドレスや修飾されていないホスト名ではなく、構成で完全修飾ドメイン名(FQDN)が使用されていることを確認してください。 Kerberos レルムを正しく解決し、接続できるようにするには、GSSAPI 用の FQDN を使用する必要があります。
Kerberos 配置の セットアップと構成 については、このドキュメントの範囲外です。 MIT Kerberos のドキュメント を参照してください Kerberos 配置の構成方法については、 またはオペレーティング システムのドキュメント を参照してください。
Kerberos と MongoDB を一緒に使用するには、MongoDBmongos
配置内の各mongod
と インスタンスの Kerberos サービス プリンシパル を Kerberos データベースに追加する 必要があります。 。You can add the service principal by running a command similar to the following on your KDC:
kadmin.local addprinc mongodb/m1.example.com@EXAMPLE.COM
またはmongod
mongos
を実行している各システムで、 キータブ ファイル を 作成 する必要があります を参照してください。キータブ ファイルは、 mongod
またはmongos
を実行しているシステムで次のようなコマンドを実行して作成できます。
kadmin.local ktadd mongodb/m1.example.com@EXAMPLE.COM
手順
次の手順では、MongoDB に Kerberos ユーザー プリンシパルを追加する方法、Kerberos サポート用のスタンドアロンのmongod
インスタンスを構成する方法、 mongosh
を使用して接続してユーザー プリンシパルを認証する手順について説明します。
mongod
Kerberos なしで を起動します。
Kerberos ユーザーを初めて追加する場合は、Kerberos サポートなしでmongod
を開始します。
Kerberos ユーザーがすでに MongoDB に存在し、 ユーザーの作成に必要な特権 がある場合は、Kerberos サポート付きでmongod
を起動できます。
配置に応じて、追加の設定を含めます。
注意
mongod
と mongos
は、デフォルトで localhost にバインドされます。配置のノードが異なるホスト上で実行されている場合、またはリモート クライアントを配置に接続する場合は、--bind_ip
または net.bindIp
を指定する必要があります。
mongod
に接続します。
mongosh
をmongod
インスタンスに接続します。 mongod
で--auth
が有効になっている場合は、ユーザーの作成に必要な特権で接続していることを確認してください。
MongoDB に Kerberos プリンシパルを追加しました。
Kerberos プリンシパル( <username>@<KERBEROS REALM>
または<username>/<instance>@<KERBEROS REALM>
を$external
データベースの MongoDB に追加します。 すべて大文字で Kerberos レルムを指定します。 $external
データベースでは、 mongod
が外部ソース(例: Kerberos)を使用して認証します。 ユーザーの特権を指定するには、ユーザーにロールを割り当てます。
$external
認証ユーザー(Kerberos、LDAP、または x.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10k バイトより大きくすることはできません。
次の例では、 records
データベースへの読み取り専用アクセス権を持つ Kerberos プリンシパルapplication/reporting@EXAMPLE.NET
を追加します。
use $external db.createUser( { user: "application/reporting@EXAMPLE.NET", roles: [ { role: "read", db: "records" } ] } )
必要に応じて、追加のプリンシパルを追加します。 Kerberos を使用して認証するすべてのユーザーごとに、MongoDB で対応するユーザーを作成する必要があります。 ユーザーの作成と管理の詳細については、「ユーザー管理コマンド 」を参照してください。
mongod
Kerberos サポートで を起動します。
Kerberos サポートでmongod
を起動するには、次の形式で環境変数KRB5_KTNAME
をキータブ ファイルのパスに設定し、 mongod
パラメータauthenticationMechanisms
をGSSAPI
に設定します。
env KRB5_KTNAME=<path to keytab file> \ mongod \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongod options>
構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ip
を指定します。
たとえば、次の例では、Kerberos をサポートするスタンドアロンのmongod
インスタンスが起動されます。
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --auth \ --setParameter authenticationMechanisms=GSSAPI \ --dbpath /opt/mongodb/data --bind_ip localhost,<hostname(s)|ip address(es)>
mongod
とキータブ ファイルへのパスが異なる場合があります。 キータブ ファイルにアクセスできるのは、 mongod
プロセスの所有者のみである必要があります。
公式の.deb
または.rpm
パッケージを使用すると、環境設定ファイルでKRB5_KTNAME
を設定できます。 詳細については、 KRB 5 _KTNAMEを参照してください。
mongosh
mongod
を に接続し、認証します。
mongosh
クライアントを Kerberos プリンシパルapplication/reporting@EXAMPLE.NET
として接続します。 接続する前に、Kerberos のkinit
プログラムを使用してapplication/reporting@EXAMPLE.NET
の認証情報を取得する必要があります。
コマンドラインから接続と認証を行うことができます。
mongosh --host hostname.example.net --authenticationMechanism=GSSAPI --authenticationDatabase='$external' --username application/reporting@EXAMPLE.NET
Kerberos 名と一致するホスト名を持つシステムに接続する場合は、IP アドレスや修飾されていないホスト名ではなく、 --host
オプションに完全修飾ドメイン名(FQDN)を指定していることを確認してください。
Kerberos 名と一致しないシステムに接続する場合は、まずmongosh
をmongod
に接続し、次にmongosh
から、 db.auth()
メソッドを使用して$external
データベースで認証します。
use $external db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )
その他の考慮事項
KRB5_KTNAME
公式の.deb
パッケージまたは.rpm
パッケージのいずれかを使用して MongoDB Enterprise をインストールし、含まれている初期化およびアップサート スクリプトを使用してmongod
インスタンスを制御している場合は、デフォルトの 環境設定ファイルでKRB5_KTNAME
変数を設定できます毎回 変数を設定するのではなく
Red Hat および Debian ベースのシステムの最近のバージョンでは、 systemd
が使用されています。 古いバージョンでは、システム初期化にinit
が使用されます。 適切な手順に従って、システムのKRB5_KTNAME
変数を構成します。
systemd
構成ファイル
systemd
は構成をユニットファイルに保存します。 ユニット ファイルを更新してKRB5_KTNAME
変数を設定します。
ユニットファイルを編集する
編集した行を ユニット ファイルに追加します。 編集されたユニットファイルは次のようになります。
[Unit] Description=High-performance, schema-free document-oriented database After=network.target Documentation=https://docs.mongodb.org/manual [Service] User=mongodb Group=mongodb ExecStart=/usr/bin/mongod --config /etc/mongod.conf Environment="KRB5_KTNAME=/etc/mongod.keytab" PIDFile=/var/run/mongodb/mongod.pid file size LimitFSIZE=infinity cpu time LimitCPU=infinity virtual memory size LimitAS=infinity open files LimitNOFILE=64000 processes/threads LimitNPROC=64000 locked memory LimitMEMLOCK=infinity total threads (user+kernel) TasksMax=infinity TasksAccounting=false Recommended limits for for mongod as specified in http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings [Install] WantedBy=multi-user.target
mongod
サービスを再起動する
sudo systemctl restart mongod
init
構成ファイル
.rpm
インストールの場合、デフォルトの環境設定ファイルは/etc/sysconfig/mongod
です。
.deb
のインストールの場合、ファイルは/etc/default/mongodb
です。
次のような行を追加してKRB5_KTNAME
値を設定します。
KRB5_KTNAME="<path to keytab>"
mongos
Kerberos の を構成する
Kerberos サポートでmongos
を起動するには、次の形式で環境変数KRB5_KTNAME
をそのキータブ ファイルのパスに設定し、 mongos
パラメータauthenticationMechanisms
をGSSAPI
に設定します。
env KRB5_KTNAME=<path to keytab file> \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ <additional mongos options>
構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを配置に接続する場合、または配置ノードを異なるホスト上で実行する場合は、 --bind_ip
を指定します。
たとえば、次の例では、Kerberos をサポートするmongos
インスタンスが起動されます。
env KRB5_KTNAME=/opt/mongodb/mongos.keytab \ mongos \ --setParameter authenticationMechanisms=GSSAPI \ --configdb shard0.example.net, shard1.example.net,shard2.example.net \ --keyFile /opt/mongodb/mongos.keyfile \ --bind_ip localhost,<hostname(s)|ip address(es)>
mongos
とキータブ ファイルへのパスが異なる場合があります。 キータブ ファイルにアクセスできるのは、 mongos
プロセスの所有者のみである必要があります。
構成に必要な追加のmongos
オプションを変更するか、含めます。 たとえば、シャーディングされたクラスター ノードの内部認証に--keyFile
を使用する代わりに、x.509 ノード認証を使用できます。
構成ファイルの使用
構成ファイルを使用して Kerberos サポート用にmongod
またはmongos
を構成するには、構成ファイルでauthenticationMechanisms
設定を指定します。
setParameter: authenticationMechanisms: GSSAPI
構成に必要な追加オプションを含めます。 たとえば、リモート クライアントを使用して配置に接続する場合や、配置ノードを異なるホスト上で実行する場合は、 net.bindIp
設定を指定します。
たとえば、 /opt/mongodb/mongod.conf
にスタンドアロンmongod
の次の構成設定が含まれている場合:
security: authorization: enabled setParameter: authenticationMechanisms: GSSAPI storage: dbPath: /opt/mongodb/data net: bindIp: localhost,<hostname(s)|ip address(es)>
Kerberos サポートでmongod
を起動するには、次の形式を使用します。
env KRB5_KTNAME=/opt/mongodb/mongod.keytab \ /opt/mongodb/bin/mongod --config /opt/mongodb/mongod.conf
mongod
、キータブ ファイル、構成ファイルへのパスが異なる場合があります。 キータブ ファイルにアクセスできるのは、 mongod
プロセスの所有者のみである必要があります。
MongoDB の Kerberos 設定のトラブルシューティング
Kerberos 認証を使用してmongod
またはmongos
を起動する際に問題が発生した場合は、 「 自己管理型 Kerberos 認証のトラブルシューティング 」を参照してください。
追加の認証メカニズムを含める
Kerberos 認証( GSSAPI (Kerberos))は、次のものと一緒に機能できます。
MongoDB の SCRAM 認証メカニズム 。
MongoDB の LDAP 認証メカニズムは次のとおりです。
PLAIN(LDAP SASL)
x.509 用の MongoDB の認証メカニズム
次のようにメカニズムを指定します。
--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256
他のメカニズムが使用されている場合のみ、追加してください。 このパラメーター設定は、クラスター ノードの MongoDB の内部認証には影響しません。
テストと検証
構成手順を完了したら、 mongokerberos
ツールを使用して構成を検証できます。
mongokerberos
は、MongoDB で使用するプラットフォームの Kerberos 構成を確認し、MongoDB クライアントからの Kerberos 認証が期待どおりに機能することをテストするのに便利な方法を提供します。 詳しくは、 mongokerberos
のドキュメントを参照してください。
mongokerberos
は MongoDB Enterprise でのみ利用可能です。