환경: springboot2.7.6, java 17, springcloud 2021.0.8
이전글:
2024.01.29 - [개발/spring] - [cloud] 파일을 동적으로 관리하는 config server
2024.01.29 - [개발/spring] - [cloud] spring cloud bus
spring cloud config service에서 파일로 관리되는 설정파일을 공용으로 쓰도록 설정되어 있고(native방식)
해당 설정파일에는 디비 연결 정보가 들어있어 password와 같은 민감정보가 있다.
파일로 관리되기 때문에 파일이 노출되면 민감정보가 바로 드러나게 되는데, 이를 암호화해서 관리해보자.
비대칭키 사용
1. config 서버에 암복호화 추가
config server에 bootstrap.yml을 만들고 암호화에 사용할 대칭키를 입력한다.
encrypt:
key: abcdefghijklmnopqrstuvwxyz0123456789
암호화 확인
복호화 확인
2. 공용으로 관리하는 설정 파일(bootstrap.yml에 명시된 name)에 아래와 같이 내용 추가
password는 plain으로 sa인데 위의 암호화 api로 암호화 한 값을 넣었
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:test
username: sa
password: '{cipher}07407f328f8c2ba016949743f42e0a9da120328d9e0f44f38bad351b9c2b7419'
참고로 설정 서버에 직접 파일을 확인하면 아래와 같이 복호화된 값이 나온다. 이 값이 cloud bus 로 연결된 사용처들에게 전달되는 값이다.
참고로 프로퍼티에 암호화된 값이 잘못되었을 경우 위의 password 부분에 n/a라고 표시된다.
대칭키 사용
RSA 키쌍 생성
keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR" -keypass "1q2w3e4r" -keystore apiEncryptionKey.jks -storepass "1q2w3e4r"
keytool -genkeypair -alias apiEncryptionKey -keyalg RSA -dname "CN=Kenneth Lee, OU=API Development, O=joneconsulting.co.kr, L=Seoul, C=KR" -keypass "1q2w3e4r" -keystore apiEncryptionKey.jks -storepass "1q2w3e4r"
private key 확인
keytool -list -keystore apiEncryptionKey.jks -v
인증서 가져오기
keytool -export -alias apiEncryptionKey -keystore apiEncryptionKey.jks -rfc -file trustServer.cer
공개키 가져오기
keytool -import -alias trustServer -file trustServer.cer -keystore publicKey.jks
확인
테스트: 위와 동일한 방법
위와 동일하게 파일에는 암호화 값이 있고 사용시에는 자동으로 복호화 해준다.
'개발 > spring-cloud' 카테고리의 다른 글
[spring-cloud] micrometer, prometheus (0) | 2024.02.08 |
---|---|
[spring-cloud] zipkin 분산 환경 모니터링 (0) | 2024.02.08 |
[resilience4j] circuit breaker (0) | 2024.02.08 |
[cloud] spring cloud bus (0) | 2024.01.29 |
[cloud] 파일을 동적으로 관리하는 config server (0) | 2024.01.29 |