인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Teleport 구성
Teleport는 YAML 파일 형식을 사용하여 구성합니다. 아래에 전체 구성
참고 파일이 나와 있습니다. 이 파일은 주석과 teleport.yaml
의 모든
사용 가능한 옵션을 제공합니다.
기본적으로 Teleport는 /etc/teleport.yaml
에서 구성 파일을 읽습니다.
이 참조를 사용하기 전에
이 예시 구성을 운영 환경에서 사용하지 마십시오.
귀하의 환경에 맞게 구성 파일을 수정해야 합니다. 참조 구성을 복사하여 사용하면 의도하지 않은 효과가 발생할 수 있습니다. 시작점으로 사용할 수 있는 구성 파일을 만들려면 다음 명령어를 실행하십시오:
teleport configure -o file
SSH 서비스 및 데이터베이스 서비스에 사용할 수 있는 configure
명령도
있습니다. Teleport CLI Reference에서 teleport node configure
및 teleport db configure
에 대한 문서를 참조하십시오.
변경하기 전에 구성 파일을 백업해야 합니다. 이를 통해 필요할 경우 이전 구성으로 롤백할 수 있습니다.
Teleport 서비스 활성화
teleport
프로세스는 여러 서비스를 실행할 수 있습니다.
일부 서비스는 시작하기 위해 Teleport 구성 내에서 서비스를 활성화해야 합니다. 다른 서비스는 기본적으로 활성화되어 있습니다.
서비스를 활성화하거나 비활성화하려면, 다음을 Teleport 구성에 포함시키고
service_name
을 서비스 이름으로 바꿉니다(서비스 이름 목록은 아래에 있습니다):
service_name:
enabled: "no"
Teleport는 다음 서비스를 지원합니다:
서비스 | 구성 섹션 | 기본 활성화 |
---|---|---|
애플리케이션 서비스 | app_service | ❌ |
인증 서비스 | auth_service | ✅ |
데이터베이스 서비스 | db_service | ❌ |
발견 서비스 | discovery_service | ❌ |
Kubernetes 서비스 | kubernetes_service | ❌ |
프록시 서비스 | proxy_service | ✅ |
SSH 서비스 | ssh_service | ✅ |
데스크톱 서비스 | windows_desktop_service | ❌ |
Jamf 서비스 | jamf_service | ❌ |
Teleport Cloud는 인증 서비스 및 프록시 서비스를 관리합니다. Teleport 서비스 인스턴스(예: 애플리케이션 서비스 및 데이터베이스 서비스)는 예기치 않은 효과를 방지하기 위해 다음 구성 옵션을 포함해야 합니다:
auth_service:
enabled: false
proxy_service:
enabled: false
참조 구성
이 예시 구성은 올바른 들여쓰기를 보여주기 위해 YAML 형식의 모든 가능한 구성 옵션을 포함합니다.
어떤 Teleport 서비스를 선택하여 애플리케이션 구성 옵션을 확인하십시오:
인스턴스 전체 설정
이 설정은 모든 teleport
인스턴스에 적용됩니다:
# 기본적으로 이 파일은 /etc/teleport.yaml에 저장되어야 합니다.
# 설정 파일 버전. 현재 버전은 "v3"입니다.
version: v3
# 이 설정 파일의 이 섹션은 모든 Teleport 서비스에 적용됩니다.
teleport:
# nodename은 이 노드에 할당할 대체 이름을 지정할 수 있습니다.
# 기본값은 호스트 이름과 동일합니다.
nodename: graviton
# Teleport 데몬이 데이터를 저장하는 데이터 디렉토리입니다.
data_dir: /var/lib/teleport
# Teleport 프로세스를 위한 PID 파일
#pid_file: /var/run/teleport.pid
# 클러스터에 가입하는 데 사용되는 초대 토큰 또는 토큰을 포함한 파일의 절대 경로입니다.
# 이는 첫 실행 시에만 사용되며 이후 시작 시에는 사용되지 않습니다.
#
# 파일 경로 예시:
# auth_token: /var/lib/teleport/tokenjoin
#
# 이는 join_params.method를 "token"으로 설정하고 join_params.token_name을 auth_token 값으로 설정하는 것과 동일합니다.
# auth_token 또는 join_params 중 하나만 사용해야 합니다.
auth_token: xxxx-token-xxxx
# 클러스터에 EC2, IAM 또는 토큰을 통해 가입할 때 사용하는 매개변수입니다.
join_params:
# `method`가 "token"으로 설정된 경우, 이는 위의 `auth_token`을 사용하는 것과 동일합니다.
# auth_token 또는 join_params 중 하나만 사용해야 합니다.
method: "token"|"ec2"|"iam"|"github"|"circleci"|"kubernetes"
# method가 "token"이 아닌 경우, token_name은 EC2 또는 IAM 가이드에서 생성된
# "ec2-token" 또는 "iam-token"과 같은 가입 토큰 리소스의 이름이 됩니다.
# method가 "token"인 경우, token_name은 클러스터에 가입하는 데 사용되는 초대 토큰
# 또는 토큰을 포함한 파일의 절대 경로가 됩니다. 이는 첫 실행 시에만 사용되며 이후 시작 시에는 사용되지 않습니다.
#
# 파일 경로 예시:
# token_name: /var/lib/teleport/tokenjoin
token_name: "token-name"
# Auth 서비스의 CA 핀(인증서 핀)을 선택적으로 지정할 수 있습니다. CA 핀을 지정하면
# 새로운 에이전트가 Auth 서비스를 통해 Teleport 클러스터를 신뢰할 수 있습니다.
#
# ca_pin 필드에 CA 핀의 실제 값을 할당하거나 파일의 절대 경로를 지정할 수 있습니다.
# 파일을 지정한 경우, 해당 파일에는 CA 핀만 포함되어야 합니다.
#
# YAML 목록 형식으로 여러 CA 핀이나 파일 경로를 지정할 수도 있습니다:
#
# ca_pin:
# - /var/lib/teleport/pin1
# - /var/lib/teleport/pin2
ca_pin:
"sha256:7e12c17c20d9cb504bbcb3f0236be3f446861f1396dcbb44425fe28ec1c108f1"
# 멀티홈 또는 NAT 환경에서 Teleport 노드는 다른 노드가 접근 가능한 IP를 알아야 합니다.
#
# 이 값은 FQDN(예: host.example.com)으로도 지정할 수 있습니다.
advertise_ip: 10.1.0.5
# Teleport는 모니터링 목적으로 HTTP 엔드포인트를 제공합니다. 기본적으로 비활성화되어 있지만,
# 진단 주소를 통해 활성화할 수 있습니다.
diag_addr: "127.0.0.1:3000"
# auth_server 또는 proxy_server 중 하나만 사용하세요.
#
# 애플리케이션 서비스나 데이터베이스 서비스를 활성화한 경우, 프록시를 통한 터널링만 지원되므로 proxy_server를 지정해야 합니다.
# 다른 서비스는 프록시를 통한 터널링과 Auth 서버에 직접 연결 모두를 지원하므로, auth_server나 proxy_server 중 하나를 지정할 수 있습니다.
# 연결할 Auth 서버 주소와 포트입니다. Teleport Auth 서버를 고가용성(HA) 구성으로 실행하는 경우,
# 주소는 로드 밸런서를 가리켜야 합니다.
# NAT 뒤에 위치한 노드를 추가하려면 Proxy URL(예: teleport-proxy.example.com:443)을 사용하고,
# 대신 `proxy_server`를 설정하세요.
auth_server: 10.1.0.5:3025
# 연결할 Proxy 서버 주소와 포트입니다. Teleport Proxy 서버를 고가용성(HA) 구성으로 실행하는 경우,
# 주소는 로드 밸런서를 가리켜야 합니다.
proxy_server: teleport-proxy.example.com:443
# cache:
# # 캐시는 기본적으로 활성화되어 있으며, 이 플래그로 비활성화할 수 있습니다.
# enabled: true
# Teleport는 각 클라이언트 IP 주소에서 오는 연결 수를 제한하여 남용을 방지할 수 있습니다.
# 이러한 제한은 SSH, Kubernetes 등 각 서비스별로 개별적으로 적용됩니다.
connection_limits:
max_connections: 1000
# 로깅 설정입니다. 가능한 출력 값은 디스크('/var/lib/teleport/teleport.log'),
# 'stdout', 'stderr', 'syslog'입니다. 가능한 심각도 값은 DEBUG, INFO(기본값), WARN, ERROR입니다.
log:
output: /var/lib/teleport/teleport.log
severity: INFO
# 로그 형식 설정
# 가능한 출력 값은 'json' 및 'text'(기본값)입니다.
# 가능한 extra_fields 값에는 timestamp, component, caller 및 level이 포함됩니다.
# 모든 추가 필드는 기본적으로 포함됩니다.
format:
output: text
extra_fields: [level, timestamp, component, caller]
추가 읽기:
- 서비스를 클러스터에 합치기:
join_params
구성을 도와주는 사용 가능한 조인 방법. - CA 핀 사용하기:
ca_pin
에 값을 할당해야 하는 경우. - Teleport 메트릭스 참조:
diag_addr
를 사용하여 수집할 데이터.
Proxy Service
이 설정은 Teleport Proxy Service에 적용됩니다:
Teleport Enterprise Cloud가 Proxy Service를 관리하므로 이러한 구성 설정을 지정할 필요가 없습니다.
# 이 섹션은 '프록시 서비스'를 구성합니다.
proxy_service:
# '프록시' 역할을 활성화합니다. 기본값은 'yes'입니다.
enabled: yes
# proxy_protocol은 HAProxy PROXY 프로토콜 지원을 제어합니다.
# 기본값은 지정되지 않으며, 가능한 값은 다음과 같습니다:
# 'on' - PROXY 프로토콜이 활성화되고 필수입니다.
# 'off' - PROXY 프로토콜이 비활성화되고 금지됩니다.
# 지정되지 않은 경우, PROXY 프로토콜이 허용되지만 필수는 아닙니다.
# 이는 테스트 환경에 적합하지만 프로덕션 환경에서는 권장되지 않습니다.
# Teleport의 IP 고정 기능은 이 필드를 지정하지 않고 PROXY 헤더를 받으면 작동하지 않습니다.
# L4 로드 밸런서 뒤에서 PROXY 헤더를 보내는 프록시 서비스가 실행되는 경우 `on`으로 설정하세요.
# 그렇지 않으면 `off`로 설정하세요.
proxy_protocol: on
# SSH 포워딩/프록시 주소입니다. 명령줄(CLI) 클라이언트는 항상 이 포트에 연결하여 SSH 세션을 시작합니다.
# 설정되지 않은 경우, 동작은 구성 파일 버전에 따라 달라집니다:
# v2 이상: 리스너가 생성되지 않으며, SSH는 web_listen_addr에서 멀티플렉싱됩니다.
# v1: 기본값은 0.0.0.0:3023입니다.
listen_addr: 0.0.0.0:3023
# Reverse 터널 리스닝 주소입니다. 인증 서버(CA)는 이 주소로 방화벽 뒤에서
# 아웃바운드 연결을 설정할 수 있습니다.
# 이를 통해 외부 CA 사용자가 방화벽 뒤 노드에 연결할 수 있습니다.
# 설정되지 않은 경우, 동작은 구성 파일 버전에 따라 달라집니다:
# v2 이상: 리스너가 생성되지 않으며, reverse 터널 트래픽은 web_listen_addr에서 멀티플렉싱됩니다.
# v1: 기본값은 0.0.0.0:3024입니다.
tunnel_listen_addr: 0.0.0.0:3024
# Proxy Peering 리스닝 주소입니다. Teleport 프록시 서비스가 이 주소에 바인딩하여
# Proxy Peering 모드에서 다이얼링 에이전트의 수신 연결을 수신합니다.
peer_listen_addr: 0.0.0.0:3021
# Proxy Peering 공개 주소입니다. Teleport 프록시 서비스가 Proxy Peering 모드에서
# 다이얼링 에이전트에 대해 이 주소를 광고합니다.
# 참고: 이 주소는 각 프록시에 대해 고유해야 하며 로드 밸런서를 가리키면 안 됩니다.
# 로드 밸런서 주소를 사용하는 경우 예측할 수 없는 결과와 연결 지연이 발생할 수 있습니다.
peer_public_addr: teleport-proxy-host-1.example.com:3021
# Web UI와 사용자 인증을 제공하는 HTTPS 리스닝 주소입니다.
# Database Service가 활성화된 경우 PostgreSQL 프록시를 처리합니다.
web_listen_addr: 0.0.0.0:3080
# 클러스터 사용자가 접근할 수 있는 프록시 HTTPS 엔드포인트의 DNS 이름입니다.
# 지정되지 않은 경우 프록시의 호스트 이름이 기본값으로 사용됩니다.
# 여러 프록시를 로드 밸런서 뒤에서 실행하는 경우, 이 이름은 로드 밸런서를 가리켜야 합니다.
# 애플리케이션 액세스가 활성화된 경우, public_addr는 올바른 리디렉션을 작성하는 데 사용됩니다.
# 데이터베이스 액세스가 활성화된 경우, Database 클라이언트는 이 호스트 이름을 통해
# 프록시에 연결합니다.
public_addr: proxy.example.com:3080
# 클러스터 사용자가 접근할 수 있는 프록시 SSH 엔드포인트의 DNS 이름입니다.
# 지정되지 않은 경우 프록시의 호스트 이름이 기본값으로 사용됩니다.
# 여러 프록시를 로드 밸런서 뒤에서 실행하는 경우, 이 이름은 로드 밸런서를 가리켜야 합니다.
# 이 포트는 SSH 프로토콜을 사용하므로 TCP 로드 밸런서를 사용하세요.
ssh_public_addr: proxy.example.com:3023
# Teleport IoT/노드 터널링을 통해 신뢰된 클러스터 및 노드가
# 클러스터에 접근할 수 있는 터널 SSH 엔드포인트의 DNS 이름입니다.
# 지정되지 않은 경우 프록시의 호스트 이름이 기본값으로 사용됩니다.
# 여러 프록시를 로드 밸런서 뒤에서 실행하는 경우, 이 이름은 로드 밸런서를 가리켜야 합니다.
# 이 포트는 SSH 프로토콜을 사용하므로 TCP 로드 밸런서를 사용하세요.
tunnel_public_addr: proxy.example.com:3024
# HTTPS 연결을 위한 TLS 인증서입니다. 이를 올바르게 구성하는 것은
# Teleport 보안에 매우 중요합니다.
https_keypairs:
- key_file: /var/lib/teleport/webproxy_key.pem
cert_file: /var/lib/teleport/webproxy_cert.pem
- key_file: /etc/letsencrypt/live/*.teleport.example.com/privkey.pem
cert_file: /etc/letsencrypt/live/*.teleport.example.com/fullchain.pem
# 인증서 키 쌍을 다시 로드하는 시도 간의 간격입니다.
# 키 쌍 중 하나를 로드하지 못하면 어떤 키 쌍도 다시 로드되지 않습니다.
# 0(기본값)으로 설정하면 주기적인 다시 로딩이 비활성화됩니다.
# 이 기능을 올바르게 사용하려면 인증서 파일을 원자적으로 업데이트해야 합니다.
https_keypairs_reload_interval: 1h
# Kubernetes 프록시 리스닝 주소입니다.
# 설정되지 않은 경우, 동작은 구성 파일 버전에 따라 달라집니다:
# v2 이상: 리스너가 생성되지 않으며, Kubernetes 트래픽은 web_listen_addr에서 멀티플렉싱됩니다.
# v1: 기본값은 0.0.0.0:3026입니다.
kube_listen_addr: 0.0.0.0:3026
# Kubernetes 접근을 위한 다른 공개 주소를 설정하려면 선택적으로 사용하세요.
kube_public_addr: kube.example.com:3026
# MySQL 프록시 리스닝 주소입니다.
# 설정되지 않은 경우, 동작은 구성 파일 버전에 따라 달라집니다:
# v2 이상: 리스너가 생성되지 않으며, MySQL 트래픽은 web_listen_addr에서 멀티플렉싱됩니다.
# v1: 기본값은 0.0.0.0:3036입니다.
mysql_listen_addr: "0.0.0.0:3036"
# PostgreSQL 프록시 리스너 주소입니다. 제공된 경우, 프록시는 web_listener_addr에서
# PostgreSQL 프로토콜을 멀티플렉싱하는 대신 별도의 리스너를 사용합니다.
postgres_listen_addr: "0.0.0.0:5432"
# MongoDB 프록시 리스너 주소입니다. 제공된 경우, 프록시는 web_listener_addr에서
# Mongo 프로토콜을 멀티플렉싱하는 대신 별도의 리스너를 사용합니다.
mongo_listen_addr: "0.0.0.0:27017"
# MySQL 클라이언트에 광고되는 주소입니다. 설정되지 않은 경우 public_addr가 사용됩니다.
mysql_public_addr: "mysql.teleport.example.com:3306"
# PostgreSQL 클라이언트에 광고되는 주소입니다. 설정되지 않은 경우 public_addr가 사용됩니다.
postgres_public_addr: "postgres.teleport.example.com:443"
# MongoDB 클라이언트에 광고되는 주소입니다. 설정되지 않은 경우 public_addr가 사용됩니다.
mongo_public_addr: "mongo.teleport.example.com:443"
# Letsencrypt.org에서 ACME를 통해 TLS_ALPN-01 챌린지를 사용하여 자동 인증서를 가져옵니다.
# ACME를 사용할 때 'proxy_service'는 포트 443을 통해 공개적으로 접근 가능해야 합니다.
# CLI 명령으로도 설정할 수 있습니다:
#
# 'teleport configure --acme --acme-email=email@example.com \
# --cluster-name=tele.example.com -o file'
#
# 고가용성(HA) Teleport 배포에서는 이 기능을 활성화하지 마세요.
# HA에서 사용하는 경우 너무 많은 실패한 인증 시도로 인해 ACME 프로세스가 잠길 수 있습니다
# (https://letsencrypt.org/docs/failed-validation-limit/).
#acme:
# enabled: yes
# email: user@example.com
# ID 공급자 구성입니다. Teleport의 ID 공급자를 자세히 구성합니다.
# 현재는 SAML만 지원됩니다.
idp:
# SAML ID 공급자 구성입니다.
saml:
# SAML ID 공급자를 활성화합니다. 기본값은 'yes'입니다.
enabled: yes
# Proxy 서비스에서 제공하는 Web UI의 구성 옵션입니다.
ui:
# 터미널에서 스크롤백의 양을 설정합니다. 스크롤백은 초기 뷰포트를 넘어서는
# 줄이 스크롤될 때 유지되는 행의 수를 의미합니다. 세션 녹화 보기에는 적용되지 않습니다.
scrollback_lines: 1000
# Web UI 리소스 페이지에서 표시할 리소스를 설정합니다.
# 사용자가 접근할 수 있는 리소스와 요청 가능한 리소스가 포함됩니다.
# 기본적으로 두 유형 모두 포함됩니다. 사용자가 접근 가능한 리소스만 보이도록 하려면
# 이를 "accessible_only"로 설정하세요.
show_resources: 'requestable'
# Proxy 서비스가 웹 API를 위한 "X-Forwarded-For" 헤더에서 클라이언트 소스 IP를 가져오도록 활성화합니다.
# IP 스푸핑을 방지하려면 Proxy 서비스를 클라이언트 IP를 "X-Forwarded-For" 헤더에 설정하는
# Layer 7 로드 밸런서 또는 리버스 프록시 뒤에 배치해야 합니다.
# 여러 개의 IP가 포함된 요청은 거부됩니다.
trust_x_forwarded_for: false
# 에이전트 자동 업데이트를 위한 내장 버전 서버 구성입니다.
# 이 구성을 설정하지 않으면 기본 채널이 생성되며 Proxy 서비스에서 실행 중인 Teleport 버전을 제공합니다.
automatic_upgrades_channels:
# 기본 버전 채널 재정의
default:
static_version: v14.2.1
# 정적 버전을 가진 새로운 버전 채널 정의
additional/channel/static:
static_version: v14.2.0
critical: true
# 업스트림 버전 서버로 요청을 전달하는 새로운 버전 채널 정의
additional/channel/remote:
forward_url: https://updates.releases.teleport.dev/v1/stable/cloud
Auth Service
이 설정은 Teleport Auth Service에 적용됩니다:
Teleport Enterprise Cloud가 Auth Service를 관리하므로 이러한 구성 설정을 지정할 필요가 없습니다.
teleport:
# 클러스터 상태와 감사 로그에 사용되는 스토리지 백엔드 구성. 여러 백엔드 유형을 지원합니다.
storage:
# 기본적으로 Teleport는 로컬 파일 시스템의 `data_dir` 디렉토리에 SQLite 데이터베이스를 사용합니다.
type: sqlite
# 감사 로그 이벤트가 저장될 위치 목록입니다. 기본적으로 `/var/lib/teleport/log`에 저장됩니다.
#
# 이렇게 여러 대상을 지정할 경우, Teleport Web UI에서 이벤트를 표시하는 데 사용하는
# 고가용성 스토리지 방법(예: DynamoDB 또는 Firestore)을 먼저 지정해야 합니다.
audit_events_uri:
- 'dynamodb://events_table_name'
- 'firestore://events_table_name'
- 'postgresql://user_name@database-address/events_table_name'
- 'file:///var/lib/teleport/log'
- 'stdout://'
# Teleport를 AWS S3 버킷이나 GCP Storage('gs://')를 사용하여 녹화된 세션을 저장하도록 구성할 때 이 설정을 사용합니다.
audit_sessions_uri: 's3://example.com/path/to/bucket?region=us-east-1'
# SQLite 관련 섹션:
# 기본 경로는 `data_dir`의 `backend` 디렉토리입니다.
path: /var/lib/teleport/backend/
# SQLite의 `synchronous` 프래그마는 시스템 충돌에 대한 신뢰성을 희생하고 쓰기 성능을 개선하기 위해 `"OFF"`로 설정할 수 있습니다
# (https://www.sqlite.org/pragma.html#pragma_synchronous 참조).
sync: FULL
# SQLite의 `journal_mode` 프래그마는 기본적으로 WAL 모드를 사용하는 데이터베이스 파일이 아닌 경우 SQLite 기본값(DELETE)에서 변경되지 않습니다.
# 신뢰성을 희생하지 않고 성능을 개선하려면 `journal`을 `WAL`로 설정하고 `sync`를 `NORMAL`로 설정할 수 있지만,
# 잠금을 지원하는 파일 시스템에서만 가능합니다 (https://www.sqlite.org/pragma.html#pragma_journal_mode 참조).
#journal: DELETE
# DynamoDB 관련 섹션:
# continuous_backups는 연속 백업을 활성화하는 데 사용됩니다.
# 기본값: false
continuous_backups: true
# auto_scaling은 자동 확장을 활성화하고 설정을 정의하는 데 사용됩니다.
# 기본값: false
auto_scaling: true
# 기본적으로 Teleport는 AWS TTL이 1년인 감사 이벤트를 저장합니다.
# 아래와 같이 이 값을 구성할 수 있습니다. 0초로 설정하면 TTL이 비활성화됩니다.
#
# 참고: DynamoDB 이벤트 백엔드만 retention_period를 준수합니다. 다른 이벤트 백엔드는
# audit_events_uri의 쿼리 매개변수를 통해 보존 기간을 소비합니다. 아래 예시에서 다른 백엔드에 대한 보존 기간을 구성하는 방법을 참조하십시오.
# Firestore: firestore://events_table_name?eventRetentionPeriod=10d
# Postgres: postgresql://user_name@database-address/teleport_audit?retention_period=10d
retention_period: 365d
# 읽기 용량 최소/최대 단위
read_min_capacity: int
read_max_capacity: int
read_target_value: float
# 쓰기 용량 최소/최대 단위
write_min_capacity: int
write_max_capacity: int
write_target_value: float
# SSH에 대한 기본 암호 알고리즘. 기본값을 재정의하려는 경우에만 이 섹션을 설정해야 합니다.
ciphers:
- aes128-ctr
- aes192-ctr
- aes256-ctr
- aes128-gcm@openssh.com
- aes256-gcm@openssh.com
- chacha20-poly1305@openssh.com
# SSH에 대한 기본 키 교환 알고리즘(KEX). 기본값을 재정의하려는 경우에만 이 섹션을 설정해야 합니다.
kex_algos:
- curve25519-sha256
- curve25519-sha256@libssh.org
- ecdh-sha2-nistp256
- ecdh-sha2-nistp384
- ecdh-sha2-nistp521
- diffie-hellman-group14-sha256
# SSH에 대한 기본 메시지 인증 코드(MAC) 알고리즘. 기본값을 재정의하려는 경우에만 이 섹션을 설정해야 합니다.
mac_algos:
- hmac-sha2-256-etm@openssh.com
- hmac-sha2-512-etm@openssh.com
- hmac-sha2-256
- hmac-sha2-512
# TLS에 대한 기본 암호화 스위트. 이 섹션이 지정되지 않으면 기본 암호화 스위트만 활성화됩니다.
ciphersuites:
- tls-ecdhe-rsa-with-aes-128-gcm-sha256
- tls-ecdhe-ecdsa-with-aes-128-gcm-sha256
- tls-ecdhe-rsa-with-aes-256-gcm-sha384
- tls-ecdhe-ecdsa-with-aes-256-gcm-sha384
- tls-ecdhe-rsa-with-chacha20-poly1305
- tls-ecdhe-ecdsa-with-chacha20-poly1305
# 이 섹션은 'auth 서비스'를 구성합니다:
auth_service:
# 'auth' 역할을 활성화합니다. 기본값은 'yes'입니다.
enabled: yes
# cluster_name은 새 클러스터를 시작할 때 사용하는 이름입니다.
# 클러스터 이름은 이 CA가 생성한 인증서 서명의 일부로 사용됩니다.
#
# 여러 클러스터 간의 신뢰를 구성할 때 중요해지므로 의미 있는 이름으로 명시적으로 설정하는 것을 강력히 권장합니다.
#
# 기본적으로 자동으로 생성된 이름이 사용됩니다(권장하지 않음).
#
# 중요: 이 필드에 대한 변경 사항은 이미 생성된 클러스터에 영향을 미치지 않습니다.
# 기존 클러스터의 이름을 변경하려면 'POST /v2/configuration/name' 엔드포인트를 사용할 수 있지만,
# 이는 생성된 모든 인증서와 키를 무효화합니다(필요한 경우 /var/lib/teleport 디렉토리를 초기화해야 할 수 있음).
cluster_name: "main"
# proxy_protocol은 HAProxy PROXY 프로토콜 지원을 제어합니다.
# 기본값은 지정되지 않으며, 가능한 값은 다음과 같습니다:
# 'on' - PROXY 프로토콜이 활성화되고 필수입니다.
# 'off' - PROXY 프로토콜이 비활성화되고 금지됩니다.
#
# 지정되지 않은 경우, PROXY 프로토콜은 허용되지만 필수는 아닙니다. 이는 테스트 환경에 적합하지만
# 프로덕션 환경에서는 권장되지 않습니다. Teleport의 IP 고정 기능은 이 필드를 지정하지 않고 PROXY 헤더를
# 수신하면 작동하지 않습니다. Auth 서비스가 PROXY 헤더를 보내는 L4 로드 밸런서 뒤에서 실행되는 경우
# `on`으로 설정하고, 그렇지 않은 경우 `off`로 설정하십시오.
proxy_protocol: on
authentication:
# 기본 인증 유형. 가능한 값은 'local'과 'github'이며,
# Teleport Community Edition에서는 'oidc'와 'saml'이 추가로 지원됩니다.
# 오픈 소스 버전에서는 로컬 인증(Teleport 자체 사용자 DB) 및 GitHub만 지원됩니다.
type: local
# 로컬 인증이 다른 인증 유형과 함께 활성화되는지 여부를 설정합니다. 기본값은 true입니다.
# FedRAMP / FIPS에서는 local_auth가 'false'여야 합니다.
#local_auth: true
# 사용자 로그인 세션에서 세션별 MFA 또는 PIV-하드웨어 키 제한을 강제 적용합니다.
# 가능한 값: true, false, "hardware_key", "hardware_key_touch".
# 기본값은 false입니다.
require_session_mfa: false
# second_factor는 'on', 'otp', 또는 'webauthn'일 수 있습니다.
# - 'on'은 otp 또는 webauthn 두 번째 요소를 요구합니다.
# - 'otp'와 'webauthn'은 해당 두 번째 요소를 요구합니다.
second_factor: otp
# 비밀번호 없는 인증을 허용할지 설정합니다.
# 비밀번호 없는 인증에는 WebAuthn이 필요합니다.
# 기본값은 "true"입니다.
#passwordless: true
# 헤드리스 인증을 허용할지 설정합니다.
# 헤드리스 인증에는 WebAuthn이 필요합니다.
# 기본값은 "true"입니다.
#headless: true
# 클러스터의 기본 인증 커넥터를 설정합니다:
# - 로컬 인증(password, WebAuthn 등)을 위해 'local'
# - 비밀번호 없는 인증을 위해 'passwordless'
# - 헤드리스 인증을 위해 'headless'
# - 특정 SSO 커넥터 이름
# 기본값은 "local"입니다.
#connector_name: local
# 이 섹션은 second_factor가 'on', 'optional', 또는 'webauthn'으로 설정된 경우 사용됩니다.
webauthn:
# Teleport 프록시의 공개 도메인, 프로토콜(`https://`) 및 포트 번호 제외
#
# 중요: rp_id는 클러스터의 수명 동안 절대 변경되어서는 안 됩니다. 이는 두 번째 요소
# 인증 장치의 등록 데이터에 기록되기 때문입니다. rp_id가 변경되면 기존 모든 인증 장치 등록이
# 무효화되며 WebAuthn을 두 번째 요소로 사용하는 모든 사용자가 재등록해야 합니다.
rp_id: "localhost"
# [장치 검증](https://developers.yubico.com/WebAuthn/WebAuthn_Developer_Guide/Attestation.html)을 위한
# 인증 기관(CA)의 선택적 허용 목록(로컬 파일 경로 또는 인라인 PEM 인증서 문자열).
#
attestation_allowed_cas:
- /path/to/allowed_ca.pem
- |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
attestation_denied_cas:
- /path/to/denied_ca.pem
- |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
disabled: false
u2f:
app_id: https://localhost:3080
locking_mode: best_effort
device_trust:
mode: optional
default_session_ttl: 12h
# IP 및 바인딩할 포트. 다른 Teleport 노드들이 이 포트("Auth API" 또는 "Cluster API")에 연결하여
# 클라이언트 인증서를 검증합니다.
listen_addr: 0.0.0.0:3025
# 로드 밸런서 뒤에 위치한 인증 서버의 선택적 DNS 이름.
public_addr: auth.example.com:3025
# 클러스터에 새 노드를 추가하기 위한 사전 정의된 토큰. 각 토큰은 새 노드가 허용될 역할을 지정합니다.
# 새 노드를 추가하는 더 안전한 방법은 자동 만료 토큰을 생성하기 위해 `tctl nodes add --ttl` 명령을 사용하는 것입니다.
#
# 32바이트 이상의 충분히 랜덤한 토큰을 생성하려면 `pwgen` 같은 도구를 사용하는 것을 권장합니다.
tokens:
- "proxy,node:xxxxx"
- "auth:yyyy"
# 세션 기록을 구성하는 선택적 설정. 가능한 값은 다음과 같습니다:
# "node" : (기본값) 세션이 노드에서 기록되고 스토리지 서비스로 업로드된 후 주기적으로 정리됩니다.
# "node-sync" : 세션 기록이 노드 -> 인증 -> 스토리지 서비스로 스트리밍되며 디스크에 저장되지 않습니다.
# "proxy" : 세션이 프록시에서 기록되고 스토리지 서비스로 업로드된 후 주기적으로 정리됩니다.
# "proxy-sync : 세션 기록이 프록시 -> 인증 -> 스토리지 서비스로 스트리밍되며 디스크에 저장되지 않습니다.
# "off" : 세션 기록이 비활성화됩니다.
#
session_recording: "node"
# Teleport 프록시가 엄격한 호스트 키 확인을 수행하는지 여부를 설정합니다.
# session_recording=proxy인 경우에만 적용됩니다.
proxy_checks_host_keys: yes
# 클라이언트의 활동이 없어진 후 클러스터 리소스에 대한 세션이 강제로 종료되는지 여부를 결정합니다(유휴 클라이언트).
# 예시: "30m", "1h", 또는 "1h30m"
client_idle_timeout: never
# 비활성 상태로 인해 클라이언트가 연결 해제될 때 사용자에게 전송되는 사용자 지정 메시지입니다.
# 빈 문자열은 메시지가 전송되지 않음을 나타냅니다.
# (현재 서버 액세스 연결에서만 지원됨)
client_idle_timeout_message: ""
# Web UI의 유휴 시간 제한을 설정합니다. 기본값은 10m입니다.
web_idle_timeout: 10m
# 활성 세션 중간에 클라이언트 인증서가 만료되면 클라이언트를 강제로 연결 해제할지 여부를 결정합니다(기본값은 'no').
disconnect_expired_cert: no
# Teleport가 클라이언트 및 역방향 터널 연결을 위해 keep-alive 메시지를 보내는 간격을 결정합니다.
# 기본값은 5분(300초)으로, 일반적인 로드 밸런서 타임아웃인 350초보다 낮게 설정되어 있습니다.
# keep_alive_count_max는 Teleport 클러스터가 클라이언트 또는 서비스와의 연결을 종료하기 전에
# 누락된 keep-alive 메시지 수를 나타냅니다.
keep_alive_interval: 5m
keep_alive_count_max: 3
# tsh ssh 및 Web UI를 통해 SSH 연결을 설정하는 데 사용되는 클러스터 전체 다이얼 타임아웃을 지정합니다.
# 기본값인 30초는 대부분의 사용 사례에 충분해야 합니다. 그러나 대상 호스트에 도달하기 위해 여러 네트워크 홉이 필요한 경우
# 다이얼 타임아웃 실패를 방지하기 위해 이 값을 필요에 따라 증가시킬 수 있습니다.
ssh_dial_timeout: 30s
# 엔터프라이즈 max_connections 및 max_sessions와 함께 사용되는 내부 세션 제어 타임아웃 클러스터 전체 값을 결정합니다.
# 이 값을 변경할 필요는 거의 없습니다.
# session_control_timeout: 2m
# 노드에 연결하는 데 사용되는 라우팅 전략을 결정합니다. 'unambiguous_match'(기본값) 또는 'most_recent'일 수 있습니다.
routing_strategy: unambiguous_match
# 인증 서버와 함께 시작할 라이센스 파일. 이 설정은 Teleport Community Edition에서는 무시되며,
# Teleport Pro, Business 및 Enterprise 구독 플랜에서만 필요합니다.
#
# 경로는 절대 경로나 구성된 `data_dir`에 상대적일 수 있으며 Teleport 다운로드 포털에서 얻은 라이센스 파일을 가리켜야 합니다.
#
# 설정되지 않은 경우 기본적으로 Teleport는 구성된 `data_dir`에서 `license.pem` 파일을 찾습니다.
license_file: /var/lib/teleport/license.pem
# 클러스터에 로그인하는 사용자에게 표시되는 배너 메시지를 구성하며, 사용자가 로그인하기 전에 이를 승인해야 합니다.
# 로그인 전에 표시되므로 기밀 정보를 포함해서는 안 됩니다.
# 기본값은 빈 문자열이며, 이는 메시지 또는 승인이 필요하지 않음을 의미합니다.
message_of_the_day: ""
# 클러스터가 TLS 라우팅 모드에서 실행 중인지 여부를 클라이언트에게 나타냅니다. 모든 프로토콜이 프록시의 web_listen_addr에서 멀티플렉싱됩니다.
#
# 가능한 값은 다음과 같습니다:
#
# "multiplex": 클라이언트가 TLS 라우팅 모드에서 Teleport 프록시의 웹 리스너에 연결합니다.
# "separate": 클라이언트가 Teleport 프록시의 개별 리스너(tunnel_listen_addr, mysql_listen_addr 등)에 연결합니다.
#
proxy_listener_mode: multiplex
tunnel_strategy:
# 가능한 터널 전략 유형:
#
# "agent_mesh": 기본 동작으로, 에이전트가 모든 Teleport 프록시 서비스 인스턴스에 연결합니다.
# "proxy_peering": 에이전트가 프록시 서비스 인스턴스 하위 집합에 연결하며,
# 클라이언트는 프록시 서비스 인스턴스를 통해 엔드투엔드 연결을 위해 라우팅됩니다.
type: proxy_peering
# 에이전트가 생성하려고 시도하는 역방향 터널 연결 수입니다. 이 필드는 "proxy_peering" 터널 전략 유형을 사용할 때만 사용할 수 있습니다.
# 고가용성을 위해 이 값을 2 이상으로 설정하는 것을 권장합니다.
agent_connection_count: 1
load_all_cas: false
case_insensitive_routing: false
access_monitoring:
enabled: yes
role_arn: arn:aws:iam::123456789012:role/AccessMonitoringRole
report_results: s3://audit-long-term/report_results
workgroup: access_monitoring_workgroup
추가 자료:
- Storage Backends 참조: DynamoDB, S3, etcd 및 기타 고가용성 백엔드 구성에 대한 안내입니다.
- Passwordless:
passwordless
인증 옵션에 대한 추가 정보. - Headless WebAuthn:
headless
인증 옵션. - Single Sign-On: Teleport이 특정 SSO 인증 커넥터를 사용하도록 구성할 수 있도록 SSO 구성하기.
- Locking:
locking_mode
옵션 구성하기. - Device Trust:
device_trust
섹션 구성하기. - Recording Proxy Mode: Recording Proxy Mode를 구성하는 경우,
proxy_checks_host_keys
를 활성화하는 것을 고려하십시오.
SSH Service
이 설정은 Teleport SSH Service에 적용됩니다:
ssh_service:
# 'ssh' 역할을 활성화합니다. 기본값은 'yes'입니다.
enabled: yes
# SSH 서비스가 바인딩할 IP와 포트를 설정합니다.
listen_addr: 0.0.0.0:3022
# SSH 서비스의 선택적 공개 주소입니다. 관리자가 Teleport 프록시를 우회하여
# 사용자가 노드에 직접 연결하도록 허용하려는 경우 유용합니다.
public_addr: node.example.com:3022
labels:
role: leader
type: postgres
# 주기적으로 실행할 명령어 목록입니다. 명령어 출력은 노드 레이블로 사용됩니다.
commands:
# 이 명령어는 노드에 'arch=x86_64' 레이블을 추가합니다.
- name: arch
command: ['/bin/uname', '-p']
period: 1h0m0s
# 세션 생성 전에 서버에서 ~/.tsh/environment를 읽는 기능을 활성화합니다.
# 기본적으로 비활성화되어 있습니다. 여기에서 활성화하거나 `--permit-user-env` 플래그를 통해 활성화할 수 있습니다.
permit_user_env: false
# 이 SSH 노드에서 호스트 사용자를 자동으로 생성하는 기능을 비활성화합니다.
# 기본값은 false입니다.
disable_create_host_user: true
# 향상된 세션 기록 기능
enhanced_recording:
# 이 노드에 대해 향상된 감사 기능을 활성화하거나 비활성화합니다. 기본값은 false입니다.
enabled: false
# command_buffer_size는 선택 사항이며 기본값은 8 페이지입니다.
command_buffer_size: 8
# disk_buffer_size는 선택 사항이며 기본값은 128 페이지입니다.
disk_buffer_size: 128
# network_buffer_size는 선택 사항이며 기본값은 8 페이지입니다.
network_buffer_size: 8
# cgroupv2 계층이 마운트되는 위치를 제어합니다. 기본
추가 자료:
- Enhanced Session Recording:
enhanced_recording
구성하기. - PAM Integration:
pam
섹션 구성하기.
Kubernetes Service
이 설정은 Teleport Kubernetes Service에 적용됩니다:
kubernetes_service:
enabled: "yes"
# 선택적 Public & Listen Addr: 만약 리버스 터널을 사용하는 대신
# Kubernetes 클러스터 내부에서 실행 중인 Teleport에 연결하려면 이를 설정하세요.
#
# 선택적 Public Addr
public_addr: [k8s.example.com:3026]
# 선택적 Listen Addr
listen_addr: 0.0.0.0:3026
# 선택적 kubeconfig_file 및 kube_cluster_name: 이 중 하나만 반드시 설정해야 합니다.
#
# Teleport가 Kubernetes 클러스터 외부에서 실행 중이라면,
# kubeconfig_file을 사용하여 Teleport에 클러스터 자격 증명을 제공하세요.
#
# Teleport가 Kubernetes 클러스터의 pod 내부에서 실행 중이라면,
# kube_cluster_name을 사용하여 사용자에게 표시되는 이름을 제공하세요. Teleport는 pod 서비스 계정 자격 증명을 사용하여 로컬 Kubernetes API에 인증합니다.
kubeconfig_file: /secrets/kubeconfig
kube_cluster_name:
# "tctl create" 명령 또는 Kubernetes 자동 검색으로 생성된 동적 Kubernetes 클러스터 리소스에 대한 매처입니다.
# 'discovery_service'에 의해 리소스가 생성된 경우, 'kubernetes_service'는 필요한 권한을 가져야 합니다.
resources:
- labels:
"*": "*"
# 선택적 AWS 역할: Teleport Kubernetes Service가 EKS 클러스터에 접근하기 위해 가정할 역할입니다.
aws:
assume_role_arn: "arn:aws:iam::123456789012:role/example-role-name"
external_id: "example-external-id"
# 선택적 라벨: RBAC 규칙과 결합하여 애플리케이션 접근을 제한하는 데 사용할 수 있습니다.
# 위의 kubeconfig_file을 사용하는 경우, 이러한 라벨은 kubeconfig에 지정된 모든 Kubernetes 클러스터에 적용됩니다.
labels:
env: "prod"
# 선택적 동적 라벨
commands:
- name: "os"
command: ["/usr/bin/uname"]
period: "5s"
# GKE에서 클러스터 이름 가져오기.
- name: cluster-name
command:
- 'curl'
- 'http://metadata.google.internal/computeMetadata
Application Service
이 설정은 Teleport Application Service에 적용됩니다:
app_service:
# 'app' 역할을 활성화합니다. 기본값은 'no'입니다.
enabled: yes
# Teleport에는 작은 디버그 앱이 포함되어 있습니다. 이를 사용하여
# 애플리케이션 서비스가 제대로 작동하는지 확인할 수 있습니다.
# 디버그 앱은 JWT를 출력하므로 애플리케이션을 확장할 때 유용할 수 있습니다.
debug_app: true
# 동적 애플리케이션 리소스를 위한 매처
#
# 모든 애플리케이션 리소스에는 미리 정의된 "teleport.dev/origin" 레이블이 있으며,
# 다음 값 중 하나를 가질 수 있습니다:
# "dynamic": `tctl` 또는 Teleport Terraform provider와 같은 인증 서비스 API 클라이언트를 통해 생성된 애플리케이션 리소스
# "config": 아래의 "apps" 배열에 정의된 애플리케이션 리소스
resources:
- labels:
"*": "*"
apps:
- name: "kubernetes-dashboard"
# 선택 사항: 클라우드 제공자 API에 액세스하려면 클라우드 제공자를 지정하세요.
# 허용되는 값은 "AWS", "Azure", "GCP"입니다.
cloud: ""
# 선택 사항: 애플리케이션에 대한 자유 형식의 설명입니다.
description: "개발 클러스터용 Kubernetes Dashboard"
# 애플리케이션의 URI. TCP 애플리케이션의 경우 tcp를 사용하세요, 예: tcp://localhost:5432.
uri: "http://10.0.1.27:8000"
# TLS 검증을 생략할지 여부를 선택합니다. 기본값은 false입니다.
# insecure_skip_verify: true
# 선택 사항: 공개 주소
public_addr: "example.com"
# 선택 사항: RBAC 규칙과 결합하여 애플리케이션 액세스를 제한하는 데 사용할 수 있는 레이블입니다.
labels:
env: "prod"
# 선택 사항: 이 앱이 정상적으로 작동하기 위해 세션이 필요한 Teleport 애플리케이션 이름 목록입니다.
# 이 앱을 실행할 때 여기에 나열된 모든 앱도 실행되며 세션이 생성됩니다.
# 이러한 세션은 각각의 RBAC 정책을 따릅니다.
# required_apps:
# - "my-api"
# - "prod-database"
# # 필요한 다른 앱 이름을 추가하세요.
# 선택 사항: CORS 정책은 사전 요청(preflight request)에만 사용됩니다.
# 각 라우트의 포함된 앱의 CORS 정책을 덮어쓰지는 않으며, Teleport가 인증되지 않은 OPTION 요청에 응답하는 데 사용됩니다.
cors:
# 교차 출처 요청을 허용하는 원본을 지정합니다.
allowed_origins:
- "https://example.com"
- "https://app.example.com"
# 리소스에 액세스할 때 허용되는 HTTP 메서드입니다.
allowed_methods:
- "GET"
- "POST"
- "PUT"
- "DELETE"
- "OPTIONS"
# 실제 요청에서 사용할 수 있는 HTTP 헤더입니다.
allowed_headers:
- "Content-Type"
- "Authorization"
- "X-Custom-Header"
# 브라우저에서 액세스할 수 있는 헤더입니다.
exposed_headers:
- "Content-Type"
- "X-Custom-Response-Header"
# 요청에 자격 증명을 포함할 수 있는지 여부를 나타냅니다.
allow_credentials: true
# 사전 요청(preflight request)의 결과를 캐시할 수 있는 기간(초)입니다.
max_age: 3600
# 선택 사항: 동적 레이블
commands:
- name: "os"
command: ["/usr/bin/uname"]
period: "5s"
## 선택 사항: 요청 및 응답에 적용할 재작성 규칙 목록
rewrite:
## 선택 사항: Location 헤더 간단 재작성
## 리디렉션 응답에서 호스트를 이 애플리케이션의 공개 주소로 대체하여
## 'Location' 헤더를 재작성합니다.
redirect:
- "localhost"
- "jenkins.internal.dev"
## 선택 사항: 요청에 추가 헤더를 삽입합니다.
headers:
For example:
- "Host: jenkins.example.com"
## 선택 사항: JWT 토큰의 일부를 제거하도록 재작성합니다.
## 세 가지 옵션 중 하나일 수 있습니다:
## - roles-and-traits: JWT 토큰에 역할과 특성을 모두 포함합니다.
## - roles: JWT 토큰에 역할만 포함합니다.
## - traits: JWT 토큰에 특성만 포함합니다.
## - none: JWT 토큰에 역할이나 특성을 포함하지 않습니다.
## 기본값은 roles-and-traits입니다.
jwt_claims: roles-and-traits
Database Service
이 설정은 Teleport Database Service에 적용됩니다:
db_service:
# 데이터베이스 서비스를 활성화합니다.
enabled: "yes"
# "tctl create" 명령이나 디스커버리 서비스를 통해 생성된 데이터베이스 리소스에 대한 매처입니다.
resources:
- labels:
"*": "*"
# 데이터베이스에 접근하기 위해 데이터베이스 서비스가 사용할 AWS 역할 (선택 사항).
aws:
assume_role_arn: "arn:aws:iam::123456789012:role/example-role-name"
external_id: "example-external-id"
# AWS에 호스팅된 데이터베이스를 등록하기 위한 매처입니다.
aws:
# 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
# 'rds' - Amazon RDS 및 Aurora 데이터베이스를 검색하고 등록합니다.
# 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 검색하고 등록합니다.
# 'redshift' - Amazon Redshift 데이터베이스를 검색하고 등록합니다.
# 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 검색하고 등록합니다.
# 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 검색하고 등록합니다.
# 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 검색하고 등록합니다.
# 'opensearch' - Amazon OpenSearch 데이터베이스를 검색하고 등록합니다.
# 'docdb' - Amazon DocumentDB 데이터베이스를 검색하고 등록합니다.
- types: ["rds", "rdsproxy", "redshift", "redshift-serverless", "elasticache", "memorydb", "opensearch"]
# 데이터베이스를 등록할 AWS 지역입니다.
regions: ["us-west-1", "us-east-2"]
# AWS에 호스팅된 데이터베이스를 검색 및 등록하기 위해 데이터베이스 서비스가 사용할 AWS 역할 (선택 사항).
# 발견된 데이터베이스는 이 역할을 통해서도 데이터베이스 서비스가 접근합니다.
assume_role_arn: "arn:aws:iam::123456789012:role/example-role-name"
# 외부 AWS 계정에서 역할을 맡기 위해 데이터베이스 서비스가 사용할 외부 ID (선택 사항).
external_id: "example-external-id"
# 데이터베이스를 등록할 때 일치시킬 AWS 리소스 태그입니다.
tags:
"*": "*"
# Azure에 호스팅된 데이터베이스를 등록하기 위한 매처입니다.
azure:
# 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
# 'mysql' - Azure MySQL 데이터베이스를 검색하고 등록합니다.
# 'postgres' - Azure PostgreSQL 데이터베이스를 검색하고 등록합니다.
# 'redis' - Azure Cache for Redis 데이터베이스를 검색하고 등록합니다.
# 'sqlserver' - Azure SQL Server 데이터베이스를 검색하고 등록합니다.
- types: ["mysql", "postgres", "redis", "sqlserver"]
# Azure 지역에서 데이터를 등록할 지역. 유효한 옵션은 다음과 같습니다:
# '*' - 모든 지역에서 데이터를 검색 (기본값).
# 유효한 Azure 지역 이름. Azure CLI에서 모든 유효한 지역을 나열할 수 있습니다: `az account list-locations -o table`
regions: ["eastus", "westus"]
# Azure 구독 ID에서 데이터를 등록할 구독 ID. 유효한 옵션은 다음과 같습니다:
# '*' - 모든 구독에서 데이터를 검색 (기본값).
subscriptions: ["11111111-2222-3333-4444-555555555555"]
# Azure 리소스 그룹에서 데이터를 등록할 리소스 그룹. 유효한 옵션은 다음과 같습니다:
# '*' - 구성된 구독 내 모든 리소스 그룹에서 데이터를 검색 (기본값).
resource_groups: ["group1", "group2"]
# Azure 리소스를 등록할 때 일치시킬 태그입니다.
tags:
"*": "*"
# 이 에이전트가 프록시하는 정적으로 등록된 데이터베이스 목록입니다.
databases:
# CLI에서 참조할 수 있는 데이터베이스 프록시 인스턴스 이름입니다.
- name: "prod"
# 데이터베이스 프록시 인스턴스에 대한 자유 형식 설명입니다.
description: "Production database"
# 데이터베이스 프로토콜. 유효한 옵션은 다음과 같습니다:
# "cassandra"
# "clickhouse"
# "clickhouse-http"
# "cockroachdb"
# "dynamodb"
# "elasticsearch"
# "mongodb"
# "mysql"
# "oracle"
# "postgres"
# "redis"
# "snowflake"
# "spanner"
# "sqlserver"
protocol: "postgres"
# 데이터베이스 연결 엔드포인트. Database Service에서 접근 가능해야 합니다.
uri: "postgres.example.com:5432"
# 선택적 TLS 구성입니다.
tls:
# TLS 검증 모드. 유효한 옵션은 다음과 같습니다:
# 'verify-full' - 전체 인증서 검증 수행 (기본값).
# 'verify-ca' - `verify-full`과 동일하지만 서버 이름 검증을 생략합니다.
# 'insecure' - 제공된 모든 인증서를 허용 (권장하지 않음).
mode: verify-full
# 선택적 데이터베이스 DNS 서버 이름. 연결 시 클라이언트 인증서의 DNS 이름을 재정의할 수 있습니다.
server_name: db.example.com
ca_cert_file: /path/to/pem
trust_system_cert_pool: false
# MySQL 전용 옵션.
mysql:
# Teleport Proxy에서 보고하는 기본 MySQL 서버 버전.
# 이 옵션이 설정되면 Database Agent는 MySQL 서버 버전을 확인하려고 시도하지 않습니다.
server_version: 8.0.28
# 자동 사용자 프로비저닝을 위한 선택적 관리자 사용자 구성.
admin_user:
# 관리자 사용자 이름.
name: "teleport-admin"
# 관리자 사용자가 로그인하는 기본 데이터베이스 (선택 사항). 기본값은 개별 가이드를 참조하세요.
default_database: "teleport"
# AWS에 호스팅된 데이터베이스를 위한 선택적 AWS 구성. AWS 지역 및 서비스별 구성은 보통 엔드포인트에서 자동으로 감지됩니다.
aws:
# 데이터베이스가 배포된 지역.
region: "us-east-1"
# 이 데이터베이스에 접근하기 위해 Database Service가 사용할 선택적 AWS 역할.
assume_role_arn: "arn:aws:iam::123456789012:role/example-role-name"
# 외부 AWS 계정에서 역할을 맡기 위해 Database Service가 사용할 선택적 외부 ID.
external_id: "example-external-id"
# Redshift 전용 구성.
redshift:
# Redshift 클러스터 식별자.
cluster_id: "redshift-cluster-1"
# RDS 전용 구성.
rds:
# RDS 인스턴스 식별자.
instance_id: "rds-instance-1"
# RDS Aurora 클러스터 식별자.
cluster_id: "aurora-cluster-1"
# ElastiCache 전용 구성.
elasticache:
# ElastiCache 복제 그룹 식별자.
replication_group_id: "elasticache-replication-group-1"
# MemoryDB 전용 구성.
memorydb:
# MemoryDB 클러스터 이름.
cluster_name: "memorydb-cluster-1"
# ElastiCache 또는 MemoryDB 사용자를 관리하기 위한 선택적 AWS Secrets Manager 구성.
#
# 중요: 동일한 Teleport 관리 사용자를 공유하는 데이터베이스는 동일한 secret_store 구성을 가져야 합니다.
# 이 구성은 고가용성(HA) 모드의 모든 Database Service에서도 일관성이 있어야 합니다.
secret_store:
# 서비스에서 생성된 모든 비밀의 접두사. 기본값은 'teleport/'입니다.
key_prefix: "teleport/"
# 비밀 암호화 및 설명에 사용되는 KMS 키 ID. 지정하지 않으면 Secrets Manager는 기본적으로 AWS 관리 키 'aws/secretsmanager'를 사용합니다.
kms_key_id: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
# DynamoDB 액세스를 위한 IAM 역할을 맡을 때 사용되는 선택적 세션 태그.
session_tags:
dynamodb_table_name: "table-a"
# GCP Cloud SQL 및 Spanner 데이터베이스를 위한 GCP 전용 구성.
gcp:
# GCP 프로젝트 ID.
project_id: "xxx-1234"
# Cloud SQL 인스턴스 ID.
instance_id: "example"
# 예를 들어 SQL Server를 위한 Active Directory 인증에 특정한 설정입니다.
ad:
# Kerberos keytab 파일 경로.
keytab_file: /path/to/keytab
# Active Directory 도메인 이름.
domain: EXAMPLE.COM
# Kerberos 티켓을 얻기 위한 Service Principal Name(SPN).
spn: MSSQLSvc/ec2amaz-4kn05du.dbadir.teleportdemo.net:1433
# Kerberos 구성 파일의 선택적 경로. 기본값은 /etc/krb5.conf입니다.
krb5_file: /etc/krb5.conf
# Azure에 호스팅된 데이터베이스를 위한 선택적 구성입니다.
azure:
# Azure 유연 서버를 사용하는 경우 is_flexi_server를 true로 설정합니다.
is_flexi_server: false
# Azure에서 데이터베이스의 리소스 ID. 이 필드는 Azure Cache for Redis 데이터베이스에 필요합니다.
resource_id: "/subscriptions/00000000-1111-2222-3333-444444444444/resourceGroups/example-group/providers/Microsoft.Cache/Redis/example-db-name"
# 데이터베이스에 할당할 정적 레이블입니다. RBAC에서 사용됩니다.
static_labels:
env: "prod"
# 동적 레이블("명령"). RBAC에서 사용됩니다.
dynamic_labels:
- name: "hostname"
command: ["hostname"]
period: 1m0s
Discovery Service
이 설정은 Teleport Discovery Service에 적용됩니다:
discovery_service:
enabled: "yes"
# discovery_group는 발견된 리소스를 서로 다른 세트로 그룹화하는 데 사용됩니다.
# 여러 Teleport Discovery 서비스를 실행할 때 필요합니다.
# 발견된 서비스가 Teleport에서 발견된 리소스를 관리할 때 충돌하지 않도록 방지합니다.
# 두 Discovery 서비스가 동일한 리소스를 매칭하면, 동일한 discovery_group에 있어야 합니다.
# 두 Discovery 서비스가 서로 다른 리소스를 매칭하면, 서로 다른 discovery_group에 있어야 합니다.
discovery_group: "disc-group"
# poll_interval은 discovery 서버가 각 discovery 주기를 실행하는 빈도입니다.
# 기본값은 5분(5m)입니다.
poll_interval: 5m
# AWS에서 호스팅된 리소스를 발견하기 위한 매처(Matchers).
aws:
# Teleport 클러스터에 등록할 AWS 리소스 유형들.
# 유효한 옵션은 다음과 같습니다:
# 'ec2' - Amazon EC2 인스턴스.
# 'eks' - Amazon EKS 클러스터.
# 'rds' - Amazon RDS 및 Aurora 데이터베이스.
# 'rdsproxy' - Amazon RDS Proxy 데이터베이스.
# 'redshift' - Amazon Redshift 데이터베이스.
# 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스.
# 'elasticache' - Amazon ElastiCache Redis 데이터베이스.
# 'memorydb' - Amazon MemoryDB Redis 데이터베이스.
# 'opensearch' - Amazon OpenSearch Redis 데이터베이스.
- types: ["ec2"]
# 검색할 AWS 리소스의 지역들
regions: ["us-east-1","us-west-1"]
# 리소스를 등록할 때 매칭할 선택적 AWS 리소스 태그
# 기본값은 모든 리소스를 매칭하는 와일드카드 선택자: "*":"*"
tags:
"*": "*"
# Discovery Service가 AWS에서 호스팅된 데이터베이스와 EKS 클러스터를 발견하고 등록하기 위해 가정할 선택적 AWS 역할
assume_role_arn: "arn:aws:iam::123456789012:role/example-role-name"
# 외부 AWS 계정에서 역할을 가정하기 위해 Discovery Service가 사용할 선택적 AWS 외부 ID
external_id: "example-external-id"
# 선택적 섹션: install은 AWS SSM 문서에 대한 매개변수를 제공하는 데 사용됩니다.
# install 섹션이 제공되지 않으면 아래 기본값이 사용됩니다.
# EC2 발견에만 적용됩니다.
install:
join_params:
# token_name은 사용할 Teleport 초대 토큰 이름입니다.
# 선택 사항이며 기본값은 "aws-discovery-iam-token"입니다.
token_name: "aws-discovery-iam-token"
# script_name은 사용할 Teleport 설치 스크립트 이름입니다.
# 선택 사항이며 기본값은 "default-installer"입니다.
script_name: "default-installer"
# 선택적 섹션: ssm은 사용할 AWS SSM 문서를 구성하는 데 사용됩니다.
# ssm 섹션이 제공되지 않으면 아래 기본값이 사용됩니다.
ssm:
# document_name은 매칭되는 노드에 Teleport를 설치할 때 실행해야 하는 SSM 문서 이름입니다.
# 선택 사항이며 기본값은 "TeleportDiscoveryInstaller"입니다.
document_name: "TeleportDiscoveryInstaller"
# Discovery Service가 EKS 액세스 항목을 생성해야 하는 역할(선택 사항).
# 설정되지 않은 경우 Discovery Service는 자신의 ID를 사용하여 액세스 항목을 생성하려고 시도합니다.
setup_access_for_arn: arn:aws:iam::123456789012:role/kube-service-role
azure:
# Azure 리소스 유형. 유효한 옵션은 다음과 같습니다:
# 'aks' - Azure AKS Kubernetes 클러스터를 발견하고 등록합니다.
# 'vm' - Azure 가상 머신을 발견하고 등록합니다.
regions: ["eastus", "westus"]
Windows Desktop Service
이 설정은 Windows Desktop Service에 적용됩니다:
windows_desktop_service:
enabled: yes
# windows_desktop_service가 수신 대기할 주소입니다.
listen_addr: "0.0.0.0:3028"
# (선택 사항) windows_desktop_service가 Teleport의 나머지 부분에 광고할 주소입니다.
# 사용자는 프록시의 웹 UI를 통해 연결하며, proxy_service만 windows_desktop_service에 연결해야 합니다.
public_addr: "desktop-access.example.com:3028"
# (선택 사항) 데스크톱 세션에서 사용자가 선택한 배경화면을 표시할지 여부를 결정합니다.
# 시스템 기본값인 단색 배경화면을 사용하는 경우 성능이 개선됩니다.
# 기본값은 false입니다.
show_desktop_wallpaper: false
# (선택 사항) Teleport를 Active Directory 도메인에 연결할 때 사용하는 LDAP 설정 키입니다.
# 이를 통해 Teleport 액세스가 구성된 Active Directory 도메인에 속한 Windows 데스크톱을 검색하는 서비스를 활성화합니다.
ldap:
# 안전한 LDAP 연결을 위한 LDAP 서버 주소입니다.
# 일반적으로 이 주소는 포트 636을 사용하며, 예: ldap.example.com:636과 같습니다.
# 최상의 결과를 위해 단일 도메인 컨트롤러 대신 고가용성 엔드포인트를 지정해야 합니다.
addr: '$LDAP_SERVER_ADDRESS'
# 선택 사항: LDAP 서버 인증서를 검증할 때 사용할 서버 이름입니다.
# addr이 IP 주소지만 서버가 다른 호스트 이름으로 인증서를 제공하는 경우 유용합니다.
server_name: '$LDAP_SERVER_NAME'
# LDAPS 인증서 검증을 건너뛸 수 있습니다. 이 값을 true로 설정하면 됩니다.
# 그러나 이 값을 false로 설정하고 인증서를 시스템의 신뢰 저장소에 추가하거나
# ldap_ca_cert 변수를 사용하여 PEM 형식 인증서를 제공하는 것이 권장됩니다.
# der_ca_file을 사용하여 파일 경로를 제공할 수도 있지만, 이 동작은 더 이상 권장되지 않습니다.
insecure_skip_verify: false
# PEM 형식의 LDAP CA 인증서입니다.
ldap_ca_cert: |
-----BEGIN CERTIFICATE-----
*certificate data*
-----END CERTIFICATE-----
# DER 형식의 LDAP CA 인증서입니다.
# 더 이상 권장되지 않으므로 ldap_ca_cert를 대신 사용하는 것이 좋습니다.
der_ca_file: /path/to/cert
# 연결하려는 Active Directory 도메인 이름입니다.
domain: '$LDAP_DOMAIN_NAME'
# 인증에 사용할 LDAP 사용자 이름입니다. 이 사용자 이름에는 도메인 NetBIOS 이름이 포함되어야 합니다.
#
# 예를 들어, 도메인이 "example.com"인 경우 NetBIOS 이름은 "EXAMPLE"일 가능성이 높습니다.
# "svc-teleport" 사용자로 연결하려면 형식은 "EXAMPLE\svc-teleport"이어야 합니다.
username: '$LDAP_USERNAME'
# 위 username 필드에 지정된 서비스 계정의 보안 식별자(SID)입니다. SID는 "S-"로 시작하는 문자열처럼 보입니다.
#
# PowerShell에서 다음 명령어를 실행하여 AD 사용자 객체를 읽을 권한이 있는 모든 AD 사용자가 값을 얻을 수 있습니다:
#
# ```
# Get-AdUser -Identity $LDAP_USERNAME | Select SID
# ```
#
# LDAP를 통해 값을 얻으려면 필터 = (&(objectCategory=person)(objectClass=user)(sAMAccountName=$LDAP_USERNAME))로 쿼리를 구성하고
# 요청 속성 = objectSid로 설정하면 됩니다.
sid: '$LDAP_USER_SID'
# (선택 사항) AD 지원이 사용되는 경우, Teleport가 PKI 작업에 사용하는 도메인을 재정의할 수 있습니다.
# 비워두면 ldap 섹션에서 지정된 도메인이 사용됩니다. 이는 PKI가 루트 도메인에 구성되었지만,
# Teleport가 하위 도메인에서 사용자와 컴퓨터에 대한 액세스를 제공하는 경우 유용합니다.
pki_domain: root.example.com
# (선택 사항) Kerberos Key Distribution Center(KDC)의 주소를 구성합니다. 이는 RDP 네트워크 수준 인증(NLA)을 지원하는 데 사용됩니다.
# 비워두면 LDAP 주소가 대신 사용됩니다.
#
# 예시: kdc.example.com:88
# 포트는 선택 사항이며 지정하지 않으면 기본적으로 포트 88이 사용됩니다.
#
# 참고: NLA는 Active Directory 환경에서만 지원되며, 로컬 Windows 사용자로 데스크톱에 연결할 때는 효과가 없습니다.
kdc_address: '$KDC_SERVER_ADDRESS'
# (선택 사항) static_hosts는 Teleport에서 WindowsDesktop 객체로 등록할 호스트 목록입니다.
# 호스트 이름과 레이블을 직접 정의할 수 있습니다.
static_hosts:
- name: example1
ad: false
addr: win1.dev.example.com
labels:
datacenter: dc1
- ad: true
addr: win2.dev.example.com # 주소 기반으로 이름이 생성됩니다
labels:
controller: all
# (선택 사항) LDAP를 통한 자동 데스크톱 검색 활성화를 위한 설정입니다.
discovery:
# 와일드카드 '*' 문자는 Active Directory 도메인의 모든 호스트를 검색하도록 Teleport에 지시합니다.
# 검색 범위를 좁히려면 사용자 지정 DN을 지정하세요. 자동 검색을 비활성화하려면 이 필드를 비워두세요.
base_dn: '*'
# (선택 사항) LDAP 검색을 더욱 맞춤화하기 위한 LDAP 필터입니다.
filters:
- '(location=Oakland)'
- '(!(primaryGroupID=516))' # 도메인 컨트롤러 제외
# (선택 사항) Teleport 레이블로 변환될 LDAP 속성입니다.
label_attributes:
- location
host_labels:
- match: '^.*\.dev\.example\.com'
labels:
environment: dev
- match: '^.*\.prod\.example\.com'
labels:
environment: prod
- match: '^EC2AMAZ-'
labels:
environment: discovered-in-aws
labels:
teleport.internal/resource-id: "resource-id"
Jamf Service
이 설정은 Jamf Service에 적용됩니다:
# Jamf 서비스 설정 섹션입니다.
jamf_service:
# Jamf 서비스를 활성화합니다. 기본값은 'no'입니다.
enabled: yes
# 서비스에 해당하는 동기화 소스 이름입니다.
# 동일한 이름을 가진 Jamf 서비스 소스는 동일한 장치를 관리하며, 이는 특히 장치 제거 시에 중요합니다.
# 여러 Jamf 소스를 사용하는 경우, 서로 구분이 가능한 설명적인 이름을 지정해야 합니다.
# 기본값은 'jamf'입니다.
name: jamf
# Jamf Pro API의 API 엔드포인트입니다.
# 필수 항목입니다.
api_endpoint: https://yourtenant.jamfcloud.com
# Jamf Pro API의 사용자 이름입니다.
# client_id와 client_secret_file 사용을 권장합니다.
# username+password와 client_id+client_secret이 모두 설정된 경우, 후자가 사용됩니다.
username: teleport
# Jamf Pro API 비밀번호가 포함된 파일 경로입니다.
# 파일의 권한을 가능한 한 제한적으로 설정하는 것이 좋습니다.
# client_id와 client_secret_file 사용을 권장합니다.
# username+password와 client_id+client_secret이 모두 설정된 경우, 후자가 사용됩니다.
password_file: /var/lib/teleport/jamf_password.txt
# Jamf Pro API의 Client ID입니다.
# 자세한 내용은 https://developer.jamf.com/jamf-pro/docs/client-credentials를 참조하세요.
client_id: your-client-id
# Jamf Pro API의 Client Secret이 포함된 파일 경로입니다.
# 파일의 권한을 가능한 한 제한적으로 설정하는 것이 좋습니다.
# 자세한 내용은 https://developer.jamf.com/jamf-pro/docs/client-credentials를 참조하세요.
client_secret_file: /var/lib/teleport/jamf_client_secret.txt
# 초기 동기화 지연 시간입니다.
# 동기화를 짧은 랜덤 지연(최대 몇 분) 후에 시작하려면 '0'으로 설정합니다.
# 시작 시 즉시 동기화를 수행하려면 '-1'로 설정합니다.
# 기본값은 '0'입니다.
sync_delay: 0
# `true`로 설정하면 Teleport 프로세스가 모든 Jamf 동기화를 즉시 실행하고 완료되면 종료됩니다. `sync_delay=-1`를 암시합니다.
# Jamf 동기화를 크론(cron)과 같은 방식으로 실행할 때 유용합니다.
# 기본값은 `false`입니다.
exit_on_sync: false
# 인벤토리 동기화 항목입니다.
# 각 항목은 자체 동기화 일정에 해당하며 서로 다른 필터 및 간격을 가질 수 있습니다.
# 인벤토리 섹션이 없으면 미리 설정된 동기화 구성이 사용됩니다.
inventory:
# 부분 동기화 주기입니다.
# 부분 동기화는 새 장치 및 수정된 장치를 가져오려고 시도하지만 전체 Jamf 인벤토리를 스캔하지 않습니다.
# '0' 또는 '-1'로 설정하여 부분 동기화를 비활성화할 수 있습니다.
- sync_period_partial: 6h
# 전체 동기화 주기입니다.
# 전체 동기화는 전체 Jamf 인벤토리를 스캔하여 새/수정된 장치 및 Jamf에서 제거된 장치를 처리합니다.
# '0' 또는 '-1'로 설정하여 전체 동기화를 비활성화할 수 있습니다.
sync_period_full: 24h
# Jamf에는 없지만 Teleport에 존재하는 장치에 대해 수행할 작업입니다.
# 유효한 옵션은 다음과 같습니다:
# 'DELETE' - Jamf에서 제거된 장치를 Teleport에서도 제거합니다. (전체 동기화 필요)
# 'NOOP' - Jamf에서 제거된 장치를 Teleport에 그대로 둡니다.
# 기본값은 'NOOP'입니다.
on_missing: NOOP
# Jamf Pro API 쿼리에 전달되는 장치 필터입니다.
# 가능한 필터 값은 https://developer.jamf.com/jamf-pro/reference/get_v1-computers-inventory를 참조하세요.
# 기본값은 ''입니다.
filter_rsql: ''
# 인벤토리 쿼리의 사용자 지정 페이지 크기입니다.
# 페이지 길이로 인해 Jamf 읽기가 실패하는 경우 유용하지만, 그렇지 않은 경우 그대로 두는 것이 좋습니다.
# 누락되거나 음수로 설정된 경우 서버 기본값이 사용됩니다.
page_size: 0
Debug Service
이 설정은 Debug Service에 적용됩니다:
# 이 설정은 디버그 서비스에 적용됩니다:
debug_service:
enabled: true
Configuration versions
기존 구성의 파손을 방지하기 위해 Teleport의 구성은 버전 관리됩니다. 새로운 구성 버전은 v3
입니다. 구성 파일에 version
이 지정되지 않은 경우, v1
이 기본값으로 설정됩니다.
일부 새로운 Teleport 기능은 사용자가 명시적으로 구성 업그레이드를 선택해야 사용할 수 있습니다.
Config v1
v1
은 Teleport 파일 구성의 원래 버전입니다. 오늘날에도 여전히 지원되지만, 대부분의 새로운 사용자는 최신 구성 버전으로 시작해야 합니다.
Config v2
구성 버전 v2
는 Teleport 8에서 Teleport의 TLS 라우팅 기능의 일환으로 도입되었습니다. TLS 라우팅을 통해 Teleport의 프록시는 단일 포트에서 수신 대기하며, ALPN 및 SNI를 사용하여 들어오는 트래픽을 올바른 Teleport 서비스로 라우팅합니다. 여러 프로토콜 전용 포트에서 수신 대기하는 대신입니다.
하위 호환성을 위해 구성 버전 v1
은 항상 이러한 프로토콜 전용 포트에서 수신 대기합니다. Teleport가 구성 버전 v2
를 사용하는 경우, 개별 프로토콜 전용 포트는 명시적으로 설정되지 않는 한 열리지 않습니다.
Config v3
구성 버전 v3
는 Teleport 11과 함께 도입되었습니다. 버전 3에서는 auth_servers
필드가 더 이상 지원되지 않으며, 에이전트는 Teleport 클러스터에 조인할 때 사용할 엔드포인트를 나타내기 위해 auth_server
또는 proxy_server
중 하나를 지정해야 합니다.
이전 버전의 Teleport는 auth_servers
가 인증 서버 또는 프록시 서버를 가리킬 수 있도록 허용했습니다. 그 결과 Teleport는 여러 가지 다양한 모드로 연결을 시도하며 혼란스러운 오류 메시지가 발생했습니다. 구성 버전 3에서는 Teleport가 단일 모드에서만 연결을 시도하므로 더 효율적이고 문제 해결이 더 용이합니다.
예를 들어, v2
구문의 이 발췌는 다음과 같은 변경으로 v3
로 변환될 수 있습니다.
-version: v2
+version: v3
teleport:
- auth_servers: [ teleport.example.com:443 ]
+ proxy_server: teleport.example.com:443