Docs Menu
Docs Home
/
MongoDB マニュアル
/ / / /

Linux で Kerberos 認証を使用して自己管理型 MongoDB を構成する

項目一覧

  • Overview
  • 前提条件
  • 手順
  • その他の考慮事項
  • テストと検証

MongoDB Enterprise は、 Kerberos サービスを使用した認証をサポートしています。 Kerberos は、大規模なクライアント/サーバー システム向けの業界標準の認証プロトコルです。 MongoDB Enterprise は MIT 実装 のみをサポートしています Kerberos の

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

またはmongodmongos を実行している各システムで、 キータブ ファイル 作成 する必要があります を参照してください。キータブ ファイルは、 mongodまたはmongosを実行しているシステムで次のようなコマンドを実行して作成できます。

kadmin.local ktadd mongodb/m1.example.com@EXAMPLE.COM

次の手順では、MongoDB に Kerberos ユーザー プリンシパルを追加する方法、Kerberos サポート用のスタンドアロンのmongodインスタンスを構成する方法、 mongoshを使用して接続してユーザー プリンシパルを認証する手順について説明します。

1

Kerberos ユーザーを初めて追加する場合は、Kerberos サポートなしでmongodを開始します。

Kerberos ユーザーがすでに MongoDB に存在し、 ユーザーの作成に必要な特権 がある場合は、Kerberos サポート付きでmongodを起動できます。

配置に応じて、追加の設定を含めます。

注意

mongodmongos は、デフォルトで localhost にバインドされます。配置のノードが異なるホスト上で実行されている場合、またはリモート クライアントを配置に接続する場合は、--bind_ip または net.bindIp を指定する必要があります。

2

mongoshmongodインスタンスに接続します。 mongod--authが有効になっている場合は、ユーザーの作成に必要な特権で接続していることを確認してください。

3

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 で対応するユーザーを作成する必要があります。 ユーザーの作成と管理の詳細については、「ユーザー管理コマンド 」を参照してください。

4

Kerberos サポートでmongodを起動するには、次の形式で環境変数KRB5_KTNAMEをキータブ ファイルのパスに設定し、 mongodパラメータauthenticationMechanismsGSSAPIに設定します。

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を参照してください。

5

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 名と一致しないシステムに接続する場合は、まずmongoshmongodに接続し、次にmongoshから、 db.auth()メソッドを使用して$externalデータベースで認証します。

use $external
db.auth( { mechanism: "GSSAPI", user: "application/reporting@EXAMPLE.NET" } )

公式の.debパッケージまたは.rpmパッケージのいずれかを使用して MongoDB Enterprise をインストールし、含まれている初期化およびアップサート スクリプトを使用してmongodインスタンスを制御している場合は、デフォルトの 環境設定ファイルでKRB5_KTNAME変数を設定できます毎回 変数を設定するのではなく

Red Hat および Debian ベースのシステムの最近のバージョンでは、 systemdが使用されています。 古いバージョンでは、システム初期化にinitが使用されます。 適切な手順に従って、システムのKRB5_KTNAME変数を構成します。

systemd は構成をユニットファイルに保存します。 ユニット ファイルを更新してKRB5_KTNAME変数を設定します。

1
sudo systemctl cat mongod

systemctlコマンドは、ファイルの場所を返し、その内容を表示します。

2

KRB5_KTNAME変数を設定するには、 keytabファイルの場所を反映するように次の行を編集します。

Environment="KRB5_KTNAME=<path-to-your-mongod.keytab-file>"
3

編集した行を ユニット ファイルに追加します。 編集されたユニットファイルは次のようになります。

[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
4
sudo systemctl daemon-reload
5
sudo systemctl restart mongod

.rpmインストールの場合、デフォルトの環境設定ファイルは/etc/sysconfig/mongodです。

.debのインストールの場合、ファイルは/etc/default/mongodbです。

次のような行を追加してKRB5_KTNAME値を設定します。

KRB5_KTNAME="<path to keytab>"

Kerberos サポートでmongosを起動するには、次の形式で環境変数KRB5_KTNAMEをそのキータブ ファイルのパスに設定し、 mongosパラメータauthenticationMechanismsGSSAPIに設定します。

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設定を指定します。

YAML 構成ファイル形式 を使用する場合:

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プロセスの所有者のみである必要があります。

Kerberos 認証を使用してmongodまたはmongosを起動する際に問題が発生した場合は、 「 自己管理型 Kerberos 認証のトラブルシューティング 」を参照してください。

Kerberos 認証( GSSAPI (Kerberos))は、次のものと一緒に機能できます。

  • MongoDB の SCRAM 認証メカニズム 。

  • MongoDB の LDAP 認証メカニズムは次のとおりです。

  • x.509 用の MongoDB の認証メカニズム

次のようにメカニズムを指定します。

--setParameter authenticationMechanisms=GSSAPI,SCRAM-SHA-256

他のメカニズムが使用されている場合のみ、追加してください。 このパラメーター設定は、クラスター ノードの MongoDB の内部認証には影響しません。

構成手順を完了したら、 mongokerberosツールを使用して構成を検証できます。

mongokerberosは、MongoDB で使用するプラットフォームの Kerberos 構成を確認し、MongoDB クライアントからの Kerberos 認証が期待どおりに機能することをテストするのに便利な方法を提供します。 詳しくは、 mongokerberosのドキュメントを参照してください。

mongokerberos は MongoDB Enterprise でのみ利用可能です。

戻る

Kerberos