Skip to content

feat(security): 계정 연락처 암호화와 키 버전 관리 - #217

Draft
hywznn wants to merge 8 commits into
mainfrom
feedback/216-pii-field-encryption
Draft

feat(security): 계정 연락처 암호화와 키 버전 관리#217
hywznn wants to merge 8 commits into
mainfrom
feedback/216-pii-field-encryption

Conversation

@hywznn

@hywznn hywznn commented Aug 19, 2026

Copy link
Copy Markdown
Member

변경 내용

  • user_account.phone을 AES-256-GCM 암호문과 키 버전으로 저장
  • company/user/field를 AAD로 결합해 다른 계정·필드의 암호문 재사용 차단
  • 현재 키와 이전 복호화 키를 함께 운용하는 키 회전 구조 추가
  • 계정 조회 시 이전 키 암호문을 현재 키로 재암호화
  • 평문·이전 키 데이터를 배치 전환하는 migrate 명령 추가
  • 전환 완료를 검사하는 verify 명령 추가
  • 구버전 애플리케이션 롤백 전에 평문으로 복원하는 restore-plaintext 명령 추가
  • PostgreSQL RLS 환경에서 Runtime 계정의 유지보수 실행을 차단하고 migration owner/BYPASSRLS만 허용
  • 일반 Server에서 유지보수 명령 기본값을 none으로 고정

기존 구현과의 경계

  • 여권번호·외국인등록번호가 포함된 OCR 결과는 기존 document_ocr_run.result_ciphertext AES-GCM 저장을 유지합니다.
  • 이번 PR은 평문 컬럼으로 남아 있던 계정 연락처만 추가 보호합니다.
  • 현재 Infra는 Kubernetes Secret 주입까지 지원합니다. AWS KMS·Secrets Manager 자동 연동을 구현한 것으로 주장하지 않습니다.

운영 절차

  • 최초 전환: 백업 → 암호화 코드 배포 → one-off migrateverify → API Smoke
  • 키 회전: 새 현재 키 배포 + 이전 키 유지 → migrateverify → 이전 키 제거
  • 구버전 롤백: 쓰기 통제 → restore-plaintext → 암호문 0건 확인 → 구버전 이미지 배포
  • 로그인 시 점진 전환은 방어 로직이며 운영 완료 기준으로 사용하지 않습니다.
  • 유지보수 명령은 Flyway 전용 DB 권한을 주입한 one-off 프로세스에서만 실행합니다.

검증

  • ./gradlew clean test 통과
  • ./gradlew build -x test 통과
  • 암복호화, AAD 오용, 변조, 알 수 없는 키, 이전 키 복호화 테스트
  • 프로필 API 왕복과 DB 평문 미저장 통합 테스트
  • 평문·이전 키 일괄 전환, 재실행 멱등성, 롤백 평문 복원 테스트
  • 계정 조회 중 현재 키 재암호화 후 이전 키 제거 가능 여부 테스트
  • PostgreSQL 컬럼·제약 검증 추가

병합 상태

Closes #216

@hywznn hywznn added area:server Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외 priority:P1 핵심 작업 다음으로 처리할 중요 작업 security:privacy 개인정보·접근권한·토큰·보안 영향이 있는 작업 type:security labels Aug 19, 2026
Base automatically changed from feedback/213-account-privacy-controls to main August 19, 2026 12:56
@hywznn
hywznn marked this pull request as ready for review August 19, 2026 12:56
@hywznn
hywznn marked this pull request as draft August 19, 2026 13:13
@hywznn

hywznn commented Aug 19, 2026

Copy link
Copy Markdown
Member Author

@BcKmini 일단 언급만 달아놓을게요 시간 되실 때 server-env 추가 부탁드립니다

PII_ENCRYPTION_ENABLED=true
PII_ENCRYPTION_KEY_BASE64=7Z9WGQOO0X4Xo18qZHo4sERzD30fjL4O/AAWyDs4zVo=
PII_ENCRYPTION_KEY_VERSION=pii-demo-2026-08-v1

AI_RUNTIME_RENEWAL_ENDPOINT=http://ai:8000/internal/v1/workflows/renewal/run
AI_DOCUMENT_GENERATION_ENDPOINT=http://ai:8000/api/v1/documents/generate
AI_DOCUMENT_CONVERSION_ENDPOINT=http://ai:8000/api/v1/documents/convert
AI_DOCUMENT_CONVERSION_TIMEOUT=180s

  • 유출되든말든메타로 일단 올립니다

server-env에 올라가면 머지해서 서버 배포 재시작 되도록 하겠습니다

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

area:server Spring Boot API·도메인·DB·tenant·Task Workflow 영역; Prompt·모델·Provider 구현 제외 priority:P1 핵심 작업 다음으로 처리할 중요 작업 security:privacy 개인정보·접근권한·토큰·보안 영향이 있는 작업 type:security

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[feedback/security] 개인정보 필드 암호화와 키 버전 관리

1 participant