NestJS 보안과 운영 기준

환경 변수 관리와 비밀 정보 보호: ConfigModule 스키마와 secret 회전

환경 변수는 편의 설정이 아니라 운영 계약입니다. 값의 출처, 검증 방식, 노출 금지 범위를 먼저 고정해야 배포 환경이 바뀌어도 같은 기준으로 서비스를 띄울 수 있습니다.

01

환경 스키마와 기본값 구분

ConfigModule이 읽는 변수, 타입, 필수 여부, 운영 금지 기본값을 schema로 고정해 누락 시 앱이 조용히 뜨지 않게 합니다.

schema
02

secret 주입 경로 분리

로컬 .env, CI secret, Kubernetes/Cloud secret manager의 책임을 나누고 Docker image나 repository에는 비밀값이 들어가지 않게 합니다.

runtime secret
03

노출과 만료 키 재현

잘못된 DB_URL, 빈 JWT_SECRET, 만료된 API key로 부팅/요청 테스트를 실행해 실패 메시지가 값 자체를 출력하지 않는지 봅니다.

redaction
04

배포별 설정 증거 남기기

환경별 config snapshot은 키 이름과 출처만 남기고, secret 접근 로그와 회전 날짜를 배포 기록에 연결합니다.

rotation
스키마
환경 변수 목록은 ConfigModule 스키마로 코드화한다 필수 키, 타입, 허용 값, 운영 금지 기본값을 검증해 누락된 설정으로 Nest application이 뜨지 않게 합니다.
Joi/Zod schema
주입
DB와 외부 API secret은 런타임 공급자로만 전달 Provider는 ConfigService에서 값을 읽되 로그, 에러 응답, Swagger 예제에는 원문 secret을 넘기지 않습니다.
secret source
회전
회전 테스트는 이전 키와 새 키가 겹치는 시간을 검증 JWT, DB password, third-party token을 바꿀 때 무중단 배포와 fallback 제거 시점을 함께 기록합니다.
rotation window

ConfigModule secret 실패 신호

부팅 실패 필수 env가 누락되면 Nest application이 시작되지 않고 어떤 키가 빠졌는지만 알려 줍니다.
노출 차단 ConfigService 값은 Logger, 예외 응답, 빌드 산출물, Docker layer에 원문으로 남지 않습니다.
회전 기록 secret 변경 PR/배포/접근 감사가 연결되어 이전 키를 언제 폐기했는지 추적됩니다.

ConfigModule secret 점검

질문: ConfigModule schema가 누락 값, 잘못된 타입, secret 노출을 부팅 전에 막는가
순서: env schema 정의 -> 런타임 secret 주입 -> 누락/만료/노출 케이스 재현
위험: 운영에서 기본 JWT_SECRET이나 로컬 DB_URL로 부팅되면 장애보다 먼저 데이터 노출 사고가 됩니다.