AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。
Docs Menu

Search から MongoDB への接続を保護する

このページでは、MongoDB Controllers for Kubernetes 演算子でマネージドする MongoDB Search およびベクトル検索配置のデータを取得し、レプリケーション状態を読み取るために mongotがmongod (または) に対して開く接続について説明します。mongosこの接続では、mongot がクライアントで、mongod がサーバーです。このページでは、mongot が mongod に対してどのように認証するか(SCRAM または X.509)、そのアイデンティティが必要とするロール、および mongot が TLS を介して mongod サーバー証明書を信頼する方法について説明します。

アプリケーションのユーザーが mongot に直接接続することはありません。逆方向、つまり mongod が mongot のリステンサーバーに開く接続については、「MongoDB から検索への接続を保護する」を参照してください。

このページで参照されている各 MongoDBSearch 設定の完全なスキーマについては、「MongoDB Search およびベクトル検索設定」を参照してください。

mongotがmongodに接続すると、互いに排除的な2つのモードのいずれかを使用してデータベースクライアントとして認証します。

モード
Credentials
使用する場合

SCRAM

ユーザー名とパスワード

mongod 配置ではすでに SCRAM が使用されています。Kubernetes 演算子が MongoDB または MongoDBCommunity リソースもマネージドしている場合、SCRAM がデフォルトになります。認証メカニズムを変更せずにネットワーク層のセキュリティを追加するには、SCRAM と TLS 証明書を組み合わせます。

x.509

クライアント証明書

組織は、クラスター サービスの PKI から証明書をプロビジョニングするか、またはコンプライアンス要件によりパスワードより証明書に基づく身元が優先されます。

MongoDBSearch リソースを更新し、Kubernetes 演算子が mongot ポッドを再起動させることで、後からモードを切り替えることができます。mongot が認証する mongod 側のアイデンティティが次のセクションで説明されている必要なロールを持っている場合は、変更する必要はありません。

注意

SCRAM から X.509 へ切り替えるには、同期ソースで TLS が必要です。ソース mongod が TLS を実行していない場合、Kubernetes Operator は X.509 を拒否します。検索 TLS を初めて有効にすると、シームレスな再起動ではなく、短時間ではありますが実際のクエリ停止時が発生します。この切り替えを行う際は、短時間の停止時間を計画してください。カットオーバーの動作については、「MongoDB から検索への接続を保護する」を参照してください。

mongot が使用するモードにかかわらず、認証するアイデンティには、mongod 上でソース データを取得し、検索カタログを維持する権限が必要です。このアイデンティは、MongoDB Server 8.2 以降に付属し、mongot が必要とする権限のみを付与する組み込みの searchCoordinator ロールを持つ必要があります。

このアイデンティティは常に自分で作成します。MongoDBSearch コントローラが作成することはありません。作成方法は、Kubernetes Operator がソース mongod をマネージするかどうかによって異なります。

  • 演算子マネージドのソース。searchCoordinator ロールを持つユーザーを宣言し、パスワード Secret を参照します。Community の場合は MongoDBCommunity リソースの users リストで、Enterprise の場合は別の MongoDBUser リソースで宣言します。Kubernetes Operator は、mongod でそのユーザーをプロビジョニングします。その後、MongoDBSearch リソースで同じユーザーと Secret を参照し、mongot がそれで認証できるようにします。

  • 外部ソース。ユーザーを作成し、自身の mongod 配置で searchCoordinator ロールを直接付与し、次に示すように MongoDBSearch リソースでその認証情報を参照します。

このページの残りの部分では、MongoDBSearch リソースで各認証モードを構成する方法と、TLS を介して mongod サーバー証明書を信頼する方法を示します。

Kubernetes Secret を提供します。これには、mongot が mongod で認証するために使用するパスワードが含まれています。spec.source.passwordSecretRef を介して MongoDBSearch リソースのシークレットを参照し、spec.source.username を介してユーザー名を設定します。

spec:
source:
username: search-sync-source
passwordSecretRef:
name: my-mongot-password

参照されているSecretには、デフォルトではpasswordという名前のキーの下にパスワードを含める必要があります。パスワードを別のキーの下に保存する場合は、spec.source.passwordSecretRef.keyを使用してキーを上書きします。

The user identified by spec.source.username must already exist on mongod and must hold the searchCoordinator role. If you omit spec.source.username, the Kubernetes Operator assumes the username is search-sync-source.

SCRAM に加えてネットワークレイヤー mTLS を追加するには、クライアント証明書と秘密キーを含む Kubernetes Secret を提供し、spec.source.tls.clientCertificateSecretRef を介して参照します。Secret には tls.crt と tls.key が含まれている必要があります。Kubernetes Operator は、ユーザー名とパスワードを使用して認証しながら、TLS ハンドシェイク中にこの証明書を提示します。

spec:
source:
username: search-sync-source
passwordSecretRef:
name: my-mongot-password
tls:
clientCertificateSecretRef:
name: my-mongot-client-cert

クライアントの秘密キーが暗号化されている場合は、別の Secret でパスフレーズを提供し、spec.source.tls.keyFilePasswordSecretRef を介して参照します。Secret には、keyFilePassword キーにパスフレーズが含まれている必要があります。

X.509 認証では、ユーザー名とパスワードではなく、クライアント証明書を使用して mongot から mongod への認証を行います。証明書の識別名 (DN) は、mongod 上の mongot の識別情報になります。

注意

spec.source.x509 は、spec.source.username および spec.source.passwordSecretRef と排他的です。両方を設定すると、Kubernetes Operator は MongoDBSearch リソースを拒否します。

tls.crt キーと tls.key キーの下にクライアント証明書と秘密キーを含む Kubernetes Secret を提供し、spec.source.x509.clientCertificateSecretRef を介して MongoDBSearch リソースで参照します。

spec:
source:
x509:
clientCertificateSecretRef:
name: my-mongot-x509-cert

クライアントの秘密キーが暗号化されている場合は、keyFilePassword キーの下の別の Secret でパスフレーズを提供し、spec.source.x509.keyFilePasswordSecretRef を介して参照します。

spec:
source:
x509:
clientCertificateSecretRef:
name: my-mongot-x509-cert
keyFilePasswordSecretRef:
name: my-mongot-key-password

クライアント証明書だけではアクセスは許可されません。mongodは、その証明書の識別名を認可された識別情報として認識する必要があります。上記の証明書シークレットを作成した後、次に説明するように、mongodでその証明書の識別名を認可します。

mongod 側で、上記でプロビジョニングしたクライアント証明書の識別名と一致する名前のユーザーを $external データベースに作成し、そのユーザーに searchCoordinator ロールを付与します。mongod は $external データベースを使用して、X.509 などの外部メカニズムを介して認証する識別名を追跡します。Kubernetes Operator が管理する配置で X.509 ユーザーを作成するには、「X.509 を使用したクライアント認証の保護」を参照してください。

mongod 配置で TLS を有効にし、mongot クライアント証明書に署名した証明書発行者 (CA) を信頼するように構成する必要があります。これは、MongoDBSearch リソースではなく、MongoDB または MongoDBCommunity リソースを介して mongod 配置自体で構成します。マネージド mongod 配置で TLS を有効にするには、「単一クラスタークライアント接続の保護 (TLS/SSL)」を参照してください。

上記の設定により、mongot の身元が確立されます。それとは別に、ソース mongod が TLS を使用する場合、mongot は mongot が mongod に接続するときに が提示する証明書を信頼する必要があります。mongot はこの接続の TLS クライアントです。mongod はサーバー証明書を提示し、mongot は提供された CA に対してその証明書を検証します。

ソース mongod が Kubernetes 演算子 の外部にある場合(つまり、spec.source.external を介して宣言されている場合)は、mongod サーバー証明書を発行した CA を提供します。

spec:
source:
external:
hostAndPorts:
- mongod-0.example.com:27017
tls:
ca:
name: my-external-mongod-ca

spec.source.external.tls.ca.name フィールドは、ca.crt キーの下に CA 証明書を含む Kubernetes ConfigMap を参照します。CA は、mongod サーバー証明書を発行したものである必要があります。

ソース mongod が Kubernetes Operator(spec.source.mongodbResourceRefを介して)によって管理される場合、Kubernetes Operator がこの CA の信頼を取り扱い、spec.source.external.tls.ca.name フィールドは適用されません。

mongot プロセスのスタートアップ時にクライアント証明書を読み取ります。証明書をローテートするには、MongoDBSearch リソースの spec.source.x509.clientCertificateSecretRef (の X.509) または spec.source.tls.clientCertificateSecretRef (SCRAM の上の mTLS) によって参照される Secret を更新します。Kubernetes 演算子は変更を検出し、mongot ポッドを自動的に再起動して新しい証明書マテリアルを読み込みます。同様に、spec.source.passwordSecretRef によって参照される SCRAM パスワード Secret にも適用されます。

MCK で X.509 クライアント証明書をローテートするには、次の手順に従ってください。

1

置き換える証明書と同じ識別名を持つ新しいクライアント証明書を発行します。これにより、mongod で作成した $external ユーザーは変更する必要がありません。MongoDB は、有効期間が短いとローテーションの頻度が増えるため、有効期間を少なくとも 30 日にすることを推奨します。

2

spec.source.x509.clientCertificateSecretRef で参照される Secret を新しい tls.crt と tls.key の値で更新します。秘密キーが暗号化されている場合は、spec.source.x509.keyFilePasswordSecretRef で参照される Secret を keyFilePassword キーの新しいパスフレーズで更新します。Kubernetes Operator は変更を検出し、mongot ポッドを自動的に再起動します。

3

すべてのポッドが正常に再起動した後、PKI で古い証明書を取消します。置換証明書で同じ識別名を使用する場合は、mongod の対応する $external ユーザーを変更する必要はありません。その X.509 識別情報を完全に廃止したい場合にのみ、$external ユーザーを削除します。

自動ローテーションは、MongoDBSearch CRD を通じて設定できません。spec.source.x509.clientCertificateSecretRef が参照する Secret を更新して、ローテーションを trigger します。そして、Kubernetes Operator はポッドを自動的に再起動します。