텔레포트 에이전트는 인프라의 리소스와의 트래픽을 라우팅합니다. 이 가이드에서는 텔레포트가 이 경로를 통해 트래픽을 안전하게 관리할 수 있도록 하는 아키텍처를 설명합니다.
텔레포트 에이전트는 teleport
바이너리의 실행 인스턴스이며, 모든 리눅스 플랫폼(예: 베어메탈, 리눅스 VM, 도커 컨테이너, 또는 Kubernetes 클러스터의 포드)에서 실행될 수 있습니다. 텔레포트 관리자가 관리되는 텔레포트 엔터프라이즈 계정에서도 에이전트를 배포하고 관리하는 것은 관리자의 몫입니다.
단일 에이전트는 여러 서비스 쌍을 실행할 수 있으며, 각 서비스는 여러 대상 리소스에 연결할 수 있습니다. 예를 들어, 리눅스 VM에서 실행되는 단일 teleport
프로세스는 텔레포트 SSH 서비스와 텔레포트 Kubernetes 서비스를 모두 실행할 수 있으며, 각각 여러 터미널 세션 및 Kubernetes 클러스터에 연결할 수 있습니다.
서비스
에이전트는 하나 이상의 서비스를 실행할 수 있습니다.
다음과 같은 에이전트 서비스가 제공됩니다:
서비스 | 프록시하는 트래픽 |
---|---|
SSH 서비스 | 서비스가 실행되는 호스트의 SSH 트래픽. |
텔레포트 Kubernetes 서비스 | Kubernetes API 서버와의 HTTPS 트래픽. |
텔레포트 데이터베이스 서비스 | Postgres 및 MySQL과 같은 데이터베이스 네이티브 와이어 프로토콜과 DynamoDB와 같은 HTTP 기반 데이터베이스 프로토콜. |
텔레포트 애플리케이션 서비스 | 내부 웹 응용 프로그램을 위한 HTTPS 및 TCP 포워딩, 선택적 JSON 웹 토큰. 클라우드 제공업체 API를 위한 서명된 HTTPS 메시지. |
텔레포트 데스크탑 서비스 | RDP 서버와의 원격 데스크탑 프로토콜 트래픽. |
에이전트는 또한 텔레포트 검색 서비스를 실행할 수 있습니다. 검색 서비스는 서비스 검색 엔드포인트에 쿼리를 수행하여 인프라의 리소스를 나열하고, Auth 서비스 백엔드에서 동적 구성을 생성하여 이러한 리소스에 트래픽을 라우팅하도록 텔레포트 클러스터를 구성합니다. 위에 나열된 에이전트 서비스는 검색 서비스에서 등록된 리소스를 프록시할 수 있습니다.
구성 요소
관리자가 리소스를 등록한 텔레포트 클러스터에는 다음 구성 요소가 포함됩니다:
- 텔레포트 프록시 서비스: 인증 게이트웨이 역할을 하는 무상태 서비스로, 웹 UI를 제공하고 클라이언트 연결을 수락합니다. 관리되는 텔레포트 엔터프라이즈 계정에서는 이 서비스가 텔레포트 계정 URL에서 접근할 수 있습니다, 예:
example.teleport.sh
. - 텔레포트 인증 서비스: 클러스터의 인증 기관 역할을 하며, 사용자 인증/권한 부여를 처리하고 단기 클라이언트 인증서를 발급합니다.
- 텔레포트 에이전트: 인프라 리소스에 대한 인증을 수행하고, 해당 리소스로의 사용자 트래픽을 라우팅하며, 프로토콜 파싱을 수행합니다.
- 텔레포트 클라이언트 도구(
tsh
, 텔레포트 연결, 텔레포트 웹 UI): 텔레포트 에이전트 및 텔레포트 프록시 서비스를 통해 인프라의 리소스에 연결합니다. - 로컬 프록시: 경우에 따라,
tsh
는 텔레포트에 인증하고 클라이언트 도구(예: 데이터베이스 클라이언트 및 AWS SDK 애플리케이션)로부터 트래픽을 전달하는 로컬 프록시 서버를 생성합니다. - 인프라 리소스: 텔레포트는 셀프 호스팅 인프라 및 클라우드 제공업체가 관리하는 인프라에 대한 접근을 보호할 수 있습니다.
텔레포트 에이전트와 텔레포트 인증 서비스
텔레포트 인증 서비스는 클러스터에 처음으로 참가할 때 에이전트에 호스트 인증서를 발급하는 인증 기관입니다. 에이전트를 텔레포트 클러스터에 가입시키기 위해 사용할 수 있는 방법에 대해서는 서비스를 텔레포트 클러스터에 가입시키기를 참조하세요.
텔레포트 클러스터의 모든 에이전트는 주기적인 핑 메시지를 통해 Auth 서비스에 자신의 상태를 업데이트합니다. 클라이언트는 Auth 서비스 API 또는 CLI를 통해 클러스터의 모든 에이전트 인스턴스 목록에 접근할 수 있습니다.
에이전트의 ID는 클러스터에 등록한 후 수신하는 SSH 호스트 인증서로 표현됩니다:
이 인증서는 에이전트에 대한 정보를 포함합니다:
- 호스트 ID, 에이전트에 고유한 생성된 UUID.
- 호스트 이름, 기본값은 에이전트 호스트에서
hostname
명령의 반환 값이지만, 구성할 수 있습니다. - 클러스터 이름. 클라우드 호스팅 텔레포트 엔터프라이즈 클러스터에서는
teleport.sh
의 하위 도메인입니다. 셀프 호스팅 클러스터에서는 기본값이 텔레포트 인증 서비스의hostname
이며 사용자가 구성할 수 있습니다. - 에이전트의 역할은 인증서 확장으로 인코딩됩니다. 예를 들어,
app,db
역할은 에이전트가 애플리케이션 서비스 및 데이터베이스 서비스를 실행할 수 있도록 권한을 부여합니다. - 인증서의 만료 시간.
Auth 서비스는 또한 클러스터의 호스트 CA에 의해 서명된 단기 X.509 인증서를 생성합니다. 이 인증서에는 클라이언트의 ID 및 인프라 리소스에 대한 라우팅 정보가 인코딩되어 있습니다.
텔레포트 에이전트와 텔레포트 프록시 서비스
대부분의 경우, 에이전트가 텔레포트 클러스터에 참여할 때, 프록시 서비스에 SSH 리버스 터널을 설정합니다. 따라서 사용자는 에이전트 또는 그들이 연결된 리소스에 직접 연결할 필요가 없습니다. 에이전트가 클러스터의 프록시 서비스로 다시 연결할 수 있는 한, 방화벽 뒤에 위치할 수 있습니다.
에이전트가 프록시 서비스에 리버스 SSH 터널을 설정하면, 프록시 서비스는 인증서를 기반으로 에이전트를 식별합니다. 인증서에는 에이전트의 시스템 역할(예: node,app,kube
)과 에이전트에 대한 UUID가 인코딩되어 있습니다. 텔레포트 사용자로부터의 다이얼 요청이 프록시 서비스에 도달하면, 프록시 서비스는 대상 리소스의 주소를 사용하여 적절한 에이전트를 찾아, 해당 에이전트에 연결된 리버스 터널을 통해 사용자 연결을 프록시합니다.
텔레포트 에이전트를 텔레포트 인증 서비스를 통해 클러스터에 가입시키는 것은 가능합니다. 에이전트가 텔레포트 인증 서비스를 통해 클러스터에 가입하면, 텔레포트 프록시 서비스는 리버스 터널을 생성하지 않고 에이전트에 직접 연결합니다. 이 모드는 다음과 같은 서비스를 지원합니다:
- 텔레포트 SSH 서비스
- 텔레포트 데스크탑 서비스
- 텔레포트 Kubernetes 서비스
- 텔레포트 검색 서비스
직접 모드에서는 SSH 서비스 인스턴스가 오픈SSH 서버처럼 행동하여 클라이언트 SSH 인증서만 허용합니다. 사용자는 텔레포트 프록시 서비스를 통해 점프 호스트 또는 직접 SSH 서버에 연결할 수 있습니다:
직접 모드는 레거시 사용 사례를 위해 설계되었으며 셀프 호스팅 텔레포트 클러스터만 지원합니다. 자체 호스팅된 텔레포트 배포에 대해 가능하지 않은 경우를 제외하고, 텔레포트 프록시 서비스 및 리버스 터널 시스템을 통해 에이전트를 가입시키는 것을 권장합니다.
에이전트와 인프라 리소스
텔레포트 에이전트는 사용자 트래픽을 인프라의 리소스와 라우팅합니다. 에이전트는 대상 리소스에 대한 접근을 가능하게 하는 기법을 사용하여 인프라 리소스와 인증을 수행합니다.
다음은 비포괄적인 예시 목록입니다:
- SSH 서버: 텔레포트 프록시 서비스는 텔레포트 인증 서비스에 의해 서명된 인증서를 제공하며, 이는 대상 호스트에서 실행되는 텔레포트 SSH 서비스 인스턴스에 의해 검증됩니다.
- Kubernetes 클러스터: 텔레포트 Kubernetes 서비스가 대상 클러스터의 포드로 실행되는 경우, 서비스는 포드의 서비스 계정 자격 증명을 사용하여 인증합니다. Kubernetes 서비스는 서비스 계정 자격 증명을 포함하는 kubeconfig를 사용하거나 AWS 자격 증명을 사용하여 Amazon Elastic Kubernetes Service 클러스터에 인증할 수 있습니다.
- 데이터베이스: 셀프 호스팅된 데이터베이스의 경우, 관리자는 데이터베이스 인스턴스에 상호 TLS 자격 증명을 배포해야 합니다. 클라우드 제공업체가 관리하는 리소스의 경우, 텔레포트는 클라우드 제공업체를 통해 제공되는 ID 및 액세스 관리(IAM) 솔루션을 활용합니다.
- 윈도우 데스크탑: 텔레포트 데스크탑 서비스는 RDP를 통해 윈도우 데스크탑에 인증하기 위해 스마트 카드를 사용합니다.
- 애플리케이션: 텔레포트 애플리케이션 서비스는 HTTP 요청 및 TCP 스트림을 대상 애플리케이션으로 포워딩하며, 선택적으로 텔레포트 서명 JSON 웹 토큰을 HTTP 요청 헤더에 추가합니다. 대상 애플리케이션에서 텔레포트 서명 JWT를 인증하는 것은 사용자의 책임입니다.
인프라 리소스에 대한 인증을 수행하는 에이전트의 메커니즘에 대해 자세히 알아보려면,
해당 리소스를 텔레포트 클러스터에 등록하는 가이드를 참조하세요:
클라이언트와 에이전트
클라이언트 도구는 텔레포트 인증 기관에 의해 서명된 인증서를 제시하여 텔레포트 에이전트에 인증하고, 텔레포트 프록시 서비스와 에이전트 사이에 설정된 SSH 리버스 터널을 통해 트래픽을 전달합니다. 클라이언트는 인증서를 검색한 다음, 에이전트를 통해 인프라 리소스에 연결해야 합니다.
텔레포트 클라이언트를 위한 자격 증명
사용자가 tsh login
명령으로 클러스터에 로그인하면, 텔레포트 인증 서비스가 user
인증 기관을 사용하여 인증서에 서명합니다. 작동 방식에 대한 자세한 내용은 사용자 인증서 발급을 참조하세요. 사용자가 텔레포트 웹 UI를 통해 인증하는 경우, 브라우저는 세션 쿠키를 검색하며, 이는 프록시 서비스가 해당 사용자를 대신하여 저장한 사용자 인증서에 해당합니다.
대부분의 경우, 텔레포트 사용자는 텔레포트로 보호되는 리소스에 접근하기 위해 또 다른 사용자 인증서를 검색해야 합니다. 이 인증서는 사용자가 애플리케이션이나 데이터베이스와 같은 특정 리소스에 액세스할 수 있는 권한을 부여합니다. 다음 표에는 다양한 종류의 리소스에 대한 인증서를 사용자가 어떻게 획득하는지가 나와 있습니다:
리소스 종류 | 사용자가 인증서를 획득하는 방법 |
---|---|
데이터베이스 | 사용자는 tsh db login 으로 데이터베이스에 연결하기 전에 클라이언트 인증서를 검색할 수 있습니다. tsh db connect 및 tsh proxy db 명령도 인증서를 검색합니다. 텔레포트 데이터베이스 서비스는 사용자가 데이터베이스에 연결할 때 인증서를 검증합니다. |
Kubernetes 클러스터 | 사용자는 tsh kube login 을 실행하여 로컬 kubeconfig를 텔레포트 사용자 CA가 서명한 인증서를 포함하도록 업데이트합니다. 이후 사용자는 텔레포트로 보호되는 Kubernetes 클러스터에 대해 kubectl 명령을 실행할 수 있습니다. |
서버 | 사용자가 tsh login 을 실행한 후, 서버에 대한 권한 정보가 포함된 인증서를 수신합니다. 사용자가 텔레포트로 보호되는 서버에 인증할 때 SSH 서비스가 인증서를 확인합니다. |
웹 애플리케이션 | 사용자는 텔레포트 웹 UI에 인증하고 텔레포트로 보호되는 애플리케이션을 방문합니다. 텔레포트 프록시 서비스는 애플리케이션에 텔레포트 서명 JSON 웹 토큰과 함께 트래픽을 전달합니다. HTTP API 애플리케이션, TCP 애플리케이션 및 클라우드 제공업체 API의 경우 사용자가 tsh apps login 을 실행하여 인증서를 검색합니다. |
윈도우 데스크탑 | 사용자는 텔레포트 웹 UI에 인증합니다. 웹 UI는 텔레포트 프록시 서비스와의 웹소켓 세션을 시작하며, 프록시 서비스는 텔레포트 데스크탑 서비스에 대한 선택적 리버스 SSH 터널을 통해 mTLS를 통해 트래픽을 전달합니다. 데스크탑 서비스는 원하는 RDP 서버로 RDP 트래픽을 전달합니다. |
대부분의 경우, 사용자는 텔레포트 프록시 서비스에 대한 연결을 통해 Auth 서비스로부터 인증서를 수신합니다. Auth 서비스와 프록시 서비스는 상호 TLS를 사용하여 서로 연결합니다.
텔레포트 연결은 사용자 인증서와 kubeconfig를 관리하는 tsd
를 실행하는 tsh
데몬입니다.
에이전트를 통해 인프라 리소스에 연결하기
텔레포트는 에이전트를 통해 인프라 리소스에 접근하기 위한 여러 클라이언트 도구를 제공합니다:
클라이언트 자격 증명을 검색한 후, 이러한 도구는 텔레포트 프록시 서비스에 인증되며 프록시를 통해 텔레포트 에이전트로 트래픽을 전달할 수 있습니다. 클라이언트가 사용하는 프로토콜은 업스트림 리소스에 따라 다릅니다. 텔레포트 프록시 서비스와 클라이언트 도구가 프로토콜 협상을 수행하는 방법에 대한 내용은 TLS 라우팅을 참조하세요.
업스트림 인프라 리소스에 연결하려는 사용자에 따라 tsh
클라이언트 도구는 하나 이상의 로컬 프록시 서버를 생성할 수 있습니다. 이 프록시 서버는 텔레포트 프록시 서비스에 인증한 후, 로컬 클라이언트 도구(예: psql 및 kubectl)로부터 트래픽을 수신하는 리스너를 생성합니다. 그런 다음 사용자는 마치 원격 리소스에 연결하는 것처럼 클라이언트 도구로 로컬 프록시에 연결할 수 있습니다.
다음 표는 tsh
CLI를 통해 제공되는 로컬 프록시의 요약입니다:
tsh 명령 | 업스트림 인프라 리소스 |
---|---|
tsh proxy app | HTTP 및 TCP 애플리케이션 |
tsh proxy aws | AWS SDK 애플리케이션 |
tsh proxy azure | Azure SDK 애플리케이션 |
tsh proxy gcloud | Google Cloud SDK 애플리케이션 |
tsh proxy ssh | OpenSSH 클라이언트 트래픽 |
tsh proxy db | 네이티브 데이터베이스 클라이언트 |
tsh proxy kube | L7 로드 밸런서 뒤의 Kubernetes 클러스터 |
tsh
리소스에 연결하는 명령은 종종 tsh proxy
명령과 동일한 로컬 프록시를 생성합니다. 예를 들어, 데이터베이스에 따라 tsh db connect
는 로컬 프록시를 시작한 후 데이터베이스 클라이언트를 사용하여 트래픽을 전송합니다.
감사 이벤트 제출
텔레포트 에이전트는 텔레포트 프록시 서비스를 통해 텔레포트 인증 서비스에 연결하고, 사용자 세션의 생애 주기 내에서 여러 순간에 감사 이벤트를 제출합니다. 여기에는 사용자가 로그인할 때, 리소스에 연결할 때, 리소스와 상호작용할 때, 로그아웃할 때가 포함됩니다. 에이전트는 인프라 리소스에 전달하는 와이어 프로토콜 메시지를 해석하여 이벤트를 감지합니다.
텔레포트 감사 이벤트에 대해 더 알아보려면 감사 이벤트 참조를 참조하세요.
추가 읽기
- 에이전트 배포에 대한 지침은 텔레포트 에이전트 가이드를 참조하세요.