데이터베이스 자동 검색
Teleport는 데이터베이스를 자동으로 검색하여 Teleport 클러스터에 등록하도록 구성할 수 있습니다. 데이터베이스 자동 검색은 다음 구성 요소로 이루어집니다: 검색 서비스와 데이터베이스 서비스 모두 동일한 Teleport 프로세스 또는 별도의 프로세스로 구성할 수 있습니다.
Teleport는 데이터베이스를 자동으로 검색하여 Teleport 클러스터에 등록하도록 구성할 수 있습니다.
지원 클라우드#
아키텍처 개요#
데이터베이스 자동 검색은 다음 구성 요소로 이루어집니다:
- API를 폴링하여 데이터베이스를 검색하고 Teleport 클러스터에 등록하는 하나 이상의 Teleport 검색 서비스 인스턴스.
- 검색된 데이터베이스로의 데이터베이스 연결을 전달하는 하나 이상의 Teleport 데이터베이스 서비스 인스턴스.
검색 서비스와 데이터베이스 서비스 모두 동일한 Teleport 프로세스 또는 별도의 프로세스로 구성할 수 있습니다. 데이터베이스 검색과 데이터베이스 접근을 분리하기 위해 별도의 프로세스로 실행하는 것을 권장합니다.
검색 서비스 작동 방식#
Teleport 검색 서비스는 구성된 선택기와 일치하는 데이터베이스를 위해 API를 폴링하는 역할을 합니다. 검색 서비스가 데이터베이스와 매칭되면 Teleport 클러스터에 해당 데이터베이스를 동적으로 등록합니다. Teleport 클러스터에 생성되는 동적 db 리소스에는 다음과 같은 정보가 포함됩니다:
- 이름: 데이터베이스 이름. Teleport 클러스터의 다른
db이름과 충돌을 피하기 위해 추가 식별 정보가 추가됨 - 레이블
- 가져온 데이터베이스 태그
- 데이터베이스 위치/리전
- 클라우드 계정 정보(예: AWS 계정 ID / Azure 구독 ID)
- 검색된 데이터베이스 유형에 해당하는 매처 유형(예: "rds", "redshift" 등)
- 엔드포인트 정보: 데이터베이스에 도달할 수 있는 연결 엔드포인트
클라우드 공급자의 데이터베이스에 연결된 특수 태그를 사용하여 검색된 데이터베이스의 이름을 재정의할 수 있습니다:
- 키:
TeleportDatabaseName - 값: 원하는 이름
검색 서비스는 데이터베이스 메타데이터에 태그가 포함되어 있는지 확인하고 그 값을 Teleport의 리소스 이름으로 사용합니다. 이름 재정의는 그대로 사용되므로 추가 메타데이터가 추가되지 않습니다.
Teleport 검색 서비스는 데이터베이스를 위해 폴링할 수 있는 API에만 접근하면 되며, 데이터베이스에 연결하기 위한 네트워크 연결이나 권한이 필요하지 않습니다.
새 데이터베이스를 등록하는 것 외에도, 검색 서비스는 삭제되었거나 검색 서비스의 구성된 선택기와 더 이상 매칭되지 않는 데이터베이스를 Teleport 레지스트리에서 제거합니다.
검색 서비스 구성#
다음은 검색 서비스를 위한 데이터베이스 자동 검색 구성 예시입니다:
discovery_service:
enabled: true
discovery_group: "disc-group"
# poll_interval은 검색 서버가 각 검색 주기를 실행하는 간격입니다. 기본값은 5m입니다.
poll_interval: 5m
# AWS 호스팅 리소스 검색을 위한 매처.
aws:
# Teleport 클러스터에서 검색하고 등록할 AWS 리소스 유형.
# 유효한 데이터베이스 검색 옵션:
# 'rds' - Amazon RDS 및 Aurora 데이터베이스.
# 'rdsproxy' - Amazon RDS Proxy 데이터베이스.
# 'redshift' - Amazon Redshift 데이터베이스.
# 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스.
# 'elasticache' - Amazon ElastiCache Redis 및 Valkey 데이터베이스.
# 'elasticache-serverless' - Amazon ElastiCache Serverless Redis 또는 Valkey 데이터베이스.
# 'memorydb' - Amazon MemoryDB Redis 데이터베이스.
# 'opensearch' - Amazon OpenSearch 데이터베이스.
# 'docdb' - Amazon DocumentDB 데이터베이스.
- types: ["rds"]
# 리소스를 검색할 AWS 리전
regions: ["us-east-1","us-west-1"]
# 리소스 등록 시 매칭할 선택적 AWS 리소스 태그
# 기본값은 모든 리소스와 매칭하는 와일드카드 선택기: "*":"*"
tags:
"env": "prod"
# 검색 서비스가 AWS 호스팅 리소스를 검색하고 등록하기 위해 맡을 선택적 AWS 역할.
assume_role_arn: "arn:aws:iam::123456789012:role/rds-discovery"
# 외부 AWS 계정에서 역할을 맡기 위해 검색 서비스가 사용하는 선택적 AWS 외부 ID.
external_id: "example-external-id"
discovery_service.aws[] 설정은 AWS 리소스 선택기 목록입니다. 이 예시는 us-east-1 및 us-west-1 리전에서 Amazon RDS 데이터베이스를 위해 AWS를 폴링하도록 Teleport 검색 서비스를 구성합니다. RDS 데이터베이스 검색에 필요한 권한이 있는 123... AWS 계정에서 AWS IAM 역할을 맡습니다. 세부 작동 방식은 다음과 같습니다:
- 공급자 유형: 검색 서비스는 다양한 공급자가 호스팅하는 리소스를 검색할 수 있습니다. 각 공급자 유형에는 자체 구성 섹션이 있습니다. 검색 서비스는 해당 공급자에 대해 구성된 선택기 목록을 기반으로 공급자 API를 폴링하여 리소스를 검색합니다. 각 선택기는 검색 서비스가 공급자 API를 폴링할 때 사용됩니다. 이 예시에서 공급자 구성은 AWS용입니다.
- 권한: 검색 서비스는 공급자 API에 자신을 인증하는 데 사용할 수 있는 자격 증명에 접근해야 합니다.
discovery_service.aws[].assume_role_arn이 구성된 경우, 검색 서비스는 리소스 검색을 위한 추가 API 호출을 수행하기 전에 해당 AWS IAM 역할을 맡습니다. 이는 하나의 검색 서비스로 외부 역할을 맡아 여러 AWS 계정에 걸쳐 리소스를 검색하는 데 사용할 수 있습니다. 또한 IAM 구성을 단순화하는 데 유용할 수 있습니다. 검색해야 하는 리소스 유형에 따라 다른 역할을 사용하도록 검색 서비스를 구성할 수 있습니다. 이 예시에서 검색 서비스는 이름이 암시하듯 RDS 데이터베이스 검색에 필요한 권한만 있는 "rds-discovery" IAM 역할을 맡습니다. - 선택기: 공급자 API를 통해 리소스를 찾으면 검색 서비스는 해당 선택기 태그/레이블을 확인하여 해당 리소스를 등록해야 하는지 결정합니다. 선택기가 매칭되면 검색 서비스는 Teleport 클러스터에 해당 리소스를 동적으로 등록합니다. 데이터베이스의 경우
db리소스를 생성합니다. 이 예시에서 검색 서비스는 us-east-1 및 us-west-1 리전에서 Amazon RDS 데이터베이스를 폴링하고, AWS 태그 "env: prod"를 가진 모든 RDS 데이터베이스에 대한db리소스를 Teleport 클러스터에 등록합니다.
검색 서비스 구성에 대한 자세한 내용은 위의 가이드 중 하나나 검색 서비스 구성 파일 참조를 참조하세요.
데이터베이스 서비스 작동 방식#
Teleport 데이터베이스 서비스는 Teleport 클러스터에서 동적으로 등록된 db 리소스를 모니터링하고 해당 리소스가 나타내는 데이터베이스의 연결 프록시 역할을 합니다.
데이터베이스 서비스는 db 리소스와 매칭하기 위해 레이블 선택기로 구성되어야 합니다. db 리소스가 매칭되면 데이터베이스 서비스는 Teleport 클러스터에 db 리소스가 나타내는 데이터베이스에 대한 접근을 제공할 수 있음을 신호하는 db_server 하트비트를 생성합니다. 데이터베이스 서비스는 데이터베이스 엔드포인트에 대한 네트워크 연결과 데이터베이스 인증에 필요한 권한이 있어야 합니다. 필요한 권한은 데이터베이스 유형에 따라 다르므로, 자세한 권한 정보는 Teleport의 데이터베이스 접근 가이드를 참조하세요.
데이터베이스 서비스 구성#
다음은 데이터베이스 서비스를 위한 구성 예시입니다:
db_service:
enabled: true
# "tctl create" 명령이나 데이터베이스 자동 검색으로 생성된 동적 db 리소스에 대한 매처.
resources:
- labels:
# 이러한 레이블은 검색 서비스에 의해 자동으로 추가됩니다.
# "cloud" origin은 `db` 리소스가 클라우드에서 검색된 리소스를 위해
# 생성되었음을 나타냅니다.
"teleport.dev/origin": "cloud"
# 클라우드 리소스에는 어떤 클라우드 공급자에서 왔는지 나타내는 레이블도 있습니다.
"teleport.dev/cloud": "AWS"
# AWS 전용. AWS 계정 ID입니다.
"account-id": "123456789012"
# 각 데이터베이스 서비스가 실제로 접근할 수 있는 데이터베이스만 매칭하도록
# 특정 레이블 선택기를 사용합니다.
"env": "staging"
"vpc-id": "vpc-id-123"
aws:
# 이는 AWS 데이터베이스로 연결을 전달할 때 맡을 선택적 AWS 역할 ARN입니다.
# 데이터베이스 서비스의 IAM 신원은 이 역할을 맡을 수 있어야 합니다.
assume_role_arn: "arn:aws:iam::123456789012:role/StagingDBAccess"
- labels:
"teleport.dev/origin": "cloud"
"teleport.dev/cloud": "AWS"
"account-id": "222222222222"
aws:
assume_role_arn: "arn:aws:iam::222222222222:role/ProdDBAccess"
# 외부 ID는 타사 서비스에서 AWS 계정에 접근할 때(위임된 접근) 설정해야 하는
# 선택적 값입니다.
external_id: "exampleID123"
db_service.resources[] 설정은 레이블 선택기 목록입니다. 이 예시는 두 계정(123...과 222...)에서 검색된 AWS 데이터베이스와 매칭하도록 Teleport 데이터베이스 서비스를 구성합니다. 각 계정에 대해 다른 AWS IAM 역할을 맡습니다. 세부 작동 방식은 다음과 같습니다:
- 레이블 매칭: 데이터베이스 서비스는
db리소스를 모니터링하며,db_service.resources[].labels에서db와 매칭되는 첫 번째 레이블 선택기가 사용됩니다. 매칭되는 선택기가 없으면db리소스는 무시됩니다.
- 권한: 데이터베이스 서비스는 매칭된 레이블 선택기에 구성된 신원을 맡습니다. 선택기에 신원이 지정되지 않은 경우 데이터베이스 서비스는 자체 신원을 사용합니다.
- 연결: 자체 신원이나 맡은 신원으로 작동하는 데이터베이스 서비스는 데이터베이스에 인증하기 위한 자격 증명을 검색하고 해당 자격 증명을 사용하여 승인된 Teleport 사용자를 위한 프록시로 작동합니다.
