Jasypt YML 암호화
민감 정보(DB 비밀번호, API 키 등)를 application.yml에 평문으로 저장하지 않고 Jasypt로 암호화하여 관리한다.
의존성 추가
implementation 'com.github.ulisesbocchio:jasypt-spring-boot-starter:3.0.5'
적용 방식
YML 내 민감 값을 ENC(암호화된값) 형식으로 기입한다.
spring:
datasource:
url: jdbc:oracle:thin:@{host}:1521:{sid}
username: ${DB_USERNAME}
password: ENC(xxxxxxxxxxxxxxxxxxxxxxxx)
jwt:
secret: ENC(yyyyyyyyyyyyyyyyyyyyyyyy)
Spring Boot 기동 시 Jasypt가 ENC(...) 값을 자동으로 복호화한다.
Config 클래스
@Configuration
@EnableEncryptableProperties
public class JasyptConfig {
@Bean("jasyptStringEncryptor")
public StringEncryptor stringEncryptor(
@Value("${jasypt.encryptor.password}") String password) {
PooledPBEStringEncryptor encryptor = new PooledPBEStringEncryptor();
SimpleStringPBEConfig config = new SimpleStringPBEConfig();
config.setPassword(password);
config.setAlgorithm("PBEWithMD5AndDES");
config.setKeyObtentionIterations("1000");
config.setPoolSize("1");
config.setProviderName("SunJCE");
config.setSaltGeneratorClassName("org.jasypt.salt.RandomSaltGenerator");
config.setStringOutputType("base64");
encryptor.setConfig(config);
return encryptor;
}
}
값 암호화 (CLI)
# jasypt-cli 사용 예시
java -cp jasypt-1.9.3.jar \
org.jasypt.intf.cli.JasyptPBEStringEncryptionCLI \
input="평문비밀번호" \
password="복호화키" \
algorithm="PBEWithMD5AndDES"
OUTPUT 값을 ENC(...) 안에 기입한다.
Jenkins 배포 시 키 주입
복호화 키는 코드나 YML에 포함하지 않고 Jenkins가 JVM 인수로 주입한다.
# Jenkins Pipeline ExecStart 예시
java -Djasypt.encryptor.password=${JASYPT_KEY} -jar {서비스명}.jar
JASYPT_KEY는 Jenkins Credentials에 등록하여 파이프라인에서 주입한다.
로컬 개발 환경
로컬에서는 application-local.yml에 평문 값을 사용하거나, 환경변수로 주입한다.
# application-local.yml
jasypt:
encryptor:
password: local-dev-key
또는 IntelliJ Run Configuration에 VM 옵션으로 추가:
-Djasypt.encryptor.password=local-dev-key
application-local.yml은 git 커밋에서 제외한다. (.gitignore필수)
체크리스트
- [ ]
jasypt-spring-boot-starter의존성 추가 - [ ]
JasyptConfigBean 등록 - [ ] 민감 값 암호화 후
ENC(...)형식으로 YML 기입 - [ ] Jenkins Credentials에 복호화 키 등록
- [ ]
application-local.yml.gitignore처리 - [ ] 로컬 실행 시
-Djasypt.encryptor.passwordJVM 옵션 확인