このチュートリアルでは、mongosh を TLS 対応の自己管理型レプリカセットに接続する方法を説明します。
始める前に
始める前に、以下があることを確認してください。
自己管理型配置で TLS を構成する の手順を使用して、TLS を使用するように構成したレプリカセット。
配置でMongoDBアクセス制御が有効になっており、少なくとも 1 人の管理ユーザーが作成されている。アクセス制御を設定するには、「 自己管理型配置でアクセス制御を有効にする 」を参照してください。このユーザーには
clusterMonitor特権が必要です。X.509認証を使用して配置に接続する場合は、クライアント証明書を生成するために OpenSSL がインストールされていることを確認してください。
手順
相互 TLS または X.509 クライアント認証を使用しない場合は、次の手順に従います。サーバー構成でallowConnectionsWithoutCertificates trueを に設定すると、クライアントは証明書を提示せずに接続し、SCRAM で認証できます。
次を使用して配置に接続します: mongosh
次のオプションを使用して、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 などのメカニズムで認証する必要があります。
ユーザーを認証する
db.auth()メソッドを使用して、管理者ユーザー名とパスワードで認証します。
配置に接続するときに相互 TLS および X.509クライアント認証を使用する場合は、次の手順に従ってクライアント証明書を作成および認証します。
クライアント証明書の生成
警告
サーバーノードと同じ証明書は使用しないでください。サーバー証明書がクライアント認証で有効であっても、 X.509 認証には新しいクライアント証明書を生成する必要があります。
「 TLS サーバー証明書の取得 」で説明されているプロセスを使用して、クライアント証明書を生成します。以下を調整します。
構成ファイルで、
serverAuthではなくextendedKeyUsage = clientAuthを設定します。ノードのクライアント認証証明書に署名した CA は、クライアント証明書にも署名する必要があります。一般的に、これは
ca.pemです。ただし、クライアント認証用に個別の証明書を取得した 場合は、クライアント証明書の CA が異なる場合があります。証明書チュートリアルで使用されるノード固有の名前ではなく、出力ファイルに
client.key、client.crt、client.pemという名前を付けます。
プロセスが完了したら、client.pem を mongosh を実行するマシン上の安全な場所にコピーします。
cp client.pem /etc/ssl/mongodb/client.pem
クライアントサブジェクトを特定する
クライアント証明書のサブジェクトを特定します。この値は、接続後に期待されるクライアント証明書で認証されたことを確認するために必要です。
サブジェクトを表示するには、次のコマンドを実行します。
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 です。
クライアント証明書を使用して配置に接続する
次のオプションを使用して、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デプロイに接続されます。
管理者ユーザーとして認証する
db.auth()メソッドを使用して、管理者ユーザー名とパスワードで認証します。
データベースでユーザーを作成する$external
$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" })
最終結果
このチュートリアルを完了すると、mongosh は SCRAM または X.509 のいずれかで認証された暗号化された TLS 接続を介してレプリカセットに接続されます。