정책은 선언되었으나, 시스템은 아직 신뢰한다 — 제로 트러스트 시행 격차의 해부
5 views
# 정책은 선언되었으나, 시스템은 아직 신뢰한다
2020년대 중반, 제로 트러스트는 거의 모든 보안 백서의 표지에 올랐다. CISO의 발표 자료, 컨설팅 제안서, 정부 가이드라인이 한목소리로 "암묵적 신뢰를 제거하라"고 외쳤다. 그러나 현장의 풍경은 다르다. 정책 문서에는 "모든 접근은 검증된다"고 적혀 있지만, 운영 콘솔에는 여전히 10.0.0.0/8 대역에 대한 무조건 허용 규칙이 살아 있다. 선언과 실행 사이의 이 깊은 골을 **시행 격차(implementation gap)**라 부른다.
격차는 게으름의 산물이 아니다. 조직이 오랫동안 신뢰를 운영해온 관습과, 신뢰를 매번 재검증하라는 새로운 요구가 부딪치며 내는 마찰음이다.
## 격차는 어디서 발생하는가

### 첫 번째 균열: 자산의 안개
제로 트러스트의 첫 문장은 "보호 대상을 정의하라"이다. 그런데 대부분의 조직은 자신이 무엇을 가지고 있는지조차 모른다. CMDB(구성관리 데이터베이스)는 18개월 전 시점에 멈춰 있고, 클라우드 계정에는 누가 만들었는지 모를 S3 버킷이 남아 있으며, 사업부가 직접 결제한 SaaS는 IT 부서의 시야 밖에 있다.
NIST SP 800-207이 강조하는 "보호 표면(protect surface)"의 정의는 자산 목록이 정확하다는 전제 위에 서 있다. 전제가 무너지면 그 위에 쌓인 정책은 허구가 된다. 한 금융권 사례에서 제로 트러스트 도입 6개월 차에 발견된 미등록 워크로드는 전체의 23%였다. 정책은 나머지 77%를 보호했고, 공격자는 23%를 노렸다.
자산을 모르면 신뢰의 경계도 그릴 수 없다.
### 두 번째 균열: 신원의 분열
제로 트러스트는 신원(identity)을 새로운 경계로 삼는다. 그러나 대부분의 조직에서 신원은 단일하지 않다. Active Directory의 사용자, Okta의 SSO 계정, GitHub의 머신 아이덴티티, Kubernetes의 ServiceAccount, 레거시 시스템의 로컬 계정이 서로를 알지 못한 채 공존한다.
문제는 권한이 신원을 따라 흐르지 않고 시스템마다 별도로 누적된다는 점이다. 한 사용자가 부서를 옮긴다고 가정해보자. HR 시스템은 직책을 바꾸었고 IdP(신원공급자)는 그룹을 갱신했다. 그러나 3년 전 프로젝트에서 부여된 데이터베이스 직접 접근 권한은 어느 콘솔에도 흔적 없이 살아 있다. 정책은 "최소 권한"을 말하지만, 운영은 "누적 권한"을 굴린다.
### 세 번째 균열: 레거시의 중력
제로 트러스트 아키텍처는 모든 트래픽이 정책 결정 지점(PDP)을 통과한다고 가정한다. 그러나 1998년에 도입된 코어뱅킹 시스템, 공장 바닥의 PLC, 의료기관의 HIS는 그 가정을 받아들이지 않는다. 이들은 평문 프로토콜로 통신하고, 인증서 갱신을 견디지 못하며, 세션 중단을 장애로 인식한다.
레거시는 단순히 "오래된 것"이 아니다. 조직 매출의 대부분을 떠받치는 중력장이다. 정책이 이 중력을 거스르려 할 때 휘는 쪽은 결국 정책이다. "내부망의 레거시 구간은 예외"라는 단서 조항이 추가되고, 그 단서가 제로 트러스트의 진짜 의미를 갉아먹는다.

## 격차의 본질: 신뢰는 관성이다
기술적 균열의 목록은 길지만, 그 아래 흐르는 본질은 하나다. **신뢰는 관성이다.**
조직은 지난 20년간 "내부망은 안전하다"는 명제 위에서 모든 워크플로우를 설계해왔다. 운영팀의 점프 호스트, 개발자의 VPN, 협력사의 전용선, 분기 정산 시 일괄 실행되는 배치 스크립트가 모두 "한 번 들어오면 신뢰한다"는 전제 위에 서 있다.
제로 트러스트는 이 전제를 뒤집으라고 요구한다. 그러나 전제를 뒤집는 순간 그 위에 쌓인 수천 개의 워크플로우가 동시에 흔들린다. 보안팀이 새 정책을 켜면 결산 배치가 실패하고, 영업 시스템이 응답하지 않으며, 임원의 화상회의가 끊긴다. 그리고 다음 날 아침, 정책은 조용히 예외 처리된다.
격차란 결국 **조직이 자신의 관성을 정직하게 측정하지 않은 결과**다.
## 단계별 대응: 무엇을 먼저 무너뜨릴 것인가
격차를 메우는 일은 새로운 도구를 사는 일이 아니라 무너뜨릴 순서를 정하는 일이다.
### 1단계: 가시성의 회복 (0~3개월)

정책을 적용하기 전에 무엇이 무엇과 통신하는지부터 본다. EDR, NDR, CASB, CSPM의 로그를 단일 데이터 레이크로 모아 트래픽 그래프를 그린다. 이 단계의 목표는 차단이 아니라 **지도 작성**이다. 지도 없이 그은 정책은 반드시 누군가의 업무를 끊는다.
이때 발견되는 "설명되지 않는 통신"의 양이 그 조직의 시행 격차 크기와 거의 정확히 비례한다.
### 2단계: 신원 통합과 권한의 청소 (3~9개월)
분열된 신원을 IdP로 수렴시키고, 권한을 역할 기반(RBAC) 또는 속성 기반(ABAC)으로 재정의한다. 핵심은 신규 정책 수립이 아니라 **기존 권한의 만료**다. 모든 권한에 유효기간을 부여하고 갱신을 명시적 행위로 만든다. 갱신되지 않는 권한은 사라진다.
JIT(Just-In-Time) 접근과 PAM(특권 접근 관리)을 이 단계의 축으로 삼는다. 관리자 권한이 평소에는 존재하지 않고 필요할 때만 일정 시간 부여되는 구조. 이는 단순한 기술 변경이 아니라 **운영 문화의 전환**이다.
### 3단계: 마이크로세그멘테이션의 점진 적용 (9~18개월)
전체 네트워크를 한 번에 분할하려는 시도는 거의 예외 없이 실패한다. 보호 표면을 단위로 쪼개고, 가장 가치 높고 노출이 적은 자산부터 시작한다. 결제 시스템, 고객 데이터베이스, 소스코드 저장소. 이들 주변에 먼저 미세한 경계를 그리고, 정책을 모니터 모드로 운영하며 충분한 학습 기간을 거친 뒤 차단 모드로 전환한다.
레거시는 별도의 트랙으로 분리한다. 가장 현실적인 방법은 레거시 앞단에 프록시 게이트웨이를 두어 신원·세션·정책을 외부에서 강제하는 것이다. 레거시 내부는 바꾸지 않되, 레거시로 들어가는 길목을 바꾼다.
### 4단계: 정책의 코드화와 지속적 검증 (18개월 이후)
정책이 PDF에 살아 있는 한 그것은 죽은 정책이다. 정책은 코드로 표현되고, 버전 관리되며, CI/CD 파이프라인에서 검증되어야 한다. OPA(Open Policy Agent), Cedar, Kyverno 같은 정책 엔진이 이 단계의 기반이다.
```rego
package access
default allow = false
allow {
input.user.mfa_verified == true
input.device.compliance == "compliant"
input.resource.classification == "confidential"
time.now_ns() - input.session.start_ns < 3600000000000
}
```
이 짧은 규칙 하나가 30페이지짜리 PDF 정책 문서보다 더 정확하게, 더 지속적으로 신뢰를 검증한다. 정책이 코드가 되는 순간 시행 격차는 측정 가능한 지표가 된다.
## 격차를 받아들이는 자세
제로 트러스트는 도착하는 상태가 아니라 향하는 방향이다. 어떤 조직도 "우리는 완전한 제로 트러스트를 달성했다"고 선언할 수 없다. "우리는 완전히 안전하다"는 말과 다르지 않기 때문이다. 안전은 상태가 아니라 행위이며, 신뢰의 검증은 한 번의 프로젝트가 아니라 영구적인 운영이다.
격차는 부끄러움이 아니다. 격차를 측정하지 않는 것이 부끄러움이다. 시행 격차의 크기를 정량적으로 추적하고 매 분기 그것이 줄어들고 있음을 증명하는 조직만이, 제로 트러스트라는 단어를 사용할 자격을 갖는다.
> "위태로움을 알면 위태롭지 않다(知危則不危)."
오래된 병법의 문장이 새로운 보안 철학의 핵심을 이미 적어두었다. 신뢰를 의심하는 자만이 신뢰를 운영할 자격을 얻는다. 정책이 선언되는 순간이 아니라, 정책이 매일 검증되는 순간에 비로소 제로 트러스트는 시작된다.