키 노출 고치는 법 — Vercel 환경변수 vs Infisical

왜 클라이언트·공개 .env가 치명적인가
브라우저 번들이나 공개 URL의 /.env에 서버 전용 키가 있으면, 로그인 없이도 결제 시크릿·DB 관리자 키·AI API 키를 가져갈 수 있습니다. LaunchGuard는 이를 SECRET-001(클라이언트 노출)과 EXPOSED-001(민감 파일 공개)로 표시합니다. Supabase anon 키나 Stripe publishable(pk_)처럼 공개가 정상인 키는 잡지 않습니다.
파일을 지우고 도구를 바꿔도, 이미 복사된 키는 살아 있습니다. 그래서 보관 도구 이전보다 발급처에서 즉시 회전이 먼저입니다.
수정 순서 체크리스트
- Rotate — 발급처 대시보드에서 유출 키를 폐기하고 새 키를 발급합니다.
- Remove — 프론트 번들, HTML,
NEXT_PUBLIC_/VITE_, 공개.env·배포 산출물에서 서버 키 참조를 제거합니다. - Server-only storage — 새 키를 서버 라우트·서버리스만 읽는 저장소에 둡니다 (아래 경로 A 또는 B).
- Verify — 빌드 산출물 grep,
/.env·네트워크 탭 재확인, 공개 경로 404/403. - Re-scan — LaunchGuard 무료 요약 또는 유료 재검사로 SECRET/EXPOSED가 사라졌는지 확인합니다.
경로 A — Vercel·호스트 환경변수만
언제: 1인 개발, 키 개수가 적음, 프로젝트가 하나, 팀 공유·감사 로그가 급하지 않을 때.
- 프로젝트 Environment Variables에 서버 전용으로 저장합니다. 클라이언트 접두사(
NEXT_PUBLIC_,VITE_)를 붙이지 않습니다. - Production / Preview / Development를 분리하고, Preview에 운영 결제 키를 넣지 않습니다.
- 변경 후 재배포해야 런타임에 반영됩니다.
주의: 공개 접두사 실수, 로그에 키 인쇄, Preview와 Production 키 혼용. 세부 점검은 Vercel 환경변수 보안 체크리스트를 따릅니다. /.env 파일 자체 노출은 .env 노출 가이드를 참고하세요.
경로 B — Infisical (옵션)
언제: 여러 사람이 같은 시크릿을 다루거나, dev/staging/prod를 엄격히 나누거나, 회전·접근 감사·CI/에이전트에 키를 직접 심고 싶지 않을 때.
- 시크릿을 중앙에 두고 Vercel 등으로 sync하거나, 배포·런타임에 inject(예: CLI로 프로세스에만 주입)합니다.
- 고수준 목표: 저장소·클라이언트 번들에 서버 시크릿 원문이 남지 않게 하는 것.
하지 말 것: 클라이언트 SDK에 서버 시크릿을 주입하거나, Infisical을 썼다는 이유만으로 공개 경로의 .env를 방치하는 것. Infisical 서비스 토큰(st_)·클라이언트 시크릿도 서버 전용 비밀입니다 — 프론트엔드 번들에 있으면 프로젝트의 모든 시크릿이 탈취될 수 있고, LaunchGuard는 이를 SECRET-001로 탐지합니다. 도구 선택·계정·장애 책임은 고객 팀과 해당 서비스에 있습니다. 도구 선택·계정·장애 책임은 고객 팀과 해당 서비스에 있습니다. 제품 소개는 Infisical 홈페이지와 Secrets Management / Vercel 연동 문서를 확인하세요. LaunchGuard와 Infisical의 파트너십을 주장하지 않습니다.
비교 표
| 기준 | Vercel·호스트 env | Infisical 등 시크릿 매니저 |
|---|---|---|
| 설정 난이도 | 낮음 | 중간 |
| 팀 공유·감사·회전 | 기본 기능은 단순한 편 | 운영 기능이 강한 편 |
| 비용·운영 | 호스트에 포함되는 경우가 많음 | 추가 도구·권한 설계 |
| LaunchGuard 관점 | 대부분 MVP·1인에 충분 | 재발 방지·운영 성숙 단계 옵션 |
| 노출 방지의 본질 | 도구 이름과 무관 — 클라이언트·공개 URL에 서버 시크릿이 없어야 함 | |
LaunchGuard에서 이 finding이 뜨면
- SECRET-001 — 페이지 HTML/스크립트에서 서버 전용 키 패턴이 확인됨. 즉시 rotate + 클라이언트 제거.
- EXPOSED-001 —
/.env등 민감 파일이 인증 없이 200으로 열림. 경로 차단 + 파일 제거 + 파일에 있던 키 전부 rotate.
무료 요약은 “문제가 있다” 수준까지, 유료 상세 진단은 재현·수정 우선순위·AI 수정 프롬프트까지 제공합니다. 고친 뒤에는 같은 URL로 다시 스캔하세요.
FAQ
anon / publishable 키는?
공개가 정상인 키는 클라이언트에 둘 수 있습니다. 서버 전용 키만 서버 env 또는 시크릿 매니저로 옮기면 됩니다.
Infisical을 쓰면 검사 통과?
아니요. 노출이 없어야 통과에 가깝습니다. 도구는 보관 방식일 뿐입니다.
1인인데 Infisical 필수?
아닙니다. Vercel 서버 env로 시작하는 편이 단순합니다.