Config Server의 암호화
설정 정보를 평문으로 관리하는 것은 보안 문제를 일으킬 우려가 있다. Spring Cloud Config Server는 암호화된 프로퍼티 값을 제공하기 위해 대칭 키 또는 비대칭 키를 사용할 수 있다.
대칭키를 이용한 암호화
동일한 키를 암호화와 복호화에 사용하는 방식으로 처리 속도가 빠르다는 장점이 있지만 키 교환의 어려움과 키 관리의 문제가 있다.
라이브러리
implementation("org.springframework.cloud:spring-cloud-starter-bootstrap")
bootstrap.yml
encrypt:
key: abcdefghijklmnopqrstuexyz1234567890
bootstrap.yml 이란?
부트스트랩 단계에서 사용되는 설정 파일로, 애플리케이션이 구동되기 전에 사용자 정의 프로퍼티 소스를 구성하는 데 사용될 수 있다. 주로 외부 설정 서버와의 연동, 보안 설정, 암호화 키, 프로파일 등 초기화에 필요한 중요한 설정을 담는다. 부트스트랩 프로세스는 외부 설정 서버와의 통신, 프로필 활성화, 로깅 설정 등을 수행한다.
암복호화 엔드포인트
${서버도메인}/encrypt로 Text 데이터를 전송하면 암호화된 키를 응답한다. ${서버도메인}/decrypt로 복호화할 수 있다.
user-service.yml
암호화해서 데이터를 저장하면 사용될 때 config server가 복호화한다
1 spring:
2 datasource:
3 url: jdbc:h2:mem:testdb
4 username: sa
5 password: '{cipher}a2a2810d9c6549f21d4c74ff9a13d124a6f29ed65cd448b84ee4406213ca3495'
// http://localhost:8888/user-service/default
{
"name": "user-service",
"profiles": [
"default"
],
"label": null,
"version": "56b5cfea7180c29a0e58f37179909c5e8096fc0f",
"state": null,
"propertySources": [
{
"name": "file://Users/kyoulho/msa-study/git-local-repo/user-service.yml",
"source": {
"spring.datasource.url": "jdbc:h2:mem:testdb",
"spring.datasource.username": "sa",
"spring.datasource.password": "sa"
}
}
]
}
비대칭키를 이용한 암호화
암복호화에 서로 다른 키를 사용하는 방식으로 키 관리의 장점이 있지만 대칭키 방식에 비해 처리 속도가 느리다.
비대칭키 생성
$ keytool -genkey -alias apiEncryptionKey -keyalg RSA \
-dname "CN=kyoulho, OU=API Development, O=kyoulho.co.kr, L=Seoul, C=KR" \
-keypass "123456" -keystore apiEncryptionKey.jks -storepass "123456"
- keytool: Java의 키 및 인증서 관리 도구인 keytool을 실행
- -genkey: 새로운 키 페어를 생성하는 옵션
- -alias apiEncryptionKey: 키 페어의 별칭(alias)을 apiEncryptionKey로 설정
- -keyalg RSA: 키 페어의 알고리즘을 RSA로 설정
- -dname "CN=kyoulho, OU=API Development, O=kyoulho.co.kr, L=Seoul, C=KR": 디지털 인증서에 포함될 사용자 정보(Subject Distinguished Name)를 설정, Common Name(CN), Organizational Unit(OU), Organization(O), Locality(L), Country(C) 등을 설정
- -keypass "123456": 개인 키의 비밀번호를 123456로 설정
- -keystore apiEncryptionKey.jks: 키 저장소 파일의 이름을 apiEncryptionKey.jks로 설정
- -storepass "123456": 키 저장소의 비밀번호를 123456로 설정
keytool은 Java 플랫폼에서 제공하는 명령줄 도구로, 주로 Java Keystore를 관리하고, 키 쌍을 생성하며, 디지털 인증서를 관리하는 데사용된다.
bootstrap.yml
encrypt:
key-store:
location: file://${user.home}/Desktop/msa-study/apiEncryptioniKey.jks
alias: apiEncryptionKey
# 키 저장소 비밀번호
password: 123456
# 개인키 비밀번호
secret: 123456
728x90
'JVM > SpringCloud' 카테고리의 다른 글
Kafka를 활용한 마이크로 서비스간 비동기 통신 (0) | 2024.01.01 |
---|---|
마이크로서비스간 동기 통신 (0) | 2023.12.30 |
Spring Cloud Bus (0) | 2023.12.28 |
Spring Cloud Config (0) | 2023.12.27 |
[SpringCloud] Swagger(Springdoc) 통합 설정 (0) | 2023.12.27 |