Infograb logo
데이터베이스 탐색

Teleport는 데이터베이스를 자동으로 탐색하고 이를 Teleport 클러스터에 등록하도록 구성할 수 있습니다.

지원되는 클라우드

  • AWS: AWS 데이터베이스 탐색.
  • Azure: Azure 데이터베이스 탐색.

아키텍처 개요

데이터베이스 자동 탐색은 다음 구성 요소로 이루어져 있습니다:

  1. 하나 이상의 Teleport Discovery Service 인스턴스가 API를 폴링하여 데이터베이스를 탐색하고 귀하의 Teleport 클러스터에 등록합니다.
  2. 하나 이상의 Teleport Database Service 인스턴스가 발견된 데이터베이스에 대한 데이터베이스 연결을 전달합니다.

Discovery Service와 Database Service는 같은 Teleport 프로세스 또는 별도의 프로세스에서 구성할 수 있습니다. 우리는 데이터베이스 탐색을 데이터베이스 접근으로부터 분리하기 위해 별도의 프로세스로 실행할 것을 추천합니다.

Discovery Service 작동 방식

Teleport Discovery Service는 구성된 선택자에 일치하는 데이터베이스에 대한 API를 폴링하는 책임이 있습니다. Discovery Service가 데이터베이스와 일치하는 경우, 동적으로 데이터베이스 등록 하여 귀하의 Teleport 클러스터에 등록합니다. Telepot 클러스터에서 생성한 동적 db 리소스는 다음과 같은 정보를 포함하게 됩니다:

  • 이름: 데이터베이스 이름, 다른 db 이름과 충돌을 피하기 위해 추가 식별 정보가 추가됩니다.
  • 라벨
    • 가져온 데이터베이스 태그
    • 데이터베이스 위치/지역
    • 클라우드 계정 정보, 예: AWS Account ID / Azure Subscription ID
  • 엔드포인트 정보: 데이터베이스에 연결할 수 있는 엔드포인트

발견된 데이터베이스의 이름은 클라우드 제공자에서 데이터베이스에 첨부된 특수 태그를 사용하여 재정의할 수 있습니다:

  • key: TeleportDatabaseName
  • value: 원하는 이름

Discovery Service는 데이터베이스 메타데이터가 태그를 포함하고 있는지 확인하고 그 값을 Teleport의 리소스 이름으로 사용합니다. 이름 재정의는 문자 그대로 사용되며, 즉 추가 메타데이터는 붙이지 않습니다.

Teleport Discovery Service는 데이터베이스에 연결하기 위해 필요한 네트워크 연결성이나 권한이 필요하지 않고, 데이터를 폴링할 수 있는 API에만 접근하면 됩니다.

새로운 데이터베이스를 등록하는 것 외에도, Discovery Service는 Teleport의 레지스트리에서 삭제된 데이터베이스나 더 이상 Discovery Service의 구성된 선택자와 일치하지 않는 데이터베이스를 제거합니다.

Discovery Service는 discovery_service.discovery_group이라는 구성 매개변수를 노출하여 발견된 리소스를 서로 다른 세트로 그룹화할 수 있도록 합니다. 이 매개변수는 서로 다른 세트의 클라우드 리소스를 모니터링하는 Discovery Agent가 서로 충돌하여 다른 서비스에 의해 생성된 리소스를 삭제하는 것을 방지하는 데 사용됩니다.

여러 Discovery Service를 실행할 때는 같은 클라우드 리소스를 모니터링하는 경우 각 서비스가 동일한 discovery_group 값을 사용하도록 구성되어야 하며, 서로 다른 클라우드 리소스를 모니터링하는 경우에는 서로 다른 값을 가져야 합니다.

같은 Teleport 클러스터 내에서 다양한 구성을 혼합하여 실행하는 것이 가능하므로 일부 Discovery Service는 동일한 클라우드 리소스를 모니터링하도록 구성할 수 있으며 다른 서비스는 서로 다른 리소스를 모니터링할 수 있습니다. 예를 들어, 두 개의 서로 다른 클라우드 계정에서 데이터를 분석하는 4-agent 고가용성 구성은 다음과 같이 설정됩니다.

  • Production 계정에서 데이터를 폴링하는 discovery_group: "prod"로 구성된 2개의 Discovery Service.
  • Staging 계정에서 데이터를 폴링하는 discovery_group: "staging"로 구성된 2개의 Discovery Service.

Discovery Service 구성

Discovery Service에 대한 데이터베이스 탐색 구성 예제는 다음과 같습니다:

discovery_service:
    enabled: true
    # discovery_group은 발견된 리소스를 서로 다른 집합으로 그룹화하는 데 사용됩니다.
    # 여러 Teleport Discovery 서비스가 실행되는 경우에는 필수입니다.
    # 발견된 서비스가 Teleport에서 발견된 리소스를 관리할 때 충돌하는 것을 방지합니다.
    # 동일한 리소스에 대해 두 개의 Discovery Service가 일치하면,
    # 동일한 Discovery Group에 있어야 합니다.
    # 서로 다른 리소스에 대해 두 개의 Discovery Service가 일치하면,
    # 서로 다른 Discovery Group에 있어야 합니다.
    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 호스팅 리소스를 탐색하고 등록하기 위해 Discovery Service가 맡을
      # 선택적 AWS 역할입니다.
      assume_role_arn: "arn:aws:iam::123456789012:role/rds-discovery"
      # 외부 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 역할을 가정합니다. 작동 방식은 다음과 같습니다:

  1. 공급자 유형: Discovery Service는 서로 다른 공급자가 호스팅하는 리소스를 탐색할 수 있습니다. 각 공급자 유형은 자체 구성 섹션을 가지고 있습니다. Discovery Service는 해당 공급자에 대한 선택기 목록을 기반으로 공급자 API를 폴링합니다. 각 선택기는 Discovery Service가 공급자 API를 폴링할 때 사용됩니다. 이 예제에서 공급자 구성은 AWS에 대한 것입니다.
  2. 권한: 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 데이터베이스 탐색에 필요한 권한만 있다고 믿어집니다.
  3. 선택기: 공급자 API를 통해 리소스가 발견되면, Discovery Service는 해당 리소스의 선택자 태그/라벨을 확인하여 그 리소스를 등록할지 여부를 결정합니다. 선택기가 일치하면, Discovery Service는 그 리소스를 귀하의 Teleport 클러스터에 동적으로 등록합니다. 데이터베이스의 경우, 이는 db 리소스를 생성하는 것을 의미합니다. 이 예제에서 Discovery Service는 us-east-1 및 us-west-1 지역에서 Amazon RDS 데이터베이스를 폴링하고, "env: prod" AWS 태그가 있는 모든 RDS 데이터베이스에 대해 Teleport 클러스터에서 db 리소스를 등록합니다.

Discovery Service 구성에 대한 추가 정보는 [위의 가이드 중 하나](#지원되는 클라우드) 또는 Discovery Service 구성 파일 참조를 참조하시기 바랍니다.

Database Service 작동 방식

Teleport Database Service는 귀하의 Teleport 클러스터에서 dynamically registered db 리소스를 모니터링하고, 그 데이터베이스를 대표하는 연결 프록시 역할을 수행합니다.

Database Service는 db 리소스와 일치하도록 라벨 선택기로 구성되어야 합니다. db 리소스가 일치하면, Database Service는 db_server 하트비트를 생성하여 귀하의 Teleport 클러스터에 db 리소스가 대표하는 데이터베이스에 대한 접근을 제공할 수 있음을 알립니다. Database Service는 데이터베이스 엔드포인트에 대한 네트워크 연결성과 데이터베이스에 대한 인증 권한이 있어야 합니다. 필요한 권한은 데이터베이스 유형에 따라 다르므로, Teleport의 데이터베이스 접근 가이드를 참조하여 자세한 권한 정보를 확인하세요.

Database Service 구성

Database Service에 대한 구성 예제는 다음과 같습니다:

db_service:
  enabled: true
  # "tctl create" 명령 또는 데이터베이스 자동 탐색을 통해 생성된 동적 db 리소스용 매처입니다.
  resources:
    - labels:
        # 이러한 레이블 중 일부는 Discovery Service에 의해 자동으로 추가됩니다.
        # "cloud" 원본은 클라우드에서 발견된 리소스를 위한 `db` 리소스가 생성되었음을 나타냅니다.
        "teleport.dev/origin": "cloud"
        # 클라우드 리소스는 그 리소스가 어디에서 왔는지 표시하기 위해 레이블이 지정됩니다.
        # 생성된 클라우드 제공자
        "teleport.dev/cloud": "AWS"
        # AWS에 특정한 사항입니다. AWS 계정 ID입니다.
        "account-id": "123456789012"
      aws:
        # AWS 데이터베이스로 연결을 전달할 때 맡을 선택적 AWS 역할 ARN입니다.
        # Database Service의 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는 제3자 서비스(위임 접근)에서 AWS 계정에 접근할 때 설정해야 하는 선택적 값입니다.
        external_id: "exampleID123"

db_service.resources[] 설정은 레이블 선택기의 목록입니다. 이 예제는 Teleport Database Service가 발견된 두 개의 AWS 데이터베이스를 모니터링하도록 구성합니다: 123...222.... 각 계정에 대해 다른 AWS IAM 역할을 맡도록 구성됩니다. 작동 방식은 다음과 같습니다:

  1. 레이블 일치: Database Service는 db 리소스를 모니터링하며, db_service.resources[].labels의 첫 번째 레이블 선택기가 일치하는 db에 대해 사용됩니다. 선택자가 일치하지 않으면 db 리소스는 무시됩니다.
  2. 권한: Database Service는 일치하는 레이블 선택기에서 구성된 신원을 맡습니다. 선택기가 신별을 지정하지 않으면 Database Service는 본인의 신원을 사용합니다.
  3. 연결: Database Service는 자신의 신원 또는 자신이 맡은 신원으로 데이터베이스에 인증하기 위해 자격 증명을 검색하고, 해당 자격 증명을 사용하여 권한이 부여된 Teleport 사용자에 대한 프록시 역할을 수행합니다.
Teleport 원문 보기