Auth Service
인증 기관 CA(Certificate Authority)로서 호스트와 사용자 인증서를 서명합니다. 역할, 사용자, 등록된 리소스 같은 클러스터 설정을 보관하고 감사 이벤트와 세션 기록을 수집합니다. 사설망에 두는 것이 기본 구성입니다.
Teleport guide
서버 SSH(Secure Shell), Kubernetes, 데이터베이스, 웹 앱 접근을 하나의 아이덴티티 계층으로 통제하는 방법을 기본 개념, 설치와 구축, Kubernetes 접근 제어 데모 순서로 안내합니다.
Teleport는 인프라 앞에 서는 아이덴티티 계층입니다. 모든 접근 주체에게 수명이 짧은 인증서를 발급하고, 프로토콜을 프록시하며, 그 행위를 구조화된 감사 이벤트로 남깁니다.
인증 기관 CA(Certificate Authority)로서 호스트와 사용자 인증서를 서명합니다. 역할, 사용자, 등록된 리소스 같은 클러스터 설정을 보관하고 감사 이벤트와 세션 기록을 수집합니다. 사설망에 두는 것이 기본 구성입니다.
사용자의 단일 진입점입니다. Web UI(웹 관리 화면)를 제공하고 SSH, Kubernetes, 데이터베이스, 웹 앱 트래픽을 중계하며 Agent가 맺은 리버스 터널의 종단 역할을 합니다. 공중망에서 주소를 지정할 수 있어야 하는 구성 요소는 Proxy Service 하나입니다.
teleport 바이너리 인스턴스이며 물리 서버, 가상 머신, 컨테이너, Kubernetes Pod 어디에서나 동작합니다. SSH, Kubernetes, Database, Application, Desktop 5종 서비스로 나뉘고, 리소스를 자동으로 찾아 등록하는 Discovery Service가 더해집니다.
사내 IdP(Identity Provider)에서 OIDC(OpenID Connect) 또는 SAML(Security Assertion Markup Language) 인증을 받습니다. Teleport에 사용자 목록을 따로 만들지 않습니다.
Auth Service가 수명이 짧은 TLS(Transport Layer Security)·SSH 인증서를 발급합니다. 사용자의 역할이 이 인증서 안에 인코딩됩니다.
사용자는 Proxy Service에만 연결합니다. Proxy는 Agent가 미리 맺어 둔 리버스 터널로 요청을 실제 리소스에 전달합니다.
Agent가 인증서에 실린 역할을 확인해 어느 리소스까지 닿을 수 있는지 판정합니다. 접근 시점마다 컨트롤 플레인을 다시 호출하지 않습니다.
세션과 요청이 JSON(JavaScript Object Notation) 형식의 감사 이벤트로 남습니다. 프로토콜에 따라 세션 기록이 함께 저장되며 외부 로그 플랫폼으로 내보낼 수 있습니다.
| 리소스 | 사용자가 쓰는 도구 | 남는 기록 |
|---|---|---|
| 서버 (SSH) | tsh ssh, 표준 SSH 클라이언트 | 터미널 출력 전체 기록과 재생 |
| Kubernetes | kubectl, tsh kube | kubectl exec 세션의 터미널 출력 기록과 재생 |
| Database | psql 등 표준 데이터베이스 클라이언트 | 쿼리와 데이터베이스 감사 이벤트 |
| Application (웹 앱) | 브라우저 (HTTPS) | 요청 단위 감사 이벤트 (app.session.request) |
| Windows Desktop | 브라우저 기반 원격 데스크톱 | 화면과 마우스 입력 기록 |
| Machine & Workload Identity | tbot이 발급받는 단기 자격 증명 | 발급과 갱신 감사 이벤트 |
대상 시스템의 비밀번호를 보관했다가 대신 입력하는 방식이 아닙니다. 접속할 때마다 수명이 짧은 인증서를 새로 발급하므로, 교체하거나 보관해야 할 상시 자격 증명이 대상 시스템에 남지 않습니다.
접근 경로를 하나로 모으고 그 경로에 신원과 권한을 붙이는 계층입니다. 망 분리, 방화벽 정책, 네트워크 구간 설계는 그대로 유지합니다.
kubectl, psql, 브라우저 같은 기존 도구를 그대로 씁니다. 인증과 경로만 Teleport를 지나며, 사용자는 자격 증명 파일을 따로 받지 않습니다.
근거: Teleport 공식 Architecture 문서와 Agent Architecture 문서, 그리고 인포그랩 내부 위키의 Teleport 아키텍처 정리본입니다.
배포 형태를 먼저 정한 뒤 네트워크, 이름과 인증서, 사양 순서로 확정하면 구축 과정에서 되돌아갈 일이 줄어듭니다.
Auth Service와 Proxy Service를 한 프로세스로 올립니다. 기능 검증과 PoC(Proof of Concept)에 적합합니다. 클러스터 상태와 감사 기록, 세션 기록을 로컬 디스크에 두므로 디스크 용량을 넉넉히 잡습니다.
teleport-cluster 차트로 컨트롤 플레인을, teleport-kube-agent 차트로 에이전트를 배포합니다. 규모가 커지는 셀프호스팅 구성에서 공식 문서가 권장하는 방식입니다.
Auth Service와 Proxy Service를 Teleport가 운영합니다. 고객은 에이전트만 설치하며 컨트롤 플레인의 이중화, 백업, 업그레이드를 직접 다루지 않습니다.
| # | 출발 | 목적지 | 포트 | 방향 | 비고 |
|---|---|---|---|---|---|
| 1 | 사용자 PC와 브라우저 | Proxy Service | 443/TCP | 인바운드 | Web UI, tsh 로그인, kubectl, 웹 앱 접근이 모두 이 한 포트를 씁니다 |
| 2 | Agent (Pod 또는 가상 머신) | Proxy Service | 443/TCP | 아웃바운드 | 리버스 터널입니다. 대상 클러스터와 서버 쪽 인바운드 개방은 필요하지 않습니다 |
| 3 | Teleport 노드 | 사내 IdP | 443/TCP | 아웃바운드 | OIDC 디스커버리와 토큰 교환 경로입니다 |
| 4 | Proxy Service | Auth Service | 3025/TCP | 내부 전용 | Auth gRPC API(Application Programming Interface)입니다. 외부에 노출하지 않습니다 |
| 5 | Proxy Service | Proxy Service | 3021/TCP | 내부 전용 | Proxy Peering을 켠 경우에만 씁니다. 로드밸런서를 경유하면 안 됩니다 |
TLS routing은 기본값이며 이 모드에서 Proxy Service는 Web UI, HTTPS, Kubernetes, SSH, 모든 데이터베이스를 443 한 포트로 처리합니다. TLS routing을 끄면 3023(SSH 클라이언트), 3024(리버스 터널), 3080(Web)으로 포트가 갈립니다. 전체 표는 Networking Reference에 있습니다.
Proxy Service 주소로 쓸 이름 하나가 필요합니다. 웹 앱 접근(Application Access)을 쓰면 와일드카드 이름 *.teleport.example.com이 추가로 필요합니다. Teleport가 앱마다 <앱 이름>.<도메인> 주소를 부여하기 때문이며, 와일드카드를 쓰면 앱 수와 상관없이 DNS 레코드 하나와 인증서 한 장으로 처리됩니다. 와일드카드를 쓸 수 없으면 앱마다 public_addr로 개별 레코드를 지정하는 대안이 있습니다.
위 두 이름을 SAN(Subject Alternative Name)에 포함한 인증서 한 장을 준비합니다. 앞단에 로드밸런서를 두는 경우 TLS를 종단하지 않고 그대로 통과시키는 L4(Layer 4) 구성이어야 합니다. 앞단이 TLS를 종단하면 Kubernetes 접근의 SNI(Server Name Indication) 라우팅과 프로토콜 분기가 깨집니다. 고가용성 구성에서는 Teleport 내장 자동 발급 기능을 쓰지 않고 별도 발급 경로를 둡니다.
패키지를 설치하고 Enterprise 라이선스 파일을 /var/lib/teleport/license.pem에 둡니다. 폐쇄망이면 패키지, Helm 차트, 컨테이너 이미지를 오프라인 번들로 준비합니다. 라이선스 산정 기준은 문의해 주십시오.
기본 도메인과, 웹 앱 접근을 쓸 경우 와일드카드 이름을 준비합니다. 두 이름을 SAN에 포함한 인증서 한 장을 발급하고 Proxy Service에 배치합니다. 사내 CA로 발급하면 사용자 PC에 루트 인증서 신뢰 등록이 필요합니다.
kind: oidc 또는 kind: saml 커넥터를 만들고 그룹을 역할에 연결합니다. OIDC 리다이렉트 주소는 https://<Proxy 주소>/v1/webapi/oidc/callback 형태입니다. OIDC와 SAML 기반 SSO는 Teleport Enterprise 기능입니다.
대상 클러스터와 서버에 에이전트를 배포하고 Proxy Service로 아웃바운드 리버스 터널을 맺습니다. 대상 쪽 인바운드 규칙은 필요하지 않습니다. 같은 클러스터에 에이전트를 둘 이상 두면 Proxy가 그 사이에서 트래픽을 분산합니다.
역할을 3종에서 5종 정도로 설계하고 라벨 체계를 정합니다. 상시 권한과 임시 권한을 나눈 뒤 Access Request의 승인자 수와 유효 시간을 역할마다 지정합니다. 승인 알림은 기존 업무 도구로 보낼 수 있습니다.
감사 이벤트 백엔드와 세션 기록 오브젝트 스토리지를 각각 지정합니다. 두 저장소는 클러스터 상태 저장소와 별개입니다. 보존 기간과 위변조 방지 설계는 저장소 쪽에서 함께 정합니다.
근거: 인포그랩 내부 위키의 네트워크·포트, 고가용성, SSO 정리본과 Teleport 공식 Networking Reference, Scaling, Self-hosted High Availability 문서입니다.
Kubernetes 접근 통제가 목적이라면 확인할 지점은 다섯 가지입니다. RBAC(Role Based Access Control)은 역할 기반 접근 제어를 뜻합니다. 신원 연결, 범위 지정, 증적, 임시 권한, 그리고 두 층의 권한이 겹칠 때의 규칙입니다.
OIDC groups 클레임을 Teleport 역할로 연결해 조직 기준 권한을 그대로 유지합니다. 사용자 목록을 Teleport에 따로 만들지 않으므로 입사와 퇴사 처리가 IdP 한 곳에서 끝납니다.
클러스터, 네임스페이스, Pod 접근을 역할과 라벨로 나눕니다. kubernetes_labels로 어느 클러스터인지 정하고, kubernetes_resources로 종류, 네임스페이스, 이름, 동사 범위를 정합니다.
JSON 감사 이벤트와 kubectl exec 세션 기록이 남습니다. 세션은 tsh play와 Web UI에서 재생하고, 감사 이벤트는 외부 로그 플랫폼으로 내보내 보관할 수 있습니다.
상시 권한 대신 필요한 때만 권한을 올립니다. Access Request로 역할이나 개별 리소스를 요청하고, 승인자 수와 유효 시간을 요청 종류마다 정합니다. 두 명 승인도 설정할 수 있습니다.
Teleport 역할과 클러스터 RBAC 중 좁은 쪽이 남습니다. 어느 쪽도 우선하지 않고 두 범위의 교집합이 실효 권한이 됩니다. Teleport에는 누가 어디까지 닿는지를, 클러스터에는 닿은 다음 무엇을 할 수 있는지를 둡니다.
kubernetes_resources를 비워 두면 역할 버전 v7과 v8에서는 전체 허용이 기본값이 되므로, 좁히려고 만든 역할이 아무것도 좁히지 않는 상태가 될 수 있습니다. 주고받는 역할 정의에는 버전을 항상 명시하십시오.근거: 인포그랩 내부 위키의 두 층 RBAC 정리본과 Teleport 공식 Kubernetes Access Controls, Access Requests 문서입니다.
특정 환경을 그대로 옮긴 도면이 아니라, 공식 문서의 셀프호스팅 고가용성 제약을 반영해 그린 참조 구성입니다. 개념도, 논리 구조, 상세 기술 구조 순서로 보시면 됩니다.
로그인부터 Pod 단위 접근, 감사, 임시 권한 승인까지 하나의 운영 흐름으로 보여 줍니다. 카드를 누르면 영상이 재생됩니다. 라벨 CORE는 기본 흐름이고 라벨 OPT는 필요할 때 보시면 되는 선택 항목입니다.
IdP의 그룹 클레임을 Teleport 역할로 연결합니다.
역할이 다른 두 사용자가 서로 다른 Kubernetes 권한으로 접근합니다.
감사 이벤트를 검색하고 Kubernetes 세션 기록을 재생합니다.
필요한 접근만 요청하고 승인하며 만료 조건을 적용합니다.
영상은 인포그랩이 자체 구성한 검증 환경에서 촬영했습니다. 화면에 보이는 클러스터 이름과 사용자 이름은 예시 값입니다.
도입 검토 단계에서 반복해서 나오는 질문 여덟 개입니다. 각 답변에는 근거가 되는 공식 문서를 함께 두었습니다.
열지 않습니다. 에이전트가 Proxy Service로 443 아웃바운드 리버스 터널을 맺고, 사용자 트래픽은 그 터널을 거꾸로 타고 들어갑니다. 공중망에서 주소를 지정할 수 있어야 하는 구성 요소는 Proxy Service 하나뿐입니다. 예외는 셀프호스팅에서 에이전트를 Auth Service에 직접 조인시키는 방식이며, 이때만 대상 호스트에 3022, 3026, 3028이 열립니다. 이 방식은 웹 앱과 데이터베이스, 자동 검색 기능을 쓸 수 없어 권장하지 않습니다.
공식 문서: Networking Reference커넥터 리소스의 매핑 항목으로 연결합니다. OIDC 커넥터는 claims_to_roles에 claim, value, roles 세 값을 목록으로 적고, SAML 커넥터는 attributes_to_roles에 같은 구조로 적습니다. {{external.*}} 템플릿을 쓰면 역할 하나로 여러 그룹을 처리할 수 있어 사용자별 역할을 따로 관리하지 않아도 됩니다. OIDC와 SAML 기반 SSO는 Teleport Enterprise 기능이며, Community Edition에서 쓸 수 있는 SSO는 GitHub 하나입니다.
우선순위가 없습니다. 두 범위의 교집합이 실효 권한이며, 좁은 쪽이 남습니다. 요청은 먼저 Teleport 역할의 범위에서 걸러지고, 통과한 요청만 impersonation 헤더를 달고 API 서버로 가서 클러스터 RBAC 판정을 한 번 더 받습니다. 두 범위가 겹치지 않으면 남는 권한이 없습니다. Teleport 역할에 넓은 동사를 적어도 클러스터에서 부여받지 않은 권한은 생기지 않습니다.
공식 문서: Kubernetes Access Controls프로토콜마다 다릅니다. SSH와 kubectl exec 세션은 터미널 출력 전체가 남아 tsh play와 Web UI에서 재생할 수 있습니다. 웹 앱은 화면 녹화가 아니라 요청 단위 감사 이벤트(app.session.request)로 남으며 5분 단위로 묶입니다. Windows 데스크톱은 화면과 마우스 입력을 기록하고 Web UI에서 재생합니다. 데이터베이스는 쿼리와 관련 감사 이벤트로 남습니다. 브라우저로 쓰는 웹 앱을 화면 재생 수준으로 남겨야 한다면 요건을 먼저 확인해야 합니다.
다음 로그인부터 반영됩니다. 역할이 발급된 인증서 안에 인코딩되므로, IdP에서 그룹을 바꾸어도 이미 발급된 인증서에는 반영되지 않습니다. 즉시 회수가 필요하면 Lock을 씁니다. Lock은 진행 중인 세션까지 끊습니다. 따라서 정기적인 권한 정리는 그룹 변경으로, 사고 대응은 Lock으로 나누어 운영합니다.
공식 문서: Session and Identity Locking이미 발급된 인증서는 TTL(Time To Live)이 남아 있는 동안 계속 유효하고, 신규 로그인은 실패합니다. 에이전트는 장애 중에도 기존 터널을 유지합니다. IdP만 장애면 기존 인증서는 살아 있고 새 SSO 로그인만 막힙니다. 다만 진행 중인 모든 세션이 유지된다고 일괄 보장하지는 않습니다. 만료 인증서 강제 종료 설정이나 엄격한 잠금 모드를 켠 클러스터는 일부 장애 조건에서 세션을 의도적으로 종료합니다.
공식 문서: Self-hosted High Availability공식 문서 기준 Linux 커널 5.8 이상이며, RHEL과 CentOS 계열에도 같은 기준이 적용됩니다. 이 기능은 BPF(Berkeley Packet Filter) 기반이며, 노드별로 켜고 끄는 선택 기능이고 기본값은 꺼짐입니다. 표준 세션 기록에는 커널 요건이 없으므로, 요건을 맞추지 못해도 잃는 것은 이 기능 하나입니다. 적용 대상은 SSH 프로토콜이며 Kubernetes, 웹 앱, 데이터베이스 접근에는 영향이 없습니다. 실행된 명령을 우회할 수 없게 남겨야 하는 규제 요건이 있는지부터 확인하시면 판단이 빨라집니다.
공식 문서: Enhanced Session Recording with BPFProxy는 상태를 갖지 않아 다중화가 쉽고, Auth는 다중화 전에 외부 고가용성 백엔드로 먼저 전환해야 합니다. 앞단 로드밸런서는 TLS를 종단하지 않는 L4여야 하며, 사용자용 공개 로드밸런서 하나와 Proxy에서 Auth로 향하는 사설 로드밸런서 하나가 필요합니다. 세션 어피니티는 켜지 않습니다. Teleport가 에이전트 수준에서 세션을 배분하기 때문입니다. 업그레이드는 Auth, Proxy, 에이전트 순서로 진행합니다.
공식 문서: Self-hosted High AvailabilityPoC의 목표는 기능이 되는지 확인하는 것이 아니라, 운영팀과 보안팀이 함께 판단할 수 있는 증적이 나오는지 확인하는 것입니다. 4주 기본안은 설치에서 회수까지 한 바퀴를 도는 최소 구성입니다.
| 주차 | 목표 | 산출 |
|---|---|---|
| 0주 (3~5일) | 범위와 성공 기준 확정 | PoC 계획서, 성공 판정표, 네트워크 요건 문서 |
| 1주 | 클러스터 기동 | 설치 런북, 리소스 목록 화면, 첫 세션 증적 |
| 2주 | 아이덴티티 통합 | 역할 매트릭스, SSO 연동 문서, 개인 식별 접속 증적 |
| 3주 | 승인 워크플로와 세션 증적 | 승인 이력, 세션 재생 3건, 감사 이벤트 수집 화면 |
| 4주 | 회수와 판정 | 회수 로그, 결과 보고서, 확장 설계 입력값 |
| # | 항목 | 합격선 예시 | 증적 |
|---|---|---|---|
| 1 | 개인 식별 접속 | 공유 계정 없이 SSO 개인 신원으로 대상 리소스 전부 접속 | 세션 시작 이벤트에 사용자 매핑된 샘플 |
| 2 | 승인 왕복 시간 | 요청에서 접근 가능까지 중위 5분 이내 (업무시간 기준) | Access Request 이력, 승인 알림 화면 |
| 3 | 세션 재현율 | 무작위 20건 재생 성공률 100% | 재생 화면, tsh play 출력 |
| 4 | 회수 소요 시간 | 잠금 후 신규 접속 거부까지 60초 이내 | Lock 이력, 거부 이벤트 |
| 5 | 감사 증적 제출 시간 | 특정 인물의 지난 30일 접근 내역 산출 30분 이내 | 검색 화면, 내보낸 파일 |
합격선은 예시입니다. 착수 전에 고객과 함께 숫자를 조정해 확정합니다. 판정 기준을 미리 정해 두어야 PoC 결과를 같은 기준으로 읽을 수 있습니다.
teleport.yaml, SSO 커넥터, 역할 세트, 자동 검색 설정을 포함합니다.InfoGrab은 한국 시장의 Teleport 파트너입니다. 구축, 검증, 교육, 라이선스 산정을 함께 진행합니다. 라이선스 산정 기준은 문의해 주십시오. https://infograb.net
이 가이드의 기술적 서술은 아래 공식 문서를 근거로 합니다. 수치와 설정값은 버전에 따라 바뀌므로 도입 시점에 원문을 다시 확인하십시오.