Infograb logo
Teleport 에이전트 아키텍처

Teleport 에이전트는 인프라의 리소스와의 트래픽을 라우팅합니다.
이 가이드는 Teleport가 이 경로를 통해 트래픽을 안전하게 관리할 수 있도록 하는 아키텍처를 설명합니다.

Teleport 에이전트는 teleport 바이너리의 실행 인스턴스이며,
모든 Linux 플랫폼(예: 베어메탈, Linux VM, Docker 컨테이너 또는 Kubernetes 클러스터 내의 pod)에서 실행될 수 있습니다.
에이전트를 배포하고 관리하는 것은 Teleport 관리자에게 달려 있으며, 관리되는 Teleport Enterprise 계정에서도 마찬가지입니다.

단일 에이전트는 여러 서비스를 실행할 수 있으며, 각 서비스는 여러 대상 리소스에 연결할 수 있습니다.
예를 들어, Linux VM에서 실행되는 단일 teleport 프로세스는 Teleport SSH Service와 Teleport Kubernetes Service를 모두 실행할 수 있으며,
각각 여러 터미널 세션 및 Kubernetes 클러스터에 연결될 수 있습니다.

서비스

에이전트는 하나 이상의 서비스를 실행할 수 있습니다. 사용 가능한 에이전트 서비스는 다음과 같습니다:

서비스프록시하는 트래픽
SSH 서비스서비스가 실행되는 호스트로의 SSH 트래픽.
Teleport Kubernetes 서비스Kubernetes API 서버와의 HTTPS 트래픽.
Teleport 데이터베이스 서비스Postgres 및 MySQL과 같은 데이터베이스 기본 와이어 프로토콜과 DynamoDB와 같은 HTTP 기반 데이터베이스 프로토콜.
Teleport 애플리케이션 서비스내부 웹 애플리케이션을 위한 HTTPS 및 TCP 포워딩, 선택적 JSON 웹 토큰. 클라우드 제공업체 API를 위한 서명된 HTTPS 메시지.
Teleport 데스크탑 서비스RDP 서버로의 원격 데스크탑 프로토콜 트래픽.

에이전트는 또한 Teleport Discovery Service를 실행할 수 있습니다. Discovery Service는 서비스 검색 엔드포인트에서 리소스를 나열하고,
Auth 서비스 백엔드에서 동적 구성을 생성하여 이러한 리소스로 트래픽을 라우팅하도록 Teleport 클러스터를 구성합니다.
위에 나열된 에이전트 서비스는 Discovery Service에 등록된 리소스를 프록시할 수 있습니다.

구성 요소

관리자가 리소스를 등록한 Teleport 클러스터는 다음 구성 요소를 포함합니다:

  • Teleport 프록시 서비스: 인증 게이트웨의 기능을 수행하고, Web UI를 제공하며, 클라이언트 연결을 수락하는 Stateless 서비스입니다.
    관리되는 Teleport Enterprise 계정에서는 이 서비스에 접근할 수 있는 URL이 귀하의 Teleport 계정 URL에서 제공됩니다. 예: example.teleport.sh .
  • Teleport 인증 서비스: 클러스터의 인증서 기관 역할을 하며, 사용자 인증/인가를 처리하고 단기 클라이언트 인증서를 발급합니다.
  • Teleport 에이전트: 에이전트는 인프라 리소스를 상대로 인증을 수행하고, 사용자 트래픽을 해당 리소스로 라우팅하며, 프로토콜 파싱을 수행합니다.
  • Teleport 클라이언트 도구 (tsh , Teleport Connect, Teleport Web UI): Teleport 에이전트와 Teleport 프록시 서비스를 통해 인프라의 리소스에 연결합니다.
  • 로컬 프록시: 일부 경우에 tsh 는 Teleport에 인증된 로컬 프록시 서버를 시작하여 클라이언트 도구(예: 데이터베이스 클라이언트 및 AWS SDK 애플리케이션)로부터의 트래픽을 포워딩합니다.
  • 인프라 리소스: Teleport는 셀프 호스팅 인프라 및 클라우드 제공업체가 관리하는 인프라에 대한 액세스를 보호할 수 있습니다.

Teleport 에이전트와 Teleport 인증 서비스

Teleport 인증 서비스는 클러스터에 처음으로 조인할 때 에이전트에 호스트 인증서를 발급하는 인증서 기관을 운영합니다.
에이전트를 Teleport 클러스터에 조인시키는 데 사용할 수 있는 방법은 Teleport 클러스터에 서비스 조인하기에서 확인하십시오.

Teleport 클러스터의 모든 에이전트는 주기적인 핑 메시지를 통해 Auth 서비스에 상태를 업데이트합니다.
클라이언트는 Auth 서비스 API 또는 CLI를 통해 클러스터에 있는 모든 에이전트 인스턴스의 목록에 접근할 수 있습니다.

에이전트의 ID는 클러스터에 등록된 후 받는 SSH 호스트 인증서로 나타냅니다:

호스트 인증서

이 인증서는 에이전트에 대한 정보를 포함합니다:

  • 호스트 ID, 에이전트에 고유한 생성된 UUID.
  • 호스트 이름, 기본적으로 에이전트 호스트에서 hostname 명령의 반환 값으로 설정되며, 설정할 수 있습니다.
  • 클러스터 이름. 클라우드 호스팅된 Teleport Enterprise 클러스터에서 이 이름은 teleport.sh 의 서브도메인입니다. 셀프 호스팅 클러스터에서는 기본 값이 Teleport 인증 서비스의 hostname 이며 사용자가 설정할 수 있습니다.
  • 에이전트의 역할은 인증서 확장으로 인코딩됩니다. 예를 들어, app,db 역할은 에이전트가 애플리케이션 서비스와 데이터베이스 서비스를 실행할 수 있도록 허가합니다.
  • 인증서의 만료 시간.

인증 서비스는 클러스터의 호스트 CA에 의해 서명된 단기 X.509 인증서도 생성하며,
클라이언트의 ID 및 인프라 리소스에 대한 라우팅 정보가 인코딩되어 있습니다.

Teleport 에이전트를 Teleport 프록시 서비스에 연결하기

대부분의 경우, 에이전트가 Teleport 클러스터에 조인할 때, SSH 역터널을 프록시 서비스에 설정합니다. 따라서 사용자는 에이전트나 해당 에이전트에 연결된 리소스에 직접 연결할 필요가 없습니다. 에이전트가 클러스터의 프록시 서비스에 다시 다이얼할 수 있는 한, 방화벽 뒤에 위치할 수 있습니다.

에이전트가 프록시 서비스에 역 SSH 터널을 설정하면, 프록시 서비스는 인증서를 기반으로 에이전트를 식별합니다. 인증서에는 에이전트의 시스템 역할(예: node,app,kube )과 에이전트의 UUID가 인코딩되어 있습니다. Teleport 사용자로부터의 다이얼 요청이 프록시 서비스에 도착하면, 프록시 서비스는 목적지 리소스의 주소를 사용하여 적절한 에이전트를 찾고, 에이전트와 연결된 역 터널을 통해 사용자 연결을 프록시합니다.

Teleport 에이전트를 클러스터에 Teleport Auth 서비스를 통해 조인할 수 있습니다. 에이전트가 Teleport Auth 서비스를 통해 클러스터에 조인하면, Teleport 프록시 서비스가 직접 에이전트에 다이얼하고, 역 터널을 생성하지 않습니다. 이 모드는 다음 서비스를 지원합니다:

  • Teleport SSH 서비스
  • Teleport Desktop 서비스
  • Teleport Kubernetes 서비스
  • Teleport Discovery 서비스

직접 모드에서는 SSH 서비스 인스턴스가 클라이언트 SSH 인증서만 수락하는 OpenSSH 서버처럼 작동합니다. 사용자는 Teleport 프록시 서비스를 통해 점프 호스트 또는 직접 SSH 서버에 연결할 수 있습니다:

직접 모드는 레거시 사용 사례에 맞춰 설계되었으며, 셀프 호스팅된 Teleport 클러스터만 지원합니다. 셀프 호스팅된 Teleport 배포에서 불가능한 경우가 아니라면, Teleport 프록시 서비스 및 역 터널 시스템을 통해 에이전트를 조인하는 것을 권장합니다.

에이전트와 인프라 리소스

Teleport 에이전트는 사용자 트래픽을 인프라의 리소스로 라우팅합니다. 에이전트는 대상 리소스에서 사용할 수 있는 기술을 사용하여 인프라 리소스에 인증하며, 종종 공개 키 암호화의 형태를 사용합니다. 아래는 비포괄적인 예시 목록입니다:

  • SSH 서버: Teleport 프록시 서비스는 Teleport Auth 서비스에 의해 서명된 인증서를 제공하며, 대상 호스트에서 실행 중인 Teleport SSH 서비스 인스턴스가 이를 검증합니다.
  • Kubernetes 클러스터: Teleport Kubernetes 서비스가 대상 클러스터의 팟으로 실행되는 경우, 서비스는 팟의 서비스 계정 자격 증명을 사용하여 인증합니다. Kubernetes 서비스는 서비스 계정 자격 증명이 포함된 kubeconfig를 사용할 수도 있으며, AWS 자격 증명을 사용하여 Amazon Elastic Kubernetes Service 클러스터에 인증할 수도 있습니다.
  • 데이터베이스: 셀프 호스팅된 데이터베이스의 경우, 관리자는 상호 TLS 자격 증명을 데이터베이스 인스턴스에 배포해야 합니다. 클라우드 공급자가 관리하는 리소스의 경우, Teleport는 클라우드 공급자에서 제공하는 IAM 솔루션을 사용합니다.
  • Windows 데스크탑: Teleport Desktop 서비스는 RDP를 통해 Windows 데스크탑에 인증하기 위해 스마트 카드를 사용합니다.
  • 애플리케이션: Teleport Application 서비스는 HTTP 요청 및 TCP 스트림을 대상 애플리케이션에 전달하며, 선택적으로 Teleport 서명된 JSON 웹 토큰을 HTTP 요청 헤더에 추가합니다. 대상 애플리케이션이 Teleport 서명된 JWT를 인증하는 것은 그 애플리케이션에 달려 있습니다.

에이전트가 인프라 리소스에 인증하는 방법에 대해 더 알아보려면 해당 리소스를 Teleport 클러스터에 포함하는 가이드를 읽어보세요:

에이전트에 대한 클라이언트

클라이언트 도구는 Teleport 인증 기관에서 서명한 인증서를 제시하여 Teleport 에이전트에 인증합니다. Traffic은 Teleport Proxy Service와 에이전트 간에 설정된 SSH 역터널을 통해 에이전트로 전달됩니다. 클라이언트는 인증서를 검색한 후 에이전트를 통해 인프라 리소스에 연결해야 합니다.

Teleport 클라이언트에 대한 자격 증명

사용자가 tsh login 명령어로 클러스터에 로그인하면 Teleport Auth Service는 user 인증 기관을 사용하여 인증서를 서명합니다. 이 작동 방식에 대한 자세한 내용은 사용자 인증서 발급을 참조하십시오. 사용자가 Teleport 웹 UI를 통해 인증하면 브라우저는 해당 사용자를 대신하여 Proxy Service에 저장된 사용자 인증서에 해당하는 세션 쿠키를 검색합니다.

대부분의 경우 Teleport 사용자는 Teleport 보호 리소스에 접근하기 위해 다른 사용자 인증서를 검색해야 합니다. 이 인증서는 사용자가 특정 리소스(예: 애플리케이션 또는 데이터베이스)에 접근할 수 있도록 권한을 부여합니다. 다음 표는 사용자가 서로 다른 종류의 리소스에 대해 이 인증서를 얻는 방법을 나타냅니다:

리소스 종류사용자가 인증서를 얻는 방법
데이터베이스사용자는 tsh db login 으로 데이터베이스에 연결하기 전에 클라이언트 인증서를 검색할 수 있습니다. tsh db connecttsh proxy db 명령도 인증서를 검색합니다. 사용자가 데이터베이스에 연결할 때 Teleport Database Service는 인증서를 검증합니다.
Kubernetes 클러스터사용자는 tsh kube login 을 실행하여 로컬 kubeconfig를 Teleport 사용자 CA에서 서명한 인증서를 포함하도록 업데이트합니다. 그런 다음 사용자는 Teleport 보호 Kubernetes 클러스터에 대해 kubectl 명령을 실행할 수 있습니다.
서버사용자가 tsh login 을 실행한 후, 서버에 대한 권한 정보가 포함된 인증서를 받습니다. 사용자가 Teleport 보호 서버에 인증할 때 SSH Service는 인증서를 검사합니다.
웹 애플리케이션사용자는 Teleport 웹 UI에 인증하고 Teleport 보호 애플리케이션을 방문합니다. Teleport Proxy Service는 애플리케이션에 Teleport 서명된 JSON 웹 토큰과 함께 트래픽을 전달합니다. HTTP API 애플리케이션, TCP 애플리케이션 및 클라우드 공급자 API의 경우 사용자는 tsh apps login 을 실행하여 인증서를 검색합니다.
Windows 데스크탑사용자는 Teleport 웹 UI에 인증합니다. 웹 UI는 Teleport Proxy Service와 WebSocket 세션을 시작하고, 이를 통해 mTLS를 사용하여 선택적인 역 SSH 터널을 통해 Teleport Desktop Service에 트래픽을 전달합니다. Desktop Service는 원하는 RDP 서버에 RDP 트래픽을 전달합니다.

대부분의 경우 사용자는 Teleport Proxy Service에 연결하여 Auth Service로부터 인증서를 받습니다. Auth Service와 Proxy Service는 상호 TLS를 사용하여 서로 연결됩니다.

Teleport Connect 는 사용자 인증서와 그래픽 클라이언트에 대한 kubeconfigs를 관리하는 tshd 라는 tsh 데몬을 실행합니다.

에이전트를 통한 인프라 리소스 연결

Teleport는 에이전트를 통해 인프라 리소스에 접근할 수 있는 여러 클라이언트 도구를 제공합니다:

클라이언트 자격 증명을 검색한 후, 이러한 도구는 Teleport Proxy Service에 인증되고 이를 통해 Teleport 에이전트로 트래픽을 보낼 수 있습니다. 클라이언트가 사용하는 프로토콜은 업스트림 리소스에 따라 다릅니다. 클라이언트 도구가 Teleport Proxy Service와 프로토콜 협상을 수행하는 방법은 TLS 라우팅을 참조하십시오.

사용자가 연결하려는 업스트림 인프라 리소스에 따라 tsh 클라이언트 도구는 하나 이상의 로컬 프록시 서버를 시작할 수 있습니다. 이러한 서버는 Teleport Proxy Service에 인증한 다음, psqlkubectl 과 같은 로컬 클라이언트 도구에서 트래픽을 수신하는 리스너를 만듭니다. 사용자는 원격 리소스에 연결하는 것처럼 클라이언트 도구로 로컬 프록시에 연결할 수 있습니다.

다음 표는 tsh CLI를 통해 사용할 수 있는 로컬 프록시를 요약합니다:

tsh 명령업스트림 인프라 리소스
tsh proxy appHTTP 및 TCP 애플리케이션
tsh proxy awsAWS SDK 애플리케이션
tsh proxy azureAzure SDK 애플리케이션
tsh proxy gcloudGoogle Cloud SDK 애플리케이션
tsh proxy sshOpenSSH 클라이언트 트래픽
tsh proxy db네이티브 데이터베이스 클라이언트
tsh proxy kubeL7 로드 밸런서 뒤의 Kubernetes 클러스터

리소스에 연결하는 tsh 명령은 종종 tsh proxy 명령과 동일한 로컬 프록시를 시작합니다. 예를 들어, 데이터베이스에 따라 tsh db connect 는 데이터베이스 클라이언트를 사용하여 트래픽을 전송하기 전에 로컬 프록시를 시작합니다.

감사 이벤트 제출하기

Teleport 에이전트는 Teleport 프록시 서비스를 통해 Teleport Auth 서비스에 연결하고, 사용자 세션의 생애 주기 내에서 여러 순간에 감사 이벤트를 제출합니다. 여기에는 사용자가 로그인할 때, 리소스에 연결할 때, 리소스와 상호 작용할 때, 로그아웃할 때가 포함됩니다. 에이전트는 이벤트를 감지하기 위해 인프라 리소스에 전달하는 와이어 프로토콜 메시지를 해석합니다.

감사 이벤트 참조에서 Teleport 감사 이벤트에 대해 자세히 알아보세요.

추가 읽기

Teleport 원문 보기