Infograb logo
GCP에서 Teleport 실행

이 가이드는 고객에게 Google Cloud (GCP)에서 자체 호스팅된 Teleport 클러스터를 배포하는 방법에 대한 개요를 제공하기 위해 작성되었습니다. 이 가이드는 생산 환경에서 Teleport를 설정하고 실행하는 방법에 대한 높은 수준의 소개를 제공합니다.

이 가이드는 다음과 같이 나뉘어 있습니다:

Tip

Teleport Enterprise Cloud는 이 설정을 자동으로 처리하므로 즉시 인프라에 대한 안전한 액세스를 제공할 수 있습니다.

Teleport Enterprise Cloud의 무료 평가판으로 시작하세요.

GCP Teleport 소개

이 가이드는 GCP에서 Teleport를 설정하고 구성하며 실행하는 방법을 다룹니다.

고가용성 모드에서 Teleport를 실행하기 위해 필요한 다음 GCP 서비스가 있습니다:

기타 필요 사항:

선택 사항:

  • 관리 도구: Cloud Deployment Manager
  • 로깅: Stackdriver

우리는 Teleport를 고가용성 모드에서 설정하는 것을 권장합니다. 고가용성 모드에서는 Firestore가 클러스터 상태 및 감사 로그에 사용되며, Google Cloud Storage가 세션 기록에 사용됩니다.

이 가이드는 다음의 자리표시자 변수를 사용할 것입니다. 여러분의 환경에 맞는 값으로 교체해 주세요.

이름예시설명
Example_GCP_PROJECTteleport-projectGCP 프로젝트 ID
Example_GCP_CREDENTIALS/var/lib/teleport/google.json서비스 계정 자격 증명 경로
Example_FIRESTORE_CLUSTER_STATEteleport-cluster-stateTeleport 클러스터 상태를 위한 Firestore 컬렉션 이름
Example_FIRESTORE_AUDIT_LOGSteleport-audit-logsTeleport 감사 로그를 위한 Firestore 컬렉션 이름
Example_BUCKET_NAMEteleport-session-recordings세션 기록을 저장하기 위한 GCS 버킷 이름

Compute Engine: 인스턴스 그룹이 있는 VM 인스턴스

우리는 운영 환경에서 n1-standard-2 인스턴스를 사용하는 것을 권장합니다. 각 인스턴스 그룹을 사용하여 Teleport의 프록시 서버와 인증 서버를 분리하는 것이 가장 좋습니다.

Compute Engine: 헬스 체크

GCP는 헬스 체크에 크게 의존합니다. 이는 인스턴스 그룹에 새 인스턴스를 추가할 때 유용합니다.

헬스 체크를 Teleport에서 활성화하려면 teleport start --diag-addr=0.0.0.0:3000 으로 시작하세요. 추가 정보는 관리 가이드: 문제 해결을 참조하세요.

Storage: Cloud Firestore

Firestore 백엔드는 실시간 업데이트를 사용하여 개별 인증 서버를 동기화하며, 기본 모드에서 Firestore가 구성되어 있어야 합니다.

Teleport가 감사 이벤트를 Firestore에 저장하도록 구성하려면, 인증 서버의 구성 파일(기본 경로는 /etc/teleport.yaml )의 teleport 섹션에 다음을 추가하세요:

teleport:
  storage:
    type: firestore
    collection_name: Example_FIRESTORE_CLUSTER_STATE
    project_id: Example_GCP_PROJECT
    credentials_path: Example_GCP_CREDENTIALS
    audit_events_uri:
      [
        "firestore://Example_FIRESTORE_AUDIT_LOGS?projectID=Example_GCP_PROJECT&credentialsPath=Example_GCP_CREDENTIALS",
      ]
테이블 이름

Example_FIRESTORE_CLUSTER_STATEExample_FIRESTORE_AUDIT_LOGS다른 Firestore 컬렉션을 참조하도록 주의하세요. 각 스키마는 다르며, 동일한 컬렉션을 두 종류의 데이터에 사용하면 오류가 발생합니다.

스토리지: Google Cloud Storage

Google Cloud Storage 백엔드는 Teleport 세션 기록에 사용됩니다.
Teleport는 시작할 때 버킷이 이미 존재하지 않으면 생성하려고 시도합니다.
원하는 경우 미리 버킷을 생성할 수 있습니다. 이 경우 Teleport는 버킷을 생성할 권한이 필요하지 않습니다.

버킷을 생성할 때 Dual-region 으로 설정하고 Standard 스토리지 클래스를 추천합니다. Google 관리 키를 사용하여 Uniform 액세스 제어로 접근을 제공합니다.

audit_sessions_uri 를 설정할 때는 gs:// 접두사를 사용하십시오.

storage:
    ...
    audit_sessions_uri: 'gs://Example_BUCKET_NAME?projectID=Example_GCP_PROJECT&credentialsPath=Example_GCP_CREDENTIALS'
    ...

네트워크 서비스: 로드 밸런싱

로드 밸런싱은 Proxy 및 SSH 트래픽에 필요합니다.
Teleport는 SSH 및 웹 트래픽을 위한 사용자 정의 포트를 요구하므로 TCP Load Balancing 을 사용하십시오.

네트워크 서비스: Cloud DNS

Cloud DNS는 Teleport Proxy의 공개 URL을 설정하는 데 사용됩니다.

액세스: 서비스 계정

Teleport Auth 서버는 Firestore 및 Google Cloud Storage에 읽기 및 쓰기를 해야 합니다. 이를 위해 올바른 권한을 가진 서비스 계정이 필요합니다.

Teleport가 자체 GCS 버킷을 생성할 수 있도록 하려면 storage.buckets.create 권한을 허용하는 역할을 생성해야 합니다. Teleport를 설치하기 전에 버킷을 생성하기로 선택하면 이 단계를 건너뛸 수 있습니다.

이 역할을 생성하려면 YAML 파일에서 역할을 정의하는 것으로 시작하십시오:

# teleport_auth_role.yaml
title: teleport_auth_role
description: "GCP에 대한 Teleport 권한"
stage: ALPHA
includedPermissions:
  # Teleport가 세션 기록을 위해 GCS 버킷을 생성할 수 있게 허용합니다.
  # 이미 존재하지 않는 경우에만 생성합니다.
  - storage.buckets.create

이 파일을 사용하여 역할을 생성하십시오:

gcloud iam roles create teleport_auth_role \ --project Example_GCP_PROJECT \ --file teleport_auth_role.yaml \ --format yaml

출력의 name 필드를 주의하십시오. 이는 사용자 정의 역할의 완전한 이름이며 후속 단계에서 사용해야 합니다.

export IAM_ROLE=<role name output from above>

Teleport Auth 서버에 대한 GCP 서비스 계정이 아직 없는 경우 다음 명령으로 생성할 수 있으며, 그렇지 않으면 기존 서비스 계정을 사용하십시오.

gcloud iam service-accounts create teleport-auth-server \ --description="Teleport Auth Server용 서비스 계정" \ --display-name="Teleport Auth Server" \ --format=yaml

출력의 email 필드를 주의하십시오. 이는 서비스 계정을 식별하는 데 사용해야 합니다.

export SERVICE_ACCOUNT=<email output from above command>

마지막으로, 새로 생성한 서비스 계정에 필요한 IAM 역할을 바인딩하십시오.

우리의 사용자 정의 IAM 역할은 Teleport가 세션 기록을 위한 GCS

버킷을 생성할 수 있게 허용합니다. 이미 존재하지 않는 경우에 한합니다.

gcloud projects add-iam-policy-binding Example_GCP_PROJECT \ --member=serviceAccount:$SERVICE_ACCOUNT \ --role=$IAM_ROLE

datastore.owner는 필요한 Firestore 접근을 부여합니다.

gcloud projects add-iam-policy-binding Example_GCP_PROJECT \ --member=serviceAccount:$SERVICE_ACCOUNT \ --role=roles/datastore.owner

storage.objectAdmin은 스토리지 객체를 읽기/쓰기/삭제하는 데 필요합니다.

gcloud projects add-iam-policy-binding Example_GCP_PROJECT \ --member=serviceAccount:$SERVICE_ACCOUNT \ --role=roles/storage.objectAdmin

JSON 서비스 키 다운로드

이 서비스 계정의 자격 증명은 JSON 형식으로 내보내야 하며, 이 가이드의 나머지 부분에서 Teleport에 제공해야 합니다.

GCP 빠른 시작

1. 리소스 생성

리소스를 생성하는 것부터 시작할 것을 권장합니다. Cloud Deployment Manager 또는 Terraform과 같은 인프라 자동화 도구를 사용하여 생성하는 것을 강력히 권장합니다.

2. Teleport 설치 및 구성

설치 페이지에서 설치 지침을 따르십시오.

다음 단계에 따라 Teleport를 구성할 것을 권장합니다:

1. Teleport Auth 서버 구성 아래의 예제 teleport.yaml 을 사용하여 구성하고, systemd를 사용하여 시작합니다. DEB/RPM 설치는 systemd 구성을 자동으로 포함합니다.

#
# Auth 서버를 위한 Teleport 구성 teleport.yaml 샘플 파일
#
teleport:
  nodename: teleport-auth-server
  data_dir: /var/lib/teleport
  pid_file: /run/teleport.pid
  log:
    output: stderr
    severity: DEBUG
  storage:
    type: firestore
    collection_name: Example_FIRESTORE_CLUSTER_STATE
    # 자격 증명: Firestore 및 Google Storage에 사용되는 Google 서비스 계정 파일 경로.
    credentials_path: Example_GCP_CREDENTIALS
    project_id: Example_GCP_PROJECT
    audit_events_uri: "firestore://Example_FIRESTORE_AUDIT_LOGS?projectID=Example_GCP_PROJECT&credentialsPath=Example_GCP_CREDENTIALS"
    audit_sessions_uri: "gs://Example_BUCKET_NAME?projectID=Example_GCP_PROJECT&credentialsPath=Example_GCP_CREDENTIALS"
auth_service:
  enabled: true
  tokens:
    - "proxy:abcd123-insecure-do-not-use-this"
    - "node:efgh456-insecure-do-not-use-this"
proxy_service:
  enabled: false
ssh_service:
  enabled: false

1. Teleport Auth 서버 구성 아래의 예제 teleport.yaml 을 사용하여 구성하고, systemd를 사용하여 시작합니다. DEB/RPM 설치는 systemd 구성을 자동으로 포함합니다.

#
# Auth 서버를 위한 Teleport 구성 teleport.yaml 샘플 파일
#
teleport:
  nodename: teleport-auth-server
  data_dir: /var/lib/teleport
  pid_file: /run/teleport.pid
  log:
    output: stderr
    severity: DEBUG
  storage:
    type: firestore
    collection_name: Example_FIRESTORE_CLUSTER_STATE
    # 자격 증명: Firestore 및 Google Storage에 사용되는 Google 서비스 계정 파일 경로.
    credentials_path: Example_GCP_CREDENTIALS
    project_id: Example_GCP_PROJECT
    audit_events_uri: "firestore://Example_FIRESTORE_AUDIT_LOGS?projectID=Example_GCP_PROJECT&credentialsPath=Example_GCP_CREDENTIALS"
    audit_sessions_uri: "gs://Example_BUCKET_NAME?projectID=Example_GCP_PROJECT&credentialsPath=Example_GCP_CREDENTIALS"
auth_service:
  enabled: true
  license_file: /var/lib/teleport/license.pem
  tokens:
    - "proxy:abcd123-insecure-do-not-use-this"
    - "node:efgh456-insecure-do-not-use-this"
proxy_service:
  enabled: false
ssh_service:
  enabled: false

Teleport Auth 서비스는 Teleport Enterprise 계정을 인증하기 위해 라이센스 파일을 읽습니다.

라이센스 파일을 얻으려면 Teleport 계정 대시보드로 이동하여 로그인하십시오. teleport.sh에서 시작하여 Teleport 계정 이름(예: my-company)을 입력합니다. 로그인 후 "GENERATE LICENSE KEY" 버튼이 표시되며, 이를 클릭하면 새 라이센스 파일이 생성되고 다운로드할 수 있습니다.

Auth 서버에 라이센스 파일을 /var/lib/teleport/license.pem 경로에 저장하십시오.

2. 프록시 설정

다음 구성 파일을 프록시 서버에 /etc/teleport.yaml 로 저장하십시오:

# TCP 포트 443에서 모든 트래픽의 다중화를 활성화
version: v3
teleport:
  auth_token: abcd123-insecure-do-not-use-this
  # 고가용성 모드로 설정할 때는 인증 서버를 가리키는 TCP 로드 밸런서를 사용하는 것이 좋습니다.
  auth_server: auth.example.com:3025
# 프록시 서비스 활성화, auth 및 ssh 비활성화
ssh_service:
  enabled: false
auth_service:
  enabled: false
proxy_service:
  enabled: true
  web_listen_addr: 0.0.0.0:443
  public_addr: teleport.example.com:443
  # teleport.example.com에 대한 ACME 인증서를 자동으로 얻기
  acme:
    enabled: true
    email: example@email.com

3. Teleport 노드 설정

다음 구성 파일을 노드에 /etc/teleport.yaml 로 저장하십시오:

version: v3
teleport:
  auth_token: efgh456-insecure-do-not-use-this
  # Teleport 에이전트는 프록시 서비스의 공개 주소를 통해 클러스터에 조인될 수 있습니다.
  # 이는 프록시 서비스와 에이전트 간의 역 터널을 설정하는 데 사용됩니다.
  proxy_server: teleport.example.com:443
# SSH 서비스 활성화 및 Auth 및 Proxy 서비스 비활성화
ssh_service:
  enabled: true
auth_service:
  enabled: false
proxy_service:
  enabled: false

4. 사용자 추가

로컬 사용자 가이드를 따르거나 Google Workspace와 통합하여 SSO 액세스를 제공합니다.

Teleport 원문 보기