Docs Menu
Docs Home
/ /
/ / /

TLS 対応のレプリカセットへの接続

このチュートリアルでは、mongosh TLS 対応の自己管理型レプリカセットに接続する方法を説明します。

始める前に、以下があることを確認してください。

  • 自己管理型配置で TLS を構成する の手順を使用して、TLS を使用するように構成したレプリカセット。

  • 配置でMongoDBアクセス制御が有効になっており、少なくとも 1 人の管理ユーザーが作成されている。アクセス制御を設定するには、「 自己管理型配置でアクセス制御を有効にする 」を参照してください。このユーザーにはclusterMonitor 特権が必要です。

  • X.509認証を使用して配置に接続する場合は、クライアント証明書を生成するために OpenSSL がインストールされていることを確認してください。

  • mongoshへのアクセス権。

相互 TLS または X.509 クライアント認証を使用しない場合は、次の手順に従います。サーバー構成でallowConnectionsWithoutCertificates trueを に設定すると、クライアントは証明書を提示せずに接続し、SCRAM で認証できます。

1

次のオプションを使用して、mongosh をレプリカセットに接続します。

mongosh "mongodb://mongo0.example.com:27017,mongo1.example.com:27017,mongo2.example.com:27017" \
--tls --tlsCAFile /etc/ssl/mongodb/ca.pem
  • --tls は、接続の TLS暗号化を有効にします。

  • --tlsCAFileはサーバー証明書に署名した CA 証明書に設定されているため、mongosh はサーバーの証明書を検証できます。

クライアント証明書なしで接続すると、TLS で暗号化されたセッションが確立されますが、認証は行われません。ほとんどのコマンドを実行するには、 SCRAM などのメカニズムで認証する必要があります。

2

db.auth()メソッドを使用して、管理者ユーザー名とパスワードで認証します。

3

以下を実行して、認証状態を確認します。

db.adminCommand({ connectionStatus: 1 })

authInfo.authenticatedUsers に予定されるユーザーが含まれていることを確認します。

配置に接続するときに相互 TLS および X.509クライアント認証を使用する場合は、次の手順に従ってクライアント証明書を作成および認証します。

1

警告

サーバーノードと同じ証明書は使用しないでください。サーバー証明書がクライアント認証で有効であっても、 X.509 認証には新しいクライアント証明書を生成する必要があります。

TLS サーバー証明書の取得 」で説明されているプロセスを使用して、クライアント証明書を生成します。以下を調整します。

  • 構成ファイルで、serverAuth ではなく extendedKeyUsage = clientAuth を設定します。

  • ノードのクライアント認証証明書に署名した CA は、クライアント証明書にも署名する必要があります。一般的に、これは ca.pem です。ただし、クライアント認証用に個別の証明書を取得した 場合は、クライアント証明書の CA が異なる場合があります。

  • 証明書チュートリアルで使用されるノード固有の名前ではなく、出力ファイルに client.keyclient.crtclient.pem という名前を付けます。

プロセスが完了したら、client.pemmongosh を実行するマシン上の安全な場所にコピーします。

cp client.pem /etc/ssl/mongodb/client.pem
2

クライアント証明書のサブジェクトを特定します。この値は、接続後に期待されるクライアント証明書で認証されたことを確認するために必要です。

サブジェクトを表示するには、次のコマンドを実行します。

openssl x509 -in /etc/ssl/mongodb/client.pem -noout -subject

次のような 出力に注目してください。

subject=C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser

このチュートリアルの後半で使用するためにサブジェクト名を保存します。この例では 、サブジェクト名は C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser です。

3

次のオプションを使用して、mongosh をレプリカセットに接続します。

mongosh "mongodb://mongo0.example.com:27017,mongo1.example.com:27017,mongo2.example.com:27017" \
--tls \
--tlsCAFile /etc/ssl/mongodb/ca.pem \
--tlsCertificateKeyFile /etc/ssl/mongodb/client.pem
  • --tls は、接続の TLS暗号化を有効にします。

  • --tlsCAFileはサーバー証明書に署名した CA 証明書に設定されており、mongosh はサーバー接続を検証できます。

  • --tlsCertificateKeyFile は、サーバーがX.509 との接続を認証するために使用するクライアント証明書と秘密キーを提示します。

これにより、TLS 経由でMongoDBデプロイに接続されます。

4

db.auth()メソッドを使用して、管理者ユーザー名とパスワードで認証します。

5

$externalメソッドを使用して、クライアント証明書のサブジェクト名に対応するdb.createUser() データベースにユーザーを作成します。ユーザー名を、以前に識別したクライアント証明書のサブジェクトに置き換えます。

db.getSiblingDB("$external").runCommand({
createUser: "C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser",
roles: [
{ role: "readWriteAnyDatabase", db: "admin" }
]
})

ユーザーを作成したら、db.auth() $externalメソッドを使用して X. を使用して データベースに認証します。509

db.getSiblingDB("$external").auth({
mechanism: "MONGODB-X509",
user: "C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser"
})
6

以下を実行して、認証状態を確認します。

db.adminCommand({ connectionStatus: 1 })

authInfo.authenticatedUsers に予定されるユーザーが含まれていることを確認します。

このチュートリアルを完了すると、mongosh は SCRAM または X.509 のいずれかで認証された暗号化された TLS 接続を介してレプリカセットに接続されます。

戻る

配置の構成

項目一覧