x.509
MongoDB はクライアント認証およびレプリカセットやシャーディングされたクラスターのノードの内部認証に対して X.509 証明書による認証をサポートします。
X.509 証明書認証には安全な TLS/SSL 接続 が必要です。
認証局
実稼働環境で使用する場合、MongoDB の配置には、認証局によって生成および署名された有効な証明書を使用する必要があります。ユーザーまたは組織は、独立した認証局を作成して維持することも、サードパーティの TLS ベンダーによって生成された証明書を使用することもできます。証明書の取得と管理については、このドキュメントの範囲外です。
クライアント X.509 証明書
サーバーで認証するために、クライアントはユーザー名とパスワードの代わりに X.509 証明書を使用できます。
クライアント証明書の要件
クライアント証明書の要件:
単一の認証局(CA)がクライアントとサーバーの両方の証明書を発行する必要があります。
それぞれの固有の MongoDB ユーザーに固有の証明書が必要です。
X.509証明書は期限切れであっては なりません 。
クライアント証明書には次のフィールドが含まれている必要があります。
keyUsage = digitalSignature extendedKeyUsage = clientAuth 次のクライアント証明書属性の少なくとも 1 つは、
net.tls.clusterFile
およびnet.tls.certificateKeyFile
のどちらのサーバー証明書の属性とも異なる必要があります。組織(
O
)組織単位(
OU
)ドメイン コンポーネント(
DC
)
注意
また、起動時に
enforceUserClusterSeparation
パラメータを無効にして、O/OU/DC
チェックを自動的に無効にすることもできます。 これにより、メンバー証明書は$external
データベースに保存されているユーザーとして認証できるようになります。識別名(
DN
) を含む x.509 クライアント証明書のsubject
は、x.509 ノード証明書のsubject
と異なる必要があります。MongoDB 配置にtlsX509ClusterAuthDNOverride
が設定されている場合、クライアント x.509 証明書のサブジェクトはその値と一致してはいけません。重要
クライアントX.509 証明書のサブジェクトが
O
OU
DC
509ノード X. 証明書の 、 、 属性(または設定されている場合はtlsX509ClusterAuthDNOverride
)と完全に一致する場合、クライアント接続は受け入れられます、完全な権限が付与され、ログに警告メッセージが表示されます。クラスター ノードの x509 証明書のみが、
O
、OU
、およびDC
の属性が同じ組み合わせを使用する必要があります。
MongoDB ユーザーおよび $external
データベース
クライアント証明書を使用して認証するには、まずクライアント証明書の subject
を MongoDB ユーザーとして $external
データベースに追加する必要があります。$external
データベースはユーザーの 認証データベース です。
一意の X.509クライアント証明書はそれぞれ 1 人のMongoDBユーザーに対する証明書です。1 つのクライアント証明書を使用して複数のMongoDBユーザーを認証することはできません。
$external
認証ユーザー(Kerberos、LDAP、または X.509 ユーザー)でクライアント セッションと因果整合性の保証を使用するには、ユーザー名を 10 k バイトより大きくすることはできません。
TLS 接続 X509 証明書のスタートアップ警告
MongoDB 5.0 以降では、証明書にサブジェクト代替名属性が含まれていない場合、mongod
と mongos
で起動時の警告が発せられるようになっています。
以下のプラットフォームは、コモンネームの検証をサポートしていません。
iOS 13 以降
MacOS 10.15 以降
Go 1.15 以降
これらのプラットフォームを使用するクライアントは、CommonName 属性によって指定されているホスト名の x.509 証明書を使用する MongoDB サーバーに対して認証を行いません。
メンバー X.509 証明書
シャーディングされたクラスターとレプリカセットのメンバー間の内部認証には、 キーファイル の代わりに X.509 証明書を使用できます。
ノード証明書の要件
TLS が有効になっている場合は、ノード証明書を使用して、シャーディングされたクラスターまたはレプリカセット内の内部接続へのメンバーシップを検証します。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
に設定
重要
--tlsMode
を disabled
以外の値に設定すると、 MongoDB は、内部レプリカセット接続のサーバーとクライアント認証の両方に net.tls.certificateKeyFile
で指定された証明書を使用します。この証明書設定は、security.clusterAuthMode
を X.509
に設定しているかどうかに関係なく適用されます。
mongod
インスタンスとmongos
インスタンスは証明書鍵ファイルを使用してクライアントに ID を証明しますが、証明書鍵ファイルはメンバーシップ認証に使用することもできます。 クラスター ファイルを指定しない場合、メンバーはメンバーシップ認証に証明書鍵ファイルを使用します。 net.tls.certificateKeyFile
または--tlsCertificateKeyFile
を使用して証明書鍵ファイルを指定します。
証明書キーファイルをクライアント認証とメンバーシップ認証の両方に使用するには、証明書は次のいずれかを行う必要があります。
extendedKeyUsage
を省略する、または特定
extendedKeyUsage = serverAuth, clientAuth