|

ClearPass 정책 가시성의 한계를 넘어 AI 기반 제로 트러스트(Zero Trust) 진화 모델

⏱️ 예상 읽기 시간: 약 29분 (29 min read)

엔터프라이즈 네트워크 보안의 핵심 관문인 NAC(Network Access Control)를 이야기할 때, HPE Aruba Networking의 ClearPass Policy Manager (CPPM)는 현존하는 가장 강력하고 유연한 정책 엔진으로 꼽힙니다. 단말의 프로파일링 정보, AD 그룹, 접속 시간, 위치, 보안 상태 등 상상할 수 있는 거의 모든 컨텍스트를 조합해 정교한 접근 제어를 구현할 수 있기 때문입니다.

ClearPass 정책 가시성의 한계를 넘어 AI 기반 제로 트러스트(Zero Trust) 진화 모델 - image 16

하지만 이 압도적인 유연성 뒤에는 모든 ClearPass 운영자가 공통으로 겪는 고질적인 페인 포인트(Pain Point)가 존재합니다.
바로 ‘밑바닥부터 조립해 올라가야 하는 복잡한 정책 구조와 UX의 파편화’입니다.

1. ClearPass 운영자의 딜레마: 왜 정책을 한눈에 파악하기 어려운가?

ClearPass에서 단 하나의 신규 인증 서비스(Service)를 온전히 만들어내기 위해 관리자가 거쳐야 하는 설정 순서를 떠올려 보겠습니다.
우리가 최종적으로 만들고자 하는 것은 “특정 사용자가 접속했을 때 알맞은 권한(VLAN, ACL 등)을 부여하는 서비스”지만, 실제 GUI에서의 작업은 철저히 역순(Bottom-Up)으로 진행됩니다.

설정 단계ClearPass 메뉴 경로생성 객체운영자가 겪는 UX 병목 및 고충
Step 1Identity > RolesRole사용자/단말에게 부여할 논리적 꼬리표(태그)를 먼저 정의
Step 2Identity > Role MappingsRole Mapping PolicyAD 부서나 단말 속성 조건에 따라 Step 1의 Role을 매핑하는 규칙 생성
Step 3Enforcement > ProfilesEnforcement Profile스위치나 컨트롤러에 실제로 내려줄 RADIUS 속성(VLAN ID, dACL, Role 등) 정의
Step 4Enforcement > PoliciesEnforcement Policy부여받은 Role과 추가 조건을 결합해 Step 3의 Profile을 매칭하는 정책 생성
Step 5Configuration > ServicesService비로소 인증 소스, Role Mapping(Step 2), Enforcement Policy(Step 4)를 하나로 조립
레고 블록식 구조가 만들어내는 ‘정책의 미로’

이 레고 블록(모듈형) 아키텍처는 객체의 재사용성 측면에서는 훌륭한 설계입니다.

한 번 만들어 둔 Enforcement Profile이나 Role Mapping 정책을 여러 서비스에서 가져다 쓸 수 있기 때문입니다.
하지만 운영 기간이 1년, 3년 넘어가고 서비스가 수십 개로 늘어나면 이 장점은 곧바로 가시성의 재앙으로 돌변합니다.

  1. 화면 전환(Context Switching)의 피로도: 특정 사용자가 왜 격리 VLAN으로 빠졌는지 정책 흐름을 따라가려면 Service 탭을 열어 연결된 정책 이름을 메모하고, Role Mapping 메뉴로 이동해 조건문을 확인한 뒤, 다시 Enforcement Policy와 Profile 메뉴를 오가며 팝업창을 서너 개씩 띄워야 합니다.
  2. 역방향 추적(Reverse Tracking)의 부재: “이 Enforcement Profile의 VLAN 번호를 바꾸면, 이 프로파일을 공유해서 쓰고 있는 다른 유선/무선/VPN 서비스 어디에 영향이 갈까?” ClearPass 기본 GUI에서는 하위 객체가 상위 어느 정책과 서비스에 묶여 있는지 역추적하기가 매우 까다롭습니다.
  3. 고아 객체(Orphan Objects)의 범람: 이전 담당자가 테스트용으로 만들어 둔 Role과 Profile들이 삭제되지 않고 수백 개씩 쌓여도, 혹시 운영 중인 서비스 어딘가에서 쓰이고 있을까 봐 겁이 나서 지우지 못하는 상황이 발생합니다.

결국 파편화된 정책 블록들을 하나의 완성된 설계도로 엮어서 보여줄 가시성(Visibility) 도구가 절실해집니다.
그리고 최근 HPE Networking 엔지니어가 만든 새로운 커뮤니티 프로젝트 하나가 이 가려운 곳을 정확히 긁어주고 있습니다.

2. 구원투수의 등장: ClearPass Policy Visualiser (CPV) 아키텍처 분석

ariyaparsa-dev/clearpass-policy-visualiser는 Python Flask 기반으로 개발된 오픈소스 웹 애플리케이션입니다.
앞서 언급한 ClearPass의 5단계 조립 구조를 단일 인터랙티브 그래프와 영향도 분석 리포트로 단숨에 시각화해 줍니다.

ClearPass 정책 가시성의 한계를 넘어 AI 기반 제로 트러스트(Zero Trust) 진화 모델 - image 15

단순히 설정 파일(XML)을 오프라인으로 덤프해서 보여주는 정적 뷰어가 아니라, 실제 운영 중인 ClearPass 클러스터와 실시간으로 연동되어 동작한다는 점이 핵심입니다.

왜 3가지 프로토콜을 동시에 결합했는가?

이 리포지토리의 코드베이스를 뜯어보면 설계자의 깊은 ClearPass 아키텍처 이해도를 확인할 수 있습니다.
CPV는 성능 병목을 없애기 위해 ClearPass의 3가지 인터페이스를 하이브리드로 결합했습니다.

연동 인터페이스주요 파이썬 모듈아키텍처 설계 의도 및 역할
REST APIcp_client.py, cp_provision.pyOAuth 2.0 기반으로 Service, Role, Policy 등 정책 트리의 메타데이터 수집 및 초기 설정 객체의 멱등성(Idempotent) 프로비저닝 수행
PostgreSQLcp_endpoint_sql.py, cp_insight_sql.pyREST API로 조회 시 심각한 병목이 발생하는 대규모 Endpoint Repository 매칭 카운트와 Insight DB의 실시간 Hit Count를 내장 계정(appexternal)으로 직접 쿼리
RADIUSauth 모듈, cp_netdiag.pyCPV 자체의 별도 계정 DB를 만들지 않고, ClearPass 자체를 AAA 서버로 재사용하여 접속자의 Admin / ReadOnly 권한(RBAC)을 동적으로 매핑

이렇게 수집된 데이터는 cp_cache.py와 cp_object_graph.py를 통해 환경별(Prod, Test, Dev 등 최대 3개 멀티 클러스터 지원) 인메모리 객체 그래프(In-Memory Object Graph)로 정규화됩니다.

3. 실무 운영에서 CPV를 200% 활용하는 방법

CPV를 컨테이너(Docker Compose)로 띄우고 초기 온보딩 위저드(cp_setup.py)를 거치면, 그동안 GUI를 헤매며 겪었던 고충을 해결해 줄 3가지 무기를 얻게 됩니다.

  • 엔드투엔드 정책 플로우 시각화 (cp_graph.py): Service → Auth/Authz Sources → Role Mapping → Roles → Enforcement Policy → Enforcement Profile로 이어지는 전체 파이프라인을 한 화면의 마인드맵처럼 펼쳐 보여줍니다. 보안 감사(Audit)나 인수인계 시 SVG/PDF로 즉시 추출할 수 있습니다.
ClearPass 정책 가시성의 한계를 넘어 AI 기반 제로 트러스트(Zero Trust) 진화 모델 - image 14
  • 역방향 변경 영향도 분석 (cp_impact_analysis.py): 특정 Role이나 Enforcement Profile 노드를 클릭하면, 해당 객체를 참조하는 모든 상위 정책과 최종적으로 영향받는 Service 목록을 새 탭 리포트로 브리핑합니다. 작업 전 Blast Radius(폭발 반경)를 1초 만에 검증하는 안전장치입니다.
ClearPass 정책 가시성의 한계를 넘어 AI 기반 제로 트러스트(Zero Trust) 진화 모델 - image 12
  • 미사용 고아 객체 청소 (cp_unused_objects.py): 수년간 누적되었지만 현재 어느 서비스나 상위 정책에서도 호출되지 않는 Role, Policy, Profile을 자동으로 발라내어 안전한 정책 DB 다이어트를 돕습니다.
ClearPass 정책 가시성의 한계를 넘어 AI 기반 제로 트러스트(Zero Trust) 진화 모델 - image 13

4. 한 걸음 더: CPV + AI 연계를 통한 자율형 제로트러스트(Zero Trust) 구축

여기서 기술적인 상상력을 한 단계 더 확장해 보겠습니다.

최근 네트워크 보안 업계의 최대 화두는 Agentic AI(에이전틱 AI)를 활용한 제로트러스트(Zero Trust) 운영 자동화입니다.
하지만 LLM에게 ClearPass의 Raw API 데이터나 방대한 설정 파일을 그대로 던져주면, 복잡한 참조 관계를 이해하지 못해 토큰 한계를 초과하거나 심각한 할루시네이션(환각)을 일으킵니다.

이때 CPV가 이미 구축해 둔 ‘인메모리 객체 그래프’와 ‘SQL 분석 모듈’은 AI 에이전트에게 가장 완벽하게 정제된 컨텍스트 레이어(Context Layer)가 됩니다.
CPV의 파이썬 모듈들을 MCP (Model Context Protocol) 서버나 Function Calling 도구로 래핑(Wrapping)했을 때 구현할 수 있는 3가지 혁신적인 사용 사례를 소개합니다.

Use Case ①: 자연어 기반 정책 변경 시뮬레이터 (What-If 분석기)

제로트러스트 환경에서는 최소 권한 원칙(Least Privilege)을 유지하기 위해 정책이 수시로 변경됩니다.
CPV의 cp_impact_analysis.py와 cp_role_references.py를 AI 에이전트의 도구로 연결하면 대화형 사전 검증이 가능해집니다.

  • 엔지니어 프롬프트: “계약직 무선 서비스에서 ‘Contractor-Role’에 매핑된 격리 VLAN 프로파일을 수정하려고 해. 혹시 유선 802.1X나 VPN 서비스 쪽에 사이드 이펙트가 있을까?”
  • AI + CPV 작동 방식: AI 에이전트가 CPV의 역방향 그래프 탐색 함수를 호출하여 의존성 트리를 JSON으로 받아온 뒤, 단순 목록 나열이 아니라 조건문(Tips:Role 등)의 맥락까지 해석하여 답변합니다.
  • 결과: “해당 프로파일은 무선뿐만 아니라 ‘Branch-Wired-802.1X’ 서비스의 4번째 조건 규칙에서도 참조되고 있어 수정 시 지사 유선 단말의 VLAN이 함께 변경됩니다. 무선 전용 프로파일을 새로 복제하여 적용하는 것을 권장합니다.”와 같은 수준의 가이드를 제공합니다.
Use Case ②: GraphRAG 기반 제로트러스트 보안 감사 및 Shadow Policy 탐지

제로트러스트 아키텍처의 가장 큰 적은 복잡한 설정 속에 숨어 있는 ‘논리적 빈틈(Shadow Policy)’입니다.
CPV의 cp_graph.py가 생성하는 노드와 엣지(Nodes & Edges) 토폴로지 데이터를 LLM의 GraphRAG 컨텍스트로 주입하고, cp_insight_sql.py의 히트 카운트 데이터를 결합합니다.

AI 보안 감사 시나리오:

  1. 과도한 권한 부여 경로 탐지: “인증 소스는 일반 AD인데, Role Mapping 조건이 느슨하게 구성되어 있어 최종적으로 내부망 전체 허용(Allow-All) 프로파일이 내려갈 수 있는 논리적 경로를 모두 찾아줘.”
  2. 데드 서비스(Dead Policy) 분석: 서비스 순서(Order) 상단에 위치한 정책의 매칭 조건이 너무 광범위하여, 하단에 정의된 세분화된 보안 정책까지 트래픽이 도달하지 못하는 구조적 오류를 AI가 그래프 순회와 실제 Hit Count(0건) 데이터를 대조하여 찾아냅니다.
Use Case ③: 자율형 단말 트러블슈팅 에이전트 (Access Tracker + CPV 결합)

현업에서 가장 많은 시간을 쏟는 업무는 *”특정 단말이 왜 의도한 Role을 받지 못하고 Guest나 Quarantine VLAN으로 빠졌는가?”*를 추적하는 일입니다.
CPV의 PostgreSQL 연동 모듈(cp_endpoint_sql.py)과 정책 캐시(cp_services.py)를 결합하면 이 과정을 자동화할 수 있습니다.

  • 엔지니어 프롬프트: “MAC 주소 AA:BB:CC:11:22:33 단말이 임원용 노트북인데 왜 계속 Guest 권한으로 떨어지는지 원인 찾아줘.”
  • AI + CPV 작동 방식:
    1. 에이전트가 cp_endpoint_sql.py를 호출해 해당 단말의 현재 프로파일링 속성(Device Category, OS Family, Custom Attributes 등)을 DB에서 즉시 조회합니다.
    2. 이어서 CPV에 캐시된 Role Mapping 조건 트리(Condition Rules)와 단말의 실제 속성을 LLM이 1:1로 비교(Diff)합니다.
  • 결과: “해당 단말은 OS 속성은 Windows로 정상 분류되었으나, Endpoint Repository에 Corporate-Managed = True 커스텀 속성이 누락되어 있습니다. 이로 인해 Role Mapping 정책의 2번 규칙(임원 조건)을 통과하지 못하고 Default Role인 Guest로 매핑되었습니다.”라며 정확한 실패 지점과 해결책을 즉시 제시합니다.

코드로 보는 CPV + FastMCP 연동 프로토타입

CPV 프로젝트의 가장 큰 장점은 비즈니스 로직이 Flask 라우팅 파일(app.py)에 강하게 결합되어 있지 않고, cp_impact_analysis.py, cp_endpoint_sql.py, cp_object_graph.py 등 독립적인 파이썬 모듈로 깔끔하게 분리되어 있다는 점입니다.

따라서 기존 CPV 코드를 수정할 필요 없이, 동일한 디렉터리에 cpv_mcp_server.py 파일 하나만 추가하면 앞서 살펴본 3가지 AI Use Case를 즉시 구현할 수 있습니다.

Python
# 파일명: cpv_mcp_server.py
# 실행 방법: uv run mcp run cpv_mcp_server.py

from typing import Dict, Any, List
from mcp.server.fastmcp import FastMCP

# CPV 기존 코어 모듈 임포트
import cp_environments
import cp_impact_analysis
import cp_object_graph
import cp_endpoint_sql
import cp_insight_sql

# FastMCP 서버 인스턴스 초기화
mcp = FastMCP("ClearPass-ZeroTrust-Advisor")

def _get_env_context(env_name: str = "Prod_Cluster"):
    """CPV의 멀티 환경(v1.7.0) 컨텍스트에서 활성화된 캐시 및 DB 세션을 가져옵니다."""
    env = cp_environments.get_environment_by_name(env_name)
    if not env or not env.is_loaded:
        raise ValueError(f"[{env_name}] 환경이 로드되지 않았거나 존재하지 않습니다.")
    return env


# =====================================================================
# Use Case 1: 자연어 기반 정책 변경 시뮬레이터 (What-If 분석기)
# =====================================================================
@mcp.tool()
def analyze_policy_blast_radius(
    object_type: str, 
    object_name: str, 
    env_name: str = "Prod_Cluster"
) -> Dict[str, Any]:
    """
    특정 ClearPass 객체(Role, Enforcement Profile, Policy 등)를 수정하거나 삭제하기 전,
    해당 객체를 참조하는 모든 상위 정책과 최종 영향받는 Service 목록(폭발 반경)을 역추적합니다.
    
    :param object_type: 'profile', 'enforcement_policy', 'role_mapping', 'role' 중 택 1
    :param object_name: 분석할 객체의 정확한 이름 (예: 'Contractor-Isolate-VLAN-Profile')
    :param env_name: 대상 ClearPass 클러스터 환경 이름 (기본값: Prod_Cluster)
    """
    env = _get_env_context(env_name)
    
    # CPV의 역방향 참조 추적 엔진 호출
    impact_report = cp_impact_analysis.build_impact_report(
        cache=env.cache,
        object_type=object_type,
        target_name=object_name
    )
    
    return {
        "environment": env_name,
        "target_object": f"{object_type}:{object_name}",
        "affected_services_count": len(impact_report.get("affected_services", [])),
        "affected_services": impact_report.get("affected_services", []),
        "referencing_policies": impact_report.get("referencing_policies", []),
        "condition_rules_context": impact_report.get("matched_conditions", []),
        "is_orphan": len(impact_report.get("affected_services", [])) == 0
    }


# =====================================================================
# Use Case 2: GraphRAG 기반 보안 감사 및 Shadow/Dead Policy 탐지
# =====================================================================
@mcp.tool()
def audit_service_graph_and_hits(env_name: str = "Prod_Cluster") -> List[Dict[str, Any]]:
    """
    전체 ClearPass 서비스의 평가 순서(Order), 조건문, 매핑된 Role/Profile 그래프 구조와
    현재 시간대 실제 인증 Hit Count를 결합하여 반환합니다. 
    과도한 권한 부여 경로(Shadow Policy)나 매칭되지 않는 데드 정책(Dead Service) 감사에 활용됩니다.
    """
    env = _get_env_context(env_name)
    
    # 1. CPV 인메모리 객체 그래프에서 전체 서비스 토폴로지 추출
    full_graph = cp_object_graph.export_serializable_graph(env.cache)
    
    # 2. ClearPass Insight PostgreSQL에서 실시간 서비스 Hit Count 조회
    hit_counts = cp_insight_sql.fetch_current_hour_service_hits(env.db_config)
    
    audit_payload = []
    for service in full_graph.get("services", []):
        svc_name = service["name"]
        audit_payload.append({
            "eval_order": service["order"],
            "service_name": svc_name,
            "service_type": service["type"],
            "current_hour_hits": hit_counts.get(svc_name, 0),
            "service_match_rules": service["rules"],
            "role_mapping_flow": service["role_mapping_summary"],
            "enforcement_outcomes": service["enforcement_profiles"]
        })
        
    return audit_payload


# =====================================================================
# Use Case 3: 단말 프로파일링 속성 vs 정책 조건 비교 (자율 트러블슈팅)
# =====================================================================
@mcp.tool()
def diagnose_endpoint_policy_mismatch(
    mac_address: str, 
    expected_service_name: str, 
    env_name: str = "Prod_Cluster"
) -> Dict[str, Any]:
    """
    특정 단말(MAC 주소)이 의도한 권한(Role/VLAN)을 받지 못할 때,
    PostgreSQL(appexternal)의 실시간 단말 프로파일링 속성과 대상 서비스의 Role Mapping 조건을
    나란히 추출하여 LLM이 정확한 불일치(Mismatch) 원인을 찾도록 돕습니다.
    """
    env = _get_env_context(env_name)
    
    # 1. PostgreSQL에서 단말의 현재 Endpoint Repository 속성 직접 쿼리
    endpoint_attrs = cp_endpoint_sql.get_endpoint_details_by_mac(
        db_config=env.db_config, 
        mac_address=mac_address
    )
    
    # 2. 캐시된 정책 트리에서 대상 서비스의 Role Mapping 및 Enforcement 조건문 추출
    target_service = env.cache.get_service_by_name(expected_service_name)
    if not target_service:
        return {"error": f"서비스 '{expected_service_name}'를 찾을 수 없습니다."}
        
    return {
        "mac_address": mac_address,
        "actual_endpoint_attributes": endpoint_attrs, # OS, Category, Custom 태그 등
        "expected_service_conditions": target_service.get("service_conditions"),
        "role_mapping_rules": target_service.get("role_mapping_rules"),
        "default_role": target_service.get("default_role"),
        "enforcement_rules": target_service.get("enforcement_rules")
    }

if __name__ == "__main__":
    mcp.run()

마치며: 가시성(Visibility)이 곧 AI 자동화의 시작이다

ClearPass의 Role, Role Mapping, Enforcement Profile, Policy로 이어지는 다단계 구조는 엔터프라이즈 보안을 빈틈없이 설계하기 위한 강력한 무기이지만, 인간 관리자의 인지 한계를 시험하는 양날의 검이기도 했습니다.

ClearPass Policy Visualiser (CPV)는 이 복잡한 퍼즐 조각들을 한 장의 지도로 맞춰주는 훌륭한 오픈소스입니다.
더 나아가 아키텍처 관점에서 보면, 파편화된 보안 정책을 AI 에이전트가 이해하고 추론할 수 있는 ‘그래프 데이터 구조(Graph Context)’로 변환해 주는 핵심 미들웨어로서의 가치가 더욱 빛납니다.

기존 CPV의 Flask 라우트(app.py)에 그래프와 영향도 분석 결과를 순수 JSON으로 내려주는 API 엔드포인트 몇 줄만 추가하고, 이를 Python FastMCP로 감싸주기만 해도 우리만의 강력한 AI NAC 어시스턴트를 프로토타이핑할 수 있습니다. 복잡한 정책 탭을 오가는 피로에서 벗어나 지능형 제로트러스트 운영을 고민하고 계신다면, 지금 바로 테스트베드에 CPV를 올려보시는 것은 어떨까요?

유사 게시물

  • [ACP-DC 교육#9] VSX (1)

    ⏱️ 예상 읽기 시간: 약 16분 (16 min read) 오늘날 네트워크 가용성에 대한 요구는 끊이지 않습니다.고객들은 24시간 365일 작동하는 네트워크를 필요로 하며, HPE의 VSX 기술은 이 문제에 대한 해결책을 제시합니다. HPE Aruba Networking의 VSX 기술은 AOS-CX 운영 체제에서 실행되는 데이터센터 및 코어 스위치를 위한 가상화…

  • Aruba의 포트폴리오(2)

    ⏱️ 예상 읽기 시간: 약 6분 (6 min read) 지난 포스팅에 이어 Aruba의 포트폴리오 소개를 이어보겠습니다. 네트워크 연결 순간 뿐만 아니라 연결 도중도 보안하는 – ClearPass 유선과 무선의 네트워크 연결과 함께 중요한 것이 보안입니다.이제는 모든 사물이 네트워크에 연결되는만큼 데이터 보호 및 불법 사용자 차단이 중요합니다. 그리고 나도…

  • 역할 기반의 제로 트러스트 환경

    ⏱️ 예상 읽기 시간: 약 8분 (8 min read) 그동안 우리의 네트워크 보안은 매우 정적(Static)이었습니다. 출발지 IP주소와 목적지 IP주소, 그리고 포트로 보안 정책을 만들어 트래픽을 제어하고 보안을 강화했습니다. 하지만, 이제 시대가 바뀌었습니다. IP 주소도 DHCP 환경으로 변화하고 있고, 사용자의 단말도 개인 단말을 포함하여 IT팀이 통제하기…

  • [ACSA 교육#4] 트래픽의 종류

    ⏱️ 예상 읽기 시간: 약 2분 (2 min read) 오늘은 트래픽의 종류에 대해서 알아볼까 합니다.컴퓨터 통신은 세가지로 분류될 수 있습니다. Unicast Multicast Broadcast Unicast Unicast 는 일대일 통신(송신기 1대 – 수신기 1대)을 나타냅니다. 쉽게 예를 들어보면, 교실에 여러 학생이 있다고 가정해보겠습니다. 그리고 선생님이 교실 문…

  • 카페 네트워킹? 간단하고 안전한 네트워크?

    ⏱️ 예상 읽기 시간: 약 5분 (5 min read) 기업들이 애플리케이션을 클라우드로 옮겨가면서, 기존의 지사 네트워크는 점점 더 복잡해지고 현대의 보안 및 연결성 요구를 충족하기 어려워졌습니다. 하이브리드 근무가 확산되면서, 직원들이 사무실에 있든 원격으로 일하든 관계없이 마치 카페에서처럼 간단하고 안전하며 일관된 사용자 경험을 제공해야 할 필요성이…

  • 차세대 NAC: 복잡성 없는 제로 트러스트 보안

    ⏱️ 예상 읽기 시간: 약 5분 (5 min read) 지난 1년 동안 많은 기업들은 데이터 손실 또는 다운타임을 초래한 7~8건의 보안 침해를 경험했습니다. 최근 Ponemon Institute가 발표한 “The 2025 Global Study on Closing the IT Security Gap” 보고서에서는 사이버 보안 격차를 해소하는 것이 얼마나 중요한지를…