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"
중요 (Result Check):
명령어 실행 결과에서 아래 두 가지 값을 반드시 기록해 두어야 합니다.
1. Vault Configuration:
2. Vault Block: 실제 사용될 암호화 문자열 (예:
명령어 실행 결과에서 아래 두 가지 값을 반드시 기록해 두어야 합니다.
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 연결이 정상적으로 이루어지는지 확인하십시오.