Teleport Discovery Service는 GCP에 연결하여 구성된 레이블과 일치하는 GCP Compute Engine 인스턴스를 자동으로 발견하고 등록할 수 있습니다. 그런 다음 발견된 인스턴스에서 Teleport를 설치하고 시작하며 클러스터에 조인하는 스크립트를 실행합니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- Discovery Service를 실행할 GCP 컴퓨트 인스턴스.
- Teleport 클러스터에 조인할 GCP 컴퓨트 인스턴스, 기본 Teleport 설치 스크립트를 사용할 경우 Ubuntu/Debian/RHEL을 실행 중인 인스턴스. (다른 리눅스 배포판의 경우, Teleport를 수동으로 설치할 수 있습니다.)
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다.
1단계/6. GCP 초대 토큰 생성
GCP 컴퓨트 인스턴스를 발견할 때, Teleport는 SSH 서비스 인스턴스에 조인하는 것을 인증하기 위해 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: []
project_ids
필드에 인스턴스의 프로젝트 ID를 추가하세요.
다음 명령으로 토큰을 Teleport 클러스터에 추가하세요:
tctl create -f token.yaml
2단계/6. Teleport에 대한 IAM 권한 구성
인스턴스를 발견하는 데 필요한 IAM 권한을 Teleport에 부여할 서비스 계정을 만듭니다.
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
Create를 클릭합니다.
IAM > Service accounts로
이동하여 + Create Service Account를 클릭합니다. 서비스
계정의 이름을 선택하고(예: teleport-discovery
) 해당 이메일 주소를 클립보드에 복사합니다.
Create and Continue를 클릭합니다.
IAM으로 이동하여 Grant Access를 클릭합니다. 서비스 계정의 이메일을 New principals 필드에 붙여넣고 사용자 정의 역할을 선택합니다. Save를 클릭합니다.
다음을 복사하여 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 컴퓨트 인스턴스를 발견하도록 Teleport를 활성화하는 서비스 계정" \--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"
3단계/6. 발견할 인스턴스 구성
발견할 각 인스턴스에 서비스 계정이 할당되어 있는지 확인합니다. 서비스 계정에 대한 권한은 필요하지 않습니다. 인스턴스에 서비스 계정이 있는지 확인하려면 다음 명령을 실행하고 serviceAccounts
아래에 최소한 하나의 항목이 있는지 확인합니다:
gcloud compute instances describe --format="yaml(name,serviceAccounts)" instance_name
인스턴스에서 게스트 속성 활성화
게스트 속성(드물게 업데이트되는 데이터에 사용되는 사용자 지정 메타데이터의 하위 집합)은 Teleport가 인스턴스의 SSH 호스트 키에 접근할 수 있도록 발견된 인스턴스에서 활성화해야 합니다. 인스턴스 메타데이터의 enable-guest-attributes
를 TRUE
로 설정하여 게스트 속성을 활성화하세요.
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 설치
Discovery Service를 이미 다른 Teleport 서비스(예: Auth 또는 Proxy)가 실행 중인 호스트에서 실행할 계획이라면 이 단계를 건너뛰어도 됩니다.
Discovery Service를 실행할 가상 머신에 Teleport를 설치하세요.
Linux 서버에 Teleport 설치하기:
-
Teleport 에디션에 따라 edition을(를) 다음 중 하나로 지정합니다:
에디션 값 Teleport Enterprise Cloud cloud
Teleport Enterprise (자체 호스팅) enterprise
Teleport Community Edition oss
-
설치할 Teleport의 버전을 확인합니다. 클러스터에서 자동 에이전트 업데이트가 활성화되어 있는 경우, 업데이터와 호환되는 최신 Teleport 버전을 쿼리합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"그렇지 않으면, Teleport 클러스터의 버전을 확인합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')" -
Linux 서버에 Teleport를 설치합니다:
curl https://cdn.teleport.dev/install-v16.2.0.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.yaml
의 discovery_service.gcp
섹션에 최소한 하나의 항목을 포함해야 합니다:
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"
gcp:
- types: ["gce"]
# VM이 조인할 수 있는 GCP 프로젝트의 ID.
project_ids: []
# (선택 사항) VM이 조인할 수 있는 위치. 주의: 지역과
# 존 모두 허용됩니다.
locations: []
# (선택 사항) VM이 조인할 수 있는 서비스 계정의 이메일 주소.
service_accounts: []
# (선택 사항) 조인하는 VM이 가져야 하는 레이블.
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 서비스 계정의
자격증명이 필요합니다.
가장 쉬운 방법은 GCP 인스턴스에서 Discovery Service를 실행하고 해당 인스턴스에 서비스 계정을 할당하는 것입니다. 대체 방법에 대한 자세한 내용은 Set Up Application Default Credentials를 참조하세요.
6단계/6. [선택 사항] 기본 설치 스크립트 사용자 정의
설치 프로그램을 맞춤 설정하려면 사용자가 installer
리소스에 대해 list
, create
, read
및 update
동사를 허용하는 역할을 가져야 합니다.
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역할 'installer-manager' 가 생성되었습니다
기본적으로 editor
프리셋 역할은 필요한 권한을 가지고 있습니다.
기본 설치 프로그램 스크립트를 맞춤 설정하려면, 워크스테이션에서 다음 명령을 실행하세요:
tctl get installer/default-installer > teleport-default-installer.yaml
결과로 생성된 teleport-default-installer.yaml
파일은 발견된 인스턴스를 등록할 때 실행될 내용을 변경하기 위해 편집할 수 있습니다.
기본 설치 프로그램에 원하는 변경 사항을 적용한 후, 해당 리소스는 다음을 실행하여 업데이트할 수 있습니다:
tctl create -f teleport-default-installer.yaml
여러 installer
리소스가 존재할 수 있으며 teleport.yaml
의 discovery_service.gcp
목록 항목의 gcp.install.script_name
섹션에서 지정할 수 있습니다:
discovery_service:
gcp:
- types: ["gce"]
tags:
- "env": "prod"
install: # 기본 설치 프로그램이 사용될 때의 선택적 섹션.
script_name: "default-installer"
- types: ["gce"]
tags:
- "env": "devel"
install:
script_name: "devel-installer"
installer
리소스는 다음과 같은 템플릿 옵션을 가지고 있습니다:
{{ .MajorVersion }}
: 저장소에서 설치할 Teleport의 주요 버전입니다.{{ .PublicProxyAddr }}
: 연결할 Teleport Proxy 서비스의 공용 주소입니다.{{ .RepoChannel }}
: 선택적 패키지 저장소 (apt/yum) 채널 이름입니다.
형식은<channel>/<version>
입니다. 예: stable/v16. 자세한 내용은 설치를 참조하세요.{{ .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-16.2.0
echo Repository Channel: stable/v16.2.0
기본 설치 프로그램은 다음과 같은 작업을 수행합니다:
- 지원되는 Linux 배포판에 공식 Teleport 저장소를 추가합니다.
apt
또는yum
을 통해 Teleport를 설치합니다.- Teleport 구성 파일을 생성하고
/etc/teleport.yaml
에 기록합니다. - Teleport 서비스를 활성화하고 시작합니다.
다음 단계
- GCP 토큰에 대한 자세한 내용은 서비스를 GCP를 통해 클러스터에 조인하기를 읽어보세요.
- GCP 발견 구성에 대한 전체 문서는 구성 파일 참조 문서에서 찾아보실 수 있습니다.