인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
데이터베이스 탐지
Teleport는 데이터베이스를 자동으로 탐지하고 당신의 Teleport 클러스터에 등록하도록 구성할 수 있습니다.
지원하는 클라우드
아키텍처 개요
데이터베이스 자동 탐지는 다음 구성 요소로 이루어져 있습니다:
- 하나 이상의 Teleport Discovery Service 인스턴스가 API를 폴링하여 데이터베이스를 탐지하고 당신의 Teleport 클러스터에 등록합니다.
- 하나 이상의 Teleport Database Service 인스턴스가 탐지된 데이터베이스로 데이터베이스 연결을 전달합니다.
Discovery Service와 Database Service 모두 같은 Teleport 프로세스 또는 별도의 프로세스에서 구성할 수 있습니다. 데이터베이스 접근과 데이터베이스 탐지를 분리하기 위해 별도의 프로세스로 실행하는 것을 권장합니다.
Discovery Service 작동 방식
Teleport Discovery Service는 설정된 선택자와 일치하는 데이터베이스에 대해
API를 폴링하는 책임이 있습니다.
Discovery Service가 데이터베이스와 일치하면,
당신의 Teleport 클러스터에
동적으로 데이터베이스 등록합니다.
당신의 Teleport 클러스터에서 생성하는 동적 db
리소스에는 다음과 같은 정보가 포함됩니다:
- 이름: 데이터베이스 이름, 다른
db
이름과의 충돌을 피하기 위해 추가적인 식별 정보가 붙여집니다. - 레이블
- 가져온 데이터베이스 태그
- 데이터베이스 위치/지역
- 클라우드 계정 정보, 예: AWS 계정 ID / Azure 구독 ID
- 발견된 데이터베이스 유형, 매처 유형에 해당, 예: "rds", "redshift" 등.
- 엔드포인트 정보: 데이터베이스에 접근할 수 있는 연결 엔드포인트
탐지된 데이터베이스의 이름은 클라우드 제공업체에서 데이터베이스에 첨부된 특별한 태그를 사용하여 오버라이드할 수 있습니다:
- key:
TeleportDatabaseName
- value: 원하는 이름
Discovery Service는 데이터베이스 메타데이터에 태그가 포함되어 있는지 확인하고, 그 값을 Teleport의 리소스 이름으로 사용합니다. 이름 오버라이드는 문자 그대로 사용되며, 즉 추가 메타데이터가 붙지 않습니다.
Teleport Discovery Service는 데이터베이스를 폴링할 수 있는 API에 대한 접근만 필요하며, 데이터베이스와 연결할 수 있는 네트워크 연결이나 권한은 필요하지 않습니다.
새로운 데이터베이스를 등록하는 것 외에도, Discovery Service는 삭제되었거나 Discovery Service의 설정된 선택자와 더 이상 일치하지 않는 데이터베이스를 Teleport의 레지스트리에서 제거합니다.
Discovery Service는 발견된 리소스를 서로 다른 집합으로 그룹화할 수 있는 구성 매개변수 - discovery_service.discovery_group
- 를 노출합니다. 이 매개변수는 서로 다른 클라우드 리소스 집합을 감시하는 Discovery Agents들이 충돌하여 다른 서비스에 의해 생성된 리소스를 삭제하는 것을 방지하는 데 사용됩니다.
여러 Discovery Services를 실행할 때, 동일한 클라우드 리소스를 감시하는 경우 각 서비스가 동일한 discovery_group
값으로 구성되어야 하며, 서로 다른 클라우드 리소스를 감시하는 경우에는 다른 값으로 구성해야 합니다.
동일한 Teleport 클러스터 내에서 혼합된 구성을 실행하는 것이 가능하므로 일부 Discovery Services는 동일한 클라우드 리소스를 감시하도록 구성할 수 있고, 다른 서비스는 서로 다른 리소스를 감시하도록 할 수도 있습니다. 예를 들어, 두 개의 서로 다른 클라우드 계정에서 데이터를 분석하는 4-agent 고가용성 구성은 다음과 같이 구성됩니다.
- Production 계정에서 데이터를 폴링하기 위해
discovery_group: "prod"
로 구성된 2개의 Discovery Services. - Staging 계정에서 데이터를 폴링하기 위해
discovery_group: "staging"
로 구성된 2개의 Discovery Services.
Discovery Service 구성
Discovery Service를 위한 데이터베이스 탐지 구성 예시는 다음과 같습니다:
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 데이터베이스.
# 'memorydb' - Amazon MemoryDB Redis 데이터베이스.
# 'opensearch' - Amazon OpenSearch Redis 데이터베이스.
# 'docdb' - Amazon DocumentDB 데이터베이스.
- types: ["rds"]
# 리소스를 검색할 AWS 지역
regions: ["us-east-1", "us-west-1"]
# 리소스를 등록할 때 매칭할 선택적 AWS 리소스 태그
# 기본값은 모든 리소스와 일치하는 와일드카드 선택자: "*":"*"
tags:
"env": "prod"
# AWS-hosted 리소스를 탐지하고 등록하기 위해 Discovery Service가
# 가질 역할의 ARN입니다.
assume_role_arn: "arn:aws:iam::123456789012:role/rds-discovery"
# Discovery Service가 외부 AWS 계정의 역할을 맡기 위해 사용할
# 선택적 AWS 외부 ID입니다.
external_id: "example-external-id"
discovery_service.aws[]
설정은 AWS 리소스에 대한 선택자의 목록입니다.
이 예시는 Teleport Discovery Service가 us-east-1 및 us-west-1 지역에서 Amazon
RDS 데이터베이스를 폴링하도록 구성합니다.
이것은 RDS 데이터베이스 탐지에 필요한 권한이 있는 123...
AWS 계정 내의
AWS IAM 역할을 맡습니다.
세부적인 작동 방식은 다음과 같습니다:
- 제공자 유형: Discovery Service는 서로 다른 제공자가 호스팅하는 리소스를 탐지할 수 있습니다. 각 제공자 유형은 자신만의 구성을 갖습니다. Discovery Service는 해당 제공자에 대해 구성된 선택자 목록을 기준으로 제공자 API를 폴링합니다. 이 예제에서는 제공자 구성은 AWS에 대한 것입니다.
- 권한: Discovery Service는 제공자 API에 인증할 때 사용할 수 있는
자격 증명에 대한 접근이 필요합니다. 만약
discovery_service.aws[].assume_role_arn
가 구성되어 있다면, Discovery Service는 리소스 탐지를 위한 추가 API 호출을 하기 전에 먼저 해당 AWS IAM 역할을 맡습니다. 즉, 하나의 Discovery Service는 외부 역할을 맡아 여러 AWS 계정에 걸쳐 리소스를 탐지하는 데 사용할 수 있습니다. IAM 구성을 간소화하는 데도 유용할 수 있습니다. 탐지해야 하는 리소스 유형에 따라 Discovery Service가 다르게 역할을 사용할 수 있도록 구성할 수 있습니다. 이 예제에서는 Discovery Service가 "rds-discovery" IAM 역할을 맡으며, 이 역할은 RDS 데이터베이스 탐지에 필요한 권한만 가지고 있습니다. - 선택자:
제공자 API를 통해 리소스가 발견되면, Discovery Service는 해당
선택자 태그/레이블을 확인하여 그 리소스를 등록할지를 결정합니다.
선택자가 일치하면, Discovery Service는 해당 리소스를
당신의 Teleport 클러스터에 동적으로 등록합니다. 데이터베이스의 경우,
이는
db
리소스를 생성함을 의미합니다. 이 예제에서는 Discovery Service가 us-east-1 및 us-west-1 지역에서 Amazon RDS 데이터베이스를 폴링하고, AWS 태그 "env: prod"가 있는 모든 RDS 데이터베이스에 대해 당신의 Teleport 클러스터에db
리소스를 등록합니다.
Discovery Service 구성에 대한 더 많은 정보는 위의 가이드 중 하나를 참조하거나 Discovery Service 구성 파일 참조를 참조하십시오.
데이터베이스 서비스 작동 원리
Teleport 데이터베이스 서비스는
동적으로 등록된
db
리소스를 모니터링하고 이를 나타내는 데이터베이스에 대한 연결 프록시 역할을 담당합니다.
데이터베이스 서비스는 db
리소스와 일치하도록 레이블 선택기를 구성해야 합니다.
db
리소스가 일치하면 데이터베이스 서비스는 db_server
하트비트를 생성하여
귀하의 Teleport 클러스터에 db
리소스가 나타내는 데이터베이스에 대한 접근을 제공할 수 있음을 신호합니다.
데이터베이스 서비스는 데이터베이스 엔드포인트에 대한 네트워크 연결과 인증할 수 있는 권한을 가져야 합니다.
필요한 권한은 데이터베이스 유형에 따라 다르므로 자세한 권한 정보는 Teleport의
데이터베이스 접근 가이드를 참조하십시오.
데이터베이스 서비스 구성
다음은 데이터베이스 서비스의 예제 구성입니다:
db_service:
enabled: true
# "tctl create" 명령어나 데이터베이스 자동 검색에 의해 생성된 동적 db 리소스에 대한 매처.
resources:
- labels:
# 이러한 레이블은 그 외에도 Discovery 서비스에 의해 자동으로 추가됩니다.
# "cloud" 출처는 `db` 리소스가 클라우드에서 발견된 리소스를 위해 생성되었음을 나타냅니다.
"teleport.dev/origin": "cloud"
# 클라우드 리소스는 또한 어떤 클라우드 제공업체에서 왔는지 나타내기 위해 레이블이 지정됩니다.
"teleport.dev/cloud": "AWS"
# AWS에 특별한. 이것은 AWS 계정 ID입니다.
"account-id": "123456789012"
aws:
# AWS 데이터베이스에 대한 연결을 전달할 때 가정할 선택적 AWS 역할 ARN입니다.
# 데이터베이스 서비스의 IAM ID는 이 역할을 가정할 수 있어야 합니다.
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"
# External ID는 타사 서비스(위임된 액세스)에서 귀하의 AWS 계정에 접근할 때 설정해야 하는 선택적 값입니다.
external_id: "exampleID123"
db_service.resources[]
설정은 레이블 선택기 목록입니다.
이 예제는 Teleport 데이터베이스 서비스가 두 개의 계정에서 발견된 AWS 데이터베이스와 일치하도록 구성하고 있습니다: 123...
및 222...
.
각 계정에 대해 서로 다른 AWS IAM 역할을 가정할 것입니다.
작동 방식은 다음과 같습니다:
- 레이블 일치: 데이터베이스 서비스는
db
리소스를 모니터링하며,db_service.resources[].labels
에서db
와 일치하는 첫 번째 레이블 선택기가 사용됩니다. 일치하는 선택기가 없는 경우db
리소스는 무시됩니다. - 권한: 데이터베이스 서비스는 일치한 레이블 선택기에 구성된 ID를 가정합니다. 선택기가 ID를 지정하지 않으면 데이터베이스 서비스는 자신의 ID를 사용합니다.
- 연결: 데이터베이스 서비스는 자신의 ID이거나 가정한 ID로 작동하며, 데이터베이스에 인증할 수 있는 자격 증명을 검색하고 이러한 자격 증명을 사용하여 권한이 있는 Teleport 사용자에 대한 프록시 역할을 합니다.