μ체 κ΄λ¦¬ λ°°ν¬μλ²μ λν LDAP κΆν λΆμ¬
μ΄ νμ΄μ§μ λ΄μ©
λ²μ 3.4 μ μλ‘μ΄ κΈ°λ₯: MongoDB μν°νλΌμ΄μ¦ μΈμ¦λ μ¬μ©μκ° μν LDAP κ·Έλ£Ήμ λν LDAP μλ² μΏΌλ¦¬λ₯Ό μ§μν©λλ€. MongoDB λ°νλ κ° κ·Έλ£Ή μ κ³ μ μ΄λ¦(DN)μ admin
λ°μ΄ν°λ² μ΄μ€ μ μν μ λ§€νν©λλ€. MongoDB λ§€νλ μν λ° κ΄λ ¨ κΆνμ κΈ°λ°μΌλ‘ μ¬μ©μμκ² κΆνμ λΆμ¬ν©λλ€. μμΈν λ΄μ©μ LDAP κΆν λΆμ¬λ₯Ό μ°Έμ‘°νμΈμ.
LDAP μΈμ¦ νλ‘μΈμ€λ μλμ μμ½λμ΄ μμ΅λλ€:
ν΄λΌμ΄μΈνΈλ MongoDBμ μ°κ²°νκ³ μΈλΆ μΈμ¦μ μ§μνλ μΈμ¦λ©μ»€λμ¦μ μ¬μ©νμ¬ μΈμ¦μ μνν©λλ€.
$external
μΈμ¦ μ¬μ©μ(Kerberos, LDAP λλ x.509 μ¬μ©μ)μ ν¨κ» ν΄λΌμ΄μΈνΈ μΈμ λ° μΈκ³Όμ μΌκ΄μ± 보μ₯ μ μ¬μ©νλ €λ©΄ μ¬μ©μ μ΄λ¦μ΄ 10k λ°μ΄νΈλ₯Ό μ΄κ³Όν μ μμ΅λλ€.MongoDBλ
security.ldap.servers
λ‘ μ§μ λ LDAP μλ²μsecurity.ldap.bind.queryUser
μsecurity.ldap.bind.queryPassword
λ‘ μ§μ λ μ격 μ¦λͺ μ μ¬μ©νμ¬ λ°μΈλ©ν©λλ€.MongoDBλ κΈ°λ³Έμ μΌλ‘ λ¨μ λ°μΈλ©μ μ¬μ©νμ§λ§
security.ldap.bind.method
λ°security.ldap.bind.saslMechanisms
μΌλ‘ꡬμ±λ κ²½μ°sasl
λ°μΈλ©μ λμ μ¬μ©ν μ μμ΅λλ€.MongoDBλ
security.ldap.authz.queryTemplate
μ μ¬μ©νμ¬ LDAP 쿼리λ₯Ό ꡬμ±νκ³ μΈμ¦λ μ¬μ©μμ κ·Έλ£Ή λ Έλμμ LDAP μλ²μ 쿼리ν©λλ€.MongoDBλ
security.ldap.userToDNMapping
μ΅μ μΌλ‘ μ¬μ©μ μ΄λ¦μ λ³ννμ¬ μΏΌλ¦¬ ν νλ¦Ώμ μ§μν μ μμ΅λλ€.LDAP μλ²λ 쿼리λ₯Ό νκ°νκ³ μΈμ¦λ μ¬μ©μκ° μν κ·Έλ£Ή λͺ©λ‘μ λ°νν©λλ€.
MongoDBλ λ°νλ κ° κ·Έλ£Ήμ κ³ μ μ΄λ¦(DN)μ
admin
λ°μ΄ν°λ² μ΄μ€μ μν μ λ§€ννμ¬ μλ²μμ μ‘°μΉλ₯Ό μνν μ μλ κΆνμ μ¬μ©μμκ² λΆμ¬ν©λλ€. λ°νλ κ·Έλ£Ή DNμ΄admin
λ°μ΄ν°λ² μ΄μ€μ κΈ°μ‘΄ μν μ΄λ¦κ³Ό μ νν μΌμΉνλ κ²½μ°, MongoDBλ μ¬μ©μμκ² ν΄λΉ μν μ ν λΉλ μν λ° κΆνμ λΆμ¬ν©λλ€. μμΈν λ΄μ©μ LDAP μΈμ¦μ μν MongoDB μν μ μ°Έμ‘°νμΈμ.ν΄λΌμ΄μΈνΈλ MongoDB μλ²μμ μΈμ¦λ μ¬μ©μμκ² λΆμ¬λ μν λλ κΆνμ΄ νμν μ‘°μΉλ₯Ό μνν μ μμ΅λλ€.
ldapUserCacheInvalidationInterval
λ‘ μ μλ κ°κ²©μΌλ‘ MongoDBλ$external
μΊμλ₯Ό νλ¬μν©λλ€. μΈλΆμμ κΆνμ΄ λΆμ¬λ μ¬μ©μκ° μννλ νμ μμ μ μ€ννκΈ° μ μ MongoDBλ LDAP μλ²μμ ν΄λΉ μ¬μ©μμ κ·Έλ£Ή λ©€λ²μμ λ€μ νλν©λλ€.
κ³ λ € μ¬ν
Dockerμ λν μ 체 μ€λͺ μ μ΄ λ¬Έμμ λ²μλ₯Ό λ²μ΄λ©λλ€. μ΄ νμ΄μ§μμλ Dockerμ λν μ¬μ μ§μμ΄ μλ€κ³ κ°μ ν©λλ€.
μ΄ λ¬Έμμμλ MongoDB LDAP κΆν λΆμ¬μ λν΄μλ§ μ€λͺ νλ©° LDAPμ λ€λ₯Έ 리μμ€λ₯Ό λ체νμ§ μμ΅λλ€. LDAP μΈμ¦μ ꡬμ±νκΈ° μ μ LDAP λ° κ΄λ ¨ μ£Όμ λ₯Ό μ² μ ν μμ§νλ κ²μ΄ μ’μ΅λλ€.
MongoDBλ MongoDB λ°°μΉμ λν΄ LDAP κΆν λΆμ¬μ μ΅μ ꡬμ±μ μν μ λ¬Έ μλΉμ€λ₯Ό μ 곡ν μ μμ΅λλ€.
νΈν κ°λ₯ν μΈμ¦ λ©μ»€λμ¦
MongoDBλ λ€μκ³Ό κ°μ κΆν λΆμ¬ λ°©λ²μΌλ‘ LDAP μΈμ¦μ μ§μν©λλ€:
μ΄ κ΅¬μ±μμ MongoDBλ LDAP, X.509 λλ Kerberos κΆν λΆμ¬λ₯Ό μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈ μ°κ²°μ μΈμ¦ν©λλ€.
μ°κ²° ν
μΈμ¦/κΆν λΆμ¬λ₯Ό μν΄ LDAP μλ²μ μ°κ²°ν λ MongoDBλ κΈ°λ³Έμ μΌλ‘ λ€μμ μνν©λλ€.
μ€ννλ©΄ μ°κ²° νλ§μ μ¬μ©ν©λλ€:
λλ
λ₯Ό μ¬μ©νμ¬ MongoDB Enterprise λ°μ΄λλ¦¬κ° libldap_rμλν΄ λ§ν¬λλ Linuxμμ.
μ€ννλ©΄ μ°κ²° νλ§μ μ¬μ©νμ§ μμ΅λλ€:
MongoDB Enterprise λ°μ΄λ리λ Linuxμμ libldapμ λν΄ λ§ν¬λ©λλ€.
μ°κ²° νλ§ λμμ λ³κ²½νλ €λ©΄ ldapUseConnectionPool
λ§€κ°λ³μλ₯Ό μ
λ°μ΄νΈνμμμ€.
libldap
κ°μΈμ 보 μ μ±
μ libldap_r
libldap
(μ: RHELμμ μ€νλλ κ²½μ°) μ μ°κ²°λ MongoDB 4.2 μν°νλΌμ΄μ¦ λ°μ΄λ리μ κ²½μ° libldap
μ‘μΈμ€κ° λκΈ°νλλ―λ‘ μΌλΆ μ±λ₯/λκΈ° μκ° λΉμ©μ΄ λ°μν©λλ€.
0}μ μ°κ²°λ MongoDB 4.2 Enterprise λ°μ΄λ리μ libldap_r
κ²½μ° μ΄μ MongoDB λ²μ κ³Ό λμμ΄ λ³κ²½λμ§ μμ΅λλ€.
μ¬μ©μ κ΄λ¦¬
LDAP κΆν λΆμ¬λ₯Ό μ¬μ©νλ©΄ LDAP μλ²μμ μ¬μ©μ μμ± λ° κ΄λ¦¬κ° μ΄λ£¨μ΄μ§λλ€. MongoDBλ₯Ό μ¬μ©νλ €λ©΄ admin
λ°μ΄ν°λ² μ΄μ€μ κ° μν μ μ΄λ¦μ΄ LDAP κ·Έλ£Ήμ κ³ μ μ΄λ¦(DN)κ³Ό μ νν μΌμΉνλ μν μ μμ±ν΄μΌ ν©λλ€. μ΄λ $external
λ°μ΄ν°λ² μ΄μ€μ μ¬μ©μλ₯Ό μμ±ν΄μΌ νλ MongoDB κ΄λ¦¬ν κΆν λΆμ¬μ λμ‘°λ©λλ€.
MongoDB μλ²μμ μν μ κ΄λ¦¬νλ €λ©΄, μν κ΄λ¦¬ κΆνμ κ°μ§admin
λ°μ΄ν°λ² μ΄μ€ μν κ³Ό μ°κ΄λ κ·Έλ£Ή λ©€λ²μΈ μ¬μ©μλ‘ μΈμ¦ν΄μΌ ν©λλ€. μ΄λ userAdmin
κ³Ό κ°μ μν μ ν΅ν΄ μ 곡λ©λλ€. LDAP κ·Έλ£Ή DNμ ν΄λΉνλ μν μ μμ±νκ±°λ μ
λ°μ΄νΈνμ¬ ν΄λΉ κ·Έλ£Ήμ ꡬμ±μμ΄ μλ μ¬μ©μκ° μ μ ν μν λ° κΆνμ λ°μ μ μλλ‘ ν©λλ€.
μλ₯Ό λ€μ΄, λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬μμ© LDAP κ·Έλ£Ήμλ μ΄λλ―Ό μν λ° κΆνμ΄ μλ μν μ΄ μμ μ μμ΅λλ€. λ§μΌν λλ λΆμ μ¬μ©μλ₯Ό μν LDAP κ·Έλ£Ήμλ νΉμ λ°μ΄ν°λ² μ΄μ€μμ μ½κΈ° κΆνλ§ μλ μν μ΄ μμ μ μμ΅λλ€.
μ€μ
ν΄λΉ LDAP κ·Έλ£Ήμ λν μν μ ꡬμ±ν λ ν΄λΉ κ·Έλ£Ήμ ꡬμ±μ μ격μ κ°μ§ λͺ¨λ μ¬μ©μκ° κ΅¬μ±λ μν λ° κΆνμ λ°μ μ μμΌλ μ£ΌμνμκΈ° λ°λλλ€. MongoDB μν , LDAP κ·Έλ£Ή λλ κ·Έλ£Ή λ©€λ²μμ ꡬμ±ν λλ μ΅μ κΆν μμΉμ μ μ©νλ κ²μ΄ μ’μ΅λλ€.
μν κ΄λ¦¬ κΆνμ΄ μλ μν μ΄ μ‘΄μ¬νμ§ μκ³ μ΄λ¬ν κΆνμ΄ μλ$external
μ¬μ©μκ° μ‘΄μ¬νμ§ μμΌλ©΄ LDAP μλ²μμ κ·Έλ£Ή λλ κ·Έλ£Ή λ©€λ²μμ μΆκ° λλ λ³κ²½μ λ°μνλλ‘ μ μν μ΄λ κΈ°μ‘΄ μν μ λ³κ²½ν μ μμΌλ―λ‘ μ¬μ€μ μ¬μ©μ κ΄λ¦¬λ₯Ό μνν μ μμ΅λλ€.
MongoDB μλ²μμ μν μ κ΄λ¦¬ν μ μλ μλ리μ€λ₯Ό ν΄κ²°νλ €λ©΄ λ€μ μ μ°¨λ₯Ό μννμΈμ.
κΆν λΆμ¬ λ° LDAP μΈμ¦ μμ΄ MongoDB μλ² λ€μ μμ
μ΄λ¦μ΄ μ μ ν LDAP κ·Έλ£Ή κ³ μ μ΄λ¦(Distinguished Name)μ ν΄λΉνλ
admin
λ°μ΄ν°λ² μ΄μ€μ μν μ λ§λλλ€. κ·Έλ£Ή DNμ μ νν λ λ°μ΄ν°λ² μ΄μ€ κ΄λ¦¬μ κ°μ₯ μ ν©νμ§ κ³ λ €νμμμ€.μΈμ¦ λ° LDAP κΆν λΆμ¬λ₯Ό ν΅ν΄ MongoDB Serverλ₯Ό λ€μ μμν©λλ€.
μμ±λ κ΄λ¦¬ μν μ ν΄λΉνλ κ·Έλ£Ή λ©€λ²λ‘μ μΈμ¦ν©λλ€.
κΈ°μ‘΄ μ¬μ©μ
LDAPλ₯Ό μ¬μ©νμ¬ κΆνμ λΆμ¬νλ MongoDB μλ²λ $external
λ°μ΄ν°λ² μ΄μ€μ κΈ°μ‘΄ μ¬μ©μμκ² μ‘μΈμ€ν μ μμ΅λλ€. $external
λ°μ΄ν°λ² μ΄μ€μ κΈ°μ‘΄ μ¬μ©μκ° μλ κ²½μ° κ³μ μ‘μΈμ€ν μ μλλ‘ νλ €λ©΄ λ°μ΄ν°λ² μ΄μ€μ κ° μ¬μ©μμ λν΄ λ€μ μꡬ μ¬ν$external
μ μΆ©μ‘±ν΄μΌ ν©λλ€:
μ¬μ©μκ° LDAP μλ²μ ν΄λΉ μ¬μ©μ κ°μ²΄λ₯Ό κ°μ§κ³ μμ΅λλ€.
μ¬μ©μ κ°μ²΄λ μ μ ν LDAP κ·Έλ£Ήμ λ©€λ²μμ κ°μ§κ³ μμ΅λλ€
MongoDBλ μ¬μ©μμ LDAP κ·Έλ£Ήμ λνλ΄λ
admin
λ°μ΄ν°λ² μ΄μ€μ μν μ κ°μ§κ³ μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λΆμ¬λ μν κ³Ό κΆνμ$external
μ΄ μλ μ¬μ©μμκ² λΆμ¬λ κ²κ³Ό λμΌν©λλ€.
$external
λ°μ΄ν°λ² μ΄μ€μ μλ μ¬μ©μκ° μ‘μΈμ€ν μ μλλ‘ κ³μ νμ©νλ €λ©΄ authenticationMechanisms
λ§€κ° λ³μμ SCRAM-SHA-1
λ°/λλ SCRAM-SHA-256
κ° μ μ νκ² ν¬ν¨λμ΄ μλμ§ νμΈν©λλ€. λλ ν΄λΉ μ¬μ©μλ₯Ό LDAP κΆν λΆμ¬λ‘ μ ννκΈ° μν΄ μμ λμ΄λ μꡬ μ¬νμ μ μ©ν©λλ€.
볡μ λ³Έ μΈνΈ
볡μ λ³Έ μΈνΈμ κ²½μ°, νλΌμ΄λ¨Έλ¦¬λ₯Ό ꡬμ±νκΈ° μ μ λ¨Όμ μΈμ»¨λ리 λ° μ€μ¬μ λ©€λ²μ λν LDAP κΆν λΆμ¬λ₯Ό ꡬμ±ν©λλ€. μ΄λ μ€λ 볡μ λ³Έ μΈνΈ λλ config μλ² λ³΅μ λ³Έ μΈνΈμλ μ μ©λ©λλ€. ν λ²μ νλμ 볡μ λ³Έ μΈνΈ λ©€λ²λ₯Ό μ€μ νμ¬ λλ€μμ λ©€λ²κ° μ°κΈ° κ°μ©μ±μ μ μ§νλλ‘ ν©λλ€.
μ€λ©λ ν΄λ¬μ€ν°
μ€λ©λ ν΄λ¬μ€ν°λ ν΄λ¬μ€ν° μμ€ μ¬μ©μλ₯Ό μν΄ config μλ² LDAP κΆνμ ꡬμ±ν΄μΌ ν©λλ€. νμν κ²½μ° κ° μ€λμμ μ€λ λ‘컬 μ¬μ©μλ₯Ό μν LDAP κΆνμ ꡬμ±ν μλ μμ΅λλ€.
ꡬμ±
LDAP κΆν λΆμ¬λ₯Ό μ¬μ©νλ €λ©΄ λ€μ μ€μ μ ꡬμ±ν΄μΌ ν©λλ€.
μ΄μ 체μ λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ LDAPλ₯Ό κΆν λΆμ¬μ μ¬μ©νλ €λ©΄, mongod
λλ mongos
κ΅¬μ± νμΌμμ νΉμ μ€μ μ μ§μ ν΄μΌ ν©λλ€.
μ΅μ
| μ€λͺ
| νμ μ¬ν |
---|---|---|
λ°μ΄νλ‘ λ¬Άμ μΌνλ‘ κ΅¬λΆλ | λ€ | |
RFC4515 λ° RFC4516 μ¬μ©μκ° μν LDAP κ·Έλ£Ήμ κ°μ Έμ€κΈ° μν΄ MongoDBμμ μ€ννλ LDAP νμμ 쿼리 URL ν
νλ¦Ώμ
λλ€. 쿼리λ ν νλ¦Ώμμ λ€μ ν ν°μ μ¬μ©ν μ μμ΅λλ€.
| λ€ | |
LDAP μλ²μ μ°κ²°νκ³ μμ κ³Ό 쿼리λ₯Ό μ€νν λ MongoDB Serverκ° λ°μΈλ©νλ IDμ λλ€.
μ§μ ν μ¬μ©μλ ꡬμ±λ | λ€ | |
| λ€ | |
μλμ, LDAP μλ²μ λ°μΈλ©νκΈ° μν΄ | ||
μλμ, | ||
Windows MongoDB λ°°ν¬λ LDAP μλ²μ μ°κ²°ν λμ λ§μ°¬κ°μ§λ‘ μΈμ¦ λλ λ°μΈλ©μ μν΄ | μλμ, | |
| ν΄λΌμ΄μΈνΈ μ¬μ©μ μ΄λ¦μ LDAP DNμΌλ‘ λ³νν΄μΌ νλ κ²½μ°κ° μλλ©΄ NOμ λλ€. |
LDAP κΆν λΆμ¬μ(λ₯Ό) ꡬμ±νμΌλ©΄ mongod
λλ mongos
λ₯Ό λ€μ μμν΄μΌ ν©λλ€. μ΄μ μλ²λ X.509, Kerberos λλ LDAPμ μ¬μ©νμ¬ ν΄λΌμ΄μΈνΈ μ°κ²°μ μΈμ¦ν©λλ€.
LDAP 쿼리 ν νλ¦Ώ
MongoDBλ security.ldap.authz.queryTemplate
(μ)λ₯Ό μ¬μ©νμ¬ RFC4516 νμμ LDAP 쿼리 URLμ μμ±ν©λλ€. ν
νλ¦Ώμμλ λ€μ μ€ νλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
{USER}
νλ μ΄μ€νλλ₯Ό μ¬μ©νμ¬ μΈμ¦λ μ¬μ©μ μ΄λ¦μ LDAP 쿼리 URLλ‘ λ체ν μ μμ΅λλ€. MongoDBκ°userToDNMapping
μ μ¬μ©νμ¬ μ¬μ©μ μ΄λ¦μ λ³νν κ²½μ° MongoDBλ LDAP 쿼리 URLμ ꡬμ±ν λ{USER}
ν ν°μ λ³νλ μ¬μ©μ μ΄λ¦μΌλ‘ λ°κΏλλ€.{PROVIDED_USER}
μΈμ¦ λλ LDAP λ³ν μ μ μ 곡λ μ¬μ©μ μ΄λ¦μ LDAP μΏΌλ¦¬λ‘ λ체νλ μ리 νμμμ λλ€.
μ¬μ©μ κ·Έλ£Ήμ μ‘°ννκΈ° μν 쿼리 ν νλ¦Ώμ λμμΈνμΈμ.
μμ
λ€μ 쿼리 ν
νλ¦Ώμ LDAP μ¬μ©μ κ°μ²΄μ memberOf
μμ±μ λμ΄λ λͺ¨λ κ·Έλ£Ήμ λ°νν©λλ€. μ΄ μΏΌλ¦¬λ memberOf
μμ±μ΄ μ‘΄μ¬νλ€κ³ κ°μ ν©λλ€. νΉμ LDAP λ°°ν¬μμλ κ·Έλ£Ή λ©€λ²μμ μΆμ νλ λ° λ€λ₯Έ μμ±μ΄λ λ°©λ²λ‘ μ μ¬μ©ν μ μμ΅λλ€. λν μ΄ μΏΌλ¦¬μμλ μ¬μ©μκ° μ 체 LDAP DNμ μ¬μ©μ μ΄λ¦μΌλ‘ μ¬μ©νμ¬ μΈμ¦νλ€κ³ κ°μ ν©λλ€.
"{USER}?memberOf?base"
LDAP 쿼리 URLμ RFC4516μ μ μλ νμμ μ€μν΄μΌ ν©λλ€.
[ dn [ ? [attributes] [ ? [scope] [ ? [filter] [ ? [Extensions] ] ] ] ] ]
RFC4516μμ μΈμ©λ λλ‘ κ° κ΅¬μ± μμμ μ μλ₯Ό κ³ λ €νμΈμ.
dn
μ RFC4514μ μ€λͺ λ λ¬Έμμ΄ νμμ μ¬μ©νλ LDAP κ³ μ μ΄λ¦μ λλ€. μ΄λ LDAP κ²μμ κΈ°λ³Έ κ°μ²΄ λλ λΉκ²μ μμ μ λμμ μλ³ν©λλ€.
attributes
ꡬμ±μ νλͺ©μμ λ°νν΄μΌ νλ νΉμ±μ λνλ΄λ λ° μ¬μ©λ©λλ€.
scope
ꡬμ±μ μ§μ λ LDAP μλ²μμ μνν κ²μ λ²μλ₯Ό μ§μ νλ λ° μ¬μ©λ©λλ€. νμ©λλ λ²μλ κΈ°λ³Έ κ°μ²΄ κ²μμ κ²½μ° 'base', λ¨μΌ μμ€ κ²μμ κ²½μ° 'one' λλ νμ νΈλ¦¬ κ²μμ κ²½μ° 'sub'μ λλ€.
filter
λ κ²μ μ€μ μ§μ λ λ²μ λ΄μ νλͺ©μ μ μ©ν κ²μ νν°λ₯Ό μ§μ νλ λ° μ¬μ©λ©λλ€. μ΄ νμμ [RFC4515]μ μ§μ λμ΄ μμ΅λλ€.
extensions
ꡬ문μ LDAP URLμ νμ₯μ± λ©μ»€λμ¦μ μ 곡νμ¬ URLμ κΈ°λ₯μ ν₯ν νμ₯ν μ μλλ‘ ν©λλ€.
쿼리μ attribute
μ΄ ν¬ν¨λ κ²½μ° MongoDBλ μΏΌλ¦¬κ° μ΄ μν°ν°κ° μν DNμ κ²μνλ€κ³ κ°μ ν©λλ€.
쿼리μ μμ±μ΄ ν¬ν¨λμ΄ μμ§ μμΌλ©΄ MongoDBλ μΏΌλ¦¬κ° μ¬μ©μκ° μν λͺ¨λ μν°ν°λ₯Ό κ²μνλ€κ³ κ°μ ν©λλ€.
MongoDBλ νμ¬ LDAP 쿼리μ μ§μ λ λͺ¨λ νμ₯μλ₯Ό 무μν©λλ€.
μ€μ
RFC4516 λλ LDAP 쿼리 URL ꡬμ±μ λν μ 체μ μΈ μ€λͺ μ μ΄ λ¬Έμμ λ²μλ₯Ό λ²μ΄λ©λλ€.
Tutorials
λ€μ νν 리μΌμλ μ΄μ 체μ LDAP λΌμ΄λΈλ¬λ¦¬λ₯Ό ν΅ν΄ LDAP μλ²μ μ°κ²°νλ μ μ°¨κ° ν¬ν¨λμ΄ μμ΅λλ€.
LDAP κΆν λΆμ¬λ₯Ό μ¬μ©νμ¬ MongoDB μλ²μ μ°κ²°νκΈ°
κΆν λΆμ¬λ₯Ό μν΄ LDAPλ₯Ό μ¬μ©νλ κ²½μ° mongosh
(μ)λ₯Ό ν΅ν΄ μ°κ²°νλ μ¬μ©μλ λ€μμ μνν΄μΌ ν©λλ€.
--authenticationDatabase
(μ)λ₯Ό$external
(μΌ)λ‘ μ€μ ν©λλ€.μ μ ν μΈμ¦ λ©μ»€λμ¦μ λ§κ²
--authenticationMechanism
μ μ€μ ν©λλ€.LDAP μΈμ¦μ μ¬μ©νλ κ²½μ°, μ΄λ₯Ό
PLAIN
μΌλ‘ μ€μ νκ³Kerberos μΈμ¦μ¬μ©νλ κ²½μ°,
GSSAPI
λ‘ μ€μ ν©λλ€.x.509λ₯Ό μ¬μ©νλ κ²½μ° μ΄ κ°μ
MONGODB-X.509
λ‘ μ€μ ν©λλ€.--username
security.ldap.authz.queryTemplate
λλ ꡬμ±λsecurity.ldap.userToDNMapping
ν νλ¦Ώμ μ€μνλ μ¬μ©μ μ΄λ¦μΌλ‘ μ€μ ν©λλ€.--password
λ₯Ό μ μ ν λΉλ°λ²νΈλ‘ μ€μ ν©λλ€.
λ°°ν¬ μλ²μ κ΄λ ¨λ λ€λ₯Έ μ΅μ
κ³Ό ν¨κ» MongoDB μλ²μ --host
λ° --port
(μ)λ₯Ό ν¬ν¨ν©λλ€.
μλ₯Ό λ€μ΄, λ€μ μμ μ LDAP μΈμ¦ λ° κΆν λΆμ¬λ₯Ό ν΅ν΄ μ€ν μ€μΈ MongoDB Serverλ₯Ό μΈμ¦ν©λλ€.
mongosh --username alice@dba.example.com --password --authenticationDatabase '$external' --authenticationMechanism "PLAIN" --host "mongodb.example.com" --port 27017
-password
λͺ
λ Ήμ€ μ΅μ
μ λΉλ°λ²νΈλ₯Ό μ§μ νμ§ μμΌλ©΄ mongosh
μμ λΉλ°λ²νΈλ₯Ό μ
λ ₯νλΌλ λ©μμ§λ₯Ό νμν©λλ€.
μ€μ
μ
Έμ΄ $external
μ λ³μλ‘ ν΄μνμ§ λͺ»νλλ‘ νλ €λ©΄ $external
μΈμλ₯Ό ν°λ°μ΄νκ° μλ μμλ°μ΄νλ‘ λ¬Άμ΄μΌ ν©λλ€.
LDAP κΆν λΆμ¬λ₯Ό μν MongoDB μν
MongoDBλ LDAP query
μμ λ°νλ κ° λ°νλ κ·Έλ£Ή DN(κ³ μ μ΄λ¦)μ admin
λ°μ΄ν°λ² μ΄μ€μ μν μ λ§€νν©λλ€.
λ§μ½ MongoDBκ° DNμ΄ κΈ°μ‘΄ μν μ μ΄λ¦κ³Ό μ νν μΌμΉνλ κ·Έλ£Ήμ μ»λλ€λ©΄, μΈμ¦λ μ¬μ©μμκ² ν΄λΉ μν κ³Ό κ΄λ ¨λ κΆνμ λΆμ¬ν©λλ€. MongoDBκ° λ°νλ κ·Έλ£Ή μ€ μ΄λ κ²λ μν μ λ§€νν μ μλ€λ©΄, μ¬μ©μμκ²λ μ΄λ ν κΆνλ λΆμ¬λμ§ μμ΅λλ€.
μ°Έκ³
LDAP λ° Kerberos μΈμ¦μ μΌλ°μ μΌλ‘ $external
λ°μ΄ν°λ² μ΄μ€μ μ¬μ©μλ₯Ό λ§λ€μ΄μΌ ν©λλ€. κΆν λΆμ¬μλ LDAPλ₯Ό μ¬μ©νλ κ²½μ° $external
λ°μ΄ν°λ² μ΄μ€μμ μ¬μ©μλ₯Ό μμ±ν νμκ° μμ΅λλ€. admin
λ°μ΄ν°λ² μ΄μ€μμ μ μ ν μν μ μμ±νκΈ°λ§ νλ©΄ λ©λλ€. μ¬μ©μλ μ¬μ ν $external
λ°μ΄ν°λ² μ΄μ€μ λν΄ μΈμ¦ν©λλ€.
μ€μ
κΆν λΆμ¬μ LDAPλ₯Ό μ¬μ© μ€μ΄κ³ LDAP κ·Έλ£Ή DNμ RFC4514 μ΄μ€μΌμ΄ν μνμ€κ° ν¬ν¨λ κ²½μ° admin
λ°μ΄ν°λ² μ΄μ€μμ λ§λλ μν λ RFC4514μ λ°λΌ μ΄μ€μΌμ΄ν μ²λ¦¬ν΄μΌ ν©λλ€.
μμ
λ°μ΄ν°λ² μ΄μ€μ λ€μκ³Ό κ°μ μν μ΄ admin
λ°μ΄ν°λ² μ΄μ€μ ꡬμ±λμ΄ μμ΅λλ€:
{ role: "CN=dba,CN=Users,DC=example,DC=com", privileges: [], roles: [ "dbAdminAnyDatabase", "clusterAdmin" ] } { role: "CN=analytics,CN=Users,DC=example,DC=com" privileges: [], roles: [ { role : "read", db : "web_statistics" }, { role : "read", db : "user_statistics" } ] }
$external
λ°μ΄ν°λ² μ΄μ€μ λν΄ μ¬μ©μ alice@dba.example.com
λ₯Ό μΈμ¦ν ν MongoDB μλ²λ ꡬμ±λ query template
μμ νμλ 쿼리λ₯Ό μννμ¬ μΈμ¦λ μ¬μ©μλ₯Ό λ©€λ²λ‘ ν¬ν¨νλ κ·Έλ£Ήμ κ²μν©λλ€. μ΄ μμμμ MongoDB μλ²λ μ¬μ©μμ λν΄ λ€μ κ·Έλ£Ή DNμ κ²μν©λλ€.
dn:CN=dba,CN=Users,dc=example,dc=com dn:CN=admin,CN=Users,dc=example,dc=com
MongoDBλ μ΄λ¬ν κ·Έλ£Ή DNμ admin
λ°μ΄ν°λ² μ΄μ€μ μν μ λ§€νν©λλ€. 첫 λ²μ§Έ κ·Έλ£Ή DNμ 첫 λ²μ§Έ μν κ³Ό μΌμΉνλ©°, MongoDBλ μΈμ¦λ μ¬μ©μμκ² κ·Έ μν κ³Ό κΆνμ λΆμ¬ν©λλ€. λ λ²μ§Έ κ·Έλ£Ή DNμ μλ²μ μ΄λ ν μν κ³Όλ μΌμΉνμ§ μμΌλ―λ‘, MongoDBλ μΆκ°μ μΈ κΆνμ λΆμ¬νμ§ μμ΅λλ€.
μ μ¬μ©μ bob@analytics.example.com
μ΄ $external
λ°μ΄ν°λ² μ΄μ€μ λν΄ μΈμ¦ν©λλ€. MongoDB μλ²λ 쿼리 ν
νλ¦Ώμ μ 곡λ μ¬μ©μ μ΄λ¦μ μ¬μ©νμ¬ μΏΌλ¦¬ νλ‘μΈμ€λ₯Ό λ°λ³΅ν©λλ€. μ΄ μμμμ MongoDB μλ²λ μ¬μ©μμ λν΄ λ€μ κ·Έλ£Ή DNμ κ²μν©λλ€.
dn:cn=analytics,CN=Users,dc=example,dc=com
MongoDBλ μ΄λ¬ν κ·Έλ£Ή DNμ admin
λ°μ΄ν°λ² μ΄μ€μ μν μ λ§€ννκ³ μΈμ¦λ μ¬μ©μμκ² λ λ²μ§Έ μν μ μν λ° κΆνμ λΆμ¬ν©λλ€.
μ μ¬μ©μ workstation@guest.example.com
μ΄ $external
λ°μ΄ν°λ² μ΄μ€μ λν΄ μΈμ¦ν©λλ€. MongoDB μλ²λ 쿼리 ν
νλ¦Ώμ μ 곡λ μ¬μ©μ μ΄λ¦μ μ¬μ©νμ¬ μΏΌλ¦¬ νλ‘μΈμ€λ₯Ό λ°λ³΅ν©λλ€. μ΄ μμμμ MongoDB μλ²λ μ¬μ©μμ λν΄ λ€μ κ·Έλ£Ή DNμ κ²μν©λλ€.
dn:cn=guest,CN=Users,dc=example,dc=com
MongoDBλ κ·Έλ£Ήμ admin
λ°μ΄ν°λ² μ΄μ€μ μν μ λ§€ννκ³ , μΌμΉνλ μν μ΄ μκΈ° λλ¬Έμ μ¬μ©μμκ² μΆκ° κΆνμ λΆμ¬νμ§ μμ΅λλ€.