Docs Menu

인증 λ©”μ»€λ‹ˆμ¦˜.

이 κ°€μ΄λ“œμ—μ„œλŠ” MongoDB Community Editionμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” 각 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ‚¬μš©ν•˜μ—¬ MongoDB둜 인증 ν•˜λŠ” 방법을 배울 수 μžˆμŠ΅λ‹ˆλ‹€. 인증 λ©”μ»€λ‹ˆμ¦˜μ€ λ“œλΌμ΄λ²„ 및 MongoDB Deploymentκ°€ λ³΄μ•ˆμ„ 보μž₯ν•˜κΈ° μœ„ν•΄ IDλ₯Ό ν™•μΈν•˜κ³  μ‹ λ’°λ₯Ό ν™•λ³΄ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€μž…λ‹ˆλ‹€.

μ΅œμ‹  λ²„μ „μ˜ MongoDB Community Editionμ—μ„œ μ‚¬μš©ν•  수 μžˆλŠ” λ©”μ»€λ‹ˆμ¦˜μ€ λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

Kerberos λ˜λŠ” LDAP λ₯Ό μ‚¬μš©ν•˜μ—¬ μΈμ¦ν•˜λ €λ©΄ μ—”ν„°ν”„λΌμ΄μ¦ˆ 인증 λ©”μ»€λ‹ˆμ¦˜ κ°€μ΄λ“œ λ₯Ό μ°Έμ‘°ν•˜μ„Έμš”. MongoDB cluster 에 연결을 μ„€μ •ν•˜λŠ” 방법에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ μ—°κ²° κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

λ‹€μŒ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ—¬ MongoDB에 μ—°κ²°ν•  λ•Œ 인증 λ©”μ»€λ‹ˆμ¦˜ 및 자격 증λͺ…을 μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ—°κ²° λ¬Έμžμ—΄

  • MongoCredential νŒ©ν† λ¦¬ λ©”μ„œλ“œ

μ—°κ²° λ¬Έμžμ—΄ (λ˜λŠ” μ—°κ²° URL)은 MongoDB ν΄λŸ¬μŠ€ν„°μ— μ—°κ²°ν•˜κ³  μΈμ¦ν•˜λŠ” 방법을 μ§€μ •ν•©λ‹ˆλ‹€.

μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ μΈμ¦ν•˜λ €λ©΄ μ—°κ²° λ¬Έμžμ—΄μ— 섀정을 ν¬ν•¨ν•˜κ³  MongoClients.create() λ©”μ„œλ“œμ— μ „λ‹¬ν•˜μ—¬ MongoClientλ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•©λ‹ˆλ‹€. Connection String 탭을 μ„ νƒν•˜μ—¬ μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ μΈμ¦ν•˜λŠ” ꡬ문을 ν™•μΈν•©λ‹ˆλ‹€.

λ˜λŠ” MongoCredential 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 μ„ΈλΆ€ 정보λ₯Ό μ§€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€. MongoCredential ν΄λž˜μŠ€μ—λŠ” 인증 λ©”μ»€λ‹ˆμ¦˜κ³Ό 자격 증λͺ…이 ν¬ν•¨λœ μΈμŠ€ν„΄μŠ€λ₯Ό κ΅¬μ„±ν•˜λŠ” 정적 νŒ©ν† λ¦¬ λ©”μ„œλ“œκ°€ ν¬ν•¨λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. MongoCredential 헬퍼 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 MongoClient ꡬ성 μ‹œ MongoClientSettings.Builder 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ μ—°κ²° 섀정을 ꡬ성해야 ν•©λ‹ˆλ‹€. MongoCredential 탭을 μ„ νƒν•˜λ©΄ MongoCredential을 μ‚¬μš©ν•˜μ—¬ μΈμ¦ν•˜λŠ” ꡬ문을 λ³Ό 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ 클래슀 및 λ©”μ„œλ“œμ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ λ‹€μŒ API λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

κΈ°λ³Έ 인증 λ©”μ»€λ‹ˆμ¦˜ 섀정은 μ‚¬μš© 쀑인 MongoDB Server 버전이 μ§€μ›ν•˜λŠ” 인증 λ©”μ»€λ‹ˆμ¦˜μ— 따라 λ‹€μŒ 인증 λ©”μ»€λ‹ˆμ¦˜ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

  1. SCRAM-SHA-256

  2. SCRAM-SHA-1

  3. MONGODB-CR

MongoDB Server 버전 3.6 μ΄ν•˜μ—μ„œλŠ” MONGODB-CR을 κΈ°λ³Έ λ©”μ»€λ‹ˆμ¦˜μœΌλ‘œ μ‚¬μš©ν•©λ‹ˆλ‹€. μ΅œμ‹  λ²„μ „μ˜ MongoDB ServerλŠ” 지원을 μ•Œλ¦¬λŠ” λ©”μ»€λ‹ˆμ¦˜ 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€.

λ‹€μŒ μ½”λ“œ μŠ€λ‹ˆνŽ«μ€ λ‹€μŒ 자리 ν‘œμ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

  • username - MongoDB μ‚¬μš©μž 이름

  • password - MongoDB μ‚¬μš©μžμ˜ λΉ„λ°€λ²ˆν˜Έ

  • hostname - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” MongoDB λ°°ν¬μ„œλ²„μ˜ λ„€νŠΈμ›Œν¬ μ£Όμ†Œ

  • port - MongoDB λ°°ν¬μ„œλ²„μ˜ 포트 번호

  • authenticationDb - μ‚¬μš©μžμ˜ 인증 데이터가 ν¬ν•¨λœ MongoDB λ°μ΄ν„°λ² μ΄μŠ€. 이 λ§€κ°œλ³€μˆ˜λ₯Ό μƒλž΅ν•˜λ©΄ λ“œλΌμ΄λ²„λŠ” κΈ°λ³Έκ°’ admin 을 μ‚¬μš©ν•©λ‹ˆλ‹€.

이 인증 λ©”μ»€λ‹ˆμ¦˜ 지정에 λŒ€ν•œ μ§€μΉ¨κ³Ό 예제 μ½”λ“œλ₯Ό 보렀면 μ•„λž˜ Connection String λ˜λŠ” MongoCredential 탭을 μ„ νƒν•˜μ„Έμš”.

μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ κΈ°λ³Έ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ €λ©΄ ν•΄λ‹Ή λ©”μ»€λ‹ˆμ¦˜μ„ μƒλž΅ν•˜μ„Έμš”. MongoClient을(λ₯Ό) μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>");

MongoCredential 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°λ³Έκ°’ 인증 λ©”μ»€λ‹ˆμ¦˜ 을 μ§€μ •ν•˜λ €λ©΄ createCredential() λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. MongoClient λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoCredential credential = MongoCredential.createCredential("<db_username>", "<authenticationDb>", "<db_password>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

MongoDBκ°€ μ§€μ›ν•˜λŠ” CR(μ±Œλ¦°μ§€-응닡) 및 SCRAM(μ†”ν‹°λ“œ μ±Œλ¦°μ§€-응닡 인증 λ©”μ»€λ‹ˆμ¦˜)에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ MongoDB Server λ§€λ‰΄μ–Όμ˜ SCRAM μ„Ήμ…˜μ„ μ°Έμ‘°ν•˜μ„Έμš”.

μ°Έκ³ 

SCRAM-SHA-256 MongoDB 4.0λΆ€ν„° μ§€μ›λ˜λŠ” MongoDB의 κΈ°λ³Έ 인증 λ°©λ²•μž…λ‹ˆλ‹€.

SCRAM-SHA-256 SHA-256 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ•”ν˜Έν™”λœ μ‚¬μš©μž 이름과 λΉ„λ°€λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜λŠ” SCRAM(μ†”ν‹°λ“œ μ±Œλ¦°μ§€-응닡 인증 λ©”μ»€λ‹ˆμ¦˜)μž…λ‹ˆλ‹€.

λ‹€μŒ μ½”λ“œ μŠ€λ‹ˆνŽ«μ€ λ‹€μŒ 자리 ν‘œμ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

  • username - MongoDB μ‚¬μš©μž 이름

  • password - MongoDB μ‚¬μš©μžμ˜ λΉ„λ°€λ²ˆν˜Έ

  • hostname - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” MongoDB 배포의 λ„€νŠΈμ›Œν¬ μ£Όμ†Œ

  • port - MongoDB deployment의 포트 λ²ˆν˜Έμž…λ‹ˆλ‹€.

  • authenticationDb - μ‚¬μš©μžμ˜ 인증 데이터가 ν¬ν•¨λœ MongoDB λ°μ΄ν„°λ² μ΄μŠ€. 이 λ§€κ°œλ³€μˆ˜λ₯Ό μƒλž΅ν•˜λ©΄ λ“œλΌμ΄λ²„λŠ” κΈ°λ³Έκ°’ admin 을 μ‚¬μš©ν•©λ‹ˆλ‹€.

이 인증 λ©”μ»€λ‹ˆμ¦˜ 지정에 λŒ€ν•œ μ§€μΉ¨κ³Ό 예제 μ½”λ“œλ₯Ό 보렀면 μ•„λž˜ Connection String λ˜λŠ” MongoCredential 탭을 μ„ νƒν•˜μ„Έμš”.

μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ SCRAM-SHA-256 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ €λ©΄ μ—°κ²° λ¬Έμžμ—΄μ—μ„œ authMechanism 맀개 λ³€μˆ˜μ— SCRAM-SHA-256 값을 ν• λ‹Ήν•©λ‹ˆλ‹€. MongoClient을 μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=SCRAM-SHA-256");

클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°λ³Έ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ €λ©΄ MongoCredential createScramSha256Credential() λ©”μ„œλ“œ. MongoClient λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoCredential credential = MongoCredential.createScramSha256Credential("<db_username>", "<authenticationDb>", "<db_password>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

μ°Έκ³ 

SCRAM-SHA-1 MongoDB 버전 3.0, 3.2, 3.4, 3.6의 κΈ°λ³Έ 인증 λ°©λ²•μž…λ‹ˆλ‹€.

SCRAM-SHA-1 SHA-1 μ•Œκ³ λ¦¬μ¦˜μœΌλ‘œ μ•”ν˜Έν™”λœ μ‚¬μš©μž 이름과 λΉ„λ°€λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜λŠ” SCRAM(μ†”ν‹°λ“œ μ±Œλ¦°μ§€-응닡 λ©”μ»€λ‹ˆμ¦˜)μž…λ‹ˆλ‹€.

λ‹€μŒ μ½”λ“œ μŠ€λ‹ˆνŽ«μ€ λ‹€μŒ 자리 ν‘œμ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

  • username - MongoDB μ‚¬μš©μž 이름

  • password - MongoDB μ‚¬μš©μžμ˜ λΉ„λ°€λ²ˆν˜Έ

  • hostname - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” MongoDB 배포의 λ„€νŠΈμ›Œν¬ μ£Όμ†Œ

  • port - MongoDB deployment의 포트 λ²ˆν˜Έμž…λ‹ˆλ‹€.

  • authenticationDb - μ‚¬μš©μžμ˜ 인증 데이터가 ν¬ν•¨λœ MongoDB λ°μ΄ν„°λ² μ΄μŠ€. 이 λ§€κ°œλ³€μˆ˜λ₯Ό μƒλž΅ν•˜λ©΄ λ“œλΌμ΄λ²„λŠ” κΈ°λ³Έκ°’ admin 을 μ‚¬μš©ν•©λ‹ˆλ‹€.

이 인증 λ©”μ»€λ‹ˆμ¦˜ 지정에 λŒ€ν•œ μ§€μΉ¨κ³Ό 예제 μ½”λ“œλ₯Ό 보렀면 μ•„λž˜ Connection String λ˜λŠ” MongoCredential 탭을 μ„ νƒν•˜μ„Έμš”.

μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ SCRAM-SHA-1 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ €λ©΄ μ—°κ²° λ¬Έμžμ—΄μ—μ„œ authMechanism 맀개 λ³€μˆ˜μ— SCRAM-SHA-1 값을 ν• λ‹Ήν•©λ‹ˆλ‹€. MongoClient을 μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoClient mongoClient = MongoClients.create("mongodb://<db_username>:<db_password>@<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=SCRAM-SHA-1");

클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ κΈ°λ³Έ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ €λ©΄ MongoCredential createScramSha1Credential() λ©”μ„œλ“œ. MongoClient λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoCredential credential = MongoCredential.createScramSha1Credential("<db_username>", "<authenticationDb>", "<db_password>");
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.credential(credential)
.build());

MONGODB-CR μ‚¬μš©μž 이름과 λΉ„λ°€λ²ˆν˜Έλ₯Ό μ‚¬μš©ν•˜μ—¬ μ‚¬μš©μžλ₯Ό μΈμ¦ν•˜λŠ” μ±Œλ¦°μ§€-응닡 인증 λ©”μ»€λ‹ˆμ¦˜μž…λ‹ˆλ‹€. 이 인증 λ©”μ»€λ‹ˆμ¦˜μ€ MongoDB 3.6λΆ€ν„° μ‚¬μš©λ˜μ§€ μ•ŠμœΌλ©° MongoDB 4.0λΆ€ν„° 더 이상 μ§€μ›λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 λ©”μ„œλ“œλŠ” λͺ…μ‹œμ μœΌλ‘œ μ§€μ •ν•  수 μ—†μœΌλ©° MONGODB-CR(을)λ₯Ό μ‚¬μš©ν•˜λŠ” κΈ°λ³Έ 인증 λ©”μ»€λ‹ˆμ¦˜μ—μ„œ μ œκ³΅ν•˜λŠ” λŒ€μ²΄ 방법을 μ°Έμ‘°ν•˜μ„Έμš”.

μ°Έκ³ 

MONGODB-AWS 인증 λ©”μ»€λ‹ˆμ¦˜ 은 MongoDB Atlas μ—μ„œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

MONGODB-AWS 인증 λ©”μ»€λ‹ˆμ¦˜μ€ AWS IAM(Amazon Web Services Identity and Access Management) 자격 증λͺ…을 μ‚¬μš©ν•΄ μ‚¬μš©μžλ₯Ό μΈμ¦ν•©λ‹ˆλ‹€.

Amazon Web Services 자격 증λͺ… 을 ν™˜κ²½ λ³€μˆ˜λ‘œ μ €μž₯ ν•˜κ±°λ‚˜ μ•„λž˜ μ˜ˆμ œμ™€ 같이 인라인으둜 μ‚½μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μš΄μ „μž λŠ” λ‹€μŒ μˆœμ„œλ‘œ 자격 증λͺ… 을 ν™•μΈν•©λ‹ˆλ‹€.

  1. MongoCredential 객체 λ˜λŠ” 제곡된 μ—°κ²° string 에 제곡된 κ°’μž…λ‹ˆλ‹€.

  2. ν™˜κ²½ λ³€μˆ˜. (AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY 및 μ„ νƒμ μœΌλ‘œ AWS_SESSION_TOKEN)

  3. AWS_CONTAINER_CREDENTIALS_RELATIVE_URI ν™˜κ²½ λ³€μˆ˜μ— μ§€μ •λœ Amazon Web Services EC2 μ—”λ“œν¬μΈνŠΈμž…λ‹ˆλ‹€.

  4. κΈ°λ³Έκ°’ Amazon Web Services EC2 μ—”λ“œν¬μΈνŠΈμž…λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš© 은 μž‘μ—…μ— λŒ€ν•œ IAM 역할을 μ°Έμ‘°ν•˜μ„Έμš”.

λ‹€μŒ μ½”λ“œ μŠ€λ‹ˆνŽ«μ€ λ‹€μŒ 자리 ν‘œμ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

  • awsKeyId - AWS_ACCESS_KEY_ID 의 κ°’μž…λ‹ˆλ‹€.

  • awsSecretKey - AWS_SECRET_ACCESS_KEY 의 κ°’μž…λ‹ˆλ‹€.

  • atlasUri - MongoDB Atlas μΈμŠ€ν„΄μŠ€ 의 λ„€νŠΈμ›Œν¬ μ£Όμ†Œ μž…λ‹ˆλ‹€.

  • awsSessionToken - AWS_SESSION_TOKEN 의 κ°’μž…λ‹ˆλ‹€. (선택 사항)

μ€‘μš”

URL- 자격 증λͺ… 인코딩

λ°±μŠ¬λž˜μ‹œ λ˜λŠ” 기타 문자둜 인해 ꡬ문 뢄석 였λ₯˜κ°€ λ°œμƒν•˜μ§€ μ•Šλ„λ‘ 자격 증λͺ…을 URL 인코딩해야 ν•©λ‹ˆλ‹€. λ‹€μŒ μ½”λ“œ μ˜ˆμ‹œμ—μ„œλŠ” 자리 ν‘œμ‹œμž fieldValue둜 ν‘œμ‹œλ˜λŠ” μƒ˜ν”Œ string 을 URL μΈμ½”λ”©ν•˜λŠ” 방법을 보여 μ€λ‹ˆλ‹€.

String encodedField = java.net.URLEncoder.encode("<fieldValue>".toString(), "ISO-8859-1");

이 인증 λ©”μ»€λ‹ˆμ¦˜ 지정에 λŒ€ν•œ μ§€μΉ¨κ³Ό 예제 μ½”λ“œλ₯Ό 보렀면 μ•„λž˜ Connection String λ˜λŠ” MongoCredential 탭을 μ„ νƒν•˜μ„Έμš”.

μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ MONGODB-AWS 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ €λ©΄ μ—°κ²° λ¬Έμžμ—΄μ—μ„œ authMechanism 맀개 λ³€μˆ˜μ— "MONGODB-AWS" 값을 ν• λ‹Ήν•©λ‹ˆλ‹€. MongoClient을 μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoClient mongoClient = MongoClients.create("mongodb://<awsKeyId>:<awsSecretKey>@<atlasUri>?authMechanism=MONGODB-AWS");

Amazon Web Services μ„Έμ…˜ 토큰을 μ§€μ •ν•΄μ•Ό ν•˜λŠ” 경우 λ‹€μŒκ³Ό 같이 AWS_SESSION_TOKEN:<awsSessionToken> ν˜•μ‹μ„ μ‚¬μš©ν•˜μ—¬ authMechanismProperties λ§€κ°œλ³€μˆ˜μ— ν¬ν•¨ν•©λ‹ˆλ‹€. μ„Έμ…˜ 토큰을 μ‚¬μš©ν•˜μ—¬ MongoClient λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoClient mongoClient = MongoClients.create("mongodb://<awsKeyId>:<awsSecretKey>@<atlasUri>?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<awsSessionToken>");

클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ MONGODB-AWS MongoCredential μ§€μ •ν•˜λ €λ©΄ createAwsCredential() λ©”μ„œλ“œ. MongoClient λ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray());
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>"))))
.credential(credential)
.build());

Amazon Web Services μ„Έμ…˜ 토큰을 μ§€μ •ν•΄μ•Ό ν•˜λŠ” 경우 λ‹€μŒ 선택 ν•­λͺ© 쀑 ν•˜λ‚˜λ₯Ό μ‚¬μš©ν•˜μ—¬ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ—°κ²° string 에 Amazon Web Services μ„Έμ…˜ 토큰을 μ§€μ •ν•©λ‹ˆλ‹€.

    μ—°κ²° string 의 Amazon Web Services μ„Έμ…˜ 토큰을 MongoCredentialκ³Ό ν•¨κ»˜ μ „λ‹¬ν•˜λ €λ©΄ authMechanism λ§€κ°œλ³€μˆ˜μ— 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜κ³  authMechanismProperties λ§€κ°œλ³€μˆ˜μ— μ„Έμ…˜ 토큰을 μ§€μ •ν•©λ‹ˆλ‹€. 그런 λ‹€μŒ MongoClientSettings applyConnectionString() 을 ν˜ΈμΆœν•˜μ—¬ 에 μΆ”κ°€ν•©λ‹ˆλ‹€. λ©”μ„œλ“œλŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

    MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray());
    ConnectionString connectionString = new ConnectionString("mongodb://<atlasUri>/?authMechanism=MONGODB-AWS&authMechanismProperties=AWS_SESSION_TOKEN:<awsSessionToken>");
    MongoClient mongoClient = MongoClients.create(
    MongoClientSettings.builder()
    .applyConnectionString(connectionString)
    .credential(credential)
    .build());
  • MongoCredential에 Amazon Web Services μ„Έμ…˜ 토큰을 μ§€μ •ν•©λ‹ˆλ‹€.

    withMechanismProperty() ν˜ΈμΆœμ— Amazon Web Services μ„Έμ…˜ 토큰을 MongoCredential μ§€μ •ν•˜μ—¬ μΈμŠ€ν„΄μŠ€μ— 포함할 수 μžˆμŠ΅λ‹ˆλ‹€. λ©”μ„œλ“œλ₯Ό ν˜ΈμΆœν•©λ‹ˆλ‹€.

    MongoCredential credential = MongoCredential.createAwsCredential("<awsKeyId>", "<awsSecretKey>".toCharArray()).withMechanismProperty("AWS_SESSION_TOKEN", "<awsSessionToken>");
    ConnectionString connectionString = new ConnectionString("mongodb://<atlasUri>/?authMechanism=MONGODB-AWS");
    MongoClient mongoClient = MongoClients.create(
    MongoClientSettings.builder()
    .applyConnectionString(connectionString)
    .credential(credential)
    .build());
  • ν™˜κ²½ λ³€μˆ˜μ— Amazon Web Services μ„Έμ…˜ 토큰을 μ§€μ •ν•©λ‹ˆλ‹€.

    ν΄λΌμ΄μ–ΈνŠΈ μ‹€ν–‰ ν™˜κ²½μ—μ„œ AWS_SESSION_TOKEN λΌλŠ” ν™˜κ²½ λ³€μˆ˜λ₯Ό μ„€μ •ν•˜κ³  토큰을 ν• λ‹Ήν•©λ‹ˆλ‹€. MONGODB-AWS 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ©΄ MongoClient μ—μ„œ 이 값을 μžλ™μœΌλ‘œ μ„ νƒν•©λ‹ˆλ‹€.

이 μš΄μ „μž λŠ” μ—­ν•  μˆ˜μž„ λ˜λŠ” Elastic Kubernetes Service μ‚¬μš©κ³Ό 같은 κ²½μš°μ— 자격 증λͺ… μƒˆλ‘œ 고침을 μ§€μ›ν•©λ‹ˆλ‹€.

Supplier<AwsCredential> awsFreshCredentialSupplier = () -> {
// Add your code to fetch new credentials, such as assuming a role using the AWS SDK.
// Ensure you return the temporary credentials.
return new AwsCredential("<awsKeyId>", "<awsSecretKey>", "<awsSessionToken>");
};
MongoCredential credential = MongoCredential.createAwsCredential(null, null)
.withMechanismProperty(MongoCredential.AWS_CREDENTIAL_PROVIDER_KEY, awsFreshCredentialSupplier);
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Collections.singletonList(new ServerAddress("<hostname>", 27017))))
.credential(credential)
.build());

μ°Έκ³ 

μ—°κ²° λ¬Έμžμ—΄μ— AWS IAM 자격 증λͺ…을 μ œκ³΅ν•΄μ•Ό ν•˜λŠ” 경우, 이전 릴리슀의 MONGODB-AWS λ“œλΌμ΄λ²„ λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.

X.509 인증 λ©”μ»€λ‹ˆμ¦˜μ€ X.509 μΈμ¦μ„œκ°€ ν¬ν•¨λœ TLSλ₯Ό μ‚¬μš©ν•˜μ—¬ ν΄λΌμ΄μ–ΈνŠΈ μΈμ¦μ„œμ˜ μƒλŒ€ 고유 이름(RDN)으둜 μ‹λ³„λ˜λŠ” μ‚¬μš©μžλ₯Ό μΈμ¦ν•©λ‹ˆλ‹€. X.509 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ©΄ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈ μΈμ¦μ„œμ˜ 주체 이름을 μ‚¬μš©ν•˜μ—¬ 연결을 μΈμ¦ν•©λ‹ˆλ‹€.

λ‹€μŒ μ½”λ“œ μŠ€λ‹ˆνŽ«μ€ λ‹€μŒ 자리 ν‘œμ‹œμžλ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λŠ” 방법을 λ³΄μ—¬μ€λ‹ˆλ‹€.

  • hostname - ν΄λΌμ΄μ–ΈνŠΈκ°€ μ•‘μ„ΈμŠ€ν•  수 μžˆλŠ” MongoDB 배포의 λ„€νŠΈμ›Œν¬ μ£Όμ†Œ

  • port - MongoDB deployment의 포트 λ²ˆν˜Έμž…λ‹ˆλ‹€.

  • authenticationDb - μ‚¬μš©μžμ˜ 인증 데이터가 ν¬ν•¨λœ MongoDB λ°μ΄ν„°λ² μ΄μŠ€. 이 λ§€κ°œλ³€μˆ˜λ₯Ό μƒλž΅ν•˜λ©΄ λ“œλΌμ΄λ²„λŠ” κΈ°λ³Έκ°’ admin 을 μ‚¬μš©ν•©λ‹ˆλ‹€.

이 인증 λ©”μ»€λ‹ˆμ¦˜ 지정에 λŒ€ν•œ μ§€μΉ¨κ³Ό 예제 μ½”λ“œλ₯Ό 보렀면 μ•„λž˜ Connection String λ˜λŠ” MongoCredential 탭을 μ„ νƒν•˜μ„Έμš”.

μ—°κ²° λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜μ—¬ X.509 인증 λ©”μ»€λ‹ˆμ¦˜μ„ μ§€μ •ν•˜λ €λ©΄ authMechanism λ§€κ°œλ³€μˆ˜μ— MONGODB-X509 값을 ν• λ‹Ήν•˜κ³  tls λ§€κ°œλ³€μˆ˜μ— true 값을 ν• λ‹Ήν•˜μ—¬ TLSλ₯Ό ν™œμ„±ν™”ν•©λ‹ˆλ‹€. MongoClientλ₯Ό μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoClient mongoClient = MongoClients.create("mongodb://<hostname>:<port>/?authSource=<authenticationDb>&authMechanism=MONGODB-X509&tls=true");

클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ 인증 λ©”μ»€λ‹ˆμ¦˜ 을 X.509 MongoCredential μ§€μ •ν•˜λ €λ©΄ createMongoX509Credential() λ©”μ„œλ“œ. λ˜ν•œ applyToSslSettings() λ₯Ό ν˜ΈμΆœν•˜μ—¬ TLSλ₯Ό ν™œμ„±ν™” enabled true ν•©λ‹ˆλ‹€. λ©”μ„œλ“œλ₯Ό μ‹€ν–‰ν•˜κ³  SslSettings.Builder μ—μ„œ 속성 을 둜 μ„€μ •ν•©λ‹ˆλ‹€. 차단. MongoClient 을(λ₯Ό) μΈμŠ€ν„΄μŠ€ν™”ν•˜λŠ” μ½”λ“œλŠ” λ‹€μŒκ³Ό 같이 μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€.

MongoCredential credential = MongoCredential.createMongoX509Credential();
MongoClient mongoClient = MongoClients.create(
MongoClientSettings.builder()
.applyToClusterSettings(builder ->
builder.hosts(Arrays.asList(new ServerAddress("<hostname>", <port>))))
.applyToSslSettings(builder ->
builder.enabled(true);
)
.credential(credential)
.build());

μΈμ¦μ„œλ₯Ό μ‚¬μš©ν•˜λ„λ‘ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ κ΅¬μ„±ν•˜λŠ” 방법과 TLS/SSL μ˜΅μ…˜μ— λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€ TLS/SSL κ°€μ΄λ“œλ₯Ό μ°Έμ‘°ν•˜μ„Έμš”.