[JBoss EAP 6] 도메인 모드 보안 강화: Vault를 이용한 Datasource 패스워드 암호화 및 무중단 적용 전략
JBoss EAP 6.4 도메인 모드(Domain Mode)에서 평문으로 저장된 데이터소스 비밀번호를 보호하기 위해 Vault를 구성하는 방법을 정리합니다.
host.xml과domain.xml의 설정 분리 원칙을 이해하고, 이중화된 환경에서 서비스 중단 없이 적용하는 순차적 배포 전략을 다룹니다.
0. 배경 및 아키텍처 (Context)
보안 감사 요건 충족을 위해 DB 패스워드 암호화는 필수입니다. 도메인 모드에서는 다음과 같은 설정 분리가 필요합니다.
- host.xml: 물리적인 Keystore 파일의 위치와 암호화 키 해독 설정 (Vault 선언)
- domain.xml: 실제 암호화된 문자열을 사용하는 데이터소스 설정 (Vault 참조)
1. Vault 환경 준비 (Keystore 생성)
암호화 키를 저장할 Java Keystore를 생성합니다. JDK의 keytool을 사용합니다.
# Keystore 생성 (알고리즘: DESede 또는 AES)
keytool -genkey -alias vault -keyalg DESede -keystore vault.keystore -keysize 168 -storepass [키스토어_비밀번호] -validity 3650
vault.keystore 파일은 마스터(Master)와 슬레이브(Slave) 서버 모두 동일한 경로(예: EAP_HOME/vault/)에 복사해 두어야 합니다.
2. Vault 초기화 및 비밀번호 암호화
JBoss에서 제공하는 스크립트를 사용하여 Vault를 초기화하고, 실제 DB 패스워드를 암호화된 문자열로 변환합니다.
대화형 모드 실행 (Interactive)
$JBOSS_HOME/bin/vault.sh
위 명령 실행 후 옵션 0 (Store a secured attribute)을 선택하여 진행하거나, 아래와 같이 CLI 파라미터로 한 번에 실행할 수도 있습니다.
# CLI 파라미터 예시
$JBOSS_HOME/bin/vault.sh \
--keystore vault.keystore \
--keystore-password [키스토어_비밀번호] \
--alias vault \
--vault-block ds_vault \
--attribute db_password \
--sec-attr [실제_DB_비밀번호] \
--enc-dir /path/to/vault/ \
--iteration 120 \
--salt 1234abcd
결과 확인: 출력되는 VAULT::ds_vault::db_password::1 형태의 문자열과, 화면에 표시되는 XML 설정 블록을 복사해 둡니다.
3. host.xml 설정 (Vault 선언)
물리적인 파일 경로를 인식해야 하는 모든 호스트 컨트롤러(Master, Slave)의 host.xml 파일을 수정합니다.
<!-- host.xml의 <management> 섹션 내, 또는 <vault> 섹션 -->
<vault>
<vault-option name="KEYSTORE_URL" value="/path/to/vault/vault.keystore"/>
<vault-option name="KEYSTORE_PASSWORD" value="MASK-..."/> <!-- 마스킹된 비밀번호 -->
<vault-option name="KEYSTORE_ALIAS" value="vault"/>
<vault-option name="SALT" value="1234abcd"/>
<vault-option name="ITERATION_COUNT" value="120"/>
<vault-option name="ENC_FILE_DIR" value="/path/to/vault/" />
</vault>
4. domain.xml 설정 (Datasource 적용)
이제 도메인 컨트롤러의 domain.xml에서 데이터소스 비밀번호 부분을 위에서 생성한 Vault 문자열로 대체합니다.
<datasource ...>
<security>
<user-name>dbuser</user-name>
<password>${VAULT::ds_vault::db_password::1}</password>
</security>
</datasource>
5. 운영 환경 적용 전략 (Deployment Strategy)
이중화(HA)된 운영 환경에서 서비스 중단을 방지하기 위해, host.xml 설정과 domain.xml 설정을 분리하여 적용하는 전략이 필요합니다.
Scenario A: 무중단 순차 적용 (Rolling Update)
Host Controller(HC) 설정인 host.xml은 재기동이 필요하지만, domain.xml 변경은 리로드(Reload)로 반영될 수 있음을 이용합니다.
- Slave 서버(Server2) 작업:
- Slave HC 중지
- Slave
host.xml에 Vault 설정 추가 및vault.keystore파일 배포 - Slave HC 재기동 (이때 Server2 인스턴스들도 재기동됨)
- Master 서버(Server1) 작업:
- Master HC 중지 (도메인 컨트롤러 중지)
- Master
host.xml에 Vault 설정 추가 및vault.keystore파일 배포 - Master HC 재기동
- Datasource 변경:
- Master가 기동된 상태에서
domain.xml의 데이터소스 패스워드를${VAULT::...}로 변경 - JBoss CLI 또는 콘솔에서 Datasource Disable/Enable 수행 (또는 reload)
- Master가 기동된 상태에서
Scenario B: 전체 중단 후 적용 (Cold Restart)
가장 안전하고 확실한 방법입니다. 유지보수 시간(Maintenance Window)이 확보되었을 때 권장합니다.
- 모든 JBoss 프로세스(Master/Slave) 종료
- 모든 서버의
host.xml수정 및 키스토어 배포 - Master 서버의
domain.xml수정 - Master 기동 → Slave 기동 순서로 전체 재시작
6. 검증 (Verification)
- 서버 기동 로그(server.log)에 Vault 관련 에러(
PBOX000...)가 없는지 확인합니다. - 관리 콘솔에서 Datasource의 Test Connection을 수행하여 DB 연결이 정상적인지 확인합니다.