Infograb logo
AWS 데이터베이스 발견

Teleport는 AWS에 호스팅된 데이터베이스를 자동으로 발견하고 당신의 Teleport 클러스터에 등록하도록 구성할 수 있습니다.

이 가이드에서는 AWS 데이터베이스 자동 발견 설정 방법을 보여줍니다.

작동 방식

Teleport database 자동 발견은 두 가지 구성 요소로 이루어집니다:

  1. 새로운 database나 이전에 발견된 database의 변경 사항을 감시하는 Teleport Discovery Service입니다. 발견된 각 database는 Teleport 클러스터에서 db 리소스로 동적으로 등록됩니다. 발견하는 database에 대한 연결이 필요하지 않습니다.

  2. Discovery Service에 의해 등록된 동적 db 리소스를 모니터링하는 Teleport Database Service입니다. 이는 사용자와 database 간의 통신을 프록시합니다.

사전 요구 사항

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

  • tctl 관리 도구와 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • IAM 정책을 생성하고 부착할 수 있는 권한이 있는 AWS 계정.
  • Teleport Discovery Service를 실행할 호스트.
  • Teleport Database Service를 실행할 호스트.
  • AWS에 호스팅된 하나 이상의 데이터베이스.

1단계/8. Teleport 설치하기

Teleport Discovery Service와 Teleport Database Service를 실행할 호스트에 Teleport를 설치합니다.

Database Service는 데이터베이스와의 네트워크 연결이 필요하지만, Discovery Service는 필요하지 않습니다.

Linux 서버에 Teleport 설치하기:

  1. Teleport 에디션에 따라 edition을(를) 다음 중 하나로 지정합니다:

    에디션
    Teleport Enterprise Cloudcloud
    Teleport Enterprise (자체 호스팅)enterprise
    Teleport Community Editionoss
  2. 설치할 Teleport의 버전을 확인합니다. 클러스터에서 자동 에이전트 업데이트가 활성화되어 있는 경우, 업데이터와 호환되는 최신 Teleport 버전을 쿼리합니다:

    TELEPORT_DOMAIN=example.teleport.com
    TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"

    그렇지 않으면, Teleport 클러스터의 버전을 확인합니다:

    TELEPORT_DOMAIN=example.teleport.com
    TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')"
  3. Linux 서버에 Teleport를 설치합니다:

    curl https://cdn.teleport.dev/install-v16.2.0.sh | bash -s ${TELEPORT_VERSION} edition

    설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 지정하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.

2단계/8. Discovery Service IAM 권한

the Discovery Service에 AWS에 인증하는 데 사용할 수 있는 자격 증명에 대한 액세스를 부여합니다.

the Discovery Service를 EC2 인스턴스에서 실행하는 경우 EC2 인스턴스 메타데이터 서비스 방법을 사용할 수 있습니다. 그렇지 않은 경우 환경 변수를 사용해야 합니다:

Teleport는 EC2 인스턴스에서 실행될 때 이를 감지하고 인스턴스 메타데이터 서비스를 사용하여 자격 증명을 가져옵니다.

EC2 인스턴스는 EC2 인스턴스 프로파일을 사용하도록 구성되어 있어야 합니다. 자세한 내용은 인스턴스 프로파일 사용하기를 참조하세요.

Teleport의 내장 AWS 클라이언트는 다음 환경 변수에서 자격 증명을 읽습니다:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_DEFAULT_REGION

the Discovery Service를 시작하면 서비스는 /etc/default/teleport 경로의 파일에서 환경 변수를 읽습니다. 이 자격 증명은 귀하의 조직에서 가져오십시오. /etc/default/teleport에 다음 내용을 포함하고 각 변수의 값을 대체해야 합니다:

AWS_ACCESS_KEY_ID=00000000000000000000
AWS_SECRET_ACCESS_KEY=0000000000000000000000000000000000000000
AWS_DEFAULT_REGION=<YOUR_REGION>

Teleport의 AWS 클라이언트는 자격 증명을 다음 순서로 다양한 출처에서 로드합니다:

  • 환경 변수
  • 공유 자격 증명 파일
  • 공유 구성 파일 (Teleport는 항상 공유 구성을 활성화합니다)
  • EC2 인스턴스 메타데이터 (자격 증명 전용)

공유 자격 증명 파일 또는 공유 구성 파일을 통해 AWS 자격 증명을 제공할 수 있지만, the Discovery Service를 실행할 때 AWS_PROFILE 환경 변수를 선택한 프로파일의 이름으로 지정해야 합니다.

위의 지침이 고려하지 않은 특정 사용 사례가 있는 경우, 자격 증명 로딩 동작에 대한 자세한 설명을 보려면 AWS SDK for Go의 문서를 참조하십시오.

AWS IAM 권한 부여

다음 AWS IAM 권한을 Discovery Service AWS IAM 역할에 부착합니다:

Database Type

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DocumentDBDiscovery",
            "Effect": "Allow",
            "Action": "rds:DescribeDBClusters",
            "Resource": "*"
        }
    ]
}
진술목적
DocumentDBDiscoveryAmazon DocumentDB 클러스터를 발견합니다.

데이터 입력: 데이터베이스 검색은 DynamoDB에 대해 사용할 수 없습니다.

DynamoDB 데이터베이스를 Teleport 클러스터에 등록하려면 정적 구성 또는 동적 db 리소스를 통해 데이터베이스를 수동으로 구성해야 합니다.

더 많은 정보를 보려면 데이터베이스 액세스 참조를 참조하세요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ElastiCacheDiscovery",
            "Effect": "Allow",
            "Action": "elasticache:DescribeReplicationGroups",
            "Resource": "*"
        },
        {
            "Sid": "ElastiCacheFetchMetadata",
            "Effect": "Allow",
            "Action": [
                "elasticache:DescribeCacheClusters",
                "elasticache:DescribeCacheSubnetGroups",
                "elasticache:ListTagsForResource"
            ],
            "Resource": "*"
        }
    ]
}
진술목적
ElastiCacheDiscoveryElastiCache 복제 그룹을 발견합니다.
ElastiCacheFetchMetadata각 데이터베이스에 대한 AWS 태그 및 추가 메타데이터를 Teleport 데이터베이스 레이블로 가져옵니다.

데이터 입력: 데이터베이스 검색은 Keyspaces에 대해 사용할 수 없습니다.

Keyspaces 데이터베이스를 Teleport 클러스터에 등록하려면 정적 구성 또는 동적 db 리소스를 통해 데이터베이스를 수동으로 구성해야 합니다.

더 많은 정보를 보려면 데이터베이스 액세스 참조를 참조하세요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "MemoryDBDiscovery",
            "Effect": "Allow",
            "Action": "memorydb:DescribeClusters",
            "Resource": "*"
        },
        {
            "Sid": "MemoryDBFetchMetadata",
            "Effect": "Allow",
            "Action": [
                "memorydb:DescribeSubnetGroups",
                "memorydb:ListTags"
            ],
            "Resource": "*"
        }
    ]
}
진술목적
MemoryDBDiscoveryMemoryDB 데이터베이스 발견.
MemoryDBFetchMetadata각 데이터베이스에 대한 AWS 태그 및 추가 메타데이터를 Teleport 데이터베이스 레이블로 가져옵니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "OpenSearchDiscovery",
            "Effect": "Allow",
            "Action": [
                "es:DescribeDomains",
                "es:ListDomainNames"
            ],
            "Resource": "*"
        },
        {
            "Sid": "OpenSearchFetchMetadata",
            "Effect": "Allow",
            "Action": "es:ListTags",
            "Resource": "*"
        }
    ]
}
명령문목적
OpenSearchDiscoveryOpenSearch 도메인을 발견합니다.
OpenSearchFetchMetadata발견된 각 도메인의 AWS 태그를 Teleport 데이터베이스 레이블로 가져옵니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RDSDiscovery",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBClusters",
                "rds:DescribeDBInstances"
            ],
            "Resource": "*"
        }
    ]
}
신고목적
RDSDiscoveryRDS 인스턴스 및 Aurora 클러스터를 발견합니다.

RDS 데이터베이스를 발견하도록 구성된 경우, Teleport Discovery Service는 RDS 인스턴스와 Aurora 클러스터를 모두 발견하려고 합니다. rds:DescribeDBInstances 권한은 RDS 인스턴스를 찾는 데 사용되며, 발견된 Aurora 클러스터에 대한 추가 정보를 찾는 데에도 사용됩니다. 따라서 Aurora 클러스터만 발견하려는 경우에도 이 권한을 포함해야 합니다. Aurora 클러스터 발견이 필요 없으면 rds:DescribeDBClusters 권한을 생략할 수 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RDSProxyDiscovery",
            "Effect": "Allow",
            "Action": "rds:DescribeDBProxies",
            "Resource": "*"
        },
        {
            "Sid": "RDSProxyFetchMetadata",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBProxyEndpoints",
                "rds:ListTagsForResource"
            ],
            "Resource": "*"
        }
    ]
}
설명목적
RDSProxyDiscoveryRDS 프록시를 검색하고 각 프록시의 기본 엔드포인트를 Teleport 데이터베이스로 등록합니다.
RDSProxyFetchMetadata검색된 프록시의 메타데이터를 가져와 AWS 리소스 태그를 Teleport 데이터베이스 레이블로 가져오고, 사용자 정의 엔드포인트를 Teleport 데이터베이스로 등록합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RedshiftDiscovery",
            "Effect": "Allow",
            "Action": "redshift:DescribeClusters",
            "Resource": "*"
        }
    ]
}
진술목적
RedshiftDiscovery아마존 Redshift 클러스터 발견.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RedshiftServerlessDiscovery",
            "Effect": "Allow",
            "Action": "redshift-serverless:ListWorkgroups",
            "Resource": "*"
        },
        {
            "Sid": "RedshiftServerlessFetchMetadata",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:ListEndpointAccess",
                "redshift-serverless:ListTagsForResource"
            ],
            "Resource": "*"
        }
    ]
}
진술목적
RedshiftServerlessDiscoveryRedshift Serverless Workgroup을 발견합니다.
RedshiftServerlessFetchMetadata발견된 workgroup의 메타데이터를 가져와 AWS 태그를 Teleport 데이터베이스 레이블로 가져오고, VPC 엔드포인트를 Teleport 데이터베이스로 등록합니다.

3단계/8. Discovery Service 배포

Teleport 구성 파일 생성

Discovery Service를 실행할 호스트에 teleport.yaml 구성 파일을 생성합니다. discovery_group aws-example 값을 그대로 두거나 보다 설명적인 값으로 변경할 수 있습니다.

version: v3
teleport:
  join_params:
    token_name: "/tmp/token"
    method: token
  proxy_server: "teleport.example.com:443"
auth_service:
  enabled: false
proxy_service:
  enabled: false
ssh_service:
  enabled: false
discovery_service:
  enabled: true
  discovery_group: "aws-example"

이 구성 파일은 discovery_service를 활성화하고 Teleport 클러스터에 조인하도록 구성합니다. 또한 Discovery Service의 discovery_group을 설정합니다. 나중 단계에서 Discovery Service의 구성을 변경할 수 있도록 하기 위해 discovery_group aws-example를 동적으로 구성할 것입니다.

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 서비스는 Teleport 클러스터에 참여하려면 유효한 조인 토큰이 필요합니다.
다음 tctl 명령을 실행하고 토큰 출력을 /tmp/token에 저장하세요.
Discovery 서비스가 실행될 서버에서:

tctl tokens add --type=discovery --format=text
abcd123-insecure-do-not-use-this

AWS에 많은 인프라가 있는 사용자나 많은 인스턴스를 생성하거나 재생성할 수 있는 사용자에게는, 새로운 EC2 인스턴스를 Teleport에 연결하기 위한 대체 방법을 고려하세요:

Discovery Service 시작

호스트가 부팅될 때 the Discovery Service가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 the Discovery Service를 설치한 방법에 따라 다릅니다.

the Discovery Service를 실행할 호스트에서 Teleport를 활성화하고 시작하십시오:

sudo systemctl enable teleport
sudo systemctl start teleport

the Discovery Service를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:

sudo teleport install systemd -o /etc/systemd/system/teleport.service
sudo systemctl enable teleport
sudo systemctl start teleport

the Discovery Service의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 journalctl -fu teleport로 볼 수 있습니다.

4단계/8. Discovery 그룹 구성

aws-example-discovery-config.yaml라는 파일을 생성하고 tctl을 사용할 수 있는 호스트에 저장합니다.

Database Type

version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["docdb"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"

데이터 입력: 데이터베이스 검색은 DynamoDB에 대해 사용할 수 없습니다.

DynamoDB 데이터베이스를 Teleport 클러스터에 등록하려면 정적 구성 또는 동적 db 리소스를 통해 데이터베이스를 수동으로 구성해야 합니다.

더 많은 정보를 보려면 데이터베이스 액세스 참조를 참조하세요.

version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["elasticache"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"

데이터 입력: 데이터베이스 검색은 Keyspaces에 대해 사용할 수 없습니다.

Keyspaces 데이터베이스를 Teleport 클러스터에 등록하려면 정적 구성 또는 동적 db 리소스를 통해 데이터베이스를 수동으로 구성해야 합니다.

더 많은 정보를 보려면 데이터베이스 액세스 참조를 참조하세요.

version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["memorydb"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"
version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["opensearch"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"
version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["rds"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"
version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["rdsproxy"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"
version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["redshift"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"
version: v1
kind: "discovery_config"
metadata:
  name: "example"
spec:
  # 이 discovery_group의 Discovery 서비스만이 이 동적 구성의 일치자(matchers)를 사용합니다.
  discovery_group: aws-example
  aws:
    # 데이터베이스 유형. 유효한 옵션은 다음과 같습니다:
    # 'docdb' - Amazon DocumentDB 데이터베이스를 발견하고 등록합니다.
    # 'elasticache' - Amazon ElastiCache Redis 데이터베이스를 발견합니다.
    # 'memorydb' - Amazon MemoryDB Redis 데이터베이스를 발견합니다.
    # 'opensearch' - Amazon OpenSearch Redis 데이터베이스를 발견합니다.
    # 'rds' - Amazon RDS 및 Aurora 데이터베이스를 발견합니다.
    # 'rdsproxy' - Amazon RDS Proxy 데이터베이스를 발견합니다.
    # 'redshift' - Amazon Redshift 데이터베이스를 발견합니다.
    # 'redshift-serverless' - Amazon Redshift Serverless 데이터베이스를 발견합니다.
  - types: ["redshift-serverless"]
    regions: ["us-east-1"]
    # "*"는 와일드카드로, AWS 태그를 일치시키는 데 사용됩니다.
    # 모든 데이터베이스 리소스 태그와 일치시키려면 "*": "*"를 사용할 수 있습니다.
    tags:
      "env": "prod" # 이 예제는 env=prod로 태그가 지정된 데이터베이스만 일치시킵니다.
    # 데이터베이스를 발견하기 위해 AWS API를 호출하기 전에 AWS IAM 역할을 옵션으로 가정할 수 있습니다.
    assume_role:
      role_arn: "" # "{{ roleARN }}"
      # 데이터베이스 서비스가 외부 AWS 계정에서 역할을 가정하는 데 사용할 선택적 AWS 외부 ID입니다.
      external_id: "" # "example-external-id"

discovery_config를 생성합니다:

tctl create aws-example-discovery-config.yaml

이전에 구성한 Discovery Service는 같은 discovery_group에 있으며, discovery_config를 사용하여 AWS 데이터베이스를 발견하기 시작할 것입니다. 데이터베이스를 발견하면 Discovery Service는 이를 Teleport 클러스터에서 db 리소스로 등록합니다.

Teleport db 리소스는 Teleport Database Service가 데이터베이스에 접근하는 데 사용할 수 있는 데이터베이스의 사양을 나타냅니다. Database Service 인스턴스가 레이블 선택기를 통해 db 리소스와 일치하면, 데이터베이스에 대한 하트비트를 시작하여 정기적으로 단기 db_server 리소스를 Teleport 클러스터에 생성합니다. tsh db lstctl db ls와 같은 도구는 오직 db_server 리소스만 표시합니다. 즉, Database Service 인스턴스가 접근할 수 있는 데이터베이스입니다.

5단계/8. 등록된 데이터베이스 목록 확인

발견된 데이터베이스에 대한 접근을 제공하기 위해 Database Service를 설정하기 전에, Discovery Service가 실제로 데이터베이스를 발견하고 있는지 확인해야 합니다.

동적으로 등록된 데이터베이스를 tctl로 나열할 수 있습니다.Discovery Service는 등록하는 각 데이터베이스에 teleport.dev/origin: cloud 레이블을 추가합니다.

Discovery Service가 예상한 대로 db 리소스를 등록했는지 확인합니다:

tctl get db

특정 데이터베이스를 확인하려면:

tctl get db/<database-name>

발견해야 할 데이터베이스에 해당하는 db 리소스를 보지 못한 경우 Discovery Service 문제 해결를 참조하십시오.

발견된 데이터베이스의 이름은 고유성을 보장하기 위해 추가 식별 정보가 덧붙여집니다. 그 추가 정보에는 다음이 포함될 수 있습니다:

  • 엔드포인트 유형 (예: "reader" 엔드포인트)
  • 매처 유형
  • AWS 리전
  • AWS 계정 ID.

예를 들어, RDS Aurora 데이터베이스 "my-postgres"가 AWS 계정 "123456789012"의 us-east-1 리전에서 발견되었다면, Teleport에서는 "my-postgres-rds-aurora-us-east-1-123456789012"이라고 명명됩니다.

발견된 데이터베이스는 AWS 데이터베이스 이름과 엔드포인트 유형으로만 구성된 짧은 표시 이름도 가집니다. 예를 들어 "my-postgres" 또는 "my-postgres-reader"입니다. 전체 이름이나 표시 이름 모두 tctltsh 명령에 사용될 수 있지만, 표시 이름이 모호한 경우 전체 이름을 사용해야 합니다.

AWS 데이터베이스 리소스에 TeleportDatabaseName AWS 태그를 적용하면 데이터베이스 이름을 오버라이드할 수 있습니다 - 이는 원문 그대로 db 이름으로 사용됩니다. 즉, 추가 식별 정보가 덧붙여지지 않습니다.

6단계/8. Database Service IAM 권한

the Database Service에 AWS에 인증하는 데 사용할 수 있는 자격 증명에 대한 액세스를 부여합니다.

the Database Service를 EC2 인스턴스에서 실행하는 경우 EC2 인스턴스 메타데이터 서비스 방법을 사용할 수 있습니다. 그렇지 않은 경우 환경 변수를 사용해야 합니다:

Teleport는 EC2 인스턴스에서 실행될 때 이를 감지하고 인스턴스 메타데이터 서비스를 사용하여 자격 증명을 가져옵니다.

EC2 인스턴스는 EC2 인스턴스 프로파일을 사용하도록 구성되어 있어야 합니다. 자세한 내용은 인스턴스 프로파일 사용하기를 참조하세요.

Teleport의 내장 AWS 클라이언트는 다음 환경 변수에서 자격 증명을 읽습니다:

  • AWS_ACCESS_KEY_ID
  • AWS_SECRET_ACCESS_KEY
  • AWS_DEFAULT_REGION

the Database Service를 시작하면 서비스는 /etc/default/teleport 경로의 파일에서 환경 변수를 읽습니다. 이 자격 증명은 귀하의 조직에서 가져오십시오. /etc/default/teleport에 다음 내용을 포함하고 각 변수의 값을 대체해야 합니다:

AWS_ACCESS_KEY_ID=00000000000000000000
AWS_SECRET_ACCESS_KEY=0000000000000000000000000000000000000000
AWS_DEFAULT_REGION=<YOUR_REGION>

Teleport의 AWS 클라이언트는 자격 증명을 다음 순서로 다양한 출처에서 로드합니다:

  • 환경 변수
  • 공유 자격 증명 파일
  • 공유 구성 파일 (Teleport는 항상 공유 구성을 활성화합니다)
  • EC2 인스턴스 메타데이터 (자격 증명 전용)

공유 자격 증명 파일 또는 공유 구성 파일을 통해 AWS 자격 증명을 제공할 수 있지만, the Database Service를 실행할 때 AWS_PROFILE 환경 변수를 선택한 프로파일의 이름으로 지정해야 합니다.

위의 지침이 고려하지 않은 특정 사용 사례가 있는 경우, 자격 증명 로딩 동작에 대한 자세한 설명을 보려면 AWS SDK for Go의 문서를 참조하십시오.

Database Service를 위해 AWS IAM 역할을 생성하고 다음 권한을 부착합니다:

데이터베이스 유형

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DocumentDBConnectAsIAMRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::aws-account-id:role/{{ dbUserRole }}"
            ]
        },
        {
            "Sid": "DocumentDBCheckDomainURL",
            "Effect": "Allow",
            "Action": "rds:DescribeDBClusters",
            "Resource": "*"
        }
    ]
}
진술목적
DocumentDBConnectAsIAMRoleIAM 인증을 사용하여 DocumentDB 클러스터에 연결하기 위해 IAM 역할을 가정합니다.
DocumentDBCheckDomainURLDiscovery Service에 의해 자동으로 발견된 경우 도메인의 URL을 검증합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DynamoDBConnectAsIAMRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::aws-account-id:role/{{ dbUserRole }}"
            ]
        },
        {
            "Sid": "DynamoDBSessionTagging",
            "Effect": "Allow",
            "Action": "sts:TagSession",
            "Resource": [
                "*"
            ]
        }
    ]
}
문서목적
DynamoDBConnectAsIAMRoleDynamoDB에 요청을 전달하기 위해 IAM 롤을 가정합니다.
DynamoDBSessionTaggingaws.session_tags에 정의된 태그가 있는 경우 가정된 롤 세션에 태그를 추가합니다.

세션 태깅 권한은 Teleport 데이터베이스 구성의 aws.session_tags 섹션에 태그가 구성된 경우에만 필요합니다.

ElastiCache 는 Redis 엔진 버전 7.0 이상에 대한 IAM 인증을 지원합니다.
이는 ElastiCache 에 대한 Teleport 액세스를 구성하는 권장 방법입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "ElastiCacheDescribeUsers",
            "Effect": "Allow",
            "Action": "elasticache:DescribeUsers",
            "Resource": "*"
        },
        {
            "Sid": "ElastiCacheConnect",
            "Effect": "Allow",
            "Action": "elasticache:Connect",
            "Resource": [
                "arn:aws:elasticache:us-east-2:aws-account-id:replicationgroup:replication-group",
                "arn:aws:elasticache:us-east-2:aws-account-id:user:*"
            ]
        }
    ]
}
Statement목적
ElastiCacheDescribeUsers사용자가 IAM 인증과 호환되는지 여부를 결정합니다.
ElastiCacheConnectIAM 인증을 사용하여 연결합니다.

다음 정보를 보려면 ElastiCache에 대한 IAM 인증으로 이동하세요.

{
    "버전": "2012-10-17",
    "진술": [
        {
            "Sid": "KeyspacesConnectAsIAMRole",
            "효과": "허용",
            "동작": "sts:AssumeRole",
            "자원": [
                "arn:aws:iam::aws-account-id:role/{{ dbUserRole }}"
            ]
        }
    ]
}
진술목적
KeyspacesConnectAsIAMRoleKeyspaces에 요청을 전달하기 위해 IAM 역할을 가정합니다.

MemoryDB 는 Redis 엔진 버전 7.0 이상에 대한 IAM 인증을 지원합니다.
이는 MemoryDB 에 대한 Teleport 액세스를 구성하는 권장 방법입니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "MemoryDBDescribeUsers",
            "Effect": "Allow",
            "Action": "memorydb:DescribeUsers",
            "Resource": "*"
        },
        {
            "Sid": "MemoryDBConnect",
            "Effect": "Allow",
            "Action": "memorydb:Connect",
            "Resource": [
                "arn:aws:memorydb:us-east-2:aws-account-id:replicationgroup:replication-group",
                "arn:aws:memorydb:us-east-2:aws-account-id:user:*"
            ]
        }
    ]
}
Statement목적
MemoryDBDescribeUsers사용자가 IAM 인증과 호환되는지 여부를 결정합니다.
MemoryDBConnectIAM 인증을 사용하여 연결합니다.

IAM을 사용하여 MemoryDB에 대한 인증에 대한 자세한 내용은 MemoryDB를 위한 IAM으로 인증하기를 참조하세요.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "OpenSearchCheckDomainURL",
            "Effect": "Allow",
            "Action": "es:DescribeDomains",
            "Resource": [
                "*"
            ]
        },
        {
            "Sid": "OpenSearchConnectAsIAMRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::aws-account-id:role/{{ dbUserRole }}"
            ]
        }
    ]
}
진술목적
OpenSearchCheckDomainURLDiscovery Service에 의해 자동 발견된 도메인의 URL을 검증합니다.
OpenSearchConnectAsIAMRole요청을 OpenSearch로 전달하기 위해 IAM 역할을 자산합니다.
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RDSAutoEnableIAMAuth",
            "Effect": "Allow",
            "Action": [
                "rds:ModifyDBCluster",
                "rds:ModifyDBInstance"
            ],
            "Resource": "*"
        },
        {
            "Sid": "RDSConnect",
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": "*"
        },
        {
            "Sid": "RDSFetchMetadata",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBClusters",
                "rds:DescribeDBInstances"
            ],
            "Resource": "*"
        }
    ]
}
성명목적
RDSAutoEnableIAMAuthRDS 인스턴스 및 Aurora 클러스터에서 IAM 인증을 자동으로 활성화합니다.
RDSConnect데이터베이스에 연결하기 위해 IAM 인증 토큰을 생성합니다.
RDSFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다.

Teleport Database Service는 rds:ModifyDBInstancerds:ModifyDBCluster를 사용하여 각각 RDS 인스턴스와 Aurora 클러스터에서 IAM 인증을 자동으로 활성화합니다.

데이터베이스에서 IAM 인증이 이미 활성화되어 있는 경우 RDSAutoEnableIAMAuth 권한을 생략할 수 있습니다.

rds-db:connect 권한은 데이터베이스에 연결하는 데 필요합니다.
특정 데이터베이스, 지역 또는 사용자만 허용하도록 권한의 범위를 줄일 수 있습니다.
리소스 ARN은 다음 형식을 가집니다:

arn:aws:rds-db:{Region}:{AccountID}:dbuser:{ResourceID}/{UserName}

rds-db:connect 권한 부여 구문에 대한 자세한 정보는
IAM 데이터베이스 액세스를 위한 IAM 정책 만들기 및 사용하기를 참조하세요.

데이터 입력: Teleport Discovery Service에 의해 발견된 데이터베이스는 완전한 메타데이터와 함께 등록해야 하므로, 모든 AWS 데이터베이스가 자동으로 발견되는 경우 RDSFetchMetadata 권한을 생략할 수도 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RDSProxyConnect",
            "Effect": "Allow",
            "Action": "rds-db:connect",
            "Resource": "*"
        },
        {
            "Sid": "RDSProxyFetchMetadata",
            "Effect": "Allow",
            "Action": [
                "rds:DescribeDBProxies",
                "rds:DescribeDBProxyEndpoints"
            ],
            "Resource": "*"
        }
    ]
}
명령문목적
RDSProxyConnect데이터베이스에 연결하기 위한 IAM 인증 토큰을 생성합니다.
RDSProxyFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾아냅니다.

rds-db:connect 권한은 데이터베이스에 연결하는 데 필요합니다.
특정 데이터베이스, 지역 또는 사용자만 허용하도록 권한의 범위를 줄일 수 있습니다.
리소스 ARN은 다음 형식을 가집니다:

arn:aws:rds-db:{Region}:{AccountID}:dbuser:{ResourceID}/{UserName}

rds-db:connect 권한 부여 구문에 대한 자세한 정보는
IAM 데이터베이스 액세스를 위한 IAM 정책 만들기 및 사용하기를 참조하세요.

데이터 입력: Teleport Discovery Service에 의해 발견된 데이터베이스는 완전한 메타데이터와 함께 등록해야 하므로, 모든 AWS 데이터베이스가 자동으로 발견되는 경우 RDSProxyFetchMetadata 권한을 생략할 수도 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RedshiftConnectAsDBUser",
            "Effect": "Allow",
            "Action": "redshift:GetClusterCredentials",
            "Resource": "*"
        },
        {
            "Sid": "RedshiftConnectAsIAMRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::aws-account-id:role/{{ dbUserRole }}"
            ]
        },
        {
            "Sid": "RedshiftFetchMetadata",
            "Effect": "Allow",
            "Action": "redshift:DescribeClusters",
            "Resource": "*"
        }
    ]
}
진술목적
RedshiftConnectAsDBUser기존 데이터베이스 사용자로 데이터베이스에 연결합니다.
RedshiftConnectAsIAMRole데이터베이스에 연결하기 위해 IAM 역할을 가정하고 역할의 IAM 권한과 1:1로 매핑된 권한을 사용합니다.
RedshiftFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다.

RedshiftConnectAsDBUser 진술의 범위를 특정 사용자, 데이터베이스 및 데이터베이스 그룹만 허용하도록 업데이트하여 축소할 수 있습니다. 지정할 수 있는 리소스 ARN의 형식은 다음과 같습니다:

arn:aws:redshift:{Region}:{AccountID}:dbuser:{ClusterName}/{UserName}arn:aws:redshift:{Region}:{AccountID}:dbname:{ClusterName}/{DatabaseName}arn:aws:redshift:{Region}:{AccountID}:dbgroup:{ClusterName}/{DatabaseGroupName}

GetClusterCredentials를 호출할 수 있는 IAM 역할 또는 사용자 만들기에 대한 자세한 정보는 redshift:GetClusterCredentials 권한 부여 구문에 대해 설명합니다.

기존 데이터베이스 사용자로 또는 데이터베이스에 자동으로 매핑될 IAM 역할로 인증할 수 있습니다. 해당 IAM 진술은 사용하려는 방법에 대해서만 필요합니다. IAM 역할이 데이터베이스 서비스의 아이덴티티를 신뢰된 주체로 지정하며, 두 아이덴티티가 동일한 AWS 계정에 있는 경우, RedshiftConnectAsIAMRole 진술도 생략할 수 있습니다.

데이터 입력: Teleport Discovery Service에 의해 발견된 데이터베이스는 완전한 메타데이터와 함께 등록해야 하므로, 모든 AWS 데이터베이스가 자동으로 발견되는 경우 RedshiftFetchMetadata 권한을 생략할 수도 있습니다.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "RedshiftServerlessConnectAsIAMRole",
            "Effect": "Allow",
            "Action": "sts:AssumeRole",
            "Resource": [
                "arn:aws:iam::aws-account-id:role/{{ dbUserRole }}"
            ]
        },
        {
            "Sid": "RedshiftServerlessFetchMetadata",
            "Effect": "Allow",
            "Action": [
                "redshift-serverless:GetEndpointAccess",
                "redshift-serverless:GetWorkgroup"
            ],
            "Resource": "*"
        }
    ]
}
StatementPurpose
RedshiftServerlessFetchMetadataAWS 태그를 데이터베이스 레이블로 자동으로 가져오거나 데이터베이스의 AWS 리전과 같은 누락된 정보를 찾습니다.
RedshiftServerlessConnectAsIAMRole데이터베이스 사용자로 연결하기 위해 IAM 역할을 맡습니다.

데이터 입력: Teleport Discovery Service에 의해 발견된 데이터베이스는 완전한 메타데이터와 함께 등록해야 하므로, 모든 AWS 데이터베이스가 자동으로 발견되는 경우 RedshiftServerlessFetchMetadata 권한을 생략할 수도 있습니다.

Redshift Serverless는 IAM 역할을 데이터베이스 사용자에 매핑합니다. Teleport Database Service는 IAM 인증 토큰을 생성하는 IAM 권한이 부여된 이러한 "접근" IAM 역할을 맡을 수 있어야 합니다.

7단계/8. Database Service 배포

데이터베이스 연결 구성

Discovery Service와 달리 Database Service는 데이터베이스에 접근하기 위해 네트워크 연결이 필요합니다. Teleport 클러스터에 접근하기 위해 여러 네트워크 도달성 요건이 충족되어야 합니다:

  1. Database Service는 데이터베이스에 대한 네트워크 경로가 있어야 합니다.
  2. Database Service는 Teleport 클러스터에 대한 네트워크 경로가 있어야 합니다.
  3. Database Service 보안 그룹은 데이터베이스에 대한 아웃바운드 트래픽을 허용해야 합니다.
  4. Database Service 보안 그룹은 Teleport 클러스터에 대한 아웃바운드 트래픽을 허용해야 합니다.
  5. 데이터베이스 보안 그룹은 Database Service로부터 인바운드 트래픽을 허용해야 합니다.

데이터베이스가 엄격한 보안 그룹이 부착된 프라이빗 서브넷에 배포된 경우가 매우 높기 때문에, 일반적으로 동일한 VPC에 Database Service 인스턴스를 배포해야 하며, 아마도 동일한 서브넷에 배포해야 하고, 데이터베이스가 인바운드 트래픽을 허용하는 보안 그룹이 부착되어야 합니다. Teleport Database Service는 Teleport 클러스터에 도달하기 위해 AWS NAT 게이트웨이나 인터넷 게이트웨이를 통해 공용 인터넷에 대한 경로가 필요할 수 있습니다.

이는 네트워크 요구 사항이나 제안 목록의 전체가 아니며, 이는 특정 네트워킹 설정에 따라 달라질 수 있습니다.

Teleport 구성 파일 생성

Discovery Service를 실행할 호스트에 teleport.yaml 구성 파일을 생성합니다:

version: v3
teleport:
  join_params:
    token_name: "/tmp/token"
    method: token
  proxy_server: "teleport.example.com:443"
auth_service:
  enabled: false
proxy_service:
  enabled: false
ssh_service:
  enabled: false
db_service:
  enabled: true
  resources:
    - labels:
        "account-id": "*"
        "region": "us-east-1"
        "teleport.dev/cloud": "AWS"
        "teleport.dev/origin": "cloud"

이 구성 파일은 db_service를 활성화하고 Teleport 클러스터에 조인하도록 구성합니다. db_service.resources 섹션은 레이블 선택기의 목록입니다. Database Service는 이러한 레이블을 가진 db 리소스와 일치하여 정기적으로 Teleport 클러스터에 단기 db_server 리소스를 생성하여 데이터베이스에 대한 하트비트를 시작합니다.

이 경우, 모든 AWS 계정의 us-east-1 리전에서 자동 발견된 AWS 데이터베이스와 일치하게 됩니다("*"는 와일드카드로 레이블 키와/또는 값으로 사용할 수 있습니다). 레벨 선택기를 조정하여 보다 구체적인 데이터베이스와 일치시킬 수 있습니다.

AWS 데이터베이스에 부착된 AWS 태그는 Teleport db 레이블로 가져와집니다. 이외에도 몇 가지 다른 식별 메타데이터가 있습니다. 사용 가능한 데이터베이스 레이블에 대한 추가 정보는 Database Labels Reference를 참조하십시오.

조인 토큰 생성

Database 서비스는 Teleport 클러스터에 참여하려면 유효한 조인 토큰이 필요합니다.
다음 tctl 명령을 실행하고 토큰 출력을 /tmp/token에 저장하세요.
Database 서비스가 실행될 서버에서:

tctl tokens add --type=db --format=text
abcd123-insecure-do-not-use-this

AWS에 많은 인프라가 있는 사용자나 많은 인스턴스를 생성하거나 재생성할 수 있는 사용자에게는, 새로운 EC2 인스턴스를 Teleport에 연결하기 위한 대체 방법을 고려하세요:

Database Service 시작

호스트가 부팅될 때 the Database Service가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 the Database Service를 설치한 방법에 따라 다릅니다.

the Database Service를 실행할 호스트에서 Teleport를 활성화하고 시작하십시오:

sudo systemctl enable teleport
sudo systemctl start teleport

the Database Service를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:

sudo teleport install systemd -o /etc/systemd/system/teleport.service
sudo systemctl enable teleport
sudo systemctl start teleport

the Database Service의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 journalctl -fu teleport로 볼 수 있습니다.

8단계/8. 데이터베이스 서버 목록 확인

Database Service가 발견된 데이터베이스를 프록시하고 있는지 확인하려면, 다음 tctl 명령을 실행하세요:

# 필요에 따라 이러한 쉼표로 구분된 필터링 레이블을 조정합니다.

tctl db ls teleport.dev/origin=cloud,teleport.dev/cloud=AWS,region=us-east-1,account-id="*"

예상했던 데이터베이스가 보이지 않으면, 아래 Database Service 문제 해결를 참조하십시오.

이 가이드는 Discovery Service와 Database Service를 사용하여 AWS 데이터베이스 자동 발견을 설정하는 방법을 보여주지만, 발견된 데이터베이스에 대한 사용자 프로비저닝을 다루지 않습니다.

발견된 데이터베이스에 Teleport를 통해 연결하기 위해서는 추가적인 Teleport RBAC 구성 및 IAM 구성이 필요할 수 있습니다.

발견된 데이터베이스에 대한 사용자 프로비저닝 및 구성에 대한 정보는 Enroll AWS Databases에서 적절한 가이드를 참조하십시오.

다음

  • Teleport Database Service에 의해 다이나믹 등록에 대해 알아보세요.
  • 데이터베이스를 연결하는 것으로 시작하세요.
  • 외부 AWS 계정에서 AWS 데이터베이스에 연결하세요.
  • 발견된 데이터베이스에 대한 사용자 프로비저닝 및 구성에 대한 정보는 Enroll AWS Databases에서 적절한 가이드를 참조하십시오.

문제 해결

Discovery Service 문제 해결

먼저, 발견된 database가 있는지 확인하세요. 이렇게 하려면 tctl get db 명령을 사용하여 예상되는 database가 이미 Teleport 클러스터에 등록되었는지 확인할 수 있습니다.

목록에 일부 database가 나타나지 않으면, Discovery Service 선택기 레이블이 누락된 database 태그와 일치하는지 확인하거나 Discovery Service 로그에서 권한 오류를 확인하세요.

Discovery Service가 올바른 AWS 계정의 자격 증명으로 실행되고 있는지 확인하세요. 다른 AWS 계정에서 리소스를 발견할 수 있지만, 그럴 경우 다른 AWS 계정에서 역할을 맡도록 구성되어야 합니다.

한 개 이상의 Discovery Service가 실행되고 있는지 확인하세요:

tctl inventory status --connected

여러 개의 Discovery Service를 실행하는 경우, 각 서비스가 동일한 클라우드 database를 감시하는 경우는 동일한 discovery_group 값으로 구성되어야 하며, 다른 클라우드 database를 감시하는 경우는 서로 다른 값으로 구성되어야 합니다. 이것이 올바르게 구성되지 않으면, 일반적인 증상은 db 리소스가 Teleport 클러스터의 레지스트리에서 간헐적으로 삭제되는 것입니다.

데이터베이스 서비스 문제 해결

tctl db ls에 데이터베이스가 나타나지 않음

tctl get db 명령어가 기대하는 데이터베이스를 반환하지만, tctl db ls 명령어에 포함되지 않는다면, db_service.resources 섹션이 올바르게 설정되었는지 확인하세요. 예를 들면:

db_service:
  enabled: "yes"
  resources:
  - labels:
      "env": "prod"

섹션이 올바르게 구성되었지만 데이터베이스가 여전히 나타나지 않는다면, Teleport에서 데이터베이스를 나열할 수 있는 올바른 권한이 있는지 확인하세요. 데이터베이스 레이블과 일치하고 dbdb_server 객체에 대한 "read" 및 "list" 동작을 허용하는 Teleport 역할이 있어야 합니다. 다음은 클러스터의 모든 데이터베이스에 대해 해당 권한을 부여하는 예입니다:

kind: role
version: v6
metadata:
  name: view-all-databases
spec:
  allow:
    db_labels:
      '*': '*'
    rules:
      - resources: [db_server, db]
        verbs: [read, list]

데이터베이스에 연결할 때 오류 발생

이 섹션은 이미 데이터베이스 사용자를 프로비저닝하고 Enroll AWS Databases에서 특정 가이드를 따라 해당 데이터베이스 사용자에 대한 Teleport RBAC를 구성했다고 가정합니다.

데이터베이스에 연결하려고 할 때 연결 오류가 발생한다면, 먼저 대상 데이터베이스에 대해 여러 db_server 하트비트 리소스가 있는지 확인하세요: tctl get db_server/yourDatabaseName. 여러 개가 있다면, 이는 여러 Teleport 데이터베이스 서비스 인스턴스가 데이터베이스를 프록시하고 있다는 의미입니다 - 이는 문제 해결을 복잡하게 할 HA 설정입니다.
Teleport는 연결을 프록시하기 위해 이러한 데이터베이스 서비스 인스턴스 중 하나를 무작위로 선택하며, 그 중 하나가 데이터베이스 엔드포인트에 도달할 수 없거나 권한이 없다면, 무작위 연결 오류가 발생할 수 있습니다.

연결 오류가 일관되게 발생하더라도, 문제를 해결하는 동안 오직 하나의 db에만 해당하는 Teleport 데이터베이스 서비스 인스턴스를 사용하도록 조정하거나 축소해야 합니다.
tctl get db_server/yourDatabaseNamedb_server가 하나만 있는지 확인하고, 그 후 다시 연결을 시도해보세요.

DEBUG 레벨 로깅이 활성화된 Teleport 데이터베이스 서비스 로그를 확인하고, 네트워크 또는 권한 오류를 찾아보세요. 보다 일반적인 문제 해결 단계는 데이터베이스 접근 문제 해결을 참조하세요.

또한, 특정 데이터베이스 유형에 대한 가이드는 Enroll AWS Databases에서 더 구체적인 문제 해결 정보를 제공할 수 있습니다.

Teleport 원문 보기