VCA

API 키와 비밀번호는 어디에: 시크릿 입문

키를 프런트에 쓰거나 Git에 커밋하면 공개나 마찬가지. 초보자를 위한 시크릿 두는 곳·사용 원칙, 유출 시 대처.

게시일 수정일 검토일 약 2분 분량편집 방침#실전 가이드#보안#
학습 경로SaaS 경로

한 문장으로

시크릿은 프런트나 버전 관리에 들어간 순간 공개나 마찬가지—두는 곳·쓰는 법·유출 대처를 다룬다.

만들 결과물

키/비밀번호를 어디에 둬야 하는지(환경 변수/플랫폼 시크릿), 절대 두면 안 되는 곳, 유출 후 올바른 대처를 알게 된다.

시크릿이란

시크릿은 '남에게 보이면 안 되는 열쇠'입니다: API 키, DB 비밀번호, 제3자 서비스 토큰, 서명 키. 하나라도 유출되면 사칭, 청구 악용, 데이터 탈취가 일어납니다. 그래서 중요한 건 '쓰는 법'만이 아니라 '숨기는 법'입니다.

절대 두면 안 되는 곳

  • 프런트 JavaScript: 브라우저에 도달하는 것은 사용자에게 보입니다. 프런트의 시크릿 = 공개 시크릿.
  • Git에 커밋: 나중에 지워도 히스토리에 남아 유출과 같습니다. 공개 저장소면 봇이 몇 초 만에 스캔합니다.

둬야 하는 곳

  • 환경 변수 / 플랫폼의 시크릿 저장소: 배포 플랫폼(예: Cloudflare)의 시크릿 저장소나 환경 변수에 두고 거기서 읽습니다. 코드에 박지 않습니다.
  • 로컬 개발.env 같은 파일을 쓰되 반드시 .gitignore에 넣고 절대 커밋하지 않습니다.

이것이 '설정과 코드의 분리'라는 업계 관행(12-factor의 config 원칙)입니다: 같은 코드로 환경마다 시크릿만 바꾸면 돌아갑니다.

쓸 때의 원칙

  • 최소 권한: 키에는 필요한 권한만. 최대 권한 root 키를 여기저기 쓰지 않기.
  • 만료·취소 가능: 유효 기간을 둘 수 있고 언제든 무효화할 수 있는 키를 우선. 유출 시 지혈할 수 있습니다.
  • 환경마다 다른 시크릿: 운영과 테스트를 분리해 테스트 유출이 운영에 번지지 않게.

유출되면 어떻게

즉시 rotate(교체하고 옛 키 무효화)—이것이 유일한 확실한 대처입니다. 기억하세요: 프런트·Git 히스토리·채팅 로그·스크린샷에 한 번이라도 들어갔다면 유출로 간주하세요. 요행을 바라지 마세요. 옛 키를 무효화하고 새것을 생성해 시크릿 저장소를 갱신합니다.

다음 단계

자주 묻는 질문

실수로 키를 Git에 커밋했어요. 그 줄을 지우면 되나요?

부족합니다. 삭제는 ‘지금’ 안 보이게 할 뿐 **히스토리엔 남습니다**. 히스토리를 보면 누구나 얻을 수 있고, 공개 저장소면 봇이 몇 초 만에 스캔합니다. 확실한 대처는 즉시 rotate: 그 키를 무효화하고 새로 생성해 시크릿 저장소를 갱신.

프런트엔드에는 정말 어떤 키도 두면 안 되나요?

브라우저에 도달하는 것은 사용자에게 보입니다—그래서 비밀 키는 프런트에 두지 않습니다. 제3자 서비스를 호출해야 하면 **백엔드**가 키를 보관해 대신 호출하는 것이 정답입니다. ‘본래 공개·권한 제한’인 일부 키(읽기 전용 공개 키 등)만 프런트에 둘 수 있고, 그래도 서비스 측에서 할 수 있는 일을 제한해야 합니다.

참고 자료

  1. Secrets Management Cheat SheetOWASP
  2. The Twelve-Factor App — Config12factor

SaaS 경로 다음 단계: 스토리지