관리 메뉴

Mini

[스프링 msa] 대칭키를 이용한 암호화 본문

Java/Spring-Cloud

[스프링 msa] 대칭키를 이용한 암호화

Mini_96 2025. 2. 11. 02:03

* 문제

  • user-service같은곳의 yml에 비밀번호가 바로 노출되어있음

  • 이를 config-server에서 일괄로 관리하고, 암호화하고자 함

 

* 해결(구현)

암호화
복호화
설정정보는 yml파일로 관리 (git or local)

  • yml에 값도 암호화한 값을 저장!!

각각의 서비스에서는 어떤 yml을 쓸건지만 명시
config-service에서는 yml들의 위치를 명시
사용시에는 자동으로 복호화됨

Spring Cloud Config Server의 암호화 기능에 대해 상세히 설명해드리겠습니다.

1. 작동 원리:
```yaml
encrypt:
  key: abcdefwefkorgkreogkeogke015684648
```
이 설정을 bootstrap.yml에 추가하면, Spring Cloud Config Server는 자동으로 다음 기능들을 활성화합니다:

- /encrypt 엔드포인트 생성 (암호화용)
- /decrypt 엔드포인트 생성 (복호화용)
- 프로퍼티 값들의 자동 복호화 ({cipher}로 시작하는 값)

2. Best Practices:

```yaml
# bootstrap.yml
encrypt:
  key-store:
    location: classpath:/keystore.jks
    password: ${KEYSTORE_PASSWORD}
    alias: config-server-key
  
spring:
  security:
    user:
      name: ${CONFIG_SERVER_USER}
      password: ${CONFIG_SERVER_PASSWORD}
```

3. CTO들의 일반적인 견해:

- 프로덕션 환경:
  - 대칭키(symmetric key) 대신 비대칭키(asymmetric key) 사용 권장
  - 키스토어 사용 필수
  - 환경변수나 외부 보안 저장소(Vault 등)를 통한 키 관리
  - 정기적인 키 로테이션 정책 수립

4. 주의사항:
- 암호화 키는 절대 Git에 커밋하면 안됨
- 키 길이는 최소 32바이트 이상 권장
- 운영 환경에서는 반드시 HTTPS 사용

5. 실제 사용 예시:

```yaml
# application.yml in Git
spring:
  datasource:
    password: '{cipher}AQA6EN7aXNXrBiWWxng5wbq....'
```

6. 모니터링과 관리:
- 암호화/복호화 요청에 대한 로깅 필수
- 키 사용 현황 모니터링
- 실패한 복호화 시도 알림 설정

이러한 설정으로 Config Server는 자동으로 암호화된 값들을 처리할 수 있는 컨트롤러를 생성하며, 클라이언트 서비스에 프로퍼티를 전달할 때 자동으로 복호화를 수행합니다.

마이크로서비스 아키텍처에서는 이런 중앙화된 암호화 관리가 매우 중요하며, Config Server의 이러한 기능은 보안과 운영 효율성을 크게 향상시킵니다.