1. ZAC란 무엇인가?
ZAC(Ziti Administration Console) 는 OpenZiti 네트워크를 시각적으로 관리할 수 있는 웹 기반 관리 UI입니다.
- OpenZiti Controller가 직접 ZAC를 호스팅합니다.
- 별도 서버 없이 Controller의 Management API 포트를 통해 접속합니다.
- 접속 URL 형식:
https://<Controller_주소>:8441/zac/
2. ZAC 대시보드

대시보드의 추가 기능
Downloads 버튼
다운로드 버튼을 클릭하면 Ziti Tunneler 다운로드 페이지로 이동합니다. ZT 클라이언트의 다양한 버전도 확인할 수 있습니다.
Docs 버튼
Docs 버튼을 클릭하면 OpenZiti의 전체 공식 문서로 이동합니다.
3. Identities
아이덴티티(Identity)는 OpenZiti 네트워크에서 모든 참여자를 식별하는 고유한 신원 정보입니다. 사람(사용자), 디바이스, 라우터, 서버 등 네트워크에 참여하는 모든 것이 아이덴티티를 가집니다.
라우터를 생성하며 자동으로 Identity가 생깁니다. 각 라우터는 자체 아이덴티티를 가집니다.
핵심 원리:
- 라우터를 생성하고 Controller에 등록(enroll)하면 → 라우터 전용 Identity가 자동으로 생성됩니다.
- 이 자동 생성된 Identity는 라우터가 Controller와 인증을 통해 네트워크에 참여하는 데 사용됩니다.
| 상태 | 색상 | 의미 |
|---|---|---|
| 인증 성공 | 🟢 초록색 | 네트워크 참여 허용 |
| 인증 실패/미연결 | 🔴 빨간색 | 네트워크 참여 불가 |
💡 추가 설명 — Identity의 종류
| 종류 | 설명 |
|---|---|
| Router Identity | 라우터 생성 시 자동으로 생성됨 |
| User Identity | 원격 사용자(REMOTE-PC 등) 수동 생성 |
| Device Identity | 서버나 PC에 ZET(Ziti Edge Tunneler)를 설치할 때 생성 |
Identity는 JWT(JSON Web Token) 파일로 발급되며, 이 파일을 Ziti 클라이언트에서 등록하면 해당 장치가 OpenZiti 네트워크의 구성원이 됩니다.
4. Services (서비스)
Service(서비스) 는 OpenZiti 네트워크에서 보호하고 노출할 애플리케이션(목적지)을 정의하는 객체입니다. “이 앱에 이 방법으로 접근하라”고 OpenZiti에게 알려주는 역할입니다.
서비스 생성에 필요한 두 가지 설정
서비스를 생성하려면 최소 두 가지 설정이 필요합니다. 하나는 Intercept, 하나는 Host입니다.
| 설정 | 역할 | 비유 |
|---|---|---|
| Intercept | 클라이언트가 접근하는 가상 주소/포트 정의 | “이 주소로 오는 요청을 내가 잡겠다” |
| Host | 실제 애플리케이션이 있는 서버 주소/포트 정의 | “실제로 요청을 전달할 목적지” |
💡 추가 설명 — 동작 원리
클라이언트 → [Intercept 주소로 요청] → OpenZiti 오버레이 → [Host 주소로 전달] → 실제 서버예를 들어, myziti.local:80으로 접속하면 → OpenZiti가 가로채서 → 실제 10.20.0.4:80으로 전달합니다. 클라이언트는 실제 서버 IP를 알 필요가 없어, 네트워크 노출을 최소화합니다.
5. Policies (정책)
Policy(정책) 는 “어떤 Identity가 어떤 Service에 어떤 방식으로 접근할 수 있는가”를 정의하는 권한 규칙입니다. 서비스와 아이덴티티를 연결하는 다리 역할을 합니다.
두 가지 Policy 모드
| 모드 | 역할 | 할당 대상 |
|---|---|---|
| DIAL | 서비스에 접속(연결 요청) 권한 | 클라이언트 (사용자, 원격 PC 등) |
| BIND | 서비스를 노출(호스팅) 권한 | 서버 측 라우터 또는 디바이스 |
💡 추가 설명 — 정책 없이는 접근 불가
OpenZiti는 기본적으로 Zero Trust 원칙을 따릅니다. 즉, 명시적으로 허용하지 않으면 모든 접근이 차단됩니다. 서비스 생성 → 아이덴티티 생성 → 정책으로 연결 이 세 단계가 모두 완료되어야 실제 통신이 가능합니다.
예시 (시나리오 1 — 웹 서비스 접근):
정책 이름 서비스 아이덴티티 모드 AZ-WEB-ACCESS-DIAL AZ-WEB-SERVICE OP-PRIVATE-ER, REMOTE-PC DIAL AZ-WEB-ACCESS-BIND AZ-WEB-SERVICE AZ-PRIVATE-ER BIND
6. Routers (라우터)
Router(라우터) 는 OpenZiti 오버레이 네트워크에서 트래픽을 중계하는 노드입니다. 일반 네트워크의 라우터와 유사하지만, OpenZiti 오버레이 위에서만 동작합니다.
라우터의 종류
| 종류 | 위치 | 역할 |
|---|---|---|
| Public Router | 공개 IP를 가진 클라우드 | 외부 클라이언트의 진입점, 라우터 간 링크 형성 |
| Private Router | 내부 네트워크 (온프레미스/클라우드 내부) | 내부 서비스 트래픽 처리, 외부에 직접 노출 안 됨 |
💡 추가 설명 — 라우터 등록 흐름
1. 라우터 VM에서 ziti_router_auto_enroll 실행
↓
2. Controller에 인증 요청 (JWT 또는 admin 자격증명 사용)
↓
3. Controller가 라우터 전용 Identity 자동 생성
↓
4. 인증 성공 → ZAC에서 초록색으로 표시
↓
5. 라우터가 OpenZiti 오버레이에 참여7. Authentication (인증)
기본적으로 모든 Controller는 자체 서명 인증서(Self-signed Certificate)를 가집니다. 나머지 모든 컴포넌트는 동일한 인증서로 서명됩니다. 만약 자체 CA(인증기관)를 사용하고 싶다면 여기에 추가할 수 있습니다.
인증 방식 요약
| 항목 | 기본값 | 커스텀 |
|---|---|---|
| Certificate Authority | Controller 자체 서명 인증서 | 직접 CA 등록 가능 |
| 컴포넌트 서명 | 동일한 Controller CA로 서명 | 외부 CA 사용 가능 |
💡 추가 설명 — Self-signed vs. 외부 CA
- Self-signed (기본): 빠르게 테스트 환경 구성 가능. 별도 설정 불필요. 단, 외부 신뢰 기관의 검증 없음.
- 외부 CA 사용: 기업 환경에서 이미 운영 중인 PKI 인프라와 통합할 때 사용. ZAC의 Authentication 탭에서 CA 인증서를 직접 업로드하면 됩니다.
8. Sessions (세션)
Session(세션) 은 아이덴티티가 서비스에 실제로 접속했을 때 생성되는 활성 연결 기록입니다.
| 항목 | 설명 |
|---|---|
| 생성 시점 | Identity가 Policy에 의해 허용된 서비스에 성공적으로 연결할 때 |
| 확인 용도 | “누가 현재 어떤 서비스를 사용 중인가?” 모니터링 |
| 표시 정보 | 연결된 Identity, 대상 Service, 연결 시간 등 |
9. API Sessions
API Session 은 라우터, ZET 클라이언트 등 각종 컴포넌트가 Controller에 연결되어 있는 상태를 보여주는 뷰입니다.
| 항목 | Sessions | API Sessions |
|---|---|---|
| 대상 | 서비스 접속 연결 | Controller와의 제어 연결 |
| 확인 내용 | 누가 어느 서비스에 접속 중인가 | 어떤 컴포넌트가 Controller에 연결되어 있는가 |
10. 핵심 개념 정리
| 메뉴 | 역할 | 주요 작업 |
|---|---|---|
| Dashboard | 전체 현황 요약 | 컴포넌트 수 확인, 다운로드/문서 접근 |
| Identities | 네트워크 참여자 관리 | 사용자/디바이스 Identity 생성, 상태 확인 |
| Services | 보호할 애플리케이션 정의 | Intercept + Host 설정 |
| Policies | 접근 권한 규칙 정의 | DIAL/BIND 정책 생성 |
| Routers | 트래픽 중계 노드 관리 | 라우터 생성/등록/상태 확인 |
| Authentication | 인증서/CA 관리 | 자체 CA 등록 |
| Sessions | 활성 서비스 연결 확인 | 연결 상태 모니터링 |
| API Sessions | Controller 연결 컴포넌트 확인 | 컴포넌트 연결 상태 모니터링 |
서비스 접근을 위한 필수 3단계
① Identity 생성
└─ 접근할 사용자/디바이스의 신원 등록
② Service 생성
└─ Intercept(가상 주소) + Host(실제 서버 주소) 설정
③ Policy 생성
└─ "어떤 Identity가" + "어떤 Service에" + "DIAL/BIND" 연결⚠️ 이 세 단계 중 하나라도 빠지면 연결이 되지 않습니다. OpenZiti의 Zero Trust 원칙 — 명시적으로 허용하지 않으면 모든 것은 차단됩니다.
11. 구성 요소 관계도
┌─────────────────────────────────────────────┐
│ ZT Controller │
│ (ZAC 호스팅 + 인증 관리) │
└────────────────┬────────────────────────────┘
│ 인증 (Identity 기반)
┌────────┴────────┐
│ │
┌────▼────┐ ┌─────▼─────┐
│ Router │ │ Router │
│(Private)│ │ (Public) │
└────┬────┘ └─────┬─────┘
│ │
[내부 트래픽] [외부 연결 진입]
│
┌────▼──────────────────────┐
│ Service │
│ Intercept ──► Host │
│ (가상 주소) (실제 서버) │
└────┬──────────────────────┘
│ Policy로 연결
┌────▼────────────────┐
│ Identity │
│ (사용자/디바이스/라우터) │
└─────────────────────┘