Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

OIDC(Workload Identity Federation)

중요

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

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

이 메커니즘은 MongoDB Atlas 또는 MongoDB Enterprise Advanced 에 인증할 때만 사용할 수 있습니다.

MONGODB-OIDC 인증 메커니즘 에 대해 자세히 학습 MongoDB Server 매뉴얼에서 OpenID Connect 인증MongoDB Server 매개변수 를 참조하세요.

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

If your 애플리케이션 runs on an Azure VM, or otherwise uses the Azure 인스턴스 메타데이터 서비스 (IMDS)를 사용하는 경우, Rust 드라이버의 내장 Azure 지원 사용하여 MongoDB에 인증할 수 있습니다.

Credential 구조체의 mechanism 필드 AuthMechanism::MongoDbOidc로 설정하여 Azure IMDS용 OIDC를 구성할 수 있습니다. 또한 Credential 구조체에 다음 값을 지정해야 합니다.

  • 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?;

애플리케이션 이 Kubernetes 클러스터 에서 실행되는 경우 Rust 드라이버의 내장 Kubernetes 지원 사용하여 MongoDB 에 인증할 수 있습니다.

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

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

let credential = Credential::builder()
.mechanism(AuthMechanism::MongoDbOidc)
.mechanism_properties(
doc! { "ENVIRONMENT": "k8s" }
)
.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 운전자 Amazon Web Services 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?;

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

  • 연결 옵션 지정 가이드

  • MongoDB Server 매뉴얼의 연결 문자열

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

돌아가기

AWS IAM

이 페이지의 내용