docs: add env tracking exposure records

This commit is contained in:
happybell80 2026-03-09 23:01:04 +09:00
parent 30dd993cc8
commit a7c1ea995a
2 changed files with 117 additions and 0 deletions

View File

@ -0,0 +1,81 @@
tags: [env, secrets, git, security, troubleshooting]
# 260308 env backup git tracking exposure 및 차단조치
상위 원칙:
- [global-principles](../../../../0_VALUE/00_Principles/global-principles.md)
- [writing-principles](../../../../0_VALUE/02_Governance/writing-principles.md)
## 1. 목적
- `rb8001` 저장소에 `.env` 백업본과 배포용 env 파일이 git 원격에 포함된 경위를 기록합니다.
- 동일 유형 파일이 다시 원격에 올라가지 않도록 차단한 조치와 잔여 범위를 남깁니다.
## 2. Facts
### 2.1 `rb8001` 노출 사실
- 대상 파일: `.env.backup`, `.env.bak.20260304032910`, `.env.bak.20260306193102`, `.env.deploy`
- 원격 반영 커밋:
- `b9731bfc68bd12d0bdefc74a1403a878433c6824` (`2026-01-02 12:53:52 +0900`): `.env.backup` 추가
- `5f24b2bdb515b0a372cebaf62052f7086d41e739` (`2026-03-07 17:01:56 +0900`): `.env.bak.20260304032910`, `.env.bak.20260306193102`, `.env.deploy` 포함
- `5f24b2b`는 로컬 reflog 기준 같은 시각에 `refs/remotes/origin/main: update by push`가 확인됐습니다.
### 2.2 `rb8001` 원인성 설정 사실
- `/home/admin/robeing/rb8001/.gitignore`에는 기존에 `.env`만 있었고 `.env.*`, `*.env.*` 차단 규칙은 없었습니다.
- 저장소 내부 검색 기준, `.env.bak.*` 또는 `.env.backup` 생성을 지시하는 자동 스크립트/코드는 확인되지 않았습니다.
- `/home/admin/AGENTS.md`에는 환경변수 기준을 `/home/admin/infra-config/runtime.env`, `/home/admin/infra-config/secrets.env`로 두고, 서비스별 `.env`는 임시 로컬 오버라이드 전용이라고 명시돼 있습니다.
### 2.3 `rb8001` 즉시 조치 사실
- `2026-03-08``.gitignore`를 아래 패턴까지 확장했습니다.
- `.env.*`
- `*.env`
- `*.env.*`
- 예외: `.env.deploy.example`
- 추적 중이던 `.env.backup`, `.env.bak.20260304032910`, `.env.bak.20260306193102`, `.env.deploy`를 git 인덱스에서 제거했습니다.
- 위 변경은 커밋 `5f0087d` (`chore: stop tracking env files`)로 `origin/main`에 push됐습니다.
- 로컬 파일도 `.env.backup`, `.env.bak.20260304032910`, `.env.bak.20260306193102`를 삭제했습니다.
### 2.4 워크스페이스 전수 확인 사실
- 백업본 실파일 확인:
- `/home/admin/robeing/skill-news/.env.backup`
- git 추적 중인 `.env*` 확인:
- `/home/admin/fluent-bit`: `.env`
- `/home/admin/ivada_project/robeing-monitor`: `.env.deploy`, `.env.deploy.example`
- `/home/admin/robeing/robeing-monitor`: `.env.deploy`, `.env.deploy.example`
- `/home/admin/robeing/skill-calendar`: `.env.deploy`, `.env.deploy.example`
- `/home/admin/robeing/skill-email`: `.env.deploy`, `.env.deploy.example`
- `/home/admin/robeing/skill-embedding-repo`: `.env.deploy`, `.env.deploy.example`, `.env.example`
- `/home/admin/robeing/skill-news`: `.env.backup`, `.env.deploy`, `.env.deploy.example`, `.env.example`
- `/home/admin/robeing/skill-rag-file`: `.env.deploy`, `.env.deploy.example`, `.env.example`
- `/home/admin/robeing/skill-slack`: `.env.deploy`, `.env.deploy.example`
- `/home/admin/vMIR/LocalTerra`: `.env`
- `/home/admin/vMIR/mirror-terra-web-dapp-ref`: `.env`, `.env.development`
- `/home/admin/vMIR/vmir-web-app`: `.env`, `.env.development`
- `/home/admin/auth-server``.git/config` 권한 문제로 이번 점검에서 추적 여부를 확정하지 못했습니다.
## 3. Interpretation
- `rb8001`의 직접 원인은 `.env`만 무시하고 `.env` 파생 파일을 무시하지 않은 `.gitignore` 공백입니다.
- `.env.bak.20260304032910`, `.env.bak.20260306193102`는 파일명과 내용상 `.env`의 시점별 수동 백업본으로 해석됩니다.
- 이 문제는 단일 저장소 실수라기보다, 여러 저장소에서 `.env`, `.env.deploy`, `.env.backup`를 버전 관리 대상으로 다뤄 온 운영 습관 문제로 봐야 합니다.
- 전역 원칙 문서가 요구하는 방향은 SSOT(Single Source of Truth, 단일 진실 공급원) 기반의 `runtime.env`/`secrets.env` 분리이며, 서비스 루트의 실제 비밀 env 파일을 git에 유지하는 방식과 충돌합니다.
## 4. Unresolved
- 이미 원격 히스토리에 포함된 민감값은 커밋 삭제만으로 무효화되지 않으므로, 실제 키 폐기와 재발급 여부를 별도로 확인해야 합니다.
- `skill-news`를 포함한 다른 저장소들의 `.env*` 추적 해제 범위는 아직 미적용 상태입니다.
- `auth-server`는 권한 문제를 해소한 뒤 `.env*` 추적 여부를 다시 확인해야 합니다.
- `.env.deploy`를 예제 파일만 남기고 모두 제거할지, SSOT 경로 참조 방식으로 전환할지 저장소별 운영 기준 정리가 필요합니다.
## 5. 다음 조치 후보
- 우선순위 1: 원격 히스토리에 노출된 Slack, OpenAI, Perplexity, Tavily, JWT 등 민감값 폐기 및 재발급
- 우선순위 2: `skill-news` 포함 나머지 저장소에도 동일한 `.gitignore` 확장과 git 추적 해제 적용
- 우선순위 3: 서비스별 `.env.deploy`를 예제 파일만 남기는 구조로 통일하거나, `/home/admin/infra-config` 참조 구조로 일원화
## 6. 검증 근거
- `git log --follow --date=iso --name-status -- .env.bak.20260304032910`
- `git show --stat --summary 5f24b2bdb515b0a372cebaf62052f7086d41e739`
- `git reflog --date=iso --all`
- `git ls-files '.env*'`
- `find /home/admin -path '*/.git' -prune -o -type f \( -name '.env.backup' -o -name '.env.bak.*' -o -name '.env.deploy' -o -name '.env' \) -print`
관련 문서:
- [260307 gateway SSOT(runtime/secrets) 분리 적용 및 검증](./260307_gateway_SSOT_runtime_secrets_분리_적용_및_검증.md)
- [README](./README.md)

View File

@ -0,0 +1,36 @@
tags: [rb8001, env, git, secrets, troubleshooting]
# 260308 rb8001 env 파생파일 git 노출 이슈
상위 원칙:
- [global-principles](../../../../0_VALUE/00_Principles/global-principles.md)
- [writing-principles](../../../../0_VALUE/02_Governance/writing-principles.md)
## 문제 상황
- `rb8001` 저장소에서 `.env.backup`, `.env.bak.20260304032910`, `.env.bak.20260306193102`, `.env.deploy`가 git 원격에 포함된 사실이 확인됐습니다.
- 이 파일들에는 운영 비밀값 또는 배포 연결 정보가 포함돼 있어, 저장소 히스토리에 남는 보안 이슈가 발생했습니다.
- 현재 문제의 핵심은 `rb8001`에서 `.env` 파생 파일이 버전 관리 대상으로 들어갔다는 점입니다.
## 재현 조건
- 서비스 루트에 `.env` 백업본 또는 `.env` 파생 파일이 생성된 상태였습니다.
- `.gitignore``.env`만 제외하고 `.env.*`, `*.env.*`를 제외하지 않고 있었습니다.
- 그 상태에서 일반 커밋/푸시가 수행되면 `.env` 파생 파일이 원격에 포함될 수 있었습니다.
## 영향 범위
- `rb8001` 원격 저장소 히스토리에 민감 정보가 포함된 env 파생 파일이 남았습니다.
- 운영자가 실제 비밀값이 들어간 로컬 백업본을 만들고 유지할 경우, 동일 유형 노출이 다시 발생할 가능성이 있었습니다.
- 이 사건은 `rb8001`에서 먼저 확인됐지만, 다른 저장소에도 유사 패턴이 있는지 후속 확인이 필요한 상태입니다.
## 즉시 대응 상태
- `rb8001`에서는 `.gitignore`를 확장해 `.env` 파생 파일이 다시 추적되지 않도록 조치했습니다.
- 이미 추적되던 env 파생 파일은 git 인덱스에서 제거했고, 로컬 백업본도 삭제했습니다.
- 다만 원격 히스토리에 남은 민감값 폐기와 재발급 여부는 아직 닫히지 않았습니다.
## 관련 문서
- [260308_env_backup_git_tracking_exposure_및_차단조치.md](./260308_env_backup_git_tracking_exposure_및_차단조치.md)
- [README](./README.md)