Spring Cloud Config 서비스와 Vault 연동을 통한 보안 설정 관리 및 UI 활용

2025. 3. 9. 11:25Spring Microservice

🔐 Spring Cloud Config와 HashiCorp Vault 연동하기

🌟 개요

Spring Cloud Config Server는 다양한 백엔드 저장소를 사용할 수 있습니다. 그중에서도 민감한 정보를 안전하게 관리할 수 있는 HashiCorp Vault와의 연동 방법을 알아봅니다.

📌 HashiCorp Vault란?

Vault는 암호, 인증서, API 키 등 접근을 제한해야 하는 민감한 정보(secrets)를 안전하게 저장하고 관리하는 도구입니다.

🐳 Docker를 사용한 Vault 설치

로컬 환경에서 Vault를 빠르게 테스트하기 위해 Docker를 사용합니다.

docker run -d -p 8200:8200 --name vault \
  -e 'VAULT_DEV_ROOT_TOKEN_ID=myroot' \
  -e 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' \
  vault

🔍 Docker 파라미터 설명

  • VAULT_DEV_ROOT_TOKEN_ID: Vault 초기 루트 토큰 설정
  • VAULT_DEV_LISTEN_ADDRESS: Vault 서버의 IP와 포트 설정 (기본 0.0.0.0:8200)

🖥️ Vault UI를 통한 Secret 관리

Vault는 편리한 웹 UI를 제공합니다.

🔐 Vault UI 로그인

브라우저에서 다음 주소로 접속합니다.

http://0.0.0.0:8200/ui/vault/auth

  • 로그인 토큰: Docker 실행 시 설정한 myroot를 입력합니다.

✨ Secret Engine 생성

  1. Secrets 탭Enable new engine 클릭
  2. Engine 유형으로 KV (Key-Value) 선택
  3. Path에 애플리케이션 이름을 입력 (예: licensing-service)

🔖 Secret 추가

  1. 생성된 Secret Engine에서 Create secret 클릭
  2. Secret의 경로(path)는 스프링 프로파일명(default 등)을 입력합니다.
  3. 원하는 키-값 쌍을 입력하고 저장합니다. (예: license.vault.property = Welcome to Vault)

⚙️ Spring Cloud Config Server 설정

bootstrap.yml에 Vault 프로파일 설정을 추가합니다.

spring:
  application:
    name: config-server
  profiles:
    active: vault
  cloud:
    config:
      server:
        vault:
          host: 127.0.0.1
          port: 8200
          kvVersion: 2

server:
  port: 8071

📌 주요 설정 설명

  • spring.profiles.active: 활성화할 프로파일을 설정합니다. 여기서는 vault 프로파일을 활성화했습니다.
  • spring.cloud.config.server.vault.host: Vault 서버의 호스트 주소를 설정합니다 (디폴트값: localhost 또는 127.0.0.1).
  • spring.cloud.config.server.vault.port: Vault 서버가 사용하는 포트를 설정합니다 (디폴트값: 8200).
  • spring.cloud.config.server.vault.kvVersion: 사용하는 KV Secrets Engine의 버전을 설정합니다. Vault 0.10.0 이상에서는 성능 및 보안 측면에서 버전 2를 사용하는 것이 권장됩니다.
  • server.port: Spring Cloud Config 서버가 사용하는 HTTP 포트를 설정합니다. 여기서는 8071로 설정했습니다.

🚩 Vault 연동 테스트

다음 명령으로 Config Server의 연동 여부를 테스트합니다.

curl -X GET "http://localhost:8071/licensing-service/default" -H "X-Config-Token: myroot"

정상 응답 예시:

{
  "name": "licensing-service",
  "profiles": ["default"],
  "label": null,
  "version": null,
  "state": null,
  "propertySources": [
    {
      "name": "vault:licensing-service",
      "source": {
        "license.vault.property": "Welcome to Vault"
      }
    }
  ]
}

 

이제 Spring Cloud Config와 Vault를 통해 민감한 설정을 안전하게 관리할 수 있습니다! 🚀🔑