학습 목표
최소 권한(Least Privilege)을 설명하고 예시를 들 수 있다.
다층 방어(Defense in Depth)를 설명할 수 있다.
실패 시 안전(Fail Secure / Fail Closed)과 기본 거부를 구분할 수 있다.
완전 매체(Complete Mediation)가 왜 필요한지 설명할 수 있다.
문제 상황
- 프로덕션 DB 계정이 앱 서버 전체에
SUPERUSER- SQLi 한 줄이면 전체 스키마 노출
- WAF만 믿고 앱에서 입력 검증을 생략
- WAF 우회 시 방어층이 없음
- 인증 서버 장애 시 모든 API가 열려 버림 (fail open)
- 한 번 로그인하면 토큰 만료까지 권한 재검사 없음
오리엔테이션에서 CIA와 인증·인가를 봤다. 원칙은 구체 기술(TLS, JWT) 앞에 적용하는 설계 규칙이다.
1. 최소 권한 (Least Privilege)
주체(사용자·프로세스·서비스)에게 업무에 필요한 최소 권한만 부여한다.

| 계층 | 나쁜 예 | 좋은 예 |
|---|---|---|
| DB | 앱이 DROP TABLE 가능 |
SELECT/INSERT/UPDATE만, 테이블 단위 |
| OS/K8s | 컨테이너 root | non-root, read-only rootfs |
| Cloud IAM | AdministratorAccess |
역할별 정책, workload identity |
| 앱 | 모든 API가 admin | RBAC, 리소스 소유권 검사 |
- 권한은 시작을 넓게 주지 않는다
- 개발 편의로 준 admin이 프로덕션에 그대로 남는 경우가 많음
- 정기 검토
- 퇴사·역할 변경 시 즉시 회수
- JWT·세션에 과도한 scope 넣지 않기 (JWT 편)
2. 다층 방어 (Defense in Depth)
한 통제가 뚫려도 다음 층이 막는다. CIA 각각에 여러 방어.

[Internet]
→ WAF / Rate limit
→ TLS 종료
→ API Gateway 인증
→ 앱 입력 검증·파라미터화 쿼리
→ 비즈니스 로직 인가
→ DB 최소 권한 계정
→ 감사 로그
| 층 | 예 |
|---|---|
| 네트워크 | 방화벽, SG, private subnet |
| 전송 | TLS, mTLS |
| 인증·인가 | OAuth, RBAC |
| 앱 | OWASP 대응, CSRF 토큰 |
| 데이터 | 암호화 at rest, 마스킹 |
- "우리는 HTTPS 쓰니까 안전" — 한 층만으로는 부족
- 층마다 다른 실패 모드 — 모두 같은 버그에 의존하지 않게
3. 실패 시 안전 (Fail Secure)
오류·장애 시 더 열리지 않고 닫히거나 거부하는 쪽이 기본.

| Fail Open (위험) | Fail Closed (권장) | |
|---|---|---|
| 인증 서버 다운 | 모든 요청 통과 | 503, 요청 거부 |
| 권한 캐시 오류 | admin 허용 | deny |
| WAF 파싱 실패 | 트래픽 bypass | block 또는 strict mode |
- 기본 거부 (Deny by Default)
- 화이트리스트: 명시적으로 허용한 것만
- API: 인증·인가 없는 엔드포인트 기본 차단
- 우아한 실패 vs 보안 실패
- UX는 degraded mode 가능해도, 권한 판단은 불확실하면 deny
4. 완전 매체 (Complete Mediation)
모든 접근마다 권한을 다시 검사한다. 한 번 통과했다고 영구 허용이 아니다.
- 매 API 요청마다 인가 확인
- 파일 다운로드 URL도 서명·만료 (presigned URL)
- 관리자 세션도 재인증 (민감 작업)
| 위반 예 | 원칙 |
|---|---|
| 로그인 후 URL만 알면 영구 접근 | 매 요청 검사 |
| 숨겨진 admin API | 라우팅·인가 일관 적용 |
| 캐시된 "admin=true" | TTL·무효화 |
5. 기타 핵심 원칙 (요약)
| 원칙 | 한 줄 |
|---|---|
| 경제성 of 메커니즘 | 공격 비용 > 방어 비용이게 |
| 심리적 수용성 | 보안이 너무 불편하면 우회됨 — 균형 |
| 개방 설계 | 비밀에 의존하지 않음 (Kerckhoffs) |
| 최소 공통 | 공유 컴포넌트·권한 최소화 |
| 심층 방어 + 최소 권한 | 실무에서 가장 자주 인용되는 조합 |
- 원칙은 체크리스트로 쓴다
- 새 API: 인증? 인가? 입력 검증? 로그? 실패 시 closed?
- 배포 전 보안 체크리스트 편에서 다시 묶는다
다음에 다룰 것
- TLS 심화
- cipher suite, mTLS 개요
해당 내용은 OWASP Cheat Sheet Series 및 NIST SP 800-53 Rev. 5 의 내용을 기반으로 합니다.