엔터프라이즈 인증 메커니즘
이 페이지의 내용
개요
이 가이드에서는 MongoDB Enterprise 에디션에서 제공되는 인증 메커니즘을 사용하여 MongoDB에서 인증하는 방법을 알아볼 수 있습니다. 인증 메커니즘은 연결 전에 보안을 보장하기 위해 드라이버와 서버가 클라이언트의 신원을 확인하는 프로세스입니다.
최신 버전의 MongoDB Enterprise Edition에서 다음 인증 메커니즘을 사용할 수 있습니다.
다른 메커니즘을 사용하여 인증하려면 인증 메커니즘 기본 사항 페이지를 참조하세요. MongoDB cluster 에 연결을 설정하는 방법에 학습 보려면 연결 가이드를 참조하세요.
다음 메서드를 통해 MongoDB에 연결할 때 인증 메커니즘과 자격 증명을 지정할 수 있습니다.
연결 문자열 URI를 사용합니다. 엔터프라이즈 인증을 위한 연결 문자열 URI 사용에 대해 자세히 알아보려면 연결 문자열 URI에 대한 서버 매뉴얼 항목을 참조하세요.
Credential
유형으로 자격 증명 및 인증 메커니즘을 지정합니다.
GSSAPI/Kerberos 인증
일반 보안 서비스 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"
사용자 지정 SERVICE_NAME
및 필드 설정 SERVICE_REALM
Credential
구조체의 AuthMechanismProperties
필드를 사용하여 인증 메커니즘으로 추가 속성을 지정할 수 있습니다. Kerberos의 기본 서비스 이름은 "mongodb"입니다. 다음 코드는 Credential
구조체를 정의할 때 SERVICE_NAME
및 SERVICE_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 인증(일반)
디렉토리 서버 사용자 이름 및 비밀번호를 사용하여 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
중요
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 IMDS
애플리케이션 이 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
연결 옵션을 생략할 수 있습니다.
GCP IMDS
애플리케이션 이 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 환경
애플리케이션 이 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 GKE
애플리케이션 이 구성된 서비스 계정 으로 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) }
추가 정보
이 가이드의 개념에 대해 자세히 알아보려면 다음 문서를 참조하세요.
API 문서
자격 증명 유형
SetAuth() 메서드
OIDCCallback 함수