このページでは、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 に対して認証する方法
mongotがmongodに接続すると、互いに排除的な2つのモードのいずれかを使用してデータベースクライアントとして認証します。
モード | Credentials | 使用する場合 |
|---|---|---|
SCRAM | ユーザー名とパスワード |
|
x.509 | クライアント証明書 | 組織は、クラスター サービスの PKI から証明書をプロビジョニングするか、またはコンプライアンス要件によりパスワードより証明書に基づく身元が優先されます。 |
MongoDBSearch リソースを更新し、Kubernetes 演算子が mongot ポッドを再起動させることで、後からモードを切り替えることができます。mongot が認証する mongod 側のアイデンティティが次のセクションで説明されている必要なロールを持っている場合は、変更する必要はありません。
注意
SCRAM から X.509 へ切り替えるには、同期ソースで TLS が必要です。ソース mongod が TLS を実行していない場合、Kubernetes Operator は X.509 を拒否します。検索 TLS を初めて有効にすると、シームレスな再起動ではなく、短時間ではありますが実際のクエリ停止時が発生します。この切り替えを行う際は、短時間の停止時間を計画してください。カットオーバーの動作については、「MongoDB から検索への接続を保護する」を参照してください。
mongod で mongot が必要なロール
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 サーバー証明書を信頼する方法を示します。
SCRAM 認証の構成
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を使用してキーを上書きします。
spec.source.username で識別されるユーザーは、mongod 上に既に存在している必要があります。また、searchCoordinator ロールを所有している必要があります。spec.source.username を省略すると、Kubernetes 演算子はユーザー名が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 認証の構成
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でその証明書の識別名を認可します。
X.509 サブジェクト識別名を認可します 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)」を参照してください。
mongod サーバー証明書を信頼する
上記の設定により、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 クライアント証明書をローテートするには、次の手順に従ってください。
自動ローテーションは、MongoDBSearch CRD を通じて設定できません。spec.source.x509.clientCertificateSecretRef が参照する Secret を更新して、ローテーションを trigger します。そして、Kubernetes Operator はポッドを自動的に再起動します。