๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์ด๋ž€?

๋ณผํŠธ๋Š” ๋‹จ์ˆœํžˆ ์•”ํ˜ธํ™”๋œ KV ์Šคํ† ์–ด ์ด์™ธ์—๋„ ๋งŽ์€ ์‹œํฌ๋ฆฟ ์—”์ง„์„ ์ œ๊ณตํ•œ๋‹ค. ๊ทธ์ค‘์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์ด๋ผ๋Š” ๊ฒƒ์ด ์žˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ธฐ์—…์—์„œ ์•„์ฃผ ์ค‘์š”ํ•œ ์œ„์น˜๋ฅผ ์ฐจ์ง€ํ•œ๋‹ค. ๋‹ค์Œ์˜ ๊ฒฝ์šฐ๋ฅผ ํ•œ๋ฒˆ ์ƒ๊ฐํ•ด ๋ณด๋„๋ก ํ•˜์ž. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ์ด ๋งŒ์•ฝ ํ‡ด์‚ฌ๋ฅผ ํ•œ๋‹ค๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ? ๋ณดํ†ต์˜ ๊ฒฝ์šฐ์—๋Š” ๋ฒˆ๊ฑฐ๋กญ๊ฒŒ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๊ต์ฒดํ•˜๊ณ , ๋™์ž‘ํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ค์ •์„ ๋ฐ”๊ฟ”์•ผ ํ•  ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฐ”๊พธ์ง€ ์•Š๋Š”๋‹ค๋ฉด ์–ด๋–ค ๋ณด์•ˆ ์ด์Šˆ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฒŒ ๋ ์ง€ ๋ชจ๋ฅด๋‹ˆ ๋ฐ”๊พธ์ง€ ์•Š์„์ˆ˜๋Š” ์—†์„ ๊ฒƒ์ด๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์€ ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ์— ๋Œ€ํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•œ๋‹ค. root๋˜๋Š” ๊ทธ์— ์ค€ํ•˜๋Š”(user๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š”) ๊ถŒํ•œ๊ณผ ์œ ์ € ์ƒ์„ฑ ๊ทœ์น™์„ ๊ฐ€์ง€๊ณ  ๋ณผํŠธ์— ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์„ ๊ตฌ์„ฑํ•˜๋ฉด ์ •ํ•ด์ง„ ๊ทœ์น™์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๊ฒฉ ์ฆ๋ช…์ด ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„๋‹ค.

๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•˜๊ณ  ์ฆ๋ช…์— TTL์„ ์คฌ๋‹ค๋ฉด ์ •ํ•ด์ง„ ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ถŒํ•œ์ด ๋ฌดํšจํ™” ๋˜๊ฒŒ ๋˜๋ฉฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ณผํŠธ์—์„œ ์ƒˆ ์ •๋ณด๋ฅผ ๋ฐ›์•„์˜ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ข€๋” ์‰ฌ์šด ํ‚ค ๊ต์ฒด๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.

์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์„ ๊ตฌ์„ฑํ•ด ๋ณด์ž.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์˜ ๊ตฌ์„ฑ

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์€ MySQL, Postgresql, MSSQL๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•˜์—ฌ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” MySQL ๊ธฐ์ค€์œผ๋กœ ๊ตฌ์„ฑํ•ด๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์˜ต์…˜์€ ๊ณต์‹ ๋…์Šค์—์„œ ํ™•์ธํ•ด ๋ณด์ž

๋จผ์ € ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์„ ํ™œ์„ฑํ™”ํ•˜์ž. ๊ธฐ๋ณธ์ ์œผ๋กœ /database ๋ผ๋Š” ๊ฒฝ๋กœ์— ํ™œ์„ฑํ™” ๋  ๊ฒƒ์ด๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ๋งŒ๋“ค๊ณ  ์‹ถ๋‹ค๋ฉด -path ์ธ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด ์ง€์ •ํ•˜๋„๋ก ํ•˜์ž.

$ vault secrets enable database

์—”์ง„์ด ํ™œ์„ฑํ™”๋˜์—ˆ๋‹ค๋ฉด ๋ณผํŠธ์™€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ๊ฐ™์€ ๊ณณ์— ์žˆ๋‹ค๋Š” ๊ฐ€์ • ํ•˜์— ํ˜ธ์ŠคํŠธ๋ฅผ 127.0.0.1 ๋กœ ์ง€์ •ํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„ ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์ž

$ vault write database/config/service-db \
    plugin_name=mysql-database-plugin \
    connection_url="{{username}}:{{password}}@tcp(127.0.0.1:3306)/" \
    allowed_roles="service-team" \
    username="root" \
    password="p@ssword"

plugin_name์— ๋”ฐ๋ผ์„œ InfluxDB, MySQL, MongoDB๋“ฑ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.
allowed_roles์— ์ ‘๊ทผ ๊ถŒํ•œ์„ ์ฃผ๊ณ ์ž ํ•˜๋Š” ์ž๊ฒฉ ์ฆ๋ช…์˜ ์ด๋ฆ„์„ ์ ์ž.
username๊ณผ password๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ ๊ถŒํ•œ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด๋ฉฐ ํ•˜๋ฏ€๋กœ root ๋˜๋Š” ๊ทธ์— ์ค€ํ•˜๋Š” ๊ณ„์ •์„ ์‚ฌ์šฉํ•˜์ž.

$ vault write database/roles/service-team \
    db_name=service-db \
    creation_statements="CREATE USER '{{name}}'@'%' IDENTIFIED BY '{{password}}';GRANT SELECT ON <์ ‘๊ทผ ๊ถŒํ•œ์„ ์ฃผ๊ณ ์ž ํ•˜๋Š” DB ์ด๋ฆ„>.* TO '{{name}}'@'%';" \
    default_ttl="1h" \
    max_ttl="24h"

์—”์ง„ ์„ค์ •์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด ์•ž์„œ llowed_roles ์— ๋ช…์‹œํ–ˆ๋˜ ์ด๋ฆ„์œผ๋กœ ๋ณผํŠธ๊ฐ€ ๋™์ ์œผ๋กœ ์œ ์ €๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž๊ฒฉ ์ฆ๋ช… ์„ค์ •์„ ๊ตฌ์„ฑํ•˜์ž.

db_name ์—๋Š” ์ด์ „์— ์ •ํ–ˆ๋˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„ ์„ค์ •์— ์‚ฌ์šฉํ–ˆ๋˜ ์ด๋ฆ„(sevice-db)์„ ์‚ฌ์šฉํ•˜์ž.
creation_statements์—๋Š” ์œ ์ €๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์ฟผ๋ฆฌ๋ฌธ์„ ์ž‘์„ฑํ•˜์ž. ( * ์„ ์“ฐ๋ฉด ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผ ๊ฐ€๋Šฅ) ๋ณผํŠธ๊ฐ€ ํ•ด๋‹น ์ฟผ๋ฆฌ๋Œ€๋กœ ์œ ์ €๋ฅผ ๋งŒ๋“ค์–ด ์ค„ ๊ฒƒ์ด๋‹ค.
default_ttl๊ณผ max_ttl์€ ์ด ๊ตฌ์„ฑ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž๊ฒฉ ์ฆ๋ช…์ด ์œ ํšจํ•œ ๊ธฐ๊ฐ„์„ ์ง€์ •ํ•œ๋‹ค. ๋ฐœ๊ธ‰ ํ›„ ์ง€์ •ํ•œ ์‹œ๊ฐ„์ด ์ง€๋‚œ ํ›„์—๋Š” ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ฒŒ ๋œ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‹œํฌ๋ฆฟ ์—”์ง„์˜ ์‚ฌ์šฉ

์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—”์ง„๊ณผ ์ž๊ฒฉ ์ฆ๋ช…์˜ ์„ค์ •์„ ๋ชจ๋‘ ๊ตฌ์„ฑํ–ˆ์œผ๋‹ˆ ์ด์ œ ์ž๊ฒฉ ์ฆ๋ช…์„ ๋™์ ์œผ๋กœ ๋ฐœ๊ธ‰๋ฐ›์•„ ๋ณด์ž.

read ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ database/creds/<์ž๊ฒฉ ์ฆ๋ช… ์ด๋ฆ„> ์œผ๋กœ ์ ‘๊ทผํ•˜์—ฌ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

$ vault read database/creds/service-team
Key      Value                           
password A1a-HofJEZNtQREFvsCA            
username v-root-service-team-PWwxGuWV0XSwdsJguwx

๋ฐœ๊ธ‰๋ฐ›์€ ์ž๊ฒฉ ์ฆ๋ช…์„ ์‚ฌ์šฉํ•ด ๋กœ๊ทธ์ธํ•˜๋ฉด ์ ‘๊ทผ ๊ถŒํ•œ์ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋งŒ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์„๊ฒƒ์ด๋‹ค.

์ด์ œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž๊ฒฉ ์ฆ๋ช…์„ ๋™์ ์œผ๋กœ ๋ฐœ๊ธ‰๋ฐ›์•„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค!