自己管理型内部認証とメンバーシップ認証
のレプリカセットとシャーディングされたクラスターのノードが相互に認証するように要求できます。 メンバーの内部認証に MongoDB ではキーファイルまたはx のいずれかを使用できます。 509証明書
選択した方法は、すべての内部通信に使用されます。 たとえば、クライアントがサポートされているmongos
mongos
認証メカニズム のいずれかを使用してmongod
に対して認証を行うと、 は構成された内部認証方法を使用して必要な プロセスに接続します。
注意
内部認証 を有効にすると、クライアントの認可も有効になります。
キーファイル
キーファイル はSCRAMのチャレンジ レスポンス認証メカニズムを使用し、キーファイルにはメンバーの共有パスワードが含まれます。
重要な要件
キーの長さは 6 文字から 1024 文字の間で、base64 セット内の文字のみを含めることができます。 MongoDB は空白文字(例: x0d
、 x09
、 x20
)を使用して、複数のプラットフォームにまたがって使用します。 その結果、次の操作は同一のキーを生成します。
echo -e "mysecretkey" > key1 echo -e "my secret key" > key1 echo -e "my secret key\n" > key2 echo -e "my secret key" > key3 echo -e "my\r\nsecret\r\nkey\r\n" > key4
キーファイル形式
内部メンバーシップ認証用のキーファイル では、キーファイル内に複数のキーを含めるために YAML 形式が使用されます。 YAML 形式は次のいずれかを受け入れます。
1 つのキー文字列(以前のバージョンと同じ)
キー文字列のシーケンス
YAML 形式は、テキストファイル形式を使用する既存の単一のキー キーファイルと互換性があります。
たとえば、
キーファイルに単一のキーが含まれている場合は、引用符の有無にかかわらず、キー string を指定できます。
my old secret key1
複数のキー文字列[ 1 ]をキー文字列のシーケンスとして指定できます(任意で引用符で囲む)。
- my old secret key1 - my new secret key2
ファイルに複数のキーを指定できるため、ダウンタイムなしでキーの順次アップグレードを行うことができます。 「自己管理型レプリカセットのキーのローテーション 」および「 自己管理型シャーディングされたクラスターのキーのローテーション 」を参照してください。
配置のすべてのmongod
インスタンスとmongos
インスタンスは、少なくとも 1 つの共通キーを共有する必要があります。
UNIX システムでは、キーファイルにグループ権限またはワールド権限があってはなりません。Windows システムでは、キーファイルの権限はチェックされません。
レプリカセットまたはシャーディングされたクラスターのノードをホストしている各サーバーにキー ファイルを保存する必要があります。
[1] | MongoDB の 暗号化ストレージ エンジン の場合、ローカル キー管理に使用されるキーファイル には1つの キー しか含めることができません。 |
キーファイルの MongoDB 構成
キーファイルを指定するには、 security.keyFile
設定または--keyFile
コマンドライン オプションを使用します。
キーファイルによる内部認証の例については、 「 キーファイル認証への自己管理型レプリカセットの更新 」を参照してください。
x.509
レプリカセットまたはシャーディングされたクラスターのノードは x を使用できます。キーファイルを使用する代わりに、内部認証用の 509 証明書を使用します。これは、相互 TLS または mTLS とも呼ばれます。 MongoDBは x をサポートしています。安全な TLS/SSL 接続で使用するための 509 証明書認証。
注意
MongoDB は、TLS 1.1 + が利用可能なシステムで TLS 1.0暗号化のサポートを無効にします。
ノード証明書の要件
メンバー証明書を使用して、シャーディングされたクラスターまたはレプリカセットへのメンバーシップを検証します。メンバー証明書ファイルのパスは net.tls.clusterFile
オプションおよび net.tls.certificateKeyFile
オプションで構成されます。メンバーには次の構成要件があります。
クラスター ノードの設定では、認証に使用される属性の少なくとも 1 つに空でない値を指定する必要があります。デフォルトで MongoDB は次のものを受け入れます。
組織 (
O
)組織単位 (
OU
)ドメインコンポーネント (
DC
)
net.tls.clusterAuthX509.extensionValue
を設定することで、認証に使用する代替属性を指定できます。クラスター ノード設定には同じ
net.tls.clusterAuthX509.attributes
を含み、一致する値を使用する必要があります。属性の順序は関係ありません。次の例えではO
とOU
を設定しますが、DC
は設定しません。net: tls: clusterAuthX509: attributes: O=MongoDB, OU=MongoDB Server
注意
enforceUserClusterSeparation
パラメータを無効にすると、次の動作が適用されます。
構成ファイルで
clusterAuthMode
がkeyFile
の場合、O/OU/DC
チェックは無効になります。 これにより、メンバー証明書を持つクライアントは、$external
データベースに保存されているユーザーとして認証できるようになります。構成ファイルで
clusterAuthMode
がkeyFile
でない場合、サーバーは起動しません。
enforceUserClusterSeparation
パラメータをfalse
に設定すると、サーバーは、アプリケーションが認証に使用するクライアント証明書と、特権アクセス権を持つクラスター内証明書を区別しません。 これは、 clusterAuthMode
がkeyFile
である場合、効果はありません。 ただし、 clusterAuthMode
がx509
の場合、許可されたスキームを使用するユーザー証明書はクラスター証明書と複合化され、特権アクセスが付与されます。
次の操作を行うと、既存の証明書に内部特権が付与されます。
このパラメーターで許可された名前を持つユーザーを作成します。
enforceUserClusterSeparation
パラメータをfalse
に設定します。clusterAuthMode
をx509
に設定します。
enforceUserClusterSeparation
フラグによって作成が許可された昇格特権を持つユーザーを削除したことを検証せずに、 keyFile
からx509
にアップグレードすることはできません。
enforceUserClusterSeparation
パラメータをfalse
に設定するには、起動時に次のコマンドを実行します。
mongod --setParameter enforceUserClusterSeparation=false
証明書には次の要件があります。
単一の認証局 (CA) が、シャーディングされたクラスターまたはレプリカセットのノードすべての x.509 証明書を発行する必要があります。
サブジェクト代替名 (
SAN
) エントリの少なくとも 1 つは、他のクラスター ノードが使用するサーバー ホスト名と一致する必要があります。SAN
を比較する際に、MongoDB は DNS 名または IP アドレスのいずれかを比較できます。subjectAltName
を指定しない場合、MongoDB は代わりに共通名(CN)を比較します。 ただし、CN のこの使用は RFC に従って非推奨となります。2818certificateKeyFile
として使用される証明書にextendedKeyUsage
が含まれている場合、値にはclientAuth
(「TLS Web クライアント認証」)とserverAuth
(「TLS Web サーバー認証」)の両方を含める必要があります。extendedKeyUsage = clientAuth, serverAuth clusterFile
として使用される証明書にextendedKeyUsage
が含まれている場合、値にはclientAuth
が含まれている必要があります。extendedKeyUsage = clientAuth
MongoDB の構成
TLS は、レプリカセットの各ノード(各 mongod
インスタンス)間、またはシャーディングされたクラスター(各 mongod
インスタンスと mongos
インスタンス)間の認証に使用できます。
内部認証に TLS を使用するには、次の設定を使用します。
security.clusterAuthMode
または--clusterAuthMode
をx509
に設定
mongod
インスタンスとmongos
インスタンスは証明書鍵ファイルを使用してクライアントに ID を証明しますが、証明書鍵ファイルはメンバーシップ認証に使用することもできます。 クラスター ファイルを指定しない場合、メンバーはメンバーシップ認証に証明書鍵ファイルを使用します。 net.tls.certificateKeyFile
または--tlsCertificateKeyFile
を使用して証明書鍵ファイルを指定します。
証明書キーファイルをクライアント認証とメンバーシップ認証の両方に使用するには、証明書は次のいずれかを行う必要があります。
extendedKeyUsage
を省略する、または特定
extendedKeyUsage = serverAuth, clientAuth
次のステップ
x の例の場合は次のようになります。 509内部認証については、 「 x を使用する 」を参照してください。自己管理型 MongoDB によるメンバーシップ認証の509証明書。
キーファイルによる内部認証から x にアップグレードします。 509内部認証については、「自己管理型 MongoDB をキーファイル認証から x にアップグレードする 」を参照してください。 509認証。