λ°μ΄ν„°λ² μ΄μŠ€ μ‹œν¬λ¦Ώ μ—”μ§„μ΄λž€?

λ³ΌνŠΈλŠ” λ‹¨μˆœνžˆ μ•”ν˜Έν™”λœ 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

λ°œκΈ‰λ°›μ€ 자격 증λͺ…을 μ‚¬μš©ν•΄ λ‘œκ·ΈμΈν•˜λ©΄ μ ‘κ·Ό κΆŒν•œμ΄ μžˆλŠ” λ°μ΄ν„°λ² μ΄μŠ€λ§Œ μ ‘κ·Όν•  수 μžˆμ„κ²ƒμ΄λ‹€.

이제 λ°μ΄ν„°λ² μ΄μŠ€ 자격 증λͺ…을 λ™μ μœΌλ‘œ λ°œκΈ‰λ°›μ•„ μ‚¬μš©ν•  수 μžˆλ‹€!