엔터프라이즈 인증 메커니즘
개요
MongoDB Enterprise 에는 MongoDB Community Edition 에서는 사용할 수 없는 인증 메커니즘이 포함되어 있습니다. 이 가이드 에서는 이러한 인증 메커니즘을 사용하여 MongoDB 에 인증하는 방법을 학습 수 있습니다. MongoDB 에서 사용할 수 있는 다른 인증 메커니즘에 학습 보려면 인증 메커니즘 가이드 를 참조하세요.
인증 메커니즘 지정
다음 중 하나를 사용하여 MongoDB 에 연결할 때 인증 메커니즘 과 자격 증명 을 지정할 수 있습니다.
연결 문자열
MongoCredential
팩토리 메서드
연결 문자열 (또는 연결 URL)은 MongoDB 클러스터에 연결하고 인증하는 방법을 지정합니다.
연결 string 을 사용하여 인증하려면 연결 string 에 설정을 포함한 다음 MongoClients.create()
메서드에 전달하여 MongoClient
를 인스턴스화합니다. 다음 섹션에서 Connection String 탭 을 선택하여 연결 string 을 사용하여 인증하는 구문을 확인합니다.
MongoCredential
클래스를 사용하여 인증 세부 정보를 지정할 수도 있습니다. MongoCredential
클래스에는 인증 메커니즘 과 자격 증명 이 포함된 인스턴스를 구성하는 정적 팩토리 메서드가 포함되어 있습니다. MongoCredential
헬퍼 클래스를 사용하는 경우 MongoClientSettings.Builder
클래스를 사용하여 연결 설정을 구성합니다. 다음 섹션에서 MongoCredential 탭 을 선택하면 MongoCredential
를 사용하여 인증하는 구문을 볼 수 있습니다.
메커니즘
Kerberos(GSSAPI)
일반 보안 서비스 API (GSSAPI) 인증 메커니즘 을 사용하면 주체 이름을 사용하여 Kerberos 서비스에 인증할 수 있습니다.
다음 섹션에는 다음 자리 표시자를 사용하는 코드 예시가 포함되어 있습니다.
username
: URL로 인코딩된 주체 이름(예:"username%40REALM.ME"
hostname
: 클라이언트가 액세스할 수 있는 MongoDB 배포의 네트워크 주소port
: MongoDB 배포서버의 포트 번호
Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.
다음 예시 에서는 연결 string 을 사용하여 GSSAPI를 인증합니다.
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI");
MongoCredential
클래스를 사용하여 GSSAPI 인증 메커니즘 을 지정하려면 다음 예시 와 같이 createGSSAPICredential()
메서드를 호출합니다.
MongoCredential credential = MongoCredential.createGSSAPICredential("<username>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
Kerberos 티켓 을(를) 얻으려면 GSSAPI Java 라이브러리에서 영역 및 키 배포 센터(KDC) 시스템 속성을 지정해야 합니다. 다음 예시 와 같이 이러한 설정하다 을 지정할 수 있습니다.
java.security.krb5.realm=MYREALM.ME java.security.krb5.kdc=mykdc.myrealm.me
Kerberos 설정 에 따라 다음과 같은 추가 MongoCredential
메커니즘 속성 중 하나 이상을 지정해야 할 수도 있습니다.
SERVICE_NAME
CANONICALIZE_HOST_NAME
JAVA_SUBJECT
JAVA_SASL_CLIENT_PROPERTIES
JAVA_SUBJECT_PROVIDER
중요
다음 GSSAPI 속성은 MongoCredential
클래스를 통해서만 지정할 수 있습니다.
JAVA_SUBJECT
JAVA_SASL_CLIENT_PROPERTIES
JAVA_SUBJECT_PROVIDER
이러한 속성을 지정하는 방법을 학습 보려면 MongoCredential 탭 을 선택합니다.
GSSAPI 추가 속성을 지정하려면 연결 string 에 속성 을 <PROPERTY_NAME>:<value>
형식의 URL 매개 변수로 포함합니다.
다음 예시 에서는 GSSAPI를 인증하고 추가 속성을 지정합니다.
MongoClient mongoClient = MongoClients .create("<username>@<hostname>:<port>/?authSource=$external&authMechanism=GSSAPI&authMechanismProperties=SERVICE_NAME:myService");
GSSAPI 추가 속성을 지정하려면 MongoCredential
인스턴스 에서 withMechanismProperty()
메서드를 호출하고 속성 이름과 값을 매개 변수로 전달합니다. MongoCredential
클래스에 정의된 속성 이름 상수를 사용합니다.
SERVICE_NAME_KEY 또는 JAVA_SUBJECT_KEY 탭 을 선택하여 해당 속성 을 지정하는 방법을 확인합니다.
MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.SERVICE_NAME_KEY, "<myService>");
LoginContext loginContext = new LoginContext(<LoginModule implementation from JAAS config>); loginContext.login(); Subject subject = loginContext.getSubject(); MongoCredential credential = MongoCredential .createGSSAPICredential("<username>"); credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_KEY, subject);
기본값 Java Reactive Streams 운전자 는 MongoClient
인스턴스 별로 Kerberos 티켓을 캐시합니다. 배포서버 에서 MongoClient
인스턴스를 자주 생성하고 삭제하는 경우 기본값 Kerberos 티켓 캐싱 동작을 프로세스 별 캐시 로 변경하여 성능을 개선할 수 있습니다.
프로세스 별로 Kerberos 티켓을 캐시 하려면 연결 string 인증 메커니즘 이 JAVA_SUBJECT_PROVIDER
메커니즘 속성 을 지원 하지 않으므로 MongoCredential
인증 메커니즘 을 사용해야 합니다. MongoCredential 탭 을 선택하여 프로세스 별로 Kerberos 티켓을 캐시 하는 방법을 학습 보세요.
프로세스 JAVA_SUBJECT_PROVIDER
별로 Kerberos 티켓을 캐시 하려면 메커니즘 속성 을 지정하고 KerberosSubjectProvider 를 MongoCredential
제공합니다. 다음 예시 와 같이 인스턴스 에서
/* All MongoClient instances sharing this instance of KerberosSubjectProvider will share a Kerberos ticket cache */ String myLoginContext = "myContext"; MongoCredential credential = MongoCredential .createGSSAPICredential(<username>); /* Login context defaults to "com.sun.security.jgss.krb5.initiate" if unspecified in KerberosSubjectProvider */ credential = credential .withMechanismProperty(MongoCredential.JAVA_SUBJECT_PROVIDER_KEY, new KerberosSubjectProvider(myLoginContext));
LDAP(일반)
디렉토리 서버 사용자 이름 및 비밀번호를 사용하여 LDAP(Lightweight Directory Access Protocol) 서버에 인증할 수 있습니다.
팁
인증 메커니즘의 이름 PLAIN
은 LDAP
RFC- 에 정의된 PLAIN 단순 인증 및 보안 계층(SASL) 을4616 사용하여 인증하기 때문에 대신 로 지정됩니다. .
다음 섹션에는 다음 자리 표시자를 사용하는 코드 예시가 포함되어 있습니다.
ldap_username
: LDAP 사용자 이름ldap_password
: LDAP 사용자의 비밀번호hostname
: 클라이언트가 액세스할 수 있는 MongoDB 배포의 네트워크 주소port
: MongoDB 배포서버의 포트 번호
Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.
MongoClient mongoClient = MongoClients .create("<ldap_username>:<ldap_password>@<hostname>:<port>/?authSource=$external&authMechanism=PLAIN");
MongoCredential
클래스를 사용하여 LDAP (PLAIN) 인증 메커니즘 을 지정하려면 다음 예시 와 같이 createPlainCredential()
메서드를 호출합니다.
MongoCredential credential = MongoCredential .createPlainCredential(<ldap_username>, "$external", <ldap_password>); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
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), Java Reactive Streams 드라이버의 내장 Azure 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.
를 Azure 사용하거나 MongoCredential
연결 의 일부로 IMDS OIDC 인증 을 지정할 수 있습니다.string
Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.
<username>
자리 표시자를 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID 로 바꿉니다. 다음 코드의 <percent-encoded audience>
자리 표시자를 MongoDB deployment 에 구성된 대상 서버 매개변수의 백분율 인코딩 값으로 바꿉니다.
쉼표(,
) 문자와 해당 인코딩(%2C
)은 예약되어 있으며, 이러한 문자를 값에 사용하면 운전자 가 쉼표를 키-값 쌍의 구분 기호로 해석합니다. MongoCredential 탭 에 표시된 대로 MongoCredential
인스턴스 에 쉼표가 포함된 값을 지정해야 합니다.
MongoClient mongoClient = MongoClients.create( "mongodb://<username>@<hostname>:<port>/?" + "?authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>");
<username>
자리 표시자를 Azure managed ID 또는 엔터프라이즈 애플리케이션 의 클라이언트 ID 또는 애플리케이션 ID 로 바꿉니다. <audience>
자리 표시자를 MongoDB deployment 에 구성된 audience
서버 매개변수의 값으로 바꿉니다.
MongoCredential credential = MongoCredential.createOidcCredential("<username>") .withMechanismProperty("ENVIRONMENT", "azure") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
GCP IMDS
애플리케이션 이 Google Compute Engine VM에서 실행되거나 GCP 인스턴스 메타데이터 서비스 를 사용하는 경우 Java Reactive Streams 드라이버의 내장 GCP 지원 을 사용하여 MongoDB 에 인증할 수 있습니다.
를 GCP 사용하거나 MongoCredential
연결 의 일부로 IMDS OIDC 인증 을 지정할 수 있습니다.string
다음 섹션에는 다음 자리 표시자를 사용하는 코드 예시가 포함되어 있습니다.
hostname
: 클라이언트가 액세스할 수 있는 MongoDB 배포의 네트워크 주소port
: MongoDB 배포서버의 포트 번호
Connection String 또는 MongoCredential 탭을 선택하여 해당 구문을 확인합니다.
다음 코드의 <percent-encoded audience>
자리 표시자를 MongoDB deployment 에 구성된 오디언스 서버 매개변수의 백분율 인코딩 값으로 바꿉니다.
쉼표(,
) 문자와 해당 인코딩(%2C
)은 예약되어 있으며, 이러한 문자를 값에 사용하면 운전자 가 쉼표를 키-값 쌍의 구분 기호로 해석합니다. MongoCredential 탭 에 표시된 대로 MongoCredential
인스턴스 에 쉼표가 포함된 값을 지정해야 합니다.
MongoClient mongoClient = MongoClients.create( "mongodb://<hostname>:<port>/?" + "authMechanism=MONGODB-OIDC" + "&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>");
<audience>
자리 표시자를 MongoDB deployment 에 구성된 audience
서버 매개변수의 값으로 바꿉니다.
MongoCredential credential = MongoCredential.createOidcCredential() .withMechanismProperty("ENVIRONMENT", "gcp") .withMechanismProperty("TOKEN_RESOURCE", "<audience>"); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());
사용자 지정 콜백
Java Reactive Streams 운전자 는 Azure Functions 및 AKS( Azure Kubernetes Service)를 포함한 모든 플랫폼에 대한 내장 지원 을 제공하지 않습니다. 대신 OIDC를 사용하여 이러한 플랫폼에서 인증하려면 사용자 지정 콜백 을 정의해야 합니다. 이렇게 하려면 다음 코드 예시 와 같이 "OIDC_CALLBACK"
인증 속성 을 사용합니다.
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { String accessToken = ... return new OidcCallbackResult(accessToken); });
"OIDC_CALLBACK"
속성의 값은 Lambda 또는 OidcCallbackContext
를 매개 변수로 허용하고 OidcCallbackResult
를 반환하는 OidcCallback
함수 인터페이스의 기타 구현이어야 합니다.
다음 예제에서는 예제 콜백을 사용하여 로컬 파일 시스템의 "access-token.dat"
파일에서 OIDC 토큰을 검색합니다.
MongoCredential credential = MongoCredential.createOidcCredential(null) .withMechanismProperty("OIDC_CALLBACK", (context) -> { string accessToken = new String(Files.readAllBytes(Paths.get("access-token.dat")); return new OidcCallbackResult(accessToken); }); MongoClient mongoClient = MongoClients.create( MongoClientSettings.builder() .applyToClusterSettings(builder -> builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>)))) .credential(credential) .build());