このチュートリアルでは、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は、mongoshがサーバー接続を検証できるように、サーバー証明書に署名した CA 証明書に設定されています。--tlsCertificateKeyFileクライアント証明書と秘密キーを提示します。サーバーはこれらを使用して X.509 との接続を証明します。
これにより、TLS を介して MongoDB 配置に接続します。
管理者ユーザーとして認証します
db.auth()メソッドを使用して、管理者のユーザー名とパスワードで認証します。
Create a user in the $external database
db.createUser() メソッドを使用して、クライアント 証明書のサブジェクト名に対応するユーザーを $external データベースに作成します。ユーザー名を、以前に識別したクライアント証明書のサブジェクトに置き換えます。
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() メソッドを使用して X.509 を使用して $external データベースに認証します。
db.getSiblingDB("$external").auth({ mechanism: "MONGODB-X509", user: "C=US, ST=New-York, L=New York City, O=MongoDB, CN=myUser" })
最終結果
このチュートリアルの完了後、mongosh は暗号化された TLS 接続を介してレプリカセットに接続され、SCRAM または X.509 のいずれかで認証されます。