JBoss EAP 7.x ํ๊ฒฝ์์ ํ๋ฌธ์ผ๋ก ์ ์ฅ๋๋ ๋ฐ์ดํฐ์์ค ๋น๋ฐ๋ฒํธ๋ฅผ ๋ณดํธํ๊ธฐ ์ํด Password Vault๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. Windows์ Linux ํ๊ฒฝ, ๊ทธ๋ฆฌ๊ณ Standalone๊ณผ Domain ๋ชจ๋ ๊ฐ๊ฐ์ ๋ํ ์ค์ ๋ฒ์ ํฌ๊ดํ๋ฉฐ, KeyStore ์์ฑ๋ถํฐ
VAULT๋ฌธ์์ด ์ ์ฉ๊น์ง์ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ๋ค๋ฃน๋๋ค.
1. ํ๋ก์ธ์ค ๊ฐ์ (Process Overview)
Vault ๊ตฌ์ฑ์ ํฌ๊ฒ 4๋จ๊ณ๋ก ์งํ๋ฉ๋๋ค.
- KeyStore ์์ฑ: ์ํธํ ํค๋ฅผ ์ ์ฅํ ๋ฌผ๋ฆฌ์ ํ์ผ(.keystore) ์์ฑ
- Vault ์ด๊ธฐํ ๋ฐ ์ํธํ: ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํํ๊ณ JBoss ์ค์ ์ ํ์ํ ํ๋ผ๋ฏธํฐ ์์ฑ
- JBoss Vault ์ค์ : ์์ฑ๋ KeyStore์ JBoss๋ฅผ ์ฐ๋ (
standalone.xml๋๋host.xml) - ๋ฐ์ดํฐ์์ค ์ ์ฉ: ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ ์ํธํ๋ ๋ฌธ์์ด(
${VAULT::...})๋ก ๊ต์ฒด
2. KeyStore ์์ฑ (Generate KeyStore)
Java์ keytool์ ์ฌ์ฉํ์ฌ JCEKS ํ์์ ํค์คํ ์ด๋ฅผ ์์ฑํฉ๋๋ค.
Windows ํ๊ฒฝ
keytool.exe -genseckey ^
-alias "vault" ^
-storetype "jceks" ^
-keyalg "AES" ^
-keysize "128" ^
-storepass "passw0rd" ^
-keypass "passw0rd" ^
-validity "7300" ^
-keystore "D:\app\was\JBoss\vault\vault.keystore"
Linux ํ๊ฒฝ
./keytool -genseckey \
-alias "vault" \
-storetype "jceks" \
-keyalg "AES" \
-keysize "128" \
-storepass "passw0rd" \
-keypass "passw0rd" \
-validity "7300" \
-keystore "/app/was/JBoss/vault/vault.keystore"
3. ๋น๋ฐ๋ฒํธ ์ํธํ ์คํ (Vault Tool)
JBoss `bin` ๋๋ ํ ๋ฆฌ์ ์๋ vault ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ค์ DB ํจ์ค์๋๋ฅผ ์ํธํํฉ๋๋ค.
Windows (vault.bat)
vault.bat --keystore "D:\app\was\JBoss\vault\vault.keystore" ^
--keystore-password "passw0rd" ^
--alias "vault" ^
--vault-block "vb" ^
--attribute "dbpw" ^
--sec-attr "RealDBPassword!" ^
--enc-dir "D:\app\was\JBoss\vault" ^
--iteration "44" ^
--salt "JBo72ssv"
Linux (vault.sh)
./vault.sh --keystore "/app/was/JBoss/vault/vault.keystore" \
--keystore-password "passw0rd" \
--alias "vault" \
--vault-block "vb" \
--attribute "dbpw" \
--sec-attr "RealDBPassword!" \
--enc-dir "/app/was/JBoss/vault" \
--iteration "44" \
--salt "JBo72ssv"
๋ช ๋ น์ด ์คํ ๊ฒฐ๊ณผ์์ ์๋ ๋ ๊ฐ์ง ๊ฐ์ ๋ฐ๋์ ๊ธฐ๋กํด ๋์ด์ผ ํฉ๋๋ค.
1. Vault Configuration:
KEYSTORE_PASSWORD ๊ฐ (์: MASK-1234abcd...)2. Vault Block: ์ค์ ์ฌ์ฉ๋ ์ํธํ ๋ฌธ์์ด (์:
${VAULT::vb::dbpw::1})
4. JBoss Vault ๊ตฌ์ฑ ๋ฑ๋ก (Configuration)
JBoss๊ฐ ์์์ ๋ง๋ KeyStore๋ฅผ ์ธ์ํ ์ ์๋๋ก ์ค์ ํฉ๋๋ค. XML์ ์ง์ ์์ ํ๊ฑฐ๋ CLI๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Standalone Mode (standalone.xml)
<vault> ์น์
์ ์ถ๊ฐํฉ๋๋ค. (์ผ๋ฐ์ ์ผ๋ก <extensions> ๋ค์ชฝ)
<vault>
<vault-option name="KEYSTORE_URL" value="D:\app\was\JBoss\vault\vault.keystore"/>
<vault-option name="KEYSTORE_PASSWORD" value="MASK-xxxx"/> <!-- Vault ์คํ ๊ฒฐ๊ณผ๊ฐ -->
<vault-option name="KEYSTORE_ALIAS" value="vault"/>
<vault-option name="SALT" value="JBo72ssv"/>
<vault-option name="ITERATION_COUNT" value="44"/>
<vault-option name="ENC_FILE_DIR" value="D:\app\was\JBoss\vault\"/>
</vault>
Domain Mode (host.xml ๊ถ์ฅ)
๋๋ฉ์ธ ๋ชจ๋์์๋ ๋ฌผ๋ฆฌ์ ํ์ผ ๊ฒฝ๋ก(KeyStore ์์น)๊ฐ ์๋ฒ๋ง๋ค ๋ค๋ฅผ ์ ์์ผ๋ฏ๋ก, ๊ฐ ์๋ฒ์ host.xml์ ์ค์ ์ ์ถ๊ฐํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์
๋๋ค.
<!-- host.xml์ <management> ๋๋ <vault> ์์ญ -->
<vault>
<vault-option name="KEYSTORE_URL" value="/app/was/JBoss/vault/vault.keystore"/>
<vault-option name="KEYSTORE_PASSWORD" value="MASK-xxxx"/>
<vault-option name="KEYSTORE_ALIAS" value="vault"/>
<vault-option name="SALT" value="JBo72ssv"/>
<vault-option name="ITERATION_COUNT" value="44"/>
<vault-option name="ENC_FILE_DIR" value="/app/was/JBoss/vault/"/>
</vault>
5. ๋ฐ์ดํฐ์์ค ๋น๋ฐ๋ฒํธ ์ ์ฉ
๋ง์ง๋ง์ผ๋ก ๋ฐ์ดํฐ์์ค ์ค์ ํ์ผ(standalone.xml ๋๋ domain.xml)์์ ํ๋ฌธ ๋น๋ฐ๋ฒํธ๋ฅผ Vault ๋ฌธ์์ด๋ก ๊ต์ฒดํฉ๋๋ค.
<datasource jndi-name="java:jboss/datasources/ExampleDS" ...>
...
<security>
<user-name>dbuser</user-name>
<!-- ์ํธํ๋ ๋ฌธ์์ด ์ ์ฉ -->
<password>${VAULT::vb::dbpw::1}</password>
</security>
</datasource>
Next Step:
์ค์ ์ด ์๋ฃ๋์๋ค๋ฉด JBoss๋ฅผ ์ฌ๊ธฐ๋ํ๊ณ ๊ด๋ฆฌ ์ฝ์์์ Test Connection์ ์ํํ์ฌ DB ์ฐ๊ฒฐ์ด ์ ์์ ์ผ๋ก ์ด๋ฃจ์ด์ง๋์ง ํ์ธํ์ญ์์ค.