application.yml 등의 설정 파일에는 DB의 아이디나 비밀번호 등 민감한 정보가 포함된다.
spring:
rabbitmq:
host: 127.0.0.1
port: 5672 #web접속은 15672
username: guest
password: guest
이 때, 위와 같이 password와 같은 정보를 평문 그대로 설정파일에 노출하게 되면 해킹이나 도난 발생 시 심각한 보안 문제가 될 수 있다.
이를 방지하기 위해 설정 정보를 암호화하여 서버에 저장하는 것이 중요하다.
일반적으로는 대칭키 방식과 비대칭키 방식 두 가지 방법을 사용하여 설정 정보를 암호화할 수 있다.
관리가 까다롭긴 하지만, 보안성을 고려하면 비대칭키 방식이 더 안전하다.
Spring Cloud Config서버를 사용하는 경우, 해당 서버에서 설정 파일 암호화 과정을 진행할 수 있다.
✅ 대칭키 방식 (Symmetric Key)
하나의 같은 키로 암호화 및 복호화를 수행하는 방식이다.
1️⃣ 대칭키 설정
encrypt:
key: abcdefghijklmnopqrstuvwxyz123456789
bootstrap.yml 파일에 대칭키를 설정한다.
- bootstrap.yml을 사용하려면 Spring Cloud Bootstrap 의존성이 필요하다.
- bootstrap.yml은 application.yml보다 먼저 로드되기 때문에 편의를 위해 사용한다.
2️⃣ API를 이용한 암호화 및 복호화
암호화:
curl -X POST http://localhost:8888/encrypt -d 'mySecretPassword'
복호화:
curl -X POST http://localhost:8888/decrypt -d '{cipher}07ca0a7d65...'
3. 암호화된 값 적용
spring:
datasource:
driver-class-name: org.h2.Driver
url: jdbc:h2:mem:testdb
username: sa
password: '{cipher}07ca0a7d65ffb0f7cdb2327e929248f88ea3a86c056928a63af7ef7eee347007'
- password 값은 {cipher}로 시작하며, Spring Cloud Config가 자동으로 복호화한다.
- 복호화가 불가능한 경우 n/a로 표시된다.
✅ 비대칭키 방식 (Asymmetric Key)
🔐 Private Key로 암호화하고, 🔑 Public Key로 복호화하는 방식이다.
(혹은 반대로도 가능하지만 일반적으로 위 방식이 사용된다.)
1️⃣ 키 생성
JDK의 keytool을 이용해 RSA 키를 생성한다.
keytool -genkeypair
-alias mykey
-keyalg RSA
-keysize 2048
-validity 3650
-keystore mykeystore.jks
-storepass mypassword
- alias를 통해 특정 키를 호출할 수 있다.
- validity 3650은 10년(3650일) 동안 유효한 키를 생성한다는 의미이다.
2️⃣ 비대칭키 설정
encrypt:
key-store:
location: classpath:/mykeystore.jks
password: mypassword
alias: mykey
bootstrap.yml에 비대칭키 설정을 추가한다.
3️⃣ 암호화 및 복호화 API 사용
암호화:
curl -X POST http://localhost:8888/encrypt -d 'mySecretPassword'
복호화:
curl -X POST http://localhost:8888/decrypt -d '{cipher}encryptedValue'
✅ Spring Cloud Config를 사용하는 경우
Spring Cloud Config를 이용하면 설정 파일을 서버에서 관리하며, 암호화된 값을 자동으로 복호화하여 반환할 수 있다.
HTTP GET 요청을 통한 설정 값 확인
curl -X GET http://localhost:8888/application/default
- {cipher}가 붙어있으면 복호화된 값이 반환된다.
- {cipher} 없이 요청하면 암호화된 상태 그대로 반환된다.
🔥 정리
- 설정 파일에 비밀번호를 평문으로 저장하는 것은 위험하다.
- 대칭키 방식은 설정이 간단하지만 키 관리가 중요하다.
- 비대칭키 방식은 보안성이 높지만 설정이 복잡할 수 있다.
- Spring Cloud Config를 사용하면 자동 복호화 기능을 활용할 수 있다.
'백엔드 Backend > 서버 Server' 카테고리의 다른 글
Spring Cloud Bus (0) | 2025.01.15 |
---|---|
Spring Cloud Config 자동으로 반영하기 (feat. Acturator) (0) | 2025.01.14 |
Spring Cloud Config - 분산 시스템 설정 관리 (0) | 2025.01.14 |
Eureka + Spring Cloud Gateway 구현하기 (0) | 2025.01.07 |
API 게이트웨이 서비스 - (2) Spring Cloud Gateway (0) | 2025.01.06 |