피드로 돌아가기
Persistent JWT Signing Keys with PostgreSQL
Dev.toDev.to
Security

PostgreSQL과 Envelope Encryption 기반의 무중단 JWT Key Rotation 설계

Persistent JWT Signing Keys with PostgreSQL

ShyGyver2026년 4월 26일15intermediate

Context

In-memory Key Store 사용 시 서버 재시작에 따른 Key 소실 및 다중 인스턴스 환경에서의 Token 검증 불일치 문제 발생. 분산 환경에서 일관된 Token 검증을 위한 Persistent Store 및 보안 저장 구조 필요.

Technical Solution

  • Envelope Encryption 패턴 적용을 통한 Private Key 보안 강화
  • AES-256-GCM 기반의 DEK로 Private Key를 암호화하고, 환경 변수의 KEK로 DEK를 다시 암호화하여 DB에 저장하는 2중 구조 설계
  • PostgreSQL 내 private_keys 테이블의 UNIQUE(id)CHECK(id = 1) 제약 조건을 통한 단일 활성 키 유지 보장
  • public_keys 테이블에 TTL 기반의 이력 데이터를 누적하여 Key Rotation 시 기존 Token의 유효성을 유지하는 Overlap Window 구현
  • created_at 필드를 활용한 JwksRotationTimestampStore 구현으로 별도 상태 관리 없이 DB 레코드 기반의 Rotation 주기 판별
  • 91일 Rotation 주기와 100일 Key Lifetime 설정을 통한 무중단 키 교체 메커니즘 구축

1. Private Key 저장 시 Plaintext 저장을 금지하고 Envelope Encryption 도입 여부 검토

2. Key Rotation 주기보다 Key Lifetime을 길게 설정하여 Token 검증 실패 구간 제거

3. 다중 인스턴스 환경에서 Key Store를 공유 DB로 전환하여 Token 검증 일관성 확보

4. KEK와 같은 마스터 키는 소스 코드나 DB가 아닌 외부 Secret Management System에서 주입

원문 읽기