Docs Menu
Docs Home
/ / /
Rust 드라이버
/

엔터프라이즈 인증 메커니즘

이 페이지의 내용

  • 개요
  • LDAP 인증(일반)
  • 예시
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • 사용자 지정 콜백
  • 추가 정보
  • API 문서

이 가이드에서는 MongoDB Enterprise Edition에서 사용할 수 있는 인증 메커니즘을 사용하여 MongoDB에 인증하는 방법을 배울 수 있습니다. MongoDB에 연결할 때 인증 메커니즘을 사용하여 드라이버와 서버 간에 신뢰를 설정할 수 있습니다.

Rust 드라이버는 LDAP(PLAIN) 엔터프라이즈 인증 메커니즘을 사용하여 LDAP(Lightweight Directory Access Protocol) 서버에 대한 인증을 지원합니다.

참고

GSSAPI/Kerberos 인증

드라이버는 GSSAPI/Kerberos 인증 메커니즘을 지원하지 않지만 다른 방법을 사용하여 이 방식으로 인증할 수 있습니다. 이러한 방법에 대해 자세히 알아보려면 MongoDB Server 매뉴얼의 Kerberos 인증 을 참조하세요.

다음도 참조하세요.

MongoDB Community Edition 에서 사용할 수 있는 메커니즘을 사용하여 MongoDB 에 인증하려면 인증 메커니즘가이드 를 참조하세요.

MongoDB deployment에 연결하는 방법에 대해 자세히 알아보려면 연결 가이드를 참조하세요.

특정 인증 메커니즘을 선택하려면 연결 문자열의 옵션 또는 Credential 구조체에 메커니즘, 자격 증명 및 기타 필요한 정보를 지정합니다.

디렉토리 서버 사용자 이름 및 비밀번호를 사용하여 LDAP(Lightweight Directory Access Protocol) 서버에 인증할 수 있습니다.

인증 메커니즘이 RFC-4616 에정의된 PLAIN SASL(Simple Authentication and Security Layer)을 사용하기 때문에 인증 메커니즘 의 이름은 LDAP 대신 입니다.PLAIN

경고

이 인증 메커니즘은 비밀번호를 일반 텍스트로 서버에 전송합니다. 보안을 강화하고 애플리케이션의 취약점을 줄이려면 연결에서 TLS를 활성화한 후에만 이 메커니즘을 사용하세요.

자세한 내용은 MongoDB Server 매뉴얼의 TLS/SSL(전송 암호화) 을 참조하세요.

PLAIN 인증 메커니즘을 지정하려면 Credential 구조체의 mechanism 필드를 AuthMechanism::Plain 로 설정합니다. 이 예에서는 다음 자리 표시자를 사용하여 인증 메커니즘을 지정합니다.

  • username: LDAP 사용자 이름

  • password: LDAP 비밀번호

let plain_cred = Credential::builder()
.username("<username>".to_string())
.password("<password>".to_string())
.mechanism(AuthMechanism::Plain)
.source("$external".to_string())
.build();
client_options.credential = Some(plain_cred);
let client = Client::with_options(client_options)?;

참고

인증 데이터베이스.

자격 증명은 MongoDB 외부에 저장되므로 인증에 $external 데이터베이스를 사용해야 합니다. Credential 구조체의 source 필드는 기본값이 $external 이므로 이 필드를 생략할 수 있습니다.

또는 authMechanism 연결 문자열 옵션의 값을 PLAIN 로 설정하여 연결 문자열 URI를 사용하여 인증할 수 있습니다. 이 예에서는 다음 자리 표시자를 사용하여 연결 문자열 URI에 PLAIN 인증 메커니즘을 지정하는 방법을 보여 줍니다.

  • username: LDAP 사용자 이름

  • password: LDAP 비밀번호

  • hostname: MongoDB Server의 네트워크 주소

let uri = "mongodb://<username>:<password>@<hostname>/?authSource=$external&authMechanism=PLAIN";

중요

MONGODB-OIDC 인증 메커니즘을 사용하려면 Linux 플랫폼에서 실행되는 MongoDB Server v7.0 이상이 필요합니다.

Rust 운전자 는 워크로드 ID에 대한OIDC(OpenID Connect) 인증 을 지원합니다. 워크로드 ID 는 다른 서비스 및 리소스를 인증하고 액세스 하기 위해 애플리케이션, 서비스, 스크립트 또는 컨테이너 와 같은 소프트웨어 워크로드 에 할당하는 ID입니다.

다음 섹션에서는 MONGODB-OIDC 인증 메커니즘을 사용하여 다양한 플랫폼에서 인증하는 방법을 설명합니다.

MONGODB-OIDC 인증 메커니즘 에 학습 보려면 서버 매뉴얼에서 OpenID Connect 인증 및 MongoDB Server 매개변수를 참조하세요.

애플리케이션 이 Azure VM에서 실행되거나 IMDS(Azure 인스턴스 메타데이터 서비스)를 사용하는 경우, Rust 드라이버의 내장 Azure 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.

Credential 구조체의 mechanism 필드 를 AuthMechanism::MongoDbOidc 로 설정하여 Azure IMDS용 OIDC를 구성할 수 있습니다. 이 예시 에서는 다음 자리 표시자를 사용하여 인증 메커니즘 을 지정합니다.

  • username: Azure 관리 ID를 사용하는 경우 이를 관리 ID의 클라이언트 ID로 설정합니다. 서비스 주체를 사용하여 엔터프라이즈 애플리케이션을 나타내는 경우 이를 서비스 주체의 애플리케이션 ID로 설정합니다.

  • mechanism_properties: ENVIRONMENT 속성 을 azure 로 설정하고 TOKEN_RESOURCE 를 MongoDB deployment 에 구성된 대상 매개변수 값으로 설정합니다.

다음 코드 예시 에서는 Client 를 만들 때 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.

let credential = Credential::builder()
.username("<username>".to_owned())
.mechanism(AuthMechanism::MongoDbOidc)
.mechanism_properties(
doc! { "ENVIRONMENT": "azure", "TOKEN_RESOURCE": "<audience>" }
)
.build();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

애플리케이션 이 Google Compute Engine VM에서 실행되거나 GCP 인스턴스 메타데이터 서비스를 사용하는 경우 Rust 드라이버 내장 GCP 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.

Credential 구조체의 mechanism 필드 를 AuthMechanism::MongoDbOidc 로 설정하여 GCP IMDS용 OIDC를 구성할 수 있습니다. 그런 다음 mechanism_properties 필드 에 다음 값을 설정하여 인증 메커니즘 을 지정합니다.

  • ENVIRONMENT: 이 속성 을 gcp 로 설정합니다.

  • TOKEN_RESOURCE: 이 속성 을 MongoDB deployment 에 구성된 대상 매개변수의 값으로 설정합니다.

다음 코드 예시 에서는 Client 를 만들 때 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.

let credential = Credential::builder()
.mechanism(AuthMechanism::MongoDbOidc)
.mechanism_properties(
doc! { "ENVIRONMENT": "gcp", "TOKEN_RESOURCE": "<audience>" }
)
.build();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

Rust 운전자 는 AWS Elastic Kubernetes Service(EKS)를 포함한 모든 플랫폼에 대한 내장 지원 을 제공하지 않습니다. OIDC를 사용하여 지원되지 않는 플랫폼에 대해 인증하려면 사용자 지정 콜백 함수를 정의해야 합니다.

다음 코드는 EKS 클러스터 에 대한 사용자 지정 콜백 의 구현 예시 입니다. 먼저, Credential 구조체의 oidc_callback 필드 를 oidc::Callback::machine 로 설정하다 합니다. 그런 다음 AWS_WEB_IDENTITY_TOKEN_FILE 환경 변수에 설정하다 경로에서 액세스 토큰을 읽습니다. 마지막으로 IdpServerResponse 구조체의 access_token 필드 값을 설정하다 합니다. 선택 사항으로 expiresrefresh_token 필드의 값을 설정하다 합니다.

let credential = Credential::builder()
.mechanism(AuthMechanism::MongoDbOidc)
.oidc_callback(oidc::Callback::machine(move |_| {
async move {
let token_file_path = std::env::var("AWS_WEB_IDENTITY_TOKEN_FILE").map_err(mongodb::error::Error::custom)?;
let access_token = tokio::fs::read_to_string(token_file_path).await?;
Ok(IdpServerResponse::builder().access_token(access_token).build())
}
.boxed()
}))
.build()
.into();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

인력 ID 인증 프로세스 에 사람의 상호 작용이 포함되는 경우 Credential 구조체의 oidc_callback 필드 를 oidc::Callback::machine 대신 oidc::Callback::human 로 설정하여 클라이언트 를 구성해야 합니다. Rust 운전자 는 다음 프로세스 에서 콜백 을 사용합니다.

  1. 운전자 는 제공된 사용자 이름 에 대한 ID 제공자 정보(IDPInfo)를 검색합니다.

  2. 콜백 은 IDP와 협상하여 access_token 및 잠재적인 refresh_token 및 시간 초과 값(구성된 경우)을 가져옵니다. 콜백 은 Result<IdpServerInfo> 을(를) 반환합니다.

다음 예시 에서는 인력 ID를 처리하다 하기 위한 사용자 지정 콜백 을 정의합니다. 이 예시 를 사용 사례 에 맞게 사용자 지정하려면 을(를)<human flow> 자체 사용자 지정 흐름으로 바꿉니다. 자세한 내용은 OIDC를 사용한 권한 부여 코드 흐름을 참조하세요.

let callback = Callback::human(move |context| {
async move {
"<human flow>";
todo!("human flow")
}
.boxed()
});
let credential = Credential::builder()
.mechanism(AuthMechanism::MongoDbOidc)
.oidc_callback(callback)
.build();
client_options.credential = Some(credential);
let client = Client::with_options(client_options)?;
let res = client
.database("test")
.collection::<Document>("test")
.find_one(doc! {})
.await?;

이 가이드의 개념에 대해 자세히 알아보려면 다음 문서를 참조하세요.

이 가이드에서 사용되는 메서드 또는 유형에 대해 자세히 알아보려면 다음 API 문서를 참조하세요.

돌아가기

인증