엔터프라이즈 인증 메커니즘
이 페이지의 내용
개요
이 가이드에서는 MongoDB Enterprise Edition에서만 사용할 수 있는 인증 메커니즘 을 사용하여 MongoDB로 인증하는 방법을 배울 수 있습니다. 인증 메커니즘은 드라이버와 서버가 연결 전에 보안을 보장하기 위해 클라이언트의 ID를 확인하는 프로세스입니다.
최신 버전의 MongoDB Enterprise Edition에서 다음 인증 메커니즘을 사용할 수 있습니다.
다른 메커니즘을 사용하여 인증하려면 인증 메커니즘 기본 사항 페이지를 참조하세요. MongoDB cluster 에 대한 연결 설정에 대한 자세한 내용은 연결 가이드를 참조하세요.
다음 방법 중 하나를 사용하여 MongoDB에 연결할 때 인증 메커니즘 및 자격 증명을 지정할 수 있습니다.
연결 문자열(연결 URI 라고도 함)은 MongoDB deployment에 연결하는 방법과 연결된 동안 작동하는 방법을 드라이버에 알려주는 문자열입니다.
지원되는 인증 메커니즘을 위한 팩토리 메서드로,
MongoCredential
클래스에 포함되어 있습니다.
GSSAPI/Kerberos로 인증
일반 보안 서비스 API(GSSAPI) 인증 메커니즘을 통해 사용자는 사용자의 주체 이름을 사용하여 Kerberos 서비스를 인증할 수 있습니다.
다음 예에서는 다음 자리 표시자를 사용하여 인증 메커니즘을 지정합니다.
<username>
:URL 로 인코딩된 주체 이름입니다. 예시: "사용자 이름%40REALM.ME"<password>
: Kerberos 사용자의 비밀번호<hostname>
: 클라이언트가 액세스할 수 있는 MongoDB Server의 네트워크 주소
Connection String 또는 MongoCredential 탭을 선택하여 GSSAPI/Kerberos 인증 메커니즘을 지정하는 데 해당하는 구문을 확인합니다.
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authMechanism=GSSAPI");
var credential = MongoCredential.CreateGssapiCredential("<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
팁
비밀번호 생략
다음 중 하나에 해당하는 경우 비밀번호를 생략할 수 있습니다.
Windows에서 애플리케이션을 실행하는 프로세스 소유자는 인증이 필요한 사용자와 동일합니다.
Linux에서 사용자가
kinit username@REALM.COM
을(를) 통해 키탭을 초기화했습니다.
additionalProperties
연결 문자열을 사용하거나 MongoCredential
클래스의 팩토리 메서드를 사용하여 인증 메커니즘에 추가 속성을 지정할 수 있습니다.
정규화된 도메인 이름
다음 예는 DNS 서버를 사용하여 호스트의 정규화된 도메인 이름을 검색하는 방법을 보여 줍니다.
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=CANONICALIZE_HOSTNAME:true");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_passwordpassword>"); credential = credential.WithMechanismProperty("CANONICALIZE_HOST_NAME", "true"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
Realm
다음 예에서는 사용자의 영역이 서비스의 영역과 다른 경우 사용자의 영역을 지정하는 방법을 보여 줍니다.
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
서비스 이름
다음 예시에서는 기본 mongodb
가 아닌 경우 서비스 이름을 지정하는 방법을 보여줍니다.
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
여러 속성
다음 예에서는 여러 인증 메커니즘 속성을 지정하는 방법을 보여 줍니다.
var mongoClient = new MongoClient("mongodb://<db_username>:<db_password>@<hostname>/?authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:<service name>,SERVICE_REALM:<user's realm>");
var credential = MongoCredential.CreateGssapiCredential("<db_username>", "<db_password>"); credential = credential.WithMechanismProperty("SERVICE_REALM", "<user's realm>") .WithMechanismProperty("SERVICE_NAME", "<service name>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
LDAP(PLAIN)로 인증
디렉토리 서버 사용자 이름 및 비밀번호를 사용하여 LDAP(Lightweight Directory Access Protocol) 서버에 인증할 수 있습니다.
다음 예에서는 다음 자리 표시자를 사용하여 인증 메커니즘을 지정합니다.
<username>
: LDAP 사용자 이름<password>
: LDAP 비밀번호<hostname>
: 클라이언트가 액세스할 수 있는 MongoDB Server의 네트워크 주소<authenticationDb>
: 사용자 인증이 포함된 MongoDB database
LDAP 인증 메커니즘을 지정하는 데 해당하는 구문을 보려면 Connection String 또는 MongoCredential 탭을 선택하세요.
var mongoClient = new MongoClient("mongodb://<username>:<password>@<hostname>/?authSource=<authenticationDb>&authMechanism=PLAIN");
var credential = MongoCredential.CreatePlainCredential("<authenticationDb>", "<username>", "<password>"); var settings = MongoClientSettings.FromConnectionString("<connection string>"); settings.Credential = credential; var mongoClient = new MongoClient(settings);
팁
이 메서드는 RFC-4616에 정의된 PLAIN 간이 인증 및 보안 계층 서비스(SASL)를 사용하여 인증하므로 LDAP 대신 PLAIN을 참조합니다.
MONGODB-OIDC
중요
MONGODB-OIDC 인증 메커니즘을 사용하려면 Linux 플랫폼에서 실행되는 MongoDB Server v7.0 이상이 필요합니다.
다음 섹션에서는 MONGODB-OIDC 인증 메커니즘 을 사용하여 다양한 플랫폼에서 인증하는 방법을 설명합니다.
MONGODB-OIDC 인증 메커니즘에 대한 자세한 내용은 MongoDB Server 매뉴얼의 OpenID Connect 인증 및 MongoDB Server 매개변수 를 참조하세요.
Azure IMDS
애플리케이션이 Azure VM에서 실행되거나 Azure 인스턴스 메타데이터 서비스 를 사용하는 경우 (IMDS)를 사용하는 경우 .NET/C# 드라이버의 기본 제공 Azure 지원을 사용하여 MongoDB에 인증할 수 있습니다.
Azure MongoClientSettings
객체 MongoCredential
를 사용하거나 연결 의 string 일부로 객체 에 IMDS OIDC 인증 을 지정할 수 있습니다. Connection String 또는 MongoCredential 탭 을 선택하여 해당 구문을 확인합니다.
다음 코드 예시 에서는 Azure IMDS OIDC 인증 을 지정하는 방법을 보여줍니다. <percent-encoded audience>
자리 표시자를 MongoDB deployment 에 구성된 audience
매개변수의 퍼센트 인코딩된 값으로 바꿉니다.
쉼표(,
) 문자가 포함된 값은 authMechanismProperties
옵션에 전달할 수 없습니다. MongoCredential 탭 에 표시된 대로 MongoCredential
객체 에 쉼표가 포함된 값을 지정해야 합니다.
var connectionString = "mongodb://<db_username>@<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
다음 코드 예시 에서는 Azure IMDS OIDC 인증 을 지정하는 방법을 보여줍니다. <db_username>
자리 표시자를 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID 로 바꿉니다. <audience>
자리 표시자를 MongoDB deployment 에 구성된 audience
매개변수의 값으로 바꿉니다.
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb+srv://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("azure", "<db_username>") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
GCP IMDS
애플리케이션 이 Google Compute Engine VM에서 실행되거나 GCP 인스턴스 메타데이터 서비스 를 사용하는 경우 , .NET/ C# 드라이버의 내장 GCP 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.
GCP MongoClientSettings
객체 MongoCredential
를 사용하거나 연결 의 string 일부로 객체 에 IMDS OIDC 인증 을 지정할 수 있습니다. Connection String 또는 MongoCredential 탭 을 선택하여 해당 구문을 확인합니다.
다음 코드 예시 에서는 GCP IMDS OIDC 인증 을 인증 string 의 일부로 지정하는 방법을 보여줍니다. <audience>
자리 표시자를 MongoDB deployment 에 구성된 audience
매개변수의 값으로 바꿉니다.
쉼표(,
) 문자가 포함된 값은 authMechanismProperties
옵션에 전달할 수 없습니다. MongoCredential 탭 에 표시된 대로 MongoCredential
객체 에 쉼표가 포함된 값을 지정해야 합니다.
var connectionString = "mongodb://<hostname>[:<port>]/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience>"); var mongoClientSettings = MongoClientSettings.FromConnectionString(connectionString); var client = new MongoClient(mongoClientSettings);
다음 코드 예시 에서는 MongoCredential
객체 를 사용하여 GCP IMDS OIDC 인증 을 지정하는 방법을 보여줍니다. <audience>
자리 표시자를 MongoDB deployment 에 구성된 audience
매개변수의 값으로 바꿉니다.
var mongoClientSettings = MongoClientSettings.FromConnectionString( "mongodb+srv://<hostname>[:<port>]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential("gcp") .WithMechanismProperty("TOKEN_RESOURCE", "<audience>"); var client = new MongoClient(mongoClientSettings);
사용자 지정 콜백
.NET/ C# 드라이버 는 Azure Functions 및 AKS( Azure Kubernetes Service)를 포함한 모든 플랫폼에 대한 내장 지원 을 제공하지 않습니다. 대신 OIDC를 사용하여 이러한 플랫폼에서 인증하려면 사용자 지정 콜백 을 정의해야 합니다.
먼저 IOidcCallback
인터페이스를 구현하는 클래스를 정의합니다. 이 인터페이스에는 두 가지 메서드가 포함되어 있습니다.
GetOidcAccessToken()
: 이 메서드는 콜백 메서드에 대한 매개변수를 허용하고 콜백 응답을 반환합니다.GetOidcAccessTokenAsync()
: 이 메서드는 이전 메서드의 비동기 버전입니다.
다음 코드는 IOidcCallback
인터페이스의 구현 예시입니다. 이 예시에서 메서드는 로컬 파일 시스템의 "access-token.dat"
파일에서 OIDC 토큰을 조회합니다.
public class MyCallback : IOidcCallback { public OidcAccessToken GetOidcAccessToken( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = File.ReadAllText("access-token.dat"); return new(accessToken, expiresIn: null); } public async Task<OidcAccessToken> GetOidcAccessTokenAsync( OidcCallbackParameters parameters, CancellationToken cancellationToken) { var accessToken = await File.ReadAllTextAsync( "access-token.dat", cancellationToken) .ConfigureAwait(false); return new(accessToken, expiresIn: null); } }
사용자 지정 콜백 메서드가 포함된 클래스를 정의한 후 MongoCredential.CreateOidcCredential()
메서드를 호출하고 클래스의 새 인스턴스 를 전달합니다. 다음 코드 예시 와 같이 이 메서드 호출의 결과를 MongoClientSettings
객체 의 Credential
속성 에 저장합니다.
var mongoClientSettings = MongoClientSettings.FromConnectionString("mongodb://<hostname>[:port]"); mongoClientSettings.Credential = MongoCredential.CreateOidcCredential(new MyCallback()); var client = new MongoClient(mongoClientSettings);
API 문서
이 가이드에서 설명하는 메서드나 유형에 대해 자세히 알아보려면 다음 API 설명서를 참조하세요.