自己管理型 Kerberos 認証のトラブルシューティング
mongokerberos
検証ツール
mongokerberos
プログラムは、MongoDB で使用するためのプラットフォームの Kerberos 構成を確認し、MongoDB クライアントからの Kerberos 認証が期待どおりに機能することをテストするのに便利な方法を提供します。
mongokerberos
ツールは一般的な構成の問題の診断に役立ち、Kerberos 構成のトラブルシューティングを行う際に開始することをお勧めします。 詳しくは、 mongokerberos
のドキュメントを参照してください。
mongokerberos
は MongoDB Enterprise でのみ利用可能です。
Kerberos 構成デバッグ戦略
Kerberos mongod
mongos
を使用して または に対して開始または認証を開始するのが困難な場合は、次の点を考慮してください。
MongoDB Community Edition ではなく、MongoDB Enterprise を実行していることを確認します。 Kerberos 認証は MongoDB Enterprise の機能であり、MongoDB Community Edition バイナリでは機能しません。
MongoDB Enterprise を使用していることを確認するには、
--version
コマンドライン オプションをmongod
またはmongos
に渡します。mongod --version このコマンドの出力で string
modules: subscription
またはmodules: enterprise
を探し、MongoDB Enterprise バイナリを使用していることを確認します。mongod
またはmongos
インスタンスの標準システムホスト名が、解決可能な完全修飾ドメイン名であることを確認します。Linux では、システム プロンプトで
hostname -f
コマンドを使用して、システム ホスト名の解決を確認できます。Linuxでは 、サービスプリンシパル名(SPN の プライマリコンポーネントが であることを確認します SPN の
mongodb
は です。SPN のプライマリ コンポーネントがmongodb
でない場合は、--setParameter saslServiceName
を使用してプライマリ コンポーネントを指定する必要があります。
Linuxでは 、サービスプリンシパル名のインスタンス コンポーネント(SPN)が キータブ ファイル 内の は、 または
mongod
mongos
インスタンスの標準システム ホスト名と一致します。mongod
またはmongos
インスタンスのシステムホスト名がキータブ ファイルにない場合、認証は失敗し、GSSAPI error acquiring credentials.
エラー メッセージが表示されます。によって返される または
mongod
mongos
インスタンスのホスト名が完全修飾でない場合は、hostname -f
--setParameter saslHostName
またはmongod
mongos
を起動するときに、 を使用してインスタンスの完全修飾ドメイン名を設定します。mongod
またはmongos
インスタンスを実行する各ホストにA
とPTR
DNS レコードがあり、DNS のフォワードルックアップとリバースルックアップの両方を提供するようにします。A
レコードは、mongod
またはmongos
の FQDN にマッピングする必要があります。MongoDB インスタンスと Kerberos インフラストラクチャをホストしているサーバーのクロックが、最大時間差内にあることを確認します。デフォルトでは 5 分です。 時間差が最大時間スワップを超えると、認証が成功し ません 。
Linux KRB 5キータブに、
@<KERBEROS REALM>
で終わるプリンシパル名が含まれていることを確認します。 SPNを検証するには、Active Directory でsetspn -Q <spn>
を実行します。 正しく構成されている場合、このコマンドは SPN にアタッチされているアカウントの 1 つの識別名を返します。 Linux でklist -k <keytab>
を実行すると、<spn>@<KERBEROS REALM>
がキータブに表示されます。Active Directory をKDCとして使用する場合は、MongoDB サービス アカウントがマシン アカウントではなくユーザー アカウントであることを確認します。
Active Directory でAES暗号化を使用する場合は、
msDS-SupportedEncryptionTypes
プロパティまたは「ネットワーク セキュリティ: Kerberos に許可された暗号化タイプの構成」ポリシー設定のいずれかを使用して MongoDB サービス アカウントで AES を有効にします。Kerberos は、同じパスワードを持つ 2 人のユーザーが異なるキーを生成するように、キー生成アルゴリズムをソルトします。 Linux と Active Directory(AD)上の
ktutil
では、ソルトの生成に同じプロセスは使用されません。 こうした不一致により、Linux と Windows の環境で連携する場合、認証が失敗する可能性があります。 この問題を軽減するには、次のことを実行します。AD サーバー上でキータブ ファイルを生成し、結果のファイルを Linux サーバーに移動します。
ktpass /out <outfile.keytab> /princ <spn>@<KERBEROS REALM> /mapuser <current userPrincipalName> /crypto ALL /ptype KRB5_NT_PRINCIPAL +rndpass 注意
これにより、
userPrincipalName
は/princ
の値に変更されます。Linux で
ktutil
を使用し、正しいソルトを使用するように強制します。ktutil
に正しいソルトを使用させるには、次の手順に従います。プリンシパル名として
userPrincipalName
を使用するキータブ エントリを生成します。ktutil: add_entry -password -p <userPrincipalName>@<KERBEROS REALM> -e aes256-cts-hmac-sha1-96 -k <KVNO> Password for <userPrincipalName>@<KERBEROS REALM>: ktutil: list -k slot KVNO Principal キーを 16 進ダンプします。
プリンシパル名として
<spn>@<KERBEROS REALM>
を使用して新しいキータブ エントリを作成し、16 進数ダンプキーを使用します。1 <KVNO> <userPrincipalName>@<KERBEROS REALM>(0x<HEXDUMP>) ktutil: add_entry -key -p <spn>@<KERBEROS REALM> -e aes256-cts-hmac-sha1-96 -k <KVNO> Key for <spn>@<KERBEROS REALM> (hex): <HEXDUMP> ktutil: write_kt mongodb_ad.keytab
推奨はされませんが、Salted を使用しない RFC 4 -HMAC を使用してください。
Linux での Kerberos トレース ログ
MIT Kerberos は、トレース ログ出力用のKRB5_TRACE
環境変数を提供します。 Linux で MIT Kerberos に関する永続的な問題が発生している場合は、 mongod
、 mongos
、またはmongosh
インスタンスを起動するときにKRB5_TRACE
を設定して、冗長なログを生成できます。
たとえば、次のコマンドは、キータブ ファイルがデフォルトの/etc/krb5.keytab
パスにあるスタンドアロンのmongod
を起動し、 KRB5_TRACE
を/logs/mongodb-kerberos.log
に書込むように設定します。
env KRB5_KTNAME=/etc/krb5.keytab \ KRB5_TRACE=/logs/mongodb-kerberos.log \ mongod --dbpath /data/db --logpath /data/db/mongodb.log \ --auth --setParameter authenticationMechanisms=GSSAPI \ --bind_ip localhost,<hostname(s)|ip address(es)> --fork
よくあるエラーメッセージ
Kerberos サービスに問題が発生した場合、状況によっては、MongoDB は GSSAPI インターフェイスからエラー メッセージを返します。 以下はよくあるエラーメッセージです。