Infograb logo
GCP 컴퓨트 인스턴스 자동 발견

Teleport Discovery Service는 GCP에 연결하여 구성된 라벨과 일치하는 GCP Compute Engine 인스턴스를 자동으로 발견하고 등록합니다. 그런 다음 발견된 인스턴스에서 Teleport를 설치하고 시작하며 클러스터에 가입하는 스크립트를 실행합니다.

필수 조건

  • 실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.

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

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하십시오.

  • Discovery Service를 실행할 GCP 컴퓨트 인스턴스.
  • Teleport 클러스터에 조인할 GCP 컴퓨트 인스턴스, 기본 Teleport 설치 스크립트를 사용하는 경우 Ubuntu/Debian/RHEL에서 실행. (다른 Linux 배포판의 경우 Teleport를 수동으로 설치할 수 있습니다.)
  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결할 수 있고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl 명령어를 실행할 수 있습니다.
    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

1/6단계. GCP 초대 토큰 생성

GCP 컴퓨트 인스턴스를 발견할 때 Teleport는 SSH Service 인스턴스에 조인하기 위한 인증으로 GCP 초대 토큰을 사용합니다.

token.yaml 이라는 파일을 생성합니다:

# token.yaml
kind: token
version: v2
metadata:
  # 토큰 이름은 개인 정보가 아니므로 인스턴스는 이 토큰을 사용하기 위해
  # 귀하의 GCP 프로젝트에서 실행되고 있음을 증명해야 합니다.
  name: gcp-discovery-token
spec:
  # 필요한 최소 역할 세트를 사용합니다 (예: Node, Proxy, App, Kube, DB, WindowsDesktop)
  roles: [Node]

  # 이 토큰에 대해 허용된 가입 방법을 설정합니다.
  join_method: gcp

  gcp:
    allow:
      # VM이 조인할 수 있는 GCP 프로젝트 ID입니다.
      - project_ids: []
        # (선택 사항) VM이 조인할 수 있는 위치입니다. 참고: 지역과
        # 영역 모두 허용됩니다.
        locations: []
        # (선택 사항) VM이 사용할 수 있는 서비스 계정의 이메일 주소입니다.
        service_accounts: []

인스턴스의 프로젝트 ID를 project_ids 필드에 추가합니다. 토큰을 Teleport 클러스터에 추가하려면:

tctl create -f token.yaml

2/6단계. Teleport에 대한 IAM 권한 구성

인스턴스를 발견하는 데 필요한 Teleport IAM 권한을 부여할 서비스 계정을 생성합니다.

GCP 콘솔에서 IAM > Roles로 이동하여 + Create Role을 클릭합니다.
역할의 이름을 정하고 (예: teleport-discovery ) 다음 권한을 부여합니다:

  • compute.instances.get
  • compute.instances.getGuestAttributes
  • compute.instances.list
  • compute.instances.setMetadata
  • iam.serviceAccounts.actAs
  • iam.serviceAccounts.get
  • iam.serviceAccounts.list
Custom role

Create를 클릭합니다.

IAM > 서비스 계정으로 이동하여 + Create Service Account를 클릭합니다. 서비스 계정의 이름을 정합니다 (예: teleport-discovery ) 그리고 이메일 주소를 클립보드에 복사합니다. Create and Continue를 클릭합니다.

Service account

IAM으로 이동하여 Grant Access를 클릭합니다. 서비스 계정의 이메일을 New principals 필드에 붙여넣고 사용자 지정 역할을 선택합니다. Save를 클릭합니다.

Role assignment

Discovery Service가 GCP 컴퓨트 인스턴스에서 실행될 경우, 인스턴스를 편집하고 서비스 계정을 인스턴스에 할당하며, 그 접근 범위를 Compute API에 대한 읽기 및 쓰기 접근으로 설정합니다.

Service account assignment

다음 내용을 복사하여 teleport-discovery-role.yaml 이라는 파일에 붙여넣습니다:

# teleport-discovery-role.yaml
title: "teleport-discovery"
description: "GCP 컴퓨트 인스턴스를 발견하기 위한 역할"
stage: "ALPHA"
includedPermissions:
- compute.instances.get
- compute.instances.getGuestAttributes
- compute.instances.list
- compute.instances.setMetadata
- iam.serviceAccounts.actAs
- iam.serviceAccounts.get
- iam.serviceAccounts.list

그런 다음 다음 명령을 실행하여 역할을 생성합니다:

gcloud iam roles create teleport_discovery \--project=project_id \--file=teleport-discovery-role.yaml

다음 명령을 실행하여 서비스 계정을 생성합니다:

gcloud iam service-accounts create teleport-discovery \--description="GCP 컴퓨트 인스턴스를 발견하기 위한 서비스 계정" \--display-name="teleport-discovery"

다음 명령을 실행하여 새 역할을 새 서비스 계정에 추가합니다:

gcloud projects add-iam-policy-binding project_id \--member="serviceAccount:teleport-discovery@project_id.iam.gserviceaccount.com" \--role="projects/project_id/roles/teleport_discovery"

Discovery Service가 GCP 컴퓨트 인스턴스에서 실행될 경우, 다음 명령을 실행하여 인스턴스에 서비스 계정을 추가합니다:

gcloud compute instances set-service-account discovery_service_vm_name \--service-account=teleport-discovery@project_id.iam.gserviceaccount.com \--scopes=default,compute-rw

3/6단계. 발견할 인스턴스 구성하기

발견할 각 인스턴스에 서비스 계정이 할당되어 있는지 확인하십시오. 서비스 계정에는 권한이 필요하지 않습니다. 인스턴스에 서비스 계정이 있는지 확인하려면 다음 명령을 실행하고 serviceAccounts 아래에 최소한 하나의 항목이 있는지 확인하세요:

gcloud compute instances describe --format="yaml(name,serviceAccounts)" instance_name

인스턴스에서 게스트 속성 활성화하기

게스트 속성(드물게 업데이트되는 데이터에 사용되는 사용자 정의 메타데이터의 하위 집합)은 Teleport가 SSH 호스트 키에 접근할 수 있도록 발견할 인스턴스에서 활성화해야 합니다. 인스턴스 메타데이터에서 enable-guest-attributesTRUE 로 설정하여 게스트 속성을 활성화하세요.

gcloud compute instances add-metadata instance_name \--metadata=enable-guest-attributes=True

인스턴스 생성 시 게스트 속성이 활성화되면 인스턴스의 호스트 키로 자동으로 채워집니다. 인스턴스 생성 후에 게스트 속성이 활성화된 경우, 아래의 게스트 속성에 수동으로 호스트 키를 추가할 수 있습니다:

add-host-keys.sh 라는 파일을 만들고 다음 내용을 복사합니다:

#!/usr/bin/env bash
for file in /etc/ssh/ssh_host_*_key.pub; do
  read -r KEY_TYPE KEY _ <"$file"
  curl -X PUT --data "$KEY" "http://metadata.google.internal/computeMetadata/v1/instance/guest-attributes/hostkeys/$KEY_TYPE" -H "Metadata-Flavor: Google"
done

다음 명령을 실행하여 시작 스크립트의 일부로 호스트 키를 추가합니다:

gcloud compute instances add-metadata instance_name \--metadata-from-file=startup-script="add-host-keys.sh"

다음 명령을 실행하여 SSH를 통해 호스트 키를 추가합니다:

gcloud compute ssh instance_name \--command='for file in /etc/ssh/ssh_host_*_key.pub; do KEY_TYPE=$(awk '\''{print $1}'\'' $file); KEY=$(awk '\''{print $2}'\'' $file); curl -X PUT --data "$KEY" "http://metadata.google.internal/computeMetadata/v1/instance/guest-attributes/hostkeys/$KEY_TYPE" -H "Metadata-Flavor: Google"; done'

4/6단계. Teleport Discovery Service 설치하기

Tip

다른 Teleport 서비스(Auth 또는 Proxy 등)를 이미 실행 중인 호스트에서 Discovery Service를 실행할 계획이라면 이 단계를 건너뛰어도 됩니다.

Discovery Service를 실행할 가상 머신에 Teleport를 설치합니다.

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-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition

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

5/6단계. Teleport를 구성하여 GCP 컴퓨트 인스턴스 발견하기

Discovery Service가 독립 호스트에서 실행되고 있다면 서비스는 클러스터에 연결하기 위해 유효한 초대 토큰이 필요합니다. 다음 명령을 실행하여 Teleport Auth Service에서 하나를 생성합니다:

tctl tokens add --type=discovery

생성된 토큰을 Discovery Service를 실행할 가상 머신의 /tmp/token 에 저장합니다.

GCP 인스턴스 발견을 활성화하려면 teleport.yamldiscovery_service.gcp 섹션에 최소한 하나의 항목을 포함해야 합니다:

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.
version: v3
teleport:
  join_params:
    token_name: "/tmp/token"
    method: token
  proxy_server: "teleport.example.com:443"
auth_service:
  enabled: off
proxy_service:
  enabled: off
ssh_service:
  enabled: off
discovery_service:
  enabled: "yes"
  discovery_group: "gcp-prod"
  gcp:
    - types: ["gce"]
      # VMs가 가입할 수 있는 GCP 프로젝트의 ID.
      project_ids: []
      # (선택 사항) VMs가 가입할 수 있는 위치. 주의: 지역 및
      # 영역 모두 허용됩니다.
      locations: []
      # (선택 사항) VMs가 가입할 수 있는 서비스 계정의 이메일 주소.
      service_accounts: []
      # (선택 사항) 가입하는 VMs가 가져야 하는 레이블.
      labels:
        "env": "prod" # 레이블:env=prod인 가상 머신과 일치
      install:
        public_proxy_addr: "teleport.example.com:443"
  • teleport.auth_server 또는 teleport.proxy_server 키를 귀하의 Auth Service 또는 Proxy Service의 도메인 이름과 포트에 맞게 편집하십시오.
  • discovery_service.gcp 아래의 키를 귀하의 GCP 환경에 맞게 조정하십시오. 특히, Discovery Service에 연결할 프로젝트, 위치, 서비스 계정 및 태그를 조정하십시오.

GCP 자격 증명

Teleport Discovery Service는 로그인할 수 있도록 위에서 생성한 teleport-discovery GCP 서비스 계정의 자격 증명이 필요합니다.

이를 보장하는 가장 쉬운 방법은 Discovery Service를 GCP 인스턴스에서 실행하고 해당 인스턴스에 서비스 계정을 할당하는 것입니다. 대체 방법에 대한 자세한 내용은 애플리케이션 기본 자격 증명 설정을 참조하십시오.

6/6단계. [선택 사항] 기본 설치 프로그램 스크립트 사용자 정의

설치 프로그램을 사용자 정의하려면 사용자가 installer 리소스에 대한 list , create , readupdate 동사를 허용하는 역할을 가져야 합니다.

다음 내용을 포함하는 installer-manager.yaml 파일을 만드세요:

kind: role
version: v5
metadata:
  name: installer-manager
spec:
  allow:
    rules:
      - resources: [installer]
        verbs: [list, create, read, update]

역할을 생성하세요:

tctl create -f installer-manager.yaml

role 'installer-manager' 가 생성되었습니다

프리셋 editor 역할은 기본적으로 필수 권한을 갖추고 있습니다.

기본 설치 스크립트를 사용자 정의하려면, 작업 공간에서 다음 명령을 실행하세요:

tctl edit installer/default-installer

기본 설치 프로그램에 원하는 변경을 한 후, 텍스트 편집기에서 파일을 저장하고 닫으세요.

여러 installer 리소스가 존재할 수 있으며 teleport.yamldiscovery_service.gcp 목록 항목의 gcp.install.script_name 섹션에서 지정할 수 있습니다:

discovery_service:
  # ...
  { { matcher } }:
    - types: { { matchTypes } }
      tags:
        - "env": "prod"
      install: # 기본 설치 프로그램이 사용될 때 선택적 섹션.
        script_name: "default-installer"
    - types: { { matchTypes } }
      tags:
        - "env": "devel"
      install:
        script_name: "devel-installer"

installer 리소스에는 다음과 같은 템플릿 옵션이 있습니다:

  • {{ .MajorVersion }}: 저장소에서 설치할 Teleport의 주요 버전.
  • {{ .PublicProxyAddr }}: 연결할 Teleport Proxy Service의 공개 주소.
  • {{ .RepoChannel }}: 선택적 패키지 저장소 (apt/yum) 채널 이름. 형식은 <channel>/<version>입니다. 예: stable/v17. 자세한 내용은 설치를 참조하세요.
  • {{ .AutomaticUpgrades }}: 자동 업데이트가 활성화 또는 비활성화 여부. 값은 true 또는 false 입니다. 자세한 내용은 자동 에이전트 업데이트를 참조하세요.
  • {{ .TeleportPackage }}: 사용할 Teleport 패키지. 이는 클러스터가 엔터프라이즈인지 여부에 따라 teleport-ent 또는 teleport 입니다.

이를 다음과 같이 사용할 수 있습니다:

kind: installer
metadata:
  name: default-installer
spec:
  script: |
    echo {{ .PublicProxyAddr }}
    echo Teleport-{{ .MajorVersion }}
    echo Repository Channel: {{ .RepoChannel }}
version: v1

설치용으로 검색할 때, 다음 내용의 스크립트로 평가될 것입니다:

echo teleport.example.com
echo Teleport-17.0.0-dev
echo Repository Channel: stable/v17.0.0-dev

기본 설치 프로그램은 다음 작업을 수행합니다:

  • 지원되는 Linux 배포판에 공식 Teleport 저장소를 추가합니다.
  • apt 또는 yum 을 통해 Teleport를 설치합니다.
  • Teleport 구성 파일을 생성하고 /etc/teleport.yaml 에 작성합니다.
  • Teleport 서비스를 활성화하고 시작합니다.

다음 단계

Teleport 원문 보기