인증
이 페이지의 내용
이 가이드 에서는 MongoDB C 드라이버 에서 인증 옵션을 사용하는 방법에 대해 설명합니다. 연결하기 전에 MongoDB 서버 가 인증 을 위해 올바르게 구성되었는지도 확인합니다. 자세한 내용은 MongoDB 보안 문서 를 참조하세요.
MongoDB C 드라이버는 MongoDB 연결 URI를 사용하여 여러 인증 메커니즘을 지원합니다.
기본값 으로 사용자 이름 과 비밀번호가 연결 string (및 선택적 인증 데이터베이스 )의 일부로 제공되는 경우 서버 의 기본값 인증 메커니즘 을 통해 연결하는 데 사용됩니다.
기본값 이외의 특정 인증 메커니즘 을 선택하려면 아래 지원되는 메커니즘 목록을 참조하세요.
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb");
현재 authMechanism 연결 string 옵션에 지원되는 값은 다음과 같습니다.
기본 인증(SCRAM-SHA-256)
MongoDB 4.0 은256 RFC 7677 에 설명된 보다 안전한 SHA- 해시를 사용하여 SCRAM 프로토콜 을 사용한 인증 지원 을 도입합니다. . 이 인증 메커니즘 을 사용하면 인증할 때 비밀번호가 실제로 유선으로 전송되지 않고 클라이언트 비밀번호가 서버 가 알고 있는 비밀번호와 동일하다는 계산된 증명이 의미합니다. MongoDB 4.0, C 운전자 는 저장된 SCRAM-SHA-1 및 SCRAM-SHA-256 자격 증명 을 가진 사용자에 대한 올바른 기본값 인증 메커니즘 을 결정할 수 있습니다.
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authSource=mydb"); /* the correct authMechanism is negotiated between the driver and server. */
또는 SCRAM-SHA-256 를 authMechanism으로 명시적으로 지정할 수 있습니다.
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-256&authSource=mydb");
기본 인증(SCRAM-SHA-1)
MongoDB 이전의 기본값 인증 메커니즘 4.0 은 SCRAM-SHA-1
(RFC 5802). 이 인증 메커니즘 을 사용하면 인증할 때 비밀번호가 실제로 유선으로 전송되지 않고 클라이언트 비밀번호가 서버 가 알고 있는 비밀번호와 동일하다는 계산된 증명이 의미합니다.
mongoc_client_t *client = mongoc_client_new ("mongodb://user:password@localhost/?authMechanism=SCRAM-SHA-1&authSource=mydb");
참고
SCRAM-SHA-1
기본값 admin
데이터베이스 에 대해 인증합니다. 사용자가 다른 데이터베이스 에서 생성된 경우 authSource를 지정해야 합니다.
레거시 인증(MONGODB-CR)
MONGODB-CR authMechanism은 더 이상 사용되지 않으며 MongoDB 4.0 에서 더 이상 작동하지 않습니다. 대신 authMechanism을 지정하지 않으면 드라이버가 서버와 호환되는 인증 메커니즘을 사용합니다.
GSSAPI(Kerberos) 인증
참고
UNIX와 유사한 환경에서 Kerberos 를 지원 하려면 cyrus-sasl
에 대해 운전자 를 컴파일해야 합니다.
Windows 에서 Kerberos 를 지원 하려면 Windows 네이티브 SSPI 또는 cyrus-sasl
에 대해 운전자 를 컴파일해야 합니다. 운전자 의 기본값 구성은 Windows 네이티브 SSPI를 사용합니다.
기본 구성을 수정하려면 cmake 옵션 ENABLE_SASL
을 사용합니다.
GSSAPI
(Kerberos) 인증 은 MongoDB Enterprise Edition 에서 사용할 수 있습니다 . GSSAPI
을 사용하여 인증하려면 SASL 지원 과 함께 MongoDB C 운전자 를 설치해야 합니다.
UNIX와 유사한 환경에서는 다음 인증 방법을 사용하기 전에 kinit
명령을 실행 합니다.
$ kinit mongodbuser@EXAMPLE.COM mongodbuser@EXAMPLE.COM's Password: $ klistCredentials cache: FILE:/tmp/krb5cc_1000 Principal: mongodbuser@EXAMPLE.COM Issued Expires Principal Feb 9 13:48:51 2013 Feb 9 23:48:51 2013 krbtgt/EXAMPLE.COM@EXAMPLE.COM
이제 MongoDB URI를 사용하여 인증합니다. GSSAPI
은(는) $external
가상 데이터베이스에 대해 인증하므로 데이터베이스를 URI에 지정할 필요가 없습니다. Kerberos 주체는 URL로 인코딩 되어야 합니다 .
mongoc_client_t *client; client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI");
참고
GSSAPI
$external
데이터베이스 에 대해 인증하므로 authSource 데이터베이스 를 지정할 필요가 없습니다.
드라이버는 다음과 같은 GSSAPI 속성을 지원합니다.
CANONICALIZE_HOST_NAME
참고: 호스트가 Kerberos 데이터베이스 에 사용된 것과 다른 호스트 이름을 보고하는 경우 Cyrus-SASL에 이 작업이 필요할 수 있습니다. 기본값 은 "false"입니다.SERVICE_NAME
: 기본값 인 'MongoDB'가 아닌 다른 서비스 이름을 사용합니다.
URL 에서 속성을 설정합니다.
mongoc_client_t *client; client = mongoc_client_new ("mongodb://mongodbuser%40EXAMPLE.COM@mongo-server.example.com/?authMechanism=GSSAPI&" "authMechanismProperties=SERVICE_NAME:other,CANONICALIZE_HOST_NAME:true");
Invalid net address
과 같은 오류가 발생하는 경우 애플리케이션 이 NAT(네트워크 주소 변환) 방화벽 뒤에 있는지 확인하세요. 이 경우 forwardable
및 addressless
Kerberos 티켓을 사용하는 티켓 을 만듭니다. 이 작업은 -f -A
을 kinit
로 전달하여 수행할 수 있습니다.
$ kinit -f -A mongodbuser@EXAMPLE.COM
SASL 일반 인증
참고
SASL PLAIN
인증 을 사용하려면 MongoDB C 드라이버 를 SASL 지원 으로 컴파일해야 합니다.
MongoDB Enterprise 는 처음에는 인증 을 LDAP 서버 에 위임하기 위한 SASL PLAIN
인증 메커니즘 을 지원합니다. SASL PLAIN
메커니즘을 사용하는 것은 사용자 이름과 비밀번호를 사용하는 과제 응답 메커니즘과 매우 유사합니다. 이 인증 메커니즘 은 LDAP
지원 을 위해 $external
가상 데이터베이스 를 사용합니다.
참고
SASL PLAIN
일반 텍스트 인증 메커니즘입니다. PLAIN
메커니즘을 사용할 때는 인증서 유효성 검사와 함께 TLS를 사용하여 MongoDB에 연결하는 것이 좋습니다.
mongoc_client_t *client; client = mongoc_client_new ("mongodb://user:password@example.com/?authMechanism=PLAIN");
PLAIN
$external
데이터베이스 에 대해 인증하므로 authSource 데이터베이스 를 지정할 필요가 없습니다.
X.509 인증서 인증
참고
MongoDB C 드라이버 는 X.509 인증 지원 을 위한 TLS 지원 으로 컴파일되어야 합니다. 이 작업이 완료되면 다음 옵션을 사용하여 서버 를 시작합니다.
$ mongod --tlsMode requireTLS --tlsCertificateKeyFile server.pem --tlsCAFile ca.pem
MONGODB-X509
메커니즘은 TLS 협상 중에 운전자 가 제시한 X.509 인증서의 고유 주체 이름에서 파생된 사용자 이름 을 인증합니다. 이 인증 방법을 사용하려면 인증서 유효성 검사 와 함께 TLS 연결을 사용해야 합니다.
mongoc_client_t *client; mongoc_ssl_opt_t ssl_opts = { 0 }; ssl_opts.pem_file = "mycert.pem"; ssl_opts.pem_pwd = "mycertpassword"; ssl_opts.ca_file = "myca.pem"; ssl_opts.ca_dir = "trust_dir"; ssl_opts.weak_cert_validation = false; client = mongoc_client_new ("mongodb://x509_derived_username@localhost/?authMechanism=MONGODB-X509"); mongoc_client_set_ssl_opts (client, &ssl_opts);
MONGODB-X509
$external
데이터베이스 에 대해 인증하므로 authSource 데이터베이스 를 지정할 필요가 없습니다. x509파생 사용자 이름에 대한 자세한 내용은 MongoDB 서버 x를 참조하세요.509 튜토리얼.
참고
MongoDB C 드라이버 는 사용자 이름이 제공되지 않을 때 x509 파생 사용자 이름 을 확인하려고 시도하며, MongoDB 3.4 현재 사용자 이름을 제공하면 이 사용자 이름 이 전혀 필요하지 않습니다.
Amazon Web Services IAM을 통한 인증
메커니즘은 ID 및 액세스 관리(IAM)에서 제공하는 자격 증명 을 사용하여 서버를 인증합니다.MONGODB-AWS
MongoDB Amazon Web Services
인증하려면 $external
데이터베이스 에 연결된 Amazon 리소스 이름(ARN)이 있는 사용자를 생성하고 URI에 MONGODB-AWS
authMechanism
를 지정합니다.
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://localhost/?authMechanism=MONGODB-AWS");
MONGODB-AWS
은 항상 $external
데이터베이스 에 대해 인증하므로 authSource 데이터베이스 를 지정할 필요가 없습니다.
자격 증명에는 access key id
, secret access key
및 선택적 session token
가 포함됩니다. 다음과 같은 방법으로 얻을 수 있습니다.
URI를 통한 Amazon Web Services 자격 증명
자격 증명은 URI에 사용자 이름/비밀번호로 직접 전달될 수 있습니다.
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS");
여기에는 authMechanismProperties
과 함께 전달된 session token
가 포함될 수 있습니다.
mongoc_uri_t *uri = mongoc_uri_new ("mongodb://<access key id>:<secret access key>localhost/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<token>");
환경을 통한 Amazon Web Services 자격 증명
자격 증명 이 URI를 통해 전달되지 않으면 libmongoc은 다음 환경 변수를 확인합니다.
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_SESSION_TOKEN (optional)
ECS를 통한 Amazon Web Services 자격 증명
자격 증명 이 URI 또는 환경 변수와 함께 전달되지 않는 경우, libmongoc은 환경 변수 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
이 설정하다 되어 있는지 확인하고, 설정된 경우 링크 로컬 주소 를 쿼리하여 ECS 작업 메타데이터 에서 임시 자격 증명 조회 을 시도합니다.
EC2를 통한 Amazon Web Services 자격 증명
자격 증명 이 URI 또는 환경 변수와 함께 전달되지 않고 환경 변수 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
이 설정하다 되지 않은 경우 libmongoc은 링크 로컬 주소를 쿼리하여 EC2 머신 메타데이터 에서 임시 자격 증명 을 조회 하려고 시도합니다.