데이터베이스 접근 구성 참조
데이터베이스 서비스 구성
다음 스니펫은 teleport.yaml
구성 파일에 나타나는 데이터베이스 서비스의 전체 YAML 구성입니다:
```yaml
db_service:
# 데이터베이스 서비스 활성화.
enabled: "yes"
# "tctl create" 명령어로 생성된 데이터베이스 리소스나
# 검색 서비스에 대한 매처.
resources:
# 더 많은 데이터베이스 레이블에 대해 알아보려면
# "Database labels reference" (https://goteleport.com/docs/database-access/reference/labels/)를 참조하세요.
- 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 계정에서 역할을 가정하기 위해 데이터베이스 서비스가 사용할 선택적 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 리전 이름.
regions: ["eastus", "westus"]
# 데이터베이스 등록을 위한 Azure 구독 ID. 유효한 옵션은:
# '*' - 모든 구독에서 데이터베이스를 발견합니다 (기본값).
subscriptions: ["11111111-2222-3333-4444-555555555555"]
# 데이터베이스 등록을 위한 Azure 리소스 그룹. 유효한 옵션은:
# '*' - 구성된 구독 내 모든 리소스 그룹 내에서 데이터베이스를 발견합니다 (기본값).
resource_groups: ["group1", "group2"]
# 데이터베이스 등록 시 일치시킬 Azure 리소스 태그.
tags:
"*": "*"
# 이 에이전트에 의해 프록시된 정적으로 등록된 데이터베이스 목록.
databases:
# CLI에서 참조하는 데 사용되는 데이터베이스 프록시 인스턴스의 이름.
- name: "prod"
# 데이터베이스 프록시 인스턴스에 대한 자유 형식 설명.
description: "생산 데이터베이스"
# 데이터베이스 프로토콜. 유효한 옵션은:
# "cassandra"
# "clickhouse"
# "clickhouse-http"
# "cockroachdb"
# "dynamodb"
# "elasticsearch"
# "mongodb"
# "mysql"
# "oracle"
# "postgres"
# "redis"
# "snowflake"
# "spanner"
# "sqlserver"
protocol: "postgres"
# 데이터베이스 서비스에서 접근할 수 있어야 하는 데이터베이스 연결 엔드포인트.
uri: "postgres.example.com:5432"
# 선택적 TLS 구성.
tls:
# TLS 인증 모드. 유효한 옵션은:
# 'verify-full' - 전체 인증서 검증 수행 (기본값).
# 'verify-ca' - `verify-full`과 동일하지만 서버 이름 검증은 생략합니다.
# 'insecure' - 데이터베이스에서 제공된 모든 인증서를 수용합니다 (추천하지 않음).
mode: verify-full
# 데이터베이스에 연결할 때 클라이언트 인증서에서 DNS 이름을 덮어쓸 수 있도록 허용하는 선택적 데이터베이스 DNS 서버 이름.
# 'verify-full' 모드에서만 사용하세요.
server_name: db.example.com
# 데이터베이스 인증서를 검증하는 데 사용되는 CA의 선택적 경로.
ca_cert_file: /path/to/pem
# Teleport가 호스트 시스템에서 사용 가능한 인증서 기관을 신뢰하도록 허용하는 선택적 구성. 설정하지 않으면 (기본값),
# Teleport는 Teleport의 데이터베이스 서버 CA 또는 이 TLS 설정에서 지정한 ca_cert_file로 서명된 자체 서명된 데이터베이스만 신뢰합니다.
# 클라우드 호스팅 데이터베이스의 경우, Teleport는 검증을 위한 해당 필수 CA를 다운로드합니다.
trust_system_cert_pool: false
# MySQL 전용 옵션.
mysql:
# Teleport 프록시에서 보고된 기본 MySQL 서버 버전.
# 이 옵션이 설정되면 데이터베이스 에이전트는 MySQL 서버 버전을 확인하지 않습니다.
server_version: 8.0.28
# 자동 사용자 프로비저닝을 위한 선택적 관리자 사용자 구성.
admin_user:
# 관리자 사용자의 이름.
name: "teleport-admin"
# 관리자 사용자가 로그인을 하는 선택적 기본 데이터베이스. 기본값에 대한 개별
# 가이드를 참조하세요.
default_database: "teleport"
# AWS 호스팅 데이터베이스를 위한 AWS의 선택적 구성. AWS 리전 및
# 서비스별 구성은 일반적으로 엔드포인트에서 자동으로 감지됩니다.
aws:
# 데이터베이스가 배포된 리전.
region: "us-east-1"
# 이 데이터베이스에 접근하기 위해 데이터베이스 서비스가 가정할 선택적 AWS 역할.
assume_role_arn: "arn:aws:iam::123456789012:role/example-role-name"
# 외부 AWS 계정에서 역할을 가정하기 위해 데이터베이스 서비스가 사용할 선택적 AWS 외부 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(고가용성) 모드의 모든 데이터베이스 서비스에서도 일관되어야 합니다.
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"
# Cloud SQL 및 Spanner 데이터베이스를 위한 GCP 전용 구성.
gcp:
# GCP 프로젝트 ID.
project_id: "xxx-1234"
# Cloud SQL 인스턴스 ID.
instance_id: "example"
# SQL Server를 위한 Active Directory 인증 전용 설정.
ad:
# Kerberos 키탭 파일 경로.
keytab_file: /path/to/keytab
# Active Directory 도메인 이름.
domain: EXAMPLE.COM
# Kerberos 티켓을 얻기 위한 서비스 프린시펄 이름.
spn: MSSQLSvc/ec2amaz-4kn05du.dbadir.teleportdemo.net:1433
# Kerberos 구성 파일에 대한 선택적 경로. 기본값은 /etc/krb5.conf입니다.
krb5_file: /etc/krb5.conf
# Azure 호스팅 데이터베이스를 위한 선택적 구성.
azure:
# Azure 유연 서버를 사용 when 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
```
프록시 구성
다음 프록시 서비스 구성은 데이터베이스 접근과 관련이 있습니다:
데이터베이스 연결을 위한 TLS
--insecure-no-tls
tsh
플래그는 고유 포트를 사용하여 MySQL/MariaDB 및 PostgreSQL 연결에 대해서만 지원됩니다. 이 포트는 mysql_public_addr
또는 postgres_public_addr
로 지정됩니다.
proxy_service:
enabled: "예"
# 데이터베이스 프록시는 일반 웹 프록시 포트에서 수신 대기합니다.
web_listen_addr: "0.0.0.0:443"
# MySQL 프록시는 별도의 포트에서 수신 대기하며 프록시 서버에서 활성화해야 합니다.
mysql_listen_addr: "0.0.0.0:3036"
# MySQL 서버 버전은 기본 Teleport 프록시 서비스 MySQL 버전(8.0.0-Teleport)을 덮어쓸 수 있습니다.
# MySQL 클라이언트 연결이 TLS 라우팅을 사용하는 경우 동적 MySQL 서버 버전이
# mysql_server_version 프록시 설정보다 우선합니다.
# mysql_server_version: "8.0.4"
# PostgreSQL 프록시 수신 주소. 제공된 경우, 프록시는 web_listener_addr에서 PostgreSQL 프로토콜을 멀티플렉싱하는 대신 별도의 수신기를 사용합니다.
# postgres_listen_addr: "0.0.0.0:5432"
# Mongo 프록시 수신 주소. 제공된 경우, 프록시는 web_listener_addr에서 Mongo 프로토콜을 멀티플렉싱하는 대신 별도의 수신기를 사용합니다.
# mongo_listen_addr: "0.0.0.0:27017"
# 기본적으로 데이터베이스 클라이언트는 이 호스트 이름을 통해 프록시에 연결합니다.
# 특정 데이터베이스 프로토콜에 대한 공용 주소를 재정의하려면 postgres_public_addr 및 mysql_public_addr를 사용하십시오.
public_addr: "teleport.example.com:443"
# MySQL 클라이언트에 광고되는 주소. 설정되지 않으면 public_addr가 사용됩니다.
mysql_public_addr: "mysql.teleport.example.com:3306"
# PostgreSQL 클라이언트에 광고되는 주소. 설정되지 않으면 public_addr가 사용됩니다.
postgres_public_addr: "postgres.teleport.example.com:443"
# Mongo 클라이언트에 광고되는 주소. 설정되지 않으면 public_addr가 사용됩니다.
mongo_public_addr: "mongo.teleport.example.com:443"
Teleport Enterprise Cloud는 데이터베이스 접근과 관련된 다음 설정으로 Teleport 프록시 서비스를 자동으로 구성합니다. 이 참조 구성은 당신의 Teleport Enterprise Cloud 테넌트 주소 대신 example.teleport.sh
를 사용합니다:
proxy_service:
enabled: "예"
# 데이터베이스 프록시는 일반 웹 프록시 포트에서 수신 대기합니다.
web_listen_addr: "0.0.0.0:3080"
# MySQL 프록시는 별도의 포트에서 수신 대기합니다.
mysql_listen_addr: "0.0.0.0:3036"
# 데이터베이스 클라이언트는 이 호스트 이름을 통해 프록시 서비스에 연결합니다.
public_addr: "mytenant.teleport.sh:443"
# MySQL 클라이언트에 광고되는 주소.
mysql_public_addr: "mytenant.teleport.sh:3036"
# PostgreSQL 클라이언트에 광고되는 주소.
postgres_public_addr: "mytenant.teleport.sh:443"
# Mongo 클라이언트에 광고되는 주소. 설정되지 않으면 public_addr가 사용됩니다.
mongo_public_addr: "mongo.teleport.example.com:443"
데이터베이스 리소스
tctl
리소스 명령으로 관리되는 데이터베이스 리소스의 전체 YAML 명세:
kind: db
version: v3
metadata:
# 데이터베이스 리소스 이름.
name: example
# 데이터베이스 리소스 설명.
description: "예제 데이터베이스"
# 데이터베이스 리소스 정적 레이블.
labels:
env: example
spec:
# 데이터베이스 프로토콜. 유효한 옵션은:
# "cassandra"
# "clickhouse"
# "clickhouse-http"
# "cockroachdb"
# "dynamodb"
# "elasticsearch"
# "mongodb"
# "mysql"
# "oracle"
# "postgres"
# "redis"
# "snowflake"
# "spanner"
# "sqlserver"
protocol: "postgres"
# 데이터베이스 연결 끝점.
uri: "localhost:5432"
# 선택적 TLS 구성.
tls:
# TLS 검증 모드. 유효한 옵션은:
# 'verify-full' - 전체 인증서 검증 수행(기본값).
# 'verify-ca' - `verify-full`과 동일하지만 서버 이름 검증을 생략합니다.
# 'insecure' - 데이터베이스에서 제공한 모든 인증서를 허용합니다(권장되지 않음).
mode: verify-full
# 클라이언트를 데이터베이스에 연결할 때 클라이언트 인증서의 DNS 이름을 재정의합니다.
# 'verify-full' 모드에서만 사용하십시오.
server_name: db.example.com
# 데이터베이스 인증서를 검증하기 위한 선택적 CA.
ca_cert: |
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
# Teleport가 호스트 시스템에서 사용 가능한 인증서를 신뢰하도록 허용하는 선택적 구성.
# 설정되지 않으면(기본값), Teleport는 Teleport의 데이터베이스 서버 CA 또는 이 TLS 설정에 지정된 ca_cert로 서명된
# 자체 서명된 데이터베이스만 신뢰합니다. 클라우드 호스팅 데이터베이스의 경우, Teleport는 검증을 위해 필요한
# 해당 CA를 다운로드합니다.
trust_system_cert_pool: false
# 자동 사용자 프로비저닝을 위한 데이터베이스 관리자 사용자.
admin_user:
# 데이터베이스 관리자 사용자 이름.
name: "teleport-admin"
# MySQL 전용 옵션.
mysql:
# Teleport 프록시 서비스에 의해 보고된 MySQL 서버 버전.
# Teleport는 이 문자열을 사용하여 클라이언트에 서버 버전을 보고합니다.
#
# 이 옵션이 설정되지 않으면 데이터베이스 서비스는 시작 시 MySQL 인스턴스에 연결하여 서버 버전을 가져오려고 합니다.
# 그렇지 않으면 데이터베이스에 연결하지 않고 제공된 값을 사용할 것입니다.
#
# 두 경우 모두 클라이언트에 보고되는 MySQL 서버 버전은 사용자의 첫 성공적인 연결 시 업데이트됩니다.
# Teleport는 연결된 클라이언트에 서버 버전을 보고할 때 기본 '8.0.0-Teleport' 버전 대신 해당 문자열을 사용합니다.
# 이 옵션이 설정되지 않으면 데이터베이스 서비스는 시작 시 MySQL 인스턴스에 연결하여 서버 버전을 가져오려고 합니다.
# 그렇지 않으면 데이터베이스에 연결하지 않고 제공된 값을 사용할 것입니다.
server_version: 8.0.28
# RDS/Aurora/Redshift를 위한 선택적 AWS 구성. 엔드포인트에서 자동으로 감지될 수 있습니다.
aws:
# 데이터베이스가 배포된 리전.
region: "us-east-1"
# 데이터베이스 서비스가 이 데이터베이스에 접근하기 위해 맡을 AWS 역할(선택적).
assume_role_arn: "arn:aws:iam::123456789012:role/example-role-name"
# 데이터베이스 서비스가 외부 AWS 계정에서 역할을 맡기 위해 사용할 AWS 외부 ID(선택적).
external_id: "example-external-id"
# Redshift 특정 구성.
redshift:
# Redshift 클러스터 식별자.
cluster_id: "redshift-cluster-1"
# GCP 구성(Cloud SQL 및 Spanner 데이터베이스에 필요).
gcp:
# GCP 프로젝트 ID.
project_id: "xxx-1234"
# Cloud SQL 인스턴스 ID.
instance_id: "example"
# SQL Server 등의 Active Directory 인증을 위한 설정.
ad:
# Kerberos 키탭 파일 경로.
keytab_file: /path/to/keytab
# Active Directory 도메인 이름.
domain: EXAMPLE.COM
# Kerberos 티켓을 얻기 위한 서비스 주체 이름.
spn: MSSQLSvc/ec2amaz-4kn05du.dbadir.teleportdemo.net:1433
# Kerberos 구성 파일에 대한 선택적 경로. 기본값은 /etc/krb5.conf입니다.
krb5_file: /etc/krb5.conf
# 선택적 동적 레이블.
dynamic_labels:
- name: "hostname"
command: ["hostname"]
period: 1m0s
새로운 db
리소스는 구성 파일 db.yaml
를 사용하는 다음 명령을 실행하여 생성할 수 있습니다:
로컬 머신에서 tctl을 사용하기 위해 클러스터에 tsh로 로그인합니다.
"tsh login"을 먼저 실행하지 않고도 Auth 서비스 호스트에서 tctl을 실행할 수 있습니다.
tsh login --proxy=teleport.example.com --user=myuser리소스 생성
tctl create -f db.yaml
로컬 머신에서 tctl을 사용하기 위해 Teleport 클러스터에 로그인합니다.
tsh login --proxy=mytenant.teleport.sh --user=myuser리소스 생성
tctl create -f db.yaml