認証メカニズム
このガイドでは、MongoDB コミュニティ エディション で使用可能な各認証メカニズム(DEFAULT
、SCRAM-SHA-256
、SCRAM-SHA-1
、MONGODB-CR
、MONGODB-AWS
、X.509
)を使用して MongoDB に接続するためのサンプル コードを紹介します。
DEFAULT
DEFAULT
認証メカニズムは、サーバーによってサポートされている最初の認証メカニズムを次の優先順位でネゴシエートするようにドライバーに指示するフォールバック設定です。
SCRAM-SHA-256
SCRAM-SHA-1
MONGODB-CR
DEFAULT
オプションが指定されている場合、ドライバーは最初に SCRAM-SHA-256
を使用して認証を試みます。MongoDB インスタンスのバージョンがそのメカニズムをサポートしていない場合、ドライバーは SCRAM-SHA-1
を使用して認証を試みます。インスタンスがそのメカニズムもサポートしていない場合、ドライバーは MONGODB-CR
を使用して認証を試みます。
この認証メカニズムを指定するには、接続stringで authMechanism
パラメータを DEFAULT
に設定するか、デフォルト値であるためパラメーターを省略します。 また、以下のコードに示すように、ユーザー名とパスワードを含めます。
重要
ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent
メソッドを使用して URI エンコード してください。
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const username = encodeURIComponent("<username>"); const password = encodeURIComponent("<password>"); const clusterUrl = "<MongoDB cluster url>"; const authMechanism = "DEFAULT"; // Replace the following with your MongoDB deployment's connection string. const uri = `mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}`; // Create a new MongoClient const client = new MongoClient(uri); // Function to connect to the server async function run() { try { // Establish and verify connection await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server"); } finally { // Ensures that the client will close when you finish/error await client.close(); } } run().catch(console.dir);
MongoDB がサポートするチャレンジ レスポンス (CR) および Salted Challenge Response 認証メカニズム (SCRAM) の詳細については、マニュアルの「SCRAM」セクションを参照してください。
SCRAM-SHA-256
注意
SCRAM-SHA-256
MongoDB バージョン 4.0 以降のデフォルトの認証方法です。
SCRAM-SHA-256
は、SHA-256
アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、ソルト付きチャレンジ レスポンス認証メカニズム(SCRAM)です。
この認証メカニズムを指定するには、次のサンプル コードに示すように、接続stringで authMechanism
を値 SCRAM-SHA-256
に設定します。
重要
ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent
メソッドを使用して URI エンコード してください。
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const username = encodeURIComponent("<username>"); const password = encodeURIComponent("<password>"); const clusterUrl = "<MongoDB cluster url>"; const authMechanism = "SCRAM-SHA-256"; // Replace the following with your MongoDB deployment's connection string. const uri = `mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}`; // Create a new MongoClient const client = new MongoClient(uri); // Function to connect to the server async function run() { try { // Establish and verify connection await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server"); } finally { // Ensures that the client will close when you finish/error await client.close(); } } run().catch(console.dir);
SCRAM-SHA-1
注意
SCRAM-SHA-1
は、MongoDB バージョン 3.0、3.2、3.4、および 3.6 のデフォルトの認証方法です。
SCRAM-SHA-1
は、SHA-1
アルゴリズムで暗号化されたユーザー名とパスワードを使用してユーザーを認証する、ソルト付きチャレンジ レスポンス メカニズム(SCRAM)です。
この認証メカニズムを指定するには、次のサンプル コードに示すように、接続文字列で authMechanism
パラメーターを値 SCRAM-SHA-1
に設定します。
重要
ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent
メソッドを使用して URI エンコード してください。
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const username = encodeURIComponent("<username>"); const password = encodeURIComponent("<password>"); const clusterUrl = "<MongoDB cluster url>"; const authMechanism = "SCRAM-SHA-1"; // Replace the following with your MongoDB deployment's connection string. const uri = `mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}`; // Create a new MongoClient const client = new MongoClient(uri); // Function to connect to the server async function run() { try { // Establish and verify connection await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server"); } finally { // Ensures that the client will close when you finish/error await client.close(); } } run().catch(console.dir);
MONGODB-CR
警告
MONGODB-CR は MongoDB 3.6 から非推奨となり、MongoDB 4.0 以降ではサポートされなくなりました。
MONGODB-CR
ユーザー名とパスワードを使用してユーザーを認証するチャレンジレスポンスタイプの認証メカニズムです。
このオプションを指定するには、次のサンプル コードに示すように、接続文字列で authMechanism
パラメーターを値 MONGODB-CR
に設定します。
重要
ユーザー名とパスワードが正しく解析されるようにするには、必ず encodeURIComponent
メソッドを使用して URI エンコード してください。
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const username = encodeURIComponent("<username>"); const password = encodeURIComponent("<password>"); const clusterUrl = "<MongoDB cluster url>"; // Replace the following with your MongoDB deployment's connection string. const uri = `mongodb+srv://${username}:${password}@${clusterUrl}/?authMechanism=${authMechanism}&tls=true&tlsCertificateKeyFile=${clientPEMFile}`; // Create a new MongoClient const client = new MongoClient(uri); // Function to connect to the server async function run() { try { // Establish and verify connection await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server"); } finally { // Ensures that the client will close when you finish/error await client.close(); } } run().catch(console.dir);
重要
認証スキーマを MONGODB-CR から SCRAM にアップグレードした場合、MONGODB-CR
ユーザーの認証リクエストはすべて失敗します。
MONGODB-AWS
注意
MONGODB-AWS 認証メカニズムは、MongoDB バージョン 4.4 以降でのみ使用できます。
MONGODB-AWS
認証メカニズムは、Amazon Web Services Identity and Access Management (AWS IAM) 認証情報を使用してユーザーを認証します。AWS 署名ライブラリをまだ持っていない場合は、次の npm
コマンドを使用してインストールします。
npm install aws4
MONGODB-AWS
認証が有効な状態の MongoDB インスタンスに接続するには、MONGODB-AWS
認証メカニズムを指定します。
ドライバーは、次のソースで認証情報を順番に確認します。
接続文字列
環境変数
Web ID トークン ファイル
次の場所で指定されたAWS ECSエンドポイント:
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
Amazon Web Services EC2 エンドポイント。 詳しくは、「 タスクの IAM ロール 」を 参照してください。 。
重要
ドライバーは、前述のリストで指定された順序で、最初に検出した方法からのみ認証情報を読み取ります。たとえば、接続文字列で AWS 認証情報を指定すると、ドライバーは環境変数で指定した認証情報を無視します。
接続文字列を使用して MongoDB インスタンスに接続するには、接続時に認証情報 AWS_ACCESS_KEY_ID
と AWS_SECRET_ACCESS_KEY
をドライバーに渡します。AWS ログインにセッション トークンが必要な場合は、AWS_SESSION_TOKEN
も含めます。
次は、接続文字列で MONGODB-AWS
認証メカニズムと認証情報を指定するコード例です。
重要
正しく解析されるようにするには、encodeURIComponent
メソッドを使用して、ユーザー名と証明書ファイルのパスを常に URI エンコードします。
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const accessKeyId = encodeURIComponent("<AWS_ACCESS_KEY_ID>"); const secretAccessKey = encodeURIComponent("<AWS_SECRET_ACCESS_KEY>"); const clusterUrl = "<MongoDB cluster url>"; const authMechanism = "MONGODB-AWS"; let uri = `mongodb+srv://${accessKeyId}:${secretAccessKey}@${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`; // Uncomment the following lines if your AWS authentication setup requires a session token. // const sessionToken = encodeURIComponent("<AWS_SESSION_TOKEN>"); // uri = uri.concat(`&authMechanismProperties=AWS_SESSION_TOKEN:${sessionToken}`); // Create a new MongoClient. const client = new MongoClient(uri); async function run() { try { // Establish and verify connection. await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server."); } finally { // Ensure that the client closes when it finishes/errors. await client.close(); } } run().catch(console.dir);
MongoDBAmazon Web Services環境変数に保存されている の認証情報を使用して インスタンスに対して認証するには、shell を使用して次の変数を設定します。
export AWS_ACCESS_KEY_ID=<awsKeyId> export AWS_SECRET_ACCESS_KEY=<awsSecretKey> export AWS_SESSION_TOKEN=<awsSessionToken>
注意
そのロールにAmazon Web Servicesのセッショントークンが必要ない場合は、AWS_SESSION_TOKEN
を含む行を省略します。
上記の環境変数を設定したら、次の例に示すように接続stringで MONGODB-AWS
認証メカニズムを指定します。
const { MongoClient } = require("mongodb"); // Remember to specify your AWS credentials in environment variables. const clusterUrl = "<MongoDB deployment url>"; const authMechanism = "MONGODB-AWS"; let uri = `mongodb+srv://${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`; // Create a new MongoClient. const client = new MongoClient(uri); async function run() { try { // Establish and verify connection. await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server."); } finally { // Ensure that the client closes when it finishes/errors. await client.close(); } } run().catch(console.dir);
Web IDP から取得した OpenID Connect(OIDC)トークンを使用して、Amazon Elastic Kubernetes Service(EKS)またはその他のサービスを認証できます。
OIDC トークンで認証するには、まず @aws-sdk/credential-providers を インストールする必要があります 。この依存関係は、次のnpm
コマンドを使用してインストールできます。
npm install @aws-sdk/credential-providers
次に、OIDC トークンを含む ファイルを作成します。 次に、次の例に示すように shell を使用して、環境変数内のこのファイルへの絶対パスを設定します。
export AWS_WEB_IDENTITY_TOKEN_FILE=<absolute path to file containing your OIDC token>
上記の環境変数を設定したら、次の例に示すように接続stringで MONGODB-AWS
認証メカニズムを指定します。
const { MongoClient } = require("mongodb"); // Remember to specify your AWS credentials in environment variables. const clusterUrl = "<MongoDB deployment url>"; const authMechanism = "MONGODB-AWS"; let uri = `mongodb+srv://${clusterUrl}/?authSource=%24external&authMechanism=${authMechanism}`; // Create a new MongoClient. const client = new MongoClient(uri); async function run() { try { // Establish and verify connection. await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server."); } finally { // Ensure that the client closes when it finishes/errors. await client.close(); } } run().catch(console.dir);
重要
AWS 認証情報の取得
バージョン 4.11 以降では、オプションの aws-sdk/credential-providers
依存関係をインストールすると、ドライバーは AWS SDK を使用して環境から認証情報を検索します。その結果、共有 AWS 認証情報ファイルまたは設定ファイルがある場合、ドライバーはデフォルトでそれらの認証情報を使用します。
次のいずれかのアクションを実行することで、この動作を上書きできます。
シェル内の
AWS_SHARED_CREDENTIALS_FILE
変数を認証情報ファイルを指すように設定します。アプリケーション内の同等の環境変数を、認証情報ファイルを指すように設定します。
MongoDB 認証情報用の AWS プロファイルを作成し、
AWS_PROFILE
環境変数をそのプロファイル名に設定します。
X.509
注意
X.509 認証メカニズムは、MongoDB バージョン 2.6 以降でのみ使用できます。
X.509
認証メカニズムは、X.509 証明書とともに TLS を使用して、クライアント証明書から識別名(DN)を検索することで認証します。
この認証メカニズムを指定するには、接続文字列: の次のパラメーターを設定します。
authMechanism
パラメーターをMONGODB-X509
に設定するtls
パラメーターをtrue
に設定する
接続 URI のパラメーターとして、クライアント証明書ファイルの場所を tlsCertificateKeyFile
の値として渡します。
重要
正しく解析されるようにするには、必ず encodeURIComponent
メソッドを使用して証明書ファイルのパスを URI エンコード してください。
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const clusterUrl = "<MongoDB cluster url>"; const clientPEMFile = encodeURIComponent("<path to the client pem certificate file>"); const authMechanism = "MONGODB-X509"; // Replace the following with your MongoDB deployment's connection string. const uri = `mongodb+srv://${clusterUrl}/?authMechanism=${authMechanism}&tls=true&tlsCertificateKeyFile=${clientPEMFile}`; // Create a new MongoClient const client = new MongoClient(uri); // Function to connect to the server async function run() { try { // Establish and verify connection await client.db("admin").command({ ping: 1 }); console.log("Connected successfully to server"); } finally { // Ensures that the client will close when you finish/error await client.close(); } } run().catch(console.dir);
TLS/SSL オプション
次の表では、接続 URI のパラメーターとして渡すことができる各 TLS/SSL オプションについて説明します。
パラメーター名 | タイプ | デフォルト値 | 説明 |
---|---|---|---|
tls | ブール値 | false | TLS/SSL 接続を使用するかどうかを指定します。 |
tlsInsecure | ブール値 | false | 無効な証明書と一致しないホスト名を許可するかどうかを指定します。 true に設定すると、tlsAllowInvalidCertificates と tlsAllowInvalidHostnames を true に設定するのと同じになります。 |
tlsCAFile | string | TLS 接続で使用される単一のまたは一連の信頼できる証明機関を含むファイルへのパス。 | |
tlsCertificateKeyFile | string | クライアント証明書ファイルまたはクライアント秘密キー ファイルへのパス。両方必要な場合は、2 つを 1 つのファイルに連結する必要があります。 | |
tlsCertificateKeyFilePassword | バッファまたは文字列 | クライアントの秘密キーを復号化するためのパスワードを含む文字列またはバッファ。 | |
tlsAllowInvalidCertificates | ブール値 | false | ドライバーが無効な証明書を使用して接続することを許可するかどうかを指定します。 |
tlsAllowInvalidHostnames | ブール値 | false | ドライバーがサーバーのホスト名と TLS 証明書のホスト名の不一致を許可するかどうかを指定します。 |