์์ฒด ๊ด๋ฆฌํ ๋ฐฐํฌ์๋ฒ์์ ์ฌ์ฉ์ ๋ง๋ค๊ธฐ
์ด ํ์ด์ง์ ๋ด์ฉ
- MongoDB Atlas ํธํ์ฑ
- ์ ์ ์กฐ๊ฑด
- ๋จ๊ณ
- ์ฐ๊ฒฐ ๋ฐ ์ธ์ฆ
- ๋ฐฐํฌ์๋ฒ๋ฅผ ์ํ ์ถ๊ฐ ์ฌ์ฉ์ ์์ฑ
- ์ธ์คํด์ค์ ์ฐ๊ฒฐํ๊ณ
myTester
(์ผ)๋ก ์ธ์ฆ - ๋ฌธ์๋ฅผ
myTester
(์ผ)๋ก ์ฝ์ - ์ถ๊ฐ ์์
- ์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ ์ธ์ฆ
- Kerberos ์ธ์ฆ
- LDAP ์ธ์ฆ
- X.509 ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ธ์ฆ
- ๋ค์ ๋จ๊ณ
์ก์ธ์ค ์ ์ด๊ฐ ํ์ฑํ๋๋ฉด ์ฌ์ฉ์๋ ์์ ์ ์๋ณํด์ผ ํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ํ๋ ์ด์์ ์ญํ ์ ๋ถ์ฌํด์ผ ํฉ๋๋ค. ์ญํ ์ ์ฌ์ฉ์์๊ฒ MongoDB resources์ ๋ํด ํน์ ์กฐ์น๋ฅผ ์ํํ ์ ์๋ ๊ถํ์ ๋ถ์ฌํฉ๋๋ค.
MongoDB ์์คํ ์ ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฌ์ฉ์๋ ๊ณ ์ ํ ์ฌ์ฉ์์๊ฒ ๋งคํ๋์ด์ผ ํฉ๋๋ค. ์ด๋ฌํ ์ก์ธ์ค ๊ฒฉ๋ฆฌ ์์น์ ์ก์ธ์ค ํด์ง ๋ฐ ์ง์์ ์ธ ์ฌ์ฉ์ ์ ์ง ๊ด๋ฆฌ๋ฅผ ์ฉ์ดํ๊ฒ ํฉ๋๋ค. ์ต์ ๊ถํ์ ์์คํ ์ ๋ณด์ฅํ๋ ค๋ฉด ์ฌ์ฉ์์๊ฒ ํ์ํ ์ต์ ๊ถํ ์ธํธ๋ง ๋ถ์ฌํฉ๋๋ค.
์ด ํ์ด์ง์ ์ฌ์ฉ์ ์ ๋ณด๋ ๋ณ๋๋ก ์ง์ ํ์ง ์๋ ํ ๋ค์ ํ๊ฒฝ ๋ชจ๋์์ ํธ์คํ ๋๋ ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์ ์ ์ฉ๋ฉ๋๋ค.
MongoDB Enterprise: MongoDB์ ๊ตฌ๋ ๊ธฐ๋ฐ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Community: MongoDB์ ์์ค ์ฌ์ฉ ๊ฐ๋ฅ ๋ฌด๋ฃ ์์ฒด ๊ด๋ฆฌ ๋ฒ์
MongoDB Atlas ํธํ์ฑ
๋ค์ ํ๋๋ MongoDB Atlas์์ ํธ์คํ ๋๋ ๋ฐฐํฌ์๋ง ์ ์ฉ๋ฉ๋๋ค. ์ด๋ฌํ ํ๋ ์ค ํ๋๋ผ๋ ์ฌ์ฉ์์ ์กฐ์ง์ ๋ฌธ์ ๊ฐ ๋๋ค๋ฉด Atlas ์ง์ํ์ ๋ฌธ์ํ์ธ์.
MongoDB Atlas cluster์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๋ฅผ ์ถ๊ฐ, ์์ ๋๋ ์ญ์ Atlas CLI, Atlas ๊ด๋ฆฌ API, Atlas UI ๋๋ ์ง์๋๋ ํตํฉ ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด MongoDB Atlas ๋ ๋ชจ๋ ์ฌ์ฉ์ ์์ ์ฌํญ์ ๋กค๋ฐฑํฉ๋๋ค. MongoDB Atlas ์์ ์ฌ์ฉ์๋ฅผ ์ถ๊ฐํ๋ ค๋ฉด MongoDB Atlas ์ค๋ช ์์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์ ์ถ๊ฐ ๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ์ฉ ๊ฐ๋ฅํ MongoDB Atlas ๊ธฐ๋ณธ ์ ๊ณต ์ญํ ๋ฐ ํน์ ๊ถํ์ MongoDB ๋ช ๋ น์ ํ์ ์งํฉ์ ์ง์ํฉ๋๋ค. ์์ธํ ๋ด์ฉ์ M10+ ํด๋ฌ์คํฐ์์ ์ง์๋์ง ์๋ ๋ช ๋ น์ ์ฐธ์กฐํ์ธ์.
MongoDB Atlas๋ MongoDB Atlas ํ๋ก์ ํธ๋น ์ต๋ 100๋ช ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๋ฅผ ์ง์ํฉ๋๋ค. ํ๋ก์ ํธ์ 100๋ช ์ด์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๊ฐ ํ์ํ ๊ฒฝ์ฐ Atlas ์ง์ํ์ ๋ฌธ์ํ์ธ์.
์ ์ ์กฐ๊ฑด
์ฌ์ฉ์ ์์ฑ์ด ๊ฐ๋ฅํ๋ ค๋ฉด ๋ค์์ ์ํํด์ผ ํฉ๋๋ค.
์ผ์์ ์ธ ์ฌ์ฉ์ ์์ฑ์ ์ํด์๋ ๋ค์ ๊ถํ์ด ์์ด์ผ ํฉ๋๋ค.
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ ์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ค๋ฉด ํด๋น ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฆฌ์์ค
์ ๋ํด
createUser
์์ ์ ์ํํ ์ ์์ด์ผ ํฉ๋๋ค.์ฌ์ฉ์์๊ฒ ์ญํ ์ ๋ถ์ฌํ๋ ค๋ฉด ์ญํ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
grantRole
์กฐ์น๊ฐ ์์ด์ผ ํฉ๋๋ค.
userAdmin
๋ฐ userAdminAnyDatabase
๊ธฐ๋ณธ ์ ๊ณต ์ญํ ์ ํด๋น ๋ฆฌ์์ค์ ๋ํ
createUser
๋ฐ grantRole
์กฐ์น๋ฅผ ์ ๊ณตํฉ๋๋ค.
๋จ๊ณ
์ฐธ๊ณ
๋ค์ ์ ์ฐจ๋ SCRAM ์ธ์ฆ์ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ถ๊ฐ ์์๋ฅผ ์ฐธ์กฐํ์ธ์.
์์ฒด ๊ด๋ฆฌํ MongoDB Enterprise ๋๋ MongoDB Community ๋ฐฐํฌ์๋ฒ ์ ๋ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฌ์ฉ์๋ฅผ ๊ตฌ์ฑํ๋ ค๋ฉด ๋ค์ ๋จ๊ณ๋ฅผ ๋ฐ๋ฅด์ธ์.
์ฐ๊ฒฐ ๋ฐ ์ธ์ฆ
mongosh
๋ฅผ ์ฌ์ฉํ์ฌ ํ๋ผ์ด๋จธ๋ฆฌ mongod
์ ์ฐ๊ฒฐํ๊ฑฐ๋, ์ค๋ฉ๋ ํด๋ฌ์คํฐ์์ mongos
์ ์ฐ๊ฒฐํ๊ณ ์ฌ์ฉ์ ๊ด๋ฆฌ์ ๋๋ ํ์ํ ๊ถํ์ ๊ฐ์ง ์ฌ์ฉ์๋ก ์ธ์ฆํฉ๋๋ค.
-u
<username>
, -p
๋ฐ --authenticationDatabase <database>
๋ช
๋ น์ค ์ต์
์ผ๋ก mongosh
(์)๋ฅผ ์์ํฉ๋๋ค.
mongosh --port 27017 --authenticationDatabase \ "admin" -u "myUserAdmin" -p
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
mongosh
(์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐํฌ์ ์ฐ๊ฒฐํฉ๋๋ค.
mongosh --port 27017
mongosh
์์ ์ธ์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค (์ด ๊ฒฝ์ฐ admin
)๋ก ์ ํํ๊ณ db.auth(<username>, <pwd>)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆํฉ๋๋ค.
use admin db.auth("myUserAdmin", passwordPrompt()) // or cleartext password
ํ
passwordPrompt()
๋ฉ์๋๋ ์ํธ๋ฅผ ์
๋ ฅํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ํธ๋ฅผ ๋ฌธ์์ด๋ก ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค. ์ํธ๊ฐ ํ๋ฉด์ ํ์๋์ด ์
ธ ๊ธฐ๋ก์ ์ํธ๊ฐ ์ ์ถ๋ ๊ฐ๋ฅ์ฑ์ ๋ฐฉ์งํ๋ ค๋ฉด passwordPrompt()
๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
๋ฐฐํฌ์๋ฒ๋ฅผ ์ํ ์ถ๊ฐ ์ฌ์ฉ์ ์์ฑ
์ฐธ๊ณ
๋ค์ ๋จ๊ณ์์๋ SCRAM ์ธ์ฆ์ ์ฌ์ฉํฉ๋๋ค. ๋ค๋ฅธ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ถ๊ฐ ์์๋ฅผ ์ฐธ์กฐํ์ธ์.
์ฌ์ฉ์ ๊ด๋ฆฌ์๋ก ์ธ์ฆํ ํ db.createUser()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค. ์ฌ์ฉ์์๊ฒ ๊ธฐ๋ณธ ์ ๊ณต ์ญํ ๋๋ ์ฌ์ฉ์ ์ ์ ์ญํ ์ ํ ๋นํ ์ ์์ต๋๋ค.
๋ค์ ์์
์ test
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ readWrite
์ญํ ๊ณผ
reporting
๋ฐ์ดํฐ๋ฒ ์ด์ค์์
read
์ญํ ์ ๊ฐ์ง ์ฌ์ฉ์
myTester
๋ฅผ
test
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ถ๊ฐํฉ๋๋ค.
use test db.createUser( { user: "myTester", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "readWrite", db: "test" }, { role: "read", db: "reporting" } ] } )
ํ
passwordPrompt()
๋ฉ์๋๋ ์ํธ๋ฅผ ์
๋ ฅํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ํธ๋ฅผ ๋ฌธ์์ด๋ก ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค. ์ํธ๊ฐ ํ๋ฉด์ ํ์๋์ด ์
ธ ๊ธฐ๋ก์ ์ํธ๊ฐ ์ ์ถ๋ ๊ฐ๋ฅ์ฑ์ ๋ฐฉ์งํ๋ ค๋ฉด passwordPrompt()
๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ฌ์ฉ์๋ฅผ ์์ฑํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค(์ด ์์์์๋ test
)๋ ํด๋น ์ฌ์ฉ์์ ์ธ์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
๋๋ค. ์ฌ์ฉ์๋ ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํด ์ธ์ฆํ๋๋ผ๋ ๋ค๋ฅธ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ญํ ์ ๊ฐ์ง ์ ์์ต๋๋ค. ์ฌ์ฉ์์ ์ธ์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์ฌ์ฉ์์ ๊ถํ์ ์ ํํ์ง ์์ต๋๋ค.
์ถ๊ฐ ์ฌ์ฉ์๋ฅผ ์์ฑํ ํ mongosh
๋ฅผ ์ข
๋ฃํฉ๋๋ค.
์ธ์คํด์ค์ ์ฐ๊ฒฐํ๊ณ myTester
(์ผ)๋ก ์ธ์ฆ
์ค์
mongosh
๋ฅผ myUserAdmin
์ผ๋ก ์ข
๋ฃํ ํ myTester
๋ก ๋ค์ ์ฐ๊ฒฐํฉ๋๋ค.
-u
<username>
, -p
๋ฐ --authenticationDatabase <database>
๋ช
๋ น์ค ์ต์
์ผ๋ก mongosh
(์)๋ฅผ ์์ํฉ๋๋ค.
mongosh --port 27017 -u "myTester" \ --authenticationDatabase "test" -p
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
mongosh
(์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐํฌ์ ์ฐ๊ฒฐํฉ๋๋ค.
mongosh --port 27017
mongosh
์์ ์ธ์ฆ ๋ฐ์ดํฐ๋ฒ ์ด์ค (์ด ๊ฒฝ์ฐ admin
)๋ก ์ ํํ๊ณ db.auth(<username>, <pwd>)
๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ธ์ฆํฉ๋๋ค.
use test db.auth("myTester", passwordPrompt()) // or cleartext password
ํ
passwordPrompt()
๋ฉ์๋๋ ์ํธ๋ฅผ ์
๋ ฅํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ํธ๋ฅผ ๋ฌธ์์ด๋ก ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค. ์ํธ๊ฐ ํ๋ฉด์ ํ์๋์ด ์
ธ ๊ธฐ๋ก์ ์ํธ๊ฐ ์ ์ถ๋ ๊ฐ๋ฅ์ฑ์ ๋ฐฉ์งํ๋ ค๋ฉด passwordPrompt()
๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ฉ์์ง๊ฐ ํ์๋๋ฉด ์ฌ์ฉ์์ ๋น๋ฐ๋ฒํธ๋ฅผ ์ ๋ ฅํฉ๋๋ค.
๋ฌธ์๋ฅผ myTester
(์ผ)๋ก ์ฝ์
์ฌ์ฉ์ myTester
๋ test
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ๊ธฐ ๋ฐ ์ฐ๊ธฐ ์์
์ ์ํํ ์ ์๋ ๊ถํ์ด ์์ต๋๋ค(reporting
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ์ฝ๊ธฐ ์์
๋ ์ํ ๊ฐ๋ฅ). myTester
์ผ๋ก ์ธ์ฆ๋๋ฉด test
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ปฌ๋ ์
์ ๋ฌธ์๋ฅผ ์ฝ์
ํฉ๋๋ค. ์๋ฅผ ๋ค์ด test
๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ค์๊ณผ ๊ฐ์ ์ฝ์
์์
์ ์ํํ ์ ์์ต๋๋ค.
db.foo.insertOne( { x: 1, y: 1 } )
๋ค์๋ ์ฐธ์กฐํ์ธ์.
์ถ๊ฐ ์์
์ฌ์ฉ์ ์ด๋ฆ/๋น๋ฐ๋ฒํธ ์ธ์ฆ
๋ค์ ์์
์ ์ง์ ๋ ์ด๋ฆ, ๋น๋ฐ๋ฒํธ ๋ฐ ์ญํ ์ ์ฌ์ฉํ์ฌ reporting
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฌ์ฉ์๋ฅผ ์์ฑํฉ๋๋ค.
ํ
passwordPrompt()
๋ฉ์๋๋ ์ํธ๋ฅผ ์
๋ ฅํ๋ผ๋ ๋ฉ์์ง๋ฅผ ํ์ํฉ๋๋ค. ์ํธ๋ฅผ ๋ฌธ์์ด๋ก ์ง์ ์ง์ ํ ์๋ ์์ต๋๋ค. ์ํธ๊ฐ ํ๋ฉด์ ํ์๋์ด ์
ธ ๊ธฐ๋ก์ ์ํธ๊ฐ ์ ์ถ๋ ๊ฐ๋ฅ์ฑ์ ๋ฐฉ์งํ๋ ค๋ฉด passwordPrompt()
๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
use reporting db.createUser( { user: "reportsUser", pwd: passwordPrompt(), // or cleartext password roles: [ { role: "read", db: "reporting" }, { role: "read", db: "products" }, { role: "read", db: "sales" }, { role: "readWrite", db: "accounts" } ] } )
Kerberos ์ธ์ฆ
Kerberos์ ๊ฐ์ ์ธ๋ถ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ MongoDB์ ์ธ์ฆํ๋ ์ฌ์ฉ์๋ mongos
๋๋
mongod
๋ฅผ ํ์ฉํด ์ธ์ฆ์ ์ํ ์ธ๋ถ ์์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ $external
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑ๋์ด์ผ ํฉ๋๋ค.
์ธ์ฆ ์ฌ์ฉ์(Kerberos, LDAP ๋๋ X.์ฌ์ฉ์)์ ํจ๊ป ํด๋ผ์ด์ธํธ ์ธ์
๋ฐ ์ธ๊ณผ์ ์ผ๊ด์ฑ ๋ณด์ฅ์ $external
509 ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ์ ์ด๋ฆ์ด 10k ๋ฐ์ดํธ๋ฅผ ์ด๊ณผํ ์ ์์ต๋๋ค.
Kerberos ์ธ์ฆ์ ๊ฒฝ์ฐ Kerberos ์ฃผ์ฒด๋ฅผ ์ฌ์ฉ์ ์ด๋ฆ์ผ๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ํ ํ์๋ ์์ต๋๋ค.
๋ค์ ์์
์ records
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค ๊ถํ์ ๊ฐ์ง Kerberos ์ฃผ์ฒด reportingapp@EXAMPLE.NET
์ ์ถ๊ฐํฉ๋๋ค.
use $external db.createUser( { user: "reportingapp@EXAMPLE.NET", roles: [ { role: "read", db: "records" } ] } )
๋ค์๋ ์ฐธ์กฐํ์ธ์.
MongoDB deployment์ ๋ํ Kerberos ์ธ์ฆ ์ค์ ์ ๊ดํ ์์ธํ ๋ด์ฉ์ ๋ค์ ํํ ๋ฆฌ์ผ์์ ํ์ธํ์ธ์.
LDAP ์ธ์ฆ
์ฐธ๊ณ
MongoDB 8.0 ๋ถํฐ ์์๋ฉ๋๋ค. LDAP ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ ๋ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. LDAP ๋ ์ฌ์ฉํ ์ ์์ผ๋ฉฐ MongoDB 8 ์ ์๋ช ๊ธฐ๊ฐ ๋์ ๋ณ๊ฒฝ ์์ด ๊ณ์ ์๋ํฉ๋๋ค. LDAP ๋ ํฅํ ์ฃผ์ ์ถ์ํ๋ค ์์ ์ ๊ฑฐ๋ ์์ ์ ๋๋ค.
์์ธํ ๋ด์ฉ์ LDAP ์ฌ์ฉ ์ค๋จ์ ์ฐธ์กฐํ์ธ์.
LDAP์ ๊ฐ์ ์ธ๋ถ ์ธ์ฆ ๋ฉ์ปค๋์ฆ์ ์ฌ์ฉํ์ฌ MongoDB์ ์ธ์ฆํ๋ ์ฌ์ฉ์๋ mongos
๋๋
mongod
๋ฅผ ํ์ฉํด ์ธ์ฆ์ ์ํ ์ธ๋ถ ์์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ $external
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์์ฑ๋์ด์ผ ํฉ๋๋ค.
์ธ์ฆ ์ฌ์ฉ์(Kerberos, LDAP ๋๋ X.์ฌ์ฉ์)์ ํจ๊ป ํด๋ผ์ด์ธํธ ์ธ์
๋ฐ ์ธ๊ณผ์ ์ผ๊ด์ฑ ๋ณด์ฅ์ $external
509 ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ์ ์ด๋ฆ์ด 10k ๋ฐ์ดํธ๋ฅผ ์ด๊ณผํ ์ ์์ต๋๋ค.
LDAP ์ธ์ฆ์ ๊ฒฝ์ฐ ์ฌ์ฉ์ ์ด๋ฆ์ ์ง์ ํด์ผ ํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ LDAP ์๋น์ค์์ ์ฒ๋ฆฌํ๋ฏ๋ก ์ง์ ํ ํ์๊ฐ ์์ต๋๋ค.
๋ค์ ์์
์ records
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค ๊ถํ์ด ์๋ reporting
์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
use $external db.createUser( { user: "reporting", roles: [ { role: "read", db: "records" } ] } )
๋ค์๋ ์ฐธ์กฐํ์ธ์.
MongoDB deployment์ ๋ํ LDAP ์ธ์ฆ ์ค์ ์ ๊ดํ ์์ธํ ๋ด์ฉ์ ๋ค์ ํํ ๋ฆฌ์ผ์์ ํ์ธํ์ธ์.
X.509 ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ธ์ฆ
X. ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ธ์ฆ๊ณผ ๊ฐ์ ์ธ๋ถ ์ธ์ฆ ๋ฉ์ปค๋์ฆ ์ฌ์ฉํ์ฌ MongoDB ์ ์ธ์ฆํ๋ ์ฌ์ฉ์๋509 $external
๋๋ mongos
์ด mongod
์ธ์ฆ ์ํด ์ธ๋ถ ์์ค๋ฅผ ์ฐธ์กฐํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ ์์ฑ๋์ด์ผ ํฉ๋๋ค.
์ธ์ฆ ์ฌ์ฉ์(Kerberos, LDAP ๋๋ X.์ฌ์ฉ์)์ ํจ๊ป ํด๋ผ์ด์ธํธ ์ธ์
๋ฐ ์ธ๊ณผ์ ์ผ๊ด์ฑ ๋ณด์ฅ์ $external
509 ์ฌ์ฉํ๋ ค๋ฉด ์ฌ์ฉ์ ์ด๋ฆ์ด 10k ๋ฐ์ดํธ๋ฅผ ์ด๊ณผํ ์ ์์ต๋๋ค.
X.509 ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ธ์ฆ ์ ๊ฒฝ์ฐ ํด๋ผ์ด์ธํธ ์ธ์ฆ์์ subject
๊ฐ์ MongoDB ์ฌ์ฉ์๋ก ์ถ๊ฐํด์ผ ํฉ๋๋ค. ๊ฐ ๊ณ ์ X.509 ํด๋ผ์ด์ธํธ ์ธ์ฆ์๋ ๋จ์ผ MongoDB ์ฌ์ฉ์์ ํด๋นํฉ๋๋ค. ๋น๋ฐ๋ฒํธ๋ฅผ ์ง์ ํ ํ์๋ ์์ต๋๋ค.
๋ค์ ์์
์ records
๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ํ ์ฝ๊ธฐ ์ ์ฉ ์ก์ธ์ค ๊ถํ์ด ์๋ ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ฃผ์ฒด CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry
์ฌ์ฉ์๋ฅผ ์ถ๊ฐํฉ๋๋ค.
use $external db.createUser( { user: "CN=myName,OU=myOrgUnit,O=myOrg,L=myLocality,ST=myState,C=myCountry", roles: [ { role: "read", db: "records" } ] } )
๋ค์๋ ์ฐธ์กฐํ์ธ์.
MongoDB deployment ์ํ X.509 ํด๋ผ์ด์ธํธ ์ธ์ฆ์ ์ธ์ฆ ์ค์ ์ ๋ํ ์์ธํ ๋ด์ฉ์ ๋ค์ ํํ ๋ฆฌ์ผ์ ์ฐธ์กฐํ์ธ์.
๋ค์ ๋จ๊ณ
์์ฒด ๊ด๋ฆฌํ MongoDB Enterprise ๋๋ MongoDB Community ๋ฐฐํฌ์๋ฒ ์ ๋ํ ์ฌ์ฉ์๋ฅผ ๊ด๋ฆฌ ํ๊ณ , ์ญํ ์ ํ ๋นํ๊ณ , ์ฌ์ฉ์ ์ง์ ์ญํ ์ ๋ง๋ค๋ ค๋ฉด ์์ฒด ๊ด๋ฆฌ ๋ฐฐํฌ์๋ฒ์์ ์ฌ์ฉ์ ๋ฐ ์ญํ ๊ด๋ฆฌ๋ฅผ ์ฐธ์กฐํ์ธ์.