forked from baron/baron-sso
feat: add env-aware client log policy and const lint fixes
This commit is contained in:
@@ -48,10 +48,19 @@
|
||||
- 환경 변수 추가/변경 시
|
||||
- `.env.sample` 반영
|
||||
- 문서/가이드 갱신
|
||||
- 클라이언트 로그 정책 영향 확인 (`CLIENT_LOG_DEBUG`, `USERFRONT_DEBUG_LOG`)
|
||||
|
||||
- 배포/운영 변경 시
|
||||
- `Makefile`/compose 실행 절차 영향 확인
|
||||
- 최소 Smoke 테스트 수행
|
||||
- 로그 수집 레벨이 운영 기본 정책(`WARN/ERROR`)을 유지하는지 확인
|
||||
|
||||
## 클라이언트 로그 정책
|
||||
- 상세 정책은 `docs/client-log-policy.md`를 기준으로 유지합니다.
|
||||
- 원칙:
|
||||
- 운영 기본값은 `WARN/ERROR`만 수집
|
||||
- 운영 디버그는 `CLIENT_LOG_DEBUG=true`로만 일시 허용
|
||||
- 민감정보 마스킹은 환경과 무관하게 항상 적용
|
||||
|
||||
## 테스트 참고
|
||||
- 테스트 계획 및 수동 실행 기준은 `docs/test-plan.md`를 따른다.
|
||||
|
||||
67
docs/client-log-policy.md
Normal file
67
docs/client-log-policy.md
Normal file
@@ -0,0 +1,67 @@
|
||||
# Client Log Policy
|
||||
|
||||
## 1. 목적
|
||||
- 운영 환경에서 클라이언트 로그를 최소권한으로 수집하고, 민감정보 유출을 방지합니다.
|
||||
- 장애 분석이 필요한 경우에만 명시적 디버그 옵션으로 로그 레벨을 확장합니다.
|
||||
|
||||
## 2. 환경별 수집 정책
|
||||
|
||||
### 2.1 기준 변수
|
||||
- `APP_ENV`
|
||||
- `CLIENT_LOG_DEBUG`
|
||||
- (UserFront fallback) `USERFRONT_DEBUG_LOG`
|
||||
|
||||
### 2.2 동작 매트릭스
|
||||
- `APP_ENV != production|prod`
|
||||
- 클라이언트 로그: `DEBUG/INFO/WARN/ERROR` 수집 허용
|
||||
- `APP_ENV == production|prod` AND `CLIENT_LOG_DEBUG` 미설정
|
||||
- 클라이언트 로그: `WARN/ERROR`만 수집
|
||||
- `INFO` 네비게이션 노이즈 로그는 필터
|
||||
- `APP_ENV == production|prod` AND `CLIENT_LOG_DEBUG=true|1|on|yes`
|
||||
- 클라이언트 로그: `DEBUG/INFO/WARN/ERROR` 수집 허용
|
||||
|
||||
## 3. 민감정보 마스킹 규칙
|
||||
|
||||
### 3.1 Key 기반 마스킹
|
||||
아래 키는 값 전체를 `*****`로 치환합니다.
|
||||
- `password`, `currentPassword`, `newPassword`, `oldPassword`
|
||||
- `token`, `accessToken`, `refreshToken`
|
||||
- `secret`, `clientSecret`
|
||||
- `authorization`, `cookie`, `setCookie`
|
||||
- `verificationCode`, `code`
|
||||
- `loginChallenge`, `loginVerifier`
|
||||
- `sessionJwt`, `accessJwt`, `refreshJwt`
|
||||
|
||||
### 3.2 문자열 패턴 마스킹
|
||||
메시지 본문에서도 아래 패턴을 마스킹합니다.
|
||||
- `token=...`
|
||||
- `authorization:...` 또는 `authorization=...`
|
||||
- JSON 문자열 내 민감 key/value
|
||||
|
||||
## 4. 구현 위치
|
||||
- Backend
|
||||
- 정책/마스킹 로직: `backend/internal/logger/client_log_policy.go`
|
||||
- 수집 엔드포인트 적용: `backend/cmd/server/main.go` (`POST /api/v1/client-log`)
|
||||
- UserFront
|
||||
- 정책/마스킹 로직: `userfront/lib/core/services/log_policy.dart`
|
||||
- 로그 출력/전송 정책: `userfront/lib/core/services/logger_service.dart`
|
||||
- 전송 직전 마스킹: `userfront/lib/core/services/auth_proxy_service.dart`
|
||||
|
||||
## 5. 검증
|
||||
|
||||
### 5.1 Backend
|
||||
```bash
|
||||
cd backend
|
||||
go test ./internal/logger -count=1
|
||||
go test ./cmd/server -count=1
|
||||
```
|
||||
|
||||
### 5.2 UserFront
|
||||
```bash
|
||||
cd userfront
|
||||
flutter test test/log_policy_test.dart
|
||||
```
|
||||
|
||||
## 6. 운영 가이드
|
||||
- 운영에서 디버그 로그가 필요하면 `CLIENT_LOG_DEBUG=true`를 명시적으로 설정하고, 이슈 해결 후 즉시 원복합니다.
|
||||
- 운영에서도 민감정보 마스킹은 항상 강제되며 비활성화할 수 없습니다.
|
||||
Reference in New Issue
Block a user