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

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

이 페이지의 내용

  • 개요
  • GSSAPI/Kerberos 인증
  • 예시
  • 사용자 지정 SERVICE_NAMESERVICE_REALM 필드 설정
  • LDAP 인증(일반)
  • 예시
  • MONGODB-OIDC
  • Azure IMDS
  • GCP IMDS
  • 사용자 지정 콜백
  • 기타 Azure 환경
  • GCP GKE
  • 추가 정보
  • API 문서

이 가이드에서는 MongoDB Enterprise 에디션에서 제공되는 인증 메커니즘을 사용하여 MongoDB에서 인증하는 방법을 알아볼 수 있습니다. 인증 메커니즘은 연결 전에 보안을 보장하기 위해 드라이버와 서버가 클라이언트의 신원을 확인하는 프로세스입니다.

최신 버전의 MongoDB Enterprise Edition에서 다음 인증 메커니즘을 사용할 수 있습니다.

  • GSSAPI/Kerberos

  • LDAP (Plain)

다른 메커니즘을 사용하여 인증하려면 인증 메커니즘 기본 사항 페이지를 참조하세요. MongoDB cluster 에 연결을 설정하는 방법에 학습 보려면 연결 가이드를 참조하세요.

다음 메서드를 통해 MongoDB에 연결할 때 인증 메커니즘과 자격 증명을 지정할 수 있습니다.

  • 연결 문자열 URI를 사용합니다. 엔터프라이즈 인증을 위한 연결 문자열 URI 사용에 대해 자세히 알아보려면 연결 문자열 URI에 대한 서버 매뉴얼 항목을 참조하세요.

  • Credential 유형으로 자격 증명 및 인증 메커니즘을 지정합니다.

일반 보안 서비스 API(GSSAPI) 인증 메커니즘을 통해 사용자는 사용자의 주체를 사용하여 Kerberos 서비스에 인증할 수 있습니다.

Kerberos 인증 을 사용하려면 빌드 태그를 지정하다 gssapi 를 사용해야 하며 컴파일 중에 cgo 지원 cgo 을 지정해야 합니다. 지원 은 이전에 다른 플랫폼으로 크로스 컴파일하도록 환경 변수를 설정하다 하지 않는 한 기본값 활성화됩니다.gssapi 빌드 태그를 지정하다 를 사용하려면 다음 명령을 사용하여 코드를 컴파일합니다.

go build -tags gssapi

이 예시에서는 다음 자리 표시자를 사용하여 인증 메커니즘을 지정합니다.

  • Kerberos principal: Kerberos 주체입니다. 샘플 사용자 이름은 myuser@KERBEROS.EXAMPLE.COM 입니다.

  • password: Kerberos 사용자의 비밀번호입니다. 또한 keytab 파일에 비밀번호를 저장하여 코드에 비밀번호가 노출되는 것을 방지할 수 있습니다.

  • connection uri: 사용자의 연결 문자열 URI입니다.

다음 코드에서는 Credential 구조체를 정의하여 Kerberos에 인증하고 인증 기본 설정을 사용하여 클라이언트를 만드는 방법을 보여 줍니다.

credential := options.Credential{
AuthMechanism: "GSSAPI",
Username: "<Kerberos principal>",
Password: "<password>",
PasswordSet: true,
}
uri := "<connection uri>"
clientOpts := options.Client().ApplyURI(uri).SetAuth(credential)
client, err := mongo.Connect(clientOpts)

인증 키를 keytab 파일에 저장하는 경우 Credential 구조체의 암호 또는 PasswordSet 필드를 정의할 필요가 없습니다. kinit 바이너리를 사용하여 Kerberos 주체를 인증하기 위한 자격 증명 캐시를 초기화할 수 있습니다. kinit 바이너리에 대해 자세히 알아보려면 Oracle 설명서를 참조하세요.

다음 명령은 샘플 사용자 이름에 대한 자격 증명 캐시를 호출하는 방법을 보여줍니다.

kinit myuser@KERBEROS.EXAMPLE.COM

또는 URL로 인코딩된 Kerberos 주체, 암호 및 MongoDB 서버의 내 네트워크 주소인 hostname를 지정하는 연결 문자열 URI를 사용하여 인증할 수 있습니다.

uri := "mongodb://<Kerberos principal>:<password>@<hostname>/?authMechanism=GSSAPI"

Credential 구조체의 AuthMechanismProperties 필드를 사용하여 인증 메커니즘으로 추가 속성을 지정할 수 있습니다. Kerberos의 기본 서비스 이름은 "mongodb"입니다. 다음 코드는 Credential 구조체를 정의할 때 SERVICE_NAMESERVICE_REALM 필드에 사용자 지정 값을 설정하는 방법을 보여줍니다.

credential := options.Credential{
AuthMechanism: "GSSAPI",
Username: "<Kerberos principal>",
Password: "<password>",
AuthMechanismProperties: map[string]string{
"SERVICE_REALM": "<Kerberos service realm>",
"SERVICE_NAME": "<service name>",
},
}

추가 속성은 인증 속성에 대한 서버 매뉴얼 항목을 참조하십시오.

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

경고

이 인증 메커니즘은 비밀번호를 일반 텍스트로 서버에 전송하므로 이 메커니즘은 TLS 연결에만 사용합니다.

이 예시에서는 다음 자리 표시자를 사용하여 인증 메커니즘을 지정합니다.

  • LDAP username: LDAP 사용자 이름

  • password: LDAP 비밀번호

  • connection uri: 연결 문자열 URI

다음 코드에서는 Credential 구조체를 정의하여 LDAP에 인증하고 인증 기본 설정을 사용하여 클라이언트를 만드는 방법을 보여 줍니다.

credential := options.Credential{
AuthMechanism: "PLAIN",
Username: "<LDAP username>",
Password: "<password>",
}
uri := "<connection uri>"
clientOpts := options.Client().ApplyURI(uri).SetAuth(credential)
client, err := mongo.Connect(clientOpts)

또는 연결 문자열 URI를 사용하여 인증할 수 있으며, LDAP 사용자 이름, 암호 및 hostname, MongoDB 서버의 네트워크 주소를 지정할 수 있습니다.

uri := "mongodb://<LDAP username>:<password>@<hostname>/?authMechanism=PLAIN"

참고

이 메서드는 RFC-4616에 정의된 PLAIN 간이 인증 및 보안 계층 서비스(SASL)를 사용하여 인증하므로 LDAP 대신 PLAIN을 참조합니다.

중요

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

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

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

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

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

다음과 같은 방법으로 Azure IMDS용 OIDC를 구성할 수 있습니다.

  • 클라이언트 를 생성할 때 Credential 구조체를 생성하고 이를 SetAuth() 메서드에 전달합니다.

  • 연결 string에 매개변수를 설정합니다.

참고

AuthMechanismProperties 구조체 필드 값에 쉼표가 포함된 경우 Credential 인스턴스 를 만들어 인증 옵션을 설정하다 해야 합니다.

먼저 다음 예시 와 같이 인증 메커니즘 속성을 저장 맵을 만듭니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

props := map[string]string{
"ENVIRONMENT": "azure",
"TOKEN_RESOURCE": "<audience>",
}

그런 다음 다음 Credential 구조체 필드를 설정하다 합니다.

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

  • AuthMechanism: "MONGODB-OIDC" 로 설정합니다.

  • AuthMechanismProperties: 이전에 만든 props 맵으로 설정합니다.

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

uri := "mongodb://<hostname>:<port>"
props := map[string]string{
"ENVIRONMENT": "azure",
"TOKEN_RESOURCE": "<audience>",
}
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
Username: "<Azure client ID or application ID>",
AuthMechanism: "MONGODB-OIDC",
AuthMechanismProperties: props,
},
)
client, err := mongo.Connect(opts)
if err != nil {
panic(err)
}

연결 string 에 다음 연결 옵션을 포함합니다.

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

  • authMechanism: MONGODB-OIDC 로 설정합니다.

  • authMechanismProperties: ENVIRONMENT:azure,TOKEN_RESOURCE:<audience> 로 설정합니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

다음 코드 예시 에서는 연결 string 에서 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.

uri := "mongodb://<hostname>:<port>/?" +
"username=<Azure client ID or application ID>" +
"&authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:azure,TOKEN_RESOURCE:<percent-encoded audience>"
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}

애플리케이션이 Azure VM에서 실행 중이고 VM과 연결된 관리 ID가 하나만 있는 경우 username 연결 옵션을 생략할 수 있습니다.

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

다음과 같은 방법으로 GCP IMDS용 OIDC를 구성할 수 있습니다.

  • 클라이언트 를 생성할 때 Credential 구조체를 생성하고 이를 SetAuth() 메서드에 전달합니다.

  • 연결 string에 매개변수를 설정합니다.

참고

AuthMechanismProperties 구조체 필드 값에 쉼표가 포함된 경우 Credential 인스턴스 를 만들어 인증 옵션을 설정하다 해야 합니다.

먼저 다음 예시 와 같이 인증 메커니즘 속성을 저장 맵을 만듭니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

props := map[string]string{
"ENVIRONMENT": "gcp",
"TOKEN_RESOURCE": "<audience>",
}

그런 다음 다음 Credential 구조체 필드를 설정하다 합니다.

  • AuthMechanism: "MONGODB-OIDC" 로 설정합니다.

  • AuthMechanismProperties: 이전에 만든 props 맵으로 설정합니다.

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

uri := "mongodb://<hostname>:<port>"
props := map[string]string{
"ENVIRONMENT": "gcp",
"TOKEN_RESOURCE": "<audience>",
}
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
AuthMechanism: "MONGODB-OIDC",
AuthMechanismProperties: props,
},
)
client, err := mongo.Connect(opts)
if err != nil {
panic(err)
}

연결 string 에 다음 연결 옵션을 포함합니다.

  • authMechanism: MONGODB-OIDC 로 설정합니다.

  • authMechanismProperties: ENVIRONMENT:gcp,TOKEN_RESOURCE:<audience> 로 설정합니다. <audience> 자리 표시자를 MongoDB deployment 에 구성된 audience 매개변수의 값으로 바꿉니다.

다음 코드 예시 에서는 연결 string 에서 이러한 옵션을 설정하다 하는 방법을 보여 줍니다.

uri := "mongodb://<hostname>:<port>/?" +
"&authMechanism=MONGODB-OIDC" +
"&authMechanismProperties=ENVIRONMENT:gcp,TOKEN_RESOURCE:<percent-encoded audience>"
client, err := mongo.Connect(options.Client().ApplyURI(uri))
if err != nil {
panic(err)
}

Go 운전자 는 Amazon Web Services Elastic Kubernetes Service(EKS)를 포함한 모든 플랫폼에 대한 내장 지원 을 제공하지 않습니다. 지원되지 않는 플랫폼에 대해 인증하려면 OIDC를 사용하여 인증하는 사용자 지정 콜백 함수를 정의해야 합니다. 운전자 에서 options.OIDCCallback 함수를 정의하고 이를 Credential 구조체의 OIDCMachineCallback 구조체 필드 값으로 설정하다 수 있습니다.

다음 예시 에서는 구성된 IAM OIDC 제공자 가 있는 EKS 클러스터 에 대한 사용자 지정 콜백 을 정의합니다. 액세스 토큰은 AWS_WEB_IDENTITY_TOKEN_FILE 환경 변수에 설정하다 경로에서 읽습니다.

eksCallback := func(_ context.Context,
_ *options.OIDCArgs) (*options.OIDCCredential, error) {
accessToken, err := os.ReadFile(
os.Getenv("AWS_WEB_IDENTITY_TOKEN_FILE"))
if err != nil {
return nil, err
}
return &options.OIDCCredential{
AccessToken: string(accessToken),
}, nil
}

그런 다음 정의한 EKS 콜백 함수를 사용하는 Credential 구조체를 만들 수 있습니다.

uri := "mongodb://<hostname>:<port>"
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
AuthMechanism: "MONGODB-OIDC",
OIDCMachineCallback: eksCallback,
},
)
client, err := mongo.Connect(opts)
if err != nil {
panic(err)
}

애플리케이션 이 Azure Functions, ASE(App Service Environment) 또는 AKS( Azure Kubernetes Service)에서 실행되는 경우 다음을 사용할 수 있습니다. 모듈을 사용하여 인증 자격 증명 을 가져옵니다.

먼저 다음 명령을 실행 하여 azidentity 모듈을 설치합니다.

go get -u github.com/Azure/azure-sdk-for-go/sdk/azidentity

OIDCCallback 함수는 azidentity 패키지 에서 생성된 AccessToken 를 사용하는 OIDCCredential 인스턴스 를 반환해야 합니다. 액세스 토큰을 조회 하기 위한 사용자 지정 콜백 을 구현한 다음 Credential 을 생성하는 예시 는 앞의 사용자 지정 콜백 섹션을 참조하세요.

애플리케이션 이 구성된 서비스 계정 으로 GCP Google Kubernetes Engine(GKE) 클러스터 에서 실행되는 경우 표준 서비스 계정 토큰 파일 위치 에서 OIDC 토큰을 읽을 수 있습니다.

먼저 OIDCCallback 함수를 정의합니다. 이 함수는 OIDC 토큰을 읽고 OIDCCredential 인스턴스 를 반환합니다.

다음 예시 에서는 gkeCallback 이라는 콜백 함수를 정의합니다. 이 함수는 표준 서비스 계정 토큰 파일 위치 에 있는 파일 에서 OIDC 토큰을 검색합니다.

gkeCallback := func(_ context.Context,
_ *options.OIDCArgs) (*options.OIDCCredential, error) {
accessToken, err := os.ReadFile(
"/var/run/secrets/kubernetes.io/serviceaccount/token")
if err != nil {
return nil, err
}
return &options.OIDCCredential{
AccessToken: string(accessToken),
}, nil
}

그런 다음 정의한 GKE 콜백 함수를 사용하는 Credential 구조체를 만들 수 있습니다.

uri := "mongodb://<hostname>:<port>"
opts := options.Client().ApplyURI(uri)
opts.SetAuth(
options.Credential{
AuthMechanism: "MONGODB-OIDC",
OIDCMachineCallback: gkeCallback,
},
)
client, err := mongo.Connect(opts)
if err != nil {
panic(err)
}

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

돌아가기

인증