데이터베이스 접근 CLI 참조
Teleport v18.9이 페이지는 Teleport로 보호되는 데이터베이스를 관리하는 데 관련된 Teleport CLI 명령을 나열합니다. Teleport Database Service를 실행할 호스트에서 실행되는 teleport 데몬 명령.
이 페이지는 Teleport로 보호되는 데이터베이스를 관리하는 데 관련된 Teleport CLI 명령을 나열합니다. 여기에는 다음이 포함됩니다:
-
Teleport Database Service를 실행할 호스트에서 실행되는
teleport데몬 명령. -
Teleport 클러스터에 알려진 데이터베이스를 나타내는
db리소스를 관리하는 데 사용하는tctl관리 도구.
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
- 클러스터의 데이터베이스에 접근하기 위해 최종 사용자가 실행하는
tsh클라이언트 도구.
teleport db start#
Teleport Database Service를 시작합니다.
$ teleport db start \
--token=/path/to/token \
--auth-server=proxy.example.com:443 \
--name=example \
--protocol=postgres \
--uri=postgres.example.com:5432
$ teleport db start \
--token=/path/to/token \
--auth-server=mytenant.teleport.sh:443 \
--name=example \
--protocol=postgres \
--uri=postgres.mytenant.teleport.sh:5432
| 플래그 | 설명 |
|---|---|
-d/--debug |
상세 로깅을 stderr로 활성화합니다. |
--pid-file |
PID 파일의 전체 경로. 기본적으로 PID 파일이 생성되지 않습니다. |
--auth-server |
Teleport Proxy Service의 주소. |
--token |
Auth Service에 등록하기 위한 초대 토큰. |
--ca-pin |
Auth Service를 검증하기 위한 CA 핀. |
-c/--config |
구성 파일 경로(기본값 /etc/teleport.yaml). |
--labels |
이 노드에 대한 레이블의 쉼표 구분 목록, 예를 들어 env=dev,app=web. |
--fips |
FedRAMP/FIPS 모드에서 Teleport를 시작합니다. |
--name |
프록시된 데이터베이스의 이름. |
--description |
프록시된 데이터베이스의 설명. |
--protocol |
프록시된 데이터베이스 프로토콜. 지원되는 값은 postgres, mysql, mongodb, oracle, cockroachdb, redis, snowflake, sqlserver, cassandra, elasticsearch, opensearch, dynamodb, clickhouse, clickhouse-http, spanner입니다. |
--uri |
프록시된 데이터베이스에 도달할 수 있는 주소. |
--ca-cert |
데이터베이스 CA 인증서 경로. |
--aws-region |
(RDS, Aurora 또는 Redshift에만 해당) RDS, Aurora 또는 Redshift 데이터베이스 인스턴스가 실행 중인 AWS 리전. |
--aws-redshift-cluster-id |
(Redshift에만 해당) Redshift 데이터베이스 클러스터 식별자. |
--gcp-project-id |
(Cloud SQL에만 해당) GCP Cloud SQL 프로젝트 식별자. |
--gcp-instance-id |
(Cloud SQL에만 해당) GCP Cloud SQL 인스턴스 식별자. |
teleport db configure create#
샘플 Database Service 구성을 만듭니다.
$ teleport db configure create --rds-discovery=us-west-1 --rds-discovery=us-west-2
$ teleport db configure create \
--token=/tmp/token \
--proxy=proxy.example.com:443 \
--name=example \
--protocol=postgres \
--uri=postgres://postgres.example.com:5432 \
--labels=env=prod
$ teleport db configure create --rds-discovery=us-west-1 --rds-discovery=us-west-2
$ teleport db configure create \
--token=/tmp/token \
--proxy=mytenant.teleport.sh:443 \
--name=example \
--protocol=postgres \
--uri=postgres://postgres.mytenant.teleport.sh:5432 \
--labels=env=prod
| 플래그 | 설명 |
|---|---|
--proxy |
연결할 Teleport Proxy Service 주소. 기본값: 0.0.0.0:3080. |
--token |
Auth Service에 등록하기 위한 초대 토큰. 기본값: none. |
--rds-discovery |
에이전트가 RDS/Aurora 인스턴스를 발견할 AWS 리전 목록. |
--rdsproxy-discovery |
에이전트가 RDS Proxy를 발견할 AWS 리전 목록. |
--redshift-discovery |
에이전트가 Redshift 인스턴스를 발견할 AWS 리전 목록. |
--redshift-serverless-discovery |
에이전트가 Redshift Serverless 인스턴스를 발견할 AWS 리전 목록. |
--elasticache-discovery |
에이전트가 ElastiCache Redis 및 Valkey 클러스터를 발견할 AWS 리전 목록. |
--elasticache-serverless-discovery |
에이전트가 ElastiCache Serverless Valkey 또는 Redis 캐시를 발견할 AWS 리전 목록. |
--aws-tags |
(AWS 발견에만 해당) 매칭할 AWS 리소스 태그의 쉼표 구분 목록, 예를 들어 env=dev,dept=it |
--memorydb-discovery |
에이전트가 MemoryDB 클러스터를 발견할 AWS 리전 목록. |
--azure-mysql-discovery |
에이전트가 MySQL 서버를 발견할 Azure 리전 목록. |
--azure-postgres-discovery |
에이전트가 Postgres 서버를 발견할 Azure 리전 목록. |
--azure-redis-discovery |
에이전트가 Azure Cache For Redis 서버를 발견할 Azure 리전 목록. |
--azure-subscription |
Azure 발견을 위한 Azure 구독 ID 목록. 기본값은 "*"입니다. |
--azure-resource-group |
Azure 발견을 위한 Azure 리소스 그룹 목록. 기본값은 "*"입니다. |
--azure-tags |
(Azure 발견에만 해당) 매칭할 Azure 리소스 태그의 쉼표 구분 목록, 예를 들어 env=dev,dept=it |
--ca-pin |
Auth Service를 검증하기 위한 CA 핀(여러 핀에 대해 반복 가능). |
--name |
프록시된 데이터베이스의 이름. |
--protocol |
프록시된 데이터베이스 프로토콜. 지원되는 값은 구성 참조를 확인하세요. |
--uri |
프록시된 데이터베이스에 도달할 수 있는 주소. |
--labels |
데이터베이스에 대한 레이블의 쉼표 구분 목록, 예를 들어 env=dev,dept=it |
-o/--output |
--output=stdout으로 stdout에 쓰거나, --output=file로 기본 구성 파일에 쓰거나, --output=file:///path로 사용자 지정 경로에 씁니다. |
--dynamic-resources-labels |
동적 리소스를 매칭할 레이블의 쉼표 구분 목록(들), 예를 들어 env=dev,dept=it. 동적 리소스 매칭을 활성화하려면 필요합니다. |
teleport db configure bootstrap#
Database Service에 필요한 구성을 부트스트랩합니다. 제공된 구성을 읽어 부트스트랩할 내용을 결정합니다.
$ teleport db configure bootstrap -c /etc/teleport.yaml --attach-to-user TeleportUser
$ teleport db configure bootstrap -c /etc/teleport.yaml --attach-to-role TeleportRole
$ teleport db configure bootstrap -c /etc/teleport.yaml --manual
| 플래그 | 설명 |
|---|---|
-c/--config |
구성 파일 경로. 기본값: /etc/teleport.yaml. |
--manual |
"manual" 모드에서 실행하면 이 명령은 직접 적용하는 대신 구성을 완료하는 지침을 출력합니다. |
--policy-name |
Teleport Database Service 정책의 이름. 기본값: DatabaseAccess |
--confirm |
사용자에게 묻지 않고 모든 작업을 자동으로 확인합니다. |
--attach-to-role |
정책을 연결할 역할 이름. --attach-to-user와 상호 배타적입니다. 연결 플래그가 하나도 제공되지 않으면 이 명령은 자격 증명을 기반으로 현재 사용자/역할에 정책을 연결하려고 시도합니다. |
--attach-to-user |
정책을 연결할 사용자 이름. --attach-to-role과 상호 배타적입니다. 연결 플래그가 하나도 제공되지 않으면 이 명령은 자격 증명을 기반으로 현재 사용자/역할에 정책을 연결하려고 시도합니다. |
teleport db configure aws print-iam#
제공된 데이터베이스 유형을 기반으로 Database Service에 필요한 IAM 권한을 출력합니다.
$ teleport db configure aws print-iam --types rds
$ teleport db configure aws print-iam --types rds,redshift --role my-db-service-role
$ teleport db configure aws print-iam --types redshift-serverless --assumes-roles my-access-role --policy
| 플래그 | 설명 |
|---|---|
-r/--types |
정책에 포함할 데이터베이스 유형의 쉼표 구분 목록. rds, rdsproxy, redshift, redshift-serverless, elasticache, elasticache-serverless, memorydb, keyspace, dynamodb, opensearch 중 하나 이상. |
--role |
정책을 연결할 IAM 역할 이름. --user와 상호 배타적입니다. |
--user |
정책을 연결할 IAM 사용자 이름. --role과 상호 배타적입니다. |
--[no-]policy |
IAM 정책 문서만 출력합니다. |
--[no-]boundary |
IAM 경계 정책 문서만 출력합니다. |
--assumes-roles |
IAM 아이덴티티가 수임할 수 있어야 하는 추가 IAM 역할의 쉼표 구분 목록. 각 역할은 IAM 역할 ARN이거나 해당 아이덴티티 계정 내 역할의 이름일 수 있습니다. |
tctl auth sign#
--format=db(MongoDB의 경우 --format=mongodb) 플래그와 함께 호출되면
셀프 호스팅 데이터베이스 인스턴스로 Database Service를 구성하는 데 사용되는 CA 인증서, 클라이언트
인증서, 개인 키 파일을 생성합니다.
데이터베이스 형식의 경우 tctl은 Auth Service 호스트에서 실행되거나, 원격 사용자가 내장된 Db 역할 및 사용자를
가장(impersonate)할 수 있어야 합니다. 가장을 허용하는 방법에 대한 자세한 내용은
가장 가이드를 참조하세요.
$ tctl auth sign --format=db --host=db.example.com --out=db --ttl=2190h
$ tctl auth sign --format=db --host=host1,localhost,127.0.0.1 --out=db --ttl=2190h
이 예시에서 db.example.com은 Teleport Database Service가 데이터베이스 서버에 도달할 수 있는
호스트명입니다. 두 번째 예시는 Teleport와 동일한 호스트에서 실행되는 데이터베이스를 가정합니다.
| 플래그 | 설명 |
|---|---|
--format |
db 값이 주어지면 데이터베이스 호환 형식으로 시크릿을 생성합니다. MongoDB 시크릿을 생성할 때는 mongodb를 사용하세요. |
--host |
인증서에 인코딩할 쉼표 구분 SAN. Teleport가 데이터베이스에 연결하는 데 사용할 호스트명을 포함해야 합니다. |
--out |
출력 파일의 이름 접두사. |
--ttl |
인증서 유효 기간. |
데이터베이스 인증서 서명을 위한 RBAC 설정
서명된 데이터베이스 인증서를 생성하려면 tctl 사용자가 Teleport Database Service 역할인
Db를 가장할 수 있는 권한이 있어야 합니다. 이러한 가장 권한을 Teleport 사용자에게 추가하려면
다음 명령을 실행하세요.
먼저 Db 사용자를 가장할 수 있는 역할을 정의합니다. db-impersonator.yaml이라는 파일에 다음
내용을 추가하세요:
kind: role
version: v5
metadata:
name: db-impersonator
spec:
options:
allow:
impersonate:
users: ['Db']
roles: ['Db']
역할을 생성합니다:
$ tctl create -f db-impersonator.yaml
Web UI를 사용하여 역할을 생성하고 편집할 수도 있습니다. Access -> Roles로 이동하여 Create New Role을 클릭하거나 편집할 기존 역할을 선택하십시오.
db-impersonator 역할을 추가할 수 있도록 편집기에서 Teleport 사용자의 동적 구성 리소스를 엽니다:
$ TELEPORT_USER=<your user>
$ tctl edit user/${TELEPORT_USER?}
db-impersonator 역할을 추가합니다:
spec:
- access
- auditor
- editor
+ - db-impersonator
status:
is_locked: false
편집기에서 파일을 저장하고 닫아 사용자를 업데이트합니다.
Teleport 클러스터에서 로그아웃한 다음 다시 로그인합니다. 이제 데이터베이스 전용 인증서 형식에 대해
tctl auth sign을 실행할 수 있습니다.
더 짧은 TTL을 사용하는 것을 권장하지만, 연결 기능을 잃지 않으려면 데이터베이스 서버 인증서가 만료되기 전에 갱신해야 한다는 점에 유의하십시오. 사용 사례에 가장 적합한 TTL 값을 선택하십시오.
tctl db ls#
클러스터에 등록된 모든 데이터베이스를 나열하는 관리 명령입니다.
$ tctl db ls
$ tctl db ls --format=yaml
| 플래그 | 설명 |
|---|---|
--format |
출력 형식, text, yaml 또는 json 중 하나. 기본값은 text입니다. |
tctl get db#
구성된 모든 데이터베이스 리소스 목록을 출력합니다.
| 플래그 | 설명 |
|---|---|
--format |
출력 형식, text, yaml 또는 json 중 하나. 기본값은 yaml입니다. |
tctl get db/database-resource-name#
database-resource-name 데이터베이스 리소스에 대한 세부 정보를 출력합니다.
| 플래그 | 설명 |
|---|---|
--format |
출력 형식, text, yaml 또는 json 중 하나. 기본값은 yaml입니다. |
tctl rm db/database-resource-name#
database-resource-name이라는 데이터베이스 리소스를 제거합니다.
tsh db ls#
RBAC에 따라 사용자가 사용할 수 있는 데이터베이스와 해당 연결 정보를 나열합니다.
# 모든 데이터베이스를 나열합니다.
$ tsh db ls
# 키워드로 데이터베이스를 검색합니다.
$ tsh db ls --search foo,bar
# 레이블로 데이터베이스를 필터링합니다.
$ tsh db ls key1=value1,key2=value2
# 추가 필드와 함께 모든 클러스터의 데이터베이스를 나열합니다.
$ tsh db ls --all -v
# "jq"를 사용하여 데이터베이스 이름을 가져옵니다.
$ tsh db ls --format json | jq -r '.[].metadata.name'
| 플래그 | 설명 |
|---|---|
--search |
쉼표로 구분된 검색 키워드 또는 따옴표로 묶인 문구 목록(예: --search=foo,bar,"some phrase"). |
--query |
단일 따옴표로 묶인 술어 언어(predicate language)를 사용한 쿼리(예: --query='labels["key1"] == "value1" && labels["key2"] != "value2"'). |
--format |
출력 형식(text, json, yaml). |
tsh db login#
데이터베이스 자격 증명을 검색합니다.
$ tsh db login example
$ tsh db login --db-user=postgres --db-name=postgres example
| 플래그 | 설명 |
|---|---|
--db-user |
로그인할 데이터베이스 사용자. |
--db-name |
로그인할 데이터베이스 이름. |
--db-roles |
자동 프로비저닝된 사용자에 사용할 데이터베이스 역할의 쉼표 구분 목록. 제공하지 않으면 모든 데이터베이스 역할이 할당됩니다. |
--db-user 또는 --db-name이 필요한 경우, 기본 설정은
이전에 tsh db login을 사용하여 얻은 활성 데이터베이스 인증서 또는
사용자에게 허용된 db_users나 db_names에서 선택됩니다.
데이터베이스 사용자는 항상 필요합니다. 데이터베이스 이름은 PostgreSQL, MongoDB, Oracle 데이터베이스에 필요합니다.
tsh db logout#
데이터베이스 자격 증명을 제거합니다.
$ tsh db logout example
$ tsh db logout
tsh db connect#
CLI 클라이언트를 사용하여 데이터베이스에 연결합니다.
# 단일 데이터베이스에만 로그인된 경우의 축약 구문.
$ tsh db connect
# 연결할 데이터베이스 서비스를 명시적으로 지정합니다.
$ tsh db connect example
# 연결할 데이터베이스 사용자와 이름을 제공합니다.
$ tsh db connect --db-user=alice --db-name=db example
# 허용된 데이터베이스 역할 중 일부를 선택합니다.
$ tsh db connect --db-user=alice --db-name=db --db-roles reader example
해당하는 데이터베이스 CLI 클라이언트(psql, mysql, mongo 또는 mongosh)가 PATH에 있어야 합니다.
| 플래그 | 설명 |
|---|---|
--db-user |
로그인할 데이터베이스 사용자. |
--db-name |
로그인할 데이터베이스 이름. |
--db-roles |
자동 프로비저닝된 사용자에 사용할 데이터베이스 역할의 쉼표 구분 목록. 제공하지 않으면 모든 데이터베이스 역할이 할당됩니다. |
--db-user 또는 --db-name이 필요한 경우, 기본 설정은
이전에 tsh db login을 사용하여 얻은 활성 데이터베이스 인증서 또는
사용자에게 허용된 db_users나 db_names에서 선택됩니다.
데이터베이스 사용자는 항상 필요합니다. 데이터베이스 이름은 PostgreSQL, MongoDB, Oracle 데이터베이스에 필요합니다.
tsh db exec#
대상 데이터베이스 서비스에서 데이터베이스 명령을 실행합니다.
# 레이블로 데이터베이스를 검색합니다.
$ tsh db exec "source my_script.sql" --db-user mysql --labels key1=value1,key2=value2
# 키워드로 데이터베이스를 검색합니다.
$ tsh db exec "select 1" --db-user mysql --db-name mysql --search foo,bar
# 확인 없이 지정된 대상 데이터베이스에서 명령을 실행합니다.
$ tsh db exec "select @@hostname" --db-user mysql --dbs mydb1,mydb2,mydb3 --no-confirm
# 명령을 병렬로 실행하고 출력을 파일로 저장합니다.
$ tsh db exec "select 1" --db-user mysql --labels env=dev --parallel=5 --output-dir=exec-outputs
현재 PostgreSQL 및 MySQL 데이터베이스만 지원됩니다. 해당하는 데이터베이스 CLI 클라이언트(psql, mysql)가
PATH에 있어야 합니다.
| 플래그 | 설명 |
|---|---|
--db-user |
로그인할 데이터베이스 사용자. |
--db-name |
로그인할 데이터베이스 이름. |
--db-roles |
자동 프로비저닝된 사용자에 사용할 데이터베이스 역할의 쉼표 구분 목록. |
--dbs |
대상 데이터베이스 서비스의 쉼표 구분 목록. --search 또는 --labels와 상호 배타적입니다. |
--search |
쉼표로 구분된 검색 키워드 또는 따옴표로 묶인 문구 목록(예: --search=foo,bar,"some phrase"). |
--labels |
레이블로 필터링할 쉼표 구분 레이블 목록(예: key1=value1,key2=value2). |
--output-dir |
대상 데이터베이스 서비스별 명령 출력을 저장할 디렉터리. 요약은 "summary.json"으로 저장됩니다. |
--[no-]confirm |
명령을 실행하기 전에 선택된 데이터베이스 서비스를 확인합니다. |
tsh db env#
특정 데이터베이스에 대한 환경 변수를 출력합니다.
$ tsh db env
$ tsh db env example
$ eval $(tsh db env)
tsh db config#
데이터베이스 연결 정보를 출력합니다. GUI 클라이언트를 구성할 때 유용합니다.
$ tsh db config
$ tsh db config example
$ tsh db config --format=cmd example
| 플래그 | 설명 |
|---|---|
--format |
출력 형식: 기본값은 text이며, 네이티브 데이터베이스 클라이언트 연결 명령을 출력하려면 cmd를 사용합니다. |