인증 메커니즘.
이 가이드에서는 MongoDB Community Edition에서 제공하는 각 인증 메커니즘을 사용하여 MongoDB에 연결하기 위한 샘플 코드를 찾을 수 있습니다: DEFAULT
, SCRAM-SHA-256
, SCRAM-SHA-1
, MONGODB-CR
, MONGODB-AWS
, X.509
.
DEFAULT
DEFAULT
인증 메커니즘은 서버가 지원하는 첫 번째 인증 메커니즘을 다음과 같은 우선 순위에 따라 협상하도록 드라이버에 지시하는 대체 설정입니다.
SCRAM-SHA-256
SCRAM-SHA-1
MONGODB-CR
DEFAULT
옵션을 지정하면 드라이버는 우선 SCRAM-SHA-256
을 사용하여 인증을 시도합니다. MongoDB 인스턴스 버전이 해당 메커니즘을 지원하지 않는 경우 드라이버는 SCRAM-SHA-1
을 사용하여 인증을 시도합니다. 인스턴스가 해당 메커니즘을 지원하지 않는 경우 드라이버는 MONGODB-CR
을 사용하여 인증을 시도합니다.
연결 문자열에서 authMechanism
매개변수를 DEFAULT
로 설정하거나 매개변수가 기본값이므로 생략하여 이 인증 메커니즘을 지정할 수 있습니다. 아래 코드에 표시된 대로 사용자 이름과 비밀번호도 포함합니다.
중요
사용자 이름과 비밀번호가 올바르게 구문 분석되도록 항상 encodeURIComponent
메서드를 사용하여 사용자 이름과 비밀번호를 URI 인코딩합니다.
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const username = encodeURIComponent("<db_username>"); const password = encodeURIComponent("<db_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) 및 솔티드 챌린지-응답 인증 메커니즘(SCRAM)에 대한 자세한 내용은 매뉴얼의 SCRAM 섹션을 참조하세요.
SCRAM-SHA-256
참고
SCRAM-SHA-256
MongoDB 버전 4.0부터 기본 인증 방법입니다.
SCRAM-SHA-256
SHA-256
알고리즘으로 암호화된 사용자 이름과 비밀번호를 사용해 사용자를 인증하는 SCRAM(salted challenge-response authentication mechanism)입니다.
다음 샘플 코드에 표시된 대로 연결 문자열에서 authMechanism
을(를) SCRAM-SHA-256
값으로 설정하여 이 인증 메커니즘을 지정할 수 있습니다.
중요
사용자 이름과 비밀번호가 올바르게 구문 분석되도록 항상 encodeURIComponent
메서드를 사용하여 사용자 이름과 비밀번호를 URI 인코딩합니다.
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const username = encodeURIComponent("<db_username>"); const password = encodeURIComponent("<db_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(salted challenge-response mechanism)입니다.
다음 샘플 코드에 표시된 대로 연결 문자열에서 authMechanism
매개 변수를 SCRAM-SHA-1
값으로 설정하여 해당 인증 메커니즘을 지정할 수 있습니다.
중요
사용자 이름과 비밀번호가 올바르게 구문 분석되도록 항상 encodeURIComponent
메서드를 사용하여 사용자 이름과 비밀번호를 URI 인코딩합니다.
const { MongoClient } = require("mongodb"); // Replace the following with values for your environment. const username = encodeURIComponent("<db_username>"); const password = encodeURIComponent("<db_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("<db_username>"); const password = encodeURIComponent("<db_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 Amazon Web Services Web Services ID 및 액세스 관리( Amazon Web ServicesAmazon Web Services IAM) 자격 증명 을 사용하여 사용자를 인증합니다. Amazon Web Services Amazon Web Services 서명 라이브러리 가 아직 없는 경우, 다음 npm
명령을 사용하여 설치합니다.
npm install aws4
MONGODB-AWS
인증을 활성화한 상태로 MongoDB에 연결하려면 MONGODB-AWS
인증 메커니즘을 지정합니다.
드라이버는 다음 소스에서 자격 증명을 순서대로 확인합니다:
연결 문자열
환경 변수
웹 ID 토큰 파일
지정된 AWS ECS 엔드포인트
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
AWS 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);
환경 변수에 저장된 Amazon Web Services 자격 증명을 사용하여 MongoDB 인스턴스를 인증하려면 shell 을 사용하여 다음 변수를 설정합니다.
export AWS_ACCESS_KEY_ID=<awsKeyId> export AWS_SECRET_ACCESS_KEY=<awsSecretKey> export AWS_SESSION_TOKEN=<awsSessionToken>
참고
해당 역할에 대해 AWS 세션 토큰이 필요하지 않은 경우 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);
웹 ID 제공자로부터 얻은 OIDC(OpenID Connect) 토큰을 사용하여 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를 활성화하는 방법에 학습 보려면 연결에서TLS 활성화를 참조하세요.
TLS 옵션
다음 표에서는 연결 URI에서 설정할 수 있는 TLS 옵션에 대해 설명합니다.
매개변수 이름 | 유형 | 기본값 | 설명 |
---|---|---|---|
| 부울 |
| 연결에서 TLS를 활성화할지 여부를 지정합니다. |
| 부울 |
| 유효하지 않은 인증서 및 일치하지 않는 호스트 이름을 허용할지 여부를 지정합니다. |
| 문자열 | TLS 연결에 사용되는 신뢰할 수 있는 하나 또는 여러 인증 기관을 포함하는 파일의 경로입니다. | |
| 문자열 | 클라이언트 인증서 파일 또는 클라이언트 비공개 키 파일의 경로입니다. 둘 다 필요한 경우 두 파일을 단일 파일로 연결해야 합니다. | |
| 버퍼 또는 문자열 | 클라이언트 비공개 키를 해독하기 위한 비밀번호가 포함된 문자열 또는 버퍼입니다. | |
| 부울 |
| 드라이버에서 유효하지 않은 인증서를 연결에 사용할 수 있도록 허용할지 여부를 지정합니다. |
| 부울 |
| 서버 호스트 이름과 TLS 인증서 호스트 이름이 일치하지 않을 때 드라이버가 오류를 발생시킬지를 지정합니다. |