지난 글에서는 Git Repository를 Private으로 설정하여 Spring Cloud Config Server의 환경 설정 파일을 보호하는 방법을 다뤘습니다. 하지만, 이 방식만으로는 환경 설정 파일의 중요한 정보(예: 데이터베이스 비밀번호, API 키 등)가 유출될 가능성을 완전히 차단하기 어렵습니다.
이를 보완하기 위해 암호화 기법을 사용하는 것이 효과적입니다.
본 글에서는 비대칭키 암호화를 선택하여 Spring Cloud Config Server에 적용하는 방법을 소개합니다. 개인키만 안전하게 보호하면 복호화를 제어할 수 있으므로, 보안적인 이점이 큽니다.
키를 저장할 디렉토리를 생성합니다. 예를 들어, keystore
디렉토리를 생성합니다.
mkdir keystore
키 페어(공개키와 개인키)를 생성합니다. 아래 명령어를 사용하세요.
keytool -genkeypair -alias ficketEncryptionKey -keyalg RSA -dname "CN=Hyeongsang Oh, OU=API Development, O=ficket.shop, L=Seoul, C=KR" -keypass "test1234" -keystore ficketEncryption.jks -storepass "test1234"
-alias
: 키를 식별할 별칭-keyalg
: 사용할 알고리즘 (RSA)-dname
: 소유자 정보 (CN, OU, O, L, C)-keypass
: 키 비밀번호-keystore
: 생성될 JKS 파일 이름-storepass
: 키스토어 비밀번호명령 실행 후, ficketEncryption.jks
파일이 생성됩니다.
Spring Cloud Config Server에서 암호화를 사용하려면 spring-cloud-starter-bootstrap
을 추가해야 합니다.
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
bootstrap.yml
설정해당 키를 Spring Cloud Config Server의 resources에 옮기고 gitignore 처리해줍니다.
그리고 bootstrap.yml
파일에 개인키 정보를 등록합니다.
encrypt:
key-store:
location: classpath:/ficketEncryption.jks
password: test1234
alias: ficketEncryptionKey
location
: 키스토어 파일 경로password
: 키스토어 비밀번호alias
: 키 별칭Spring Cloud Config Server가 실행 중인 상태에서 Postman을 사용해 테스트합니다.
암호화 요청
http://localhost:8888/encrypt
응답으로 암호화된 문자열이 반환됩니다.
복호화 요청
http://localhost:8888/decrypt
응답으로 원본 문자열(test
)이 반환됩니다.
암호화된 값은 {cipher}
접두사를 붙여 yml 파일에 사용해야 합니다.
spring:
datasource:
url: jdbc:mysql://localhost:3306/ficket-user
username: root
password: "{cipher}AQCdtuMDbN+i8QoXEv22sRaePsWFrJRua8f" # 암호화된 값이 너무 길어 일부만 넣었습니다.
driver-class-name: com.mysql.cj.jdbc.Driver
Spring Cloud Config Server는 {cipher}
로 시작하는 값을 자동으로 복호화하여 애플리케이션에 전달합니다.
Reference
- https://otrodevym.tistory.com/entry/spring-boot-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-15-spring-cloud-config-%EC%95%94%ED%98%B8%ED%99%94-%EC%84%A4%EC%A0%95-%EB%B0%8F-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%86%8C%EC%8A%A4
- https://velog.io/@choidongkuen/Spring-Cloud-Spring-Cloud-Config-%EB%B3%B4%EC%95%88-%EA%B0%95%ED%99%94%ED%95%98%EA%B8%B0
- https://velog.io/@jiwon615/Spring-Cloud-Config-%EC%84%A4%EC%A0%95-%ED%8C%8C%EC%9D%BC%EC%9D%98-%EC%95%94%ED%98%B8%ED%99%94-%EC%B2%98%EB%A6%AC-%EB%B9%84%EB%8C%80%EC%B9%AD%ED%82%A4%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%95%94%EB%B3%B5%ED%98%B8%ED%99%94