Infograb logo
API 시작 가이드

이 시작 가이드에서는 Teleport API Go 클라이언트를 사용하여 Teleport Auth Service에 연결하는 방법을 설명합니다.

다음 단계를 진행할 것입니다:

  • 간단한 역할 기반 인증 방법을 사용하여 API 사용자를 생성합니다.
  • 해당 사용자에 대한 자격 증명을 생성합니다.
  • Teleport API와 상호 작용하는 Go 클라이언트를 생성하고 연결합니다.

전제 조건

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

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

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

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

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

1/3 단계. 사용자 만들기

프로덕션에서 Teleport를 실행할 때 보안 사고를 피하기 위해 다음 모범 사례를 준수해야 합니다:

  • 필요한 경우가 아니면 프로덕션 환경에서 sudo 사용을 피하세요.
  • 새로운 비루트 사용자 계정을 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하세요.
  • 필요하지 않는 한 비루트 사용자로서 Teleport의 서비스를 실행하세요. SSH 서비스만 루트 접근을 필요로 합니다. Teleport가 1024보다 작은 포트(예: 443)에서 수신 대기하도록 하려면 루트 권한(또는 CAP_NET_BIND_SERVICE 권한)이 필요합니다.
  • 최소 권한 원칙을 따르세요. 더 제한적인 역할로도 충분할 때 사용자의 권한을 허용하는 역할을 부여하지 마세요. 예를 들어, 사용자가 모든 클러스터 리소스에 액세스하고 편집할 수 있는 내장된 access,editor 역할을 부여하지 마세요. 대신 각 사용자에게 필요한 최소 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 권한을 상승시켜주세요.
  • Teleport 리소스를 등록할 때(예: 새로운 데이터베이스나 응용 프로그램) 초대 토큰을 파일에 저장해야 합니다. 명령행에 토큰을 직접 입력하면 악의적인 사용자가 손상된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 관행이 문서에서 사용되는 예제에 반드시 반영되지 않는 점에 유의해야 합니다. 문서의 예제는 주로 시연 및 개발 환경을 위한 것입니다.

API authorization를 읽고 API 클라이언트를 위한 사용자 정의 역할 정의에 대해 자세히 알아보세요.

내장 역할 editorapi-admin이라는 사용자를 생성합니다:

Teleport Cloud를 사용하지 않는 한 권한 서버에서 직접 실행하세요

사용자 추가 및 Proxy Service를 통해 로그인합니다

sudo tctl users add api-admin --roles=editor

2/3 단계. 클라이언트 자격 증명 생성하기

tsh로 새로 생성된 사용자로 로그인합니다.

tsh 프로필 생성

tsh login --user=api-admin --proxy=tele.example.com

프로필 자격 증명 로더 는 다음 단계에서 현재 프로필의 자격 증명을 자동으로 검색합니다.

3/3 단계. Go 프로젝트 만들기

Go 모듈을 설정하고 client 패키지를 가져옵니다:

mkdir client-demo && cd client-demo
go mod init client-demo
go get github.com/gravitational/teleport/api/client
API 버전

호환성을 보장하기 위해, 클러스터에서 실행 중인 Teleport의 주요 버전과 일치하는 Teleport API 라이브러리 버전을 사용해야 합니다.

특정 git 태그에 대한 go.mod 파일에 적절한 가상 버전을 찾으려면, 다음 명령을 teleport 저장소에서 실행하세요:

go list -f '{{.Version}}' -m "github.com/gravitational/teleport/api@$(git rev-parse v12.1.0)"
v0.0.0-20230307032901-49a6de744a3a

main.go라는 파일을 만들고 필요한 대로 Addrs 문자열을 수정합니다:

package main

import (
	"context"
	"log"

	"github.com/gravitational/teleport/api/client"
)

func main() {
	ctx := context.Background()

	clt, err := client.New(ctx, client.Config{
		Addrs: []string{
			// Teleport Cloud 고객은 <tenantname>.teleport.sh를 사용해야 합니다
			"tele.example.com:443",
			"tele.example.com:3025",
			"tele.example.com:3024",
			"tele.example.com:3080",
 		},
		Credentials: []client.Credentials{
			client.LoadProfile("", ""),
		},
	})

	if err != nil {
		log.Fatalf("클라이언트 생성 실패: %v", err)
	}

	defer clt.Close()
	resp, err := clt.Ping(ctx)
	if err != nil {
		log.Fatalf("서버에 핑을 보내는 데 실패했습니다: %v", err)
	}

	log.Printf("예제 성공!")
	log.Printf("예제 서버 응답: %s", resp)
	log.Printf("서버 버전: %s", resp.ServerVersion)
}

이제 프로그램을 실행하고 클라이언트를 Teleport Auth Server에 연결하여 서버 버전을 가져올 수 있습니다.

go run main.go

다음 단계

Teleport 원문 보기