이 시작 가이드에서는 Teleport API Go 클라이언트를 사용하여 Teleport Auth Service에 연결하는 방법을 설명합니다.
다음 단계를 진행할 것입니다:
- 간단한 역할 기반 인증 방법을 사용하여 API 사용자를 생성합니다.
- 해당 사용자에 대한 자격 증명을 생성합니다.
- Teleport API와 상호 작용하는 Go 클라이언트를 생성하고 연결합니다.
전제 조건
- Go 1.22+ 및 Go 개발 환경을 설치합니다.
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- 당신의 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/3 단계. 사용자 만들기
프로덕션에서 Teleport를 실행할 때 보안 사고를 피하기 위해 다음 모범 사례를 준수해야 합니다:
- 필요한 경우가 아니면 프로덕션 환경에서
sudo
사용을 피하세요. - 새로운 비루트 사용자 계정을 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하세요.
- 필요하지 않는 한 비루트 사용자로서 Teleport의 서비스를 실행하세요. SSH 서비스만 루트 접근을 필요로 합니다. Teleport가
1024
보다 작은 포트(예:443
)에서 수신 대기하도록 하려면 루트 권한(또는CAP_NET_BIND_SERVICE
권한)이 필요합니다. - 최소 권한 원칙을 따르세요. 더 제한적인 역할로도 충분할 때 사용자의 권한을 허용하는 역할을 부여하지 마세요.
예를 들어, 사용자가 모든 클러스터 리소스에 액세스하고 편집할 수 있는 내장된
access,editor
역할을 부여하지 마세요. 대신 각 사용자에게 필요한 최소 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 권한을 상승시켜주세요. - Teleport 리소스를 등록할 때(예: 새로운 데이터베이스나 응용 프로그램) 초대 토큰을 파일에 저장해야 합니다.
명령행에 토큰을 직접 입력하면 악의적인 사용자가 손상된 시스템에서
history
명령을 실행하여 이를 볼 수 있습니다.
이러한 관행이 문서에서 사용되는 예제에 반드시 반영되지 않는 점에 유의해야 합니다. 문서의 예제는 주로 시연 및 개발 환경을 위한 것입니다.
API authorization를 읽고 API 클라이언트를 위한 사용자 정의 역할 정의에 대해 자세히 알아보세요.
내장 역할 editor
로 api-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-demogo mod init client-demogo get github.com/gravitational/teleport/api/client
호환성을 보장하기 위해, 클러스터에서 실행 중인 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
다음 단계
- pkg.go.dev에 대해 알아보세요
- 클라이언트 사용법을 알아보세요
- 자격 증명 처리 방법을 알아보세요
- Teleport API 아키텍처에 대해 읽어보세요. API 및 API 클라이언트에 대한 심층 개요입니다.
- API authorization를 읽고 API 클라이언트를 위한 사용자 정의 역할 정의에 대해 더 알아보세요.
client
pkg.go 참조 문서를 검토하여 Teleport API와 프로그래밍적으로 작업하는 방법에 대한 더 많은 정보를 얻으세요.- API를 최대한 활용하기 위해 관리 매뉴얼을 숙지하세요.