Vercel Workflow에 코드 변경 없이 엔드투엔드 암호화가 자동 적용됐다. 각 실행마다 HKDF-SHA256으로 고유 키를 파생하고 AES-256-GCM으로 암호화해 이벤트 로그에는 암호문만 저장된다. 복호화는 브라우저 Web Crypto API에서만 수행돼 서버가 평문을 볼 수 없는 설계다.
핵심 포인트- 코드 변경 없이 자동 적용 — 입력, step 인수, 반환값, 훅 페이로드, 스트리밍 데이터 전체 암호화
- 키 파생: 실행마다 HKDF-SHA256으로 고유 키 생성, 배포마다 별도 암호화 키
- AES-256-GCM — 기밀성과 무결성(조작 감지) 동시 보장
- 복호화는 클라이언트 전용: 브라우저 Web Crypto API 또는 CLI(--decrypt --withData) — 서버가 평문 접근 불가
- 복호화 시도마다 감사 로그 기록 — 데이터 접근 이력 완전 추적
상세 정리- 배경: Workflow 이벤트 로그에 API key, 토큰, 자격증명 같은 민감 데이터가 평문으로 남을 수 있는 위험을 해결.
- 암호화 범위: 워크플로우 입력, step 인수, 반환값, 훅 페이로드, 스트리밍 데이터. 이벤트 로그는 암호문만 저장, step 함수 실행은 정상 동작.
- 키 파생 — HKDF-SHA256: 각 워크플로우 실행마다 고유 키 파생. 실행 간 키 격리로 한 실행의 키 유출이 다른 실행에 영향 없음. 배포마다도 별도 키.
- 암호화 알고리즘 — AES-256-GCM: 기밀성(암호화)과 무결성(인증 태그) 동시 제공. GCM 모드는 데이터 조작 감지 내장.
- 클라이언트 전용 복호화: 복호화가 브라우저 Web Crypto API에서만 수행 — observability 서버가 평문에 접근 불가. Zero-knowledge 설계.
- 복호화 방법 1 — 대시보드: run detail 패널의 Decrypt 버튼으로 클라이언트 사이드 복호화.
- 복호화 방법 2 — CLI: npx workflow inspect run <run-id> --decrypt --withData로 로컬 복호화.
- 접근 제어: 프로젝트 환경변수 권한과 연동 — 해당 권한 없는 사용자는 워크플로우 데이터 접근 불가.
- 감사 추적: 모든 복호화 시도가 감사 로그에 기록 — 규정 준수 및 보안 감사 대응 가능.
- 커스텀 구현: Custom World에서 getEncryptionKeyForRun() 메서드를 제공해 통합 가능.
왜 읽나AI 파이프라인에 민감한 데이터를 처리하거나, 서버 측 평문 노출 없는 암호화 설계(HKDF + AES-GCM + 클라이언트 복호화)에 관심 있는 보안/백엔드 엔지니어.