Teleport 애플리케이션 접근으로 REST API 접근하기
Teleport v18.9Teleport 애플리케이션 서비스를 사용하면 curl이나 Postman 같은 도구로 애플리케이션의 (REST 또는 Teleport 자체 gRPC) API에 접근할 수 있습니다. gRPC와 같은 비 HTTP API에는 TCP 애플리케이션 접근을 사용하세요.
Teleport 애플리케이션 서비스를 사용하면 curl이나 Postman 같은 도구로 애플리케이션의 (REST 또는 Teleport 자체 gRPC) API에 접근할 수 있습니다.
gRPC와 같은 비 HTTP API에는 TCP 애플리케이션 접근을 사용하세요.
이 가이드에서는 tsh를 사용해 Teleport에 인증하고, 사용 가능한 애플리케이션 목록을 확인하며, Teleport가 발급한 TLS 자격 증명을 사용해 HTTP 클라이언트로 애플리케이션과 상호작용하는 방법을 다룹니다.
사전 요구사항#
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 Teleport 클러스터 버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터 버전을 확인합니다.teleport.example.com:443를 Teleport Proxy Service의 웹 주소로 바꿉니다:$ TELEPORT_DOMAIN=teleport.example.com:443 $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
-
간단한 예시를 위해 Docker 컨테이너에서 실행되는 Grafana를 사용해 이 애플리케이션에 대해 API 쿼리를 실행하겠습니다. 다음 Docker 명령어 하나로 Grafana를 실행할 수 있습니다:
$ docker run -d -p 3000:3000 grafana/grafanaTeleport 애플리케이션 서비스 YAML 설정 파일에 다음 섹션을 추가하여 Grafana를 Teleport 클러스터에 연결합니다:
app_service: enabled: true apps: - name: "grafana" description: "Test Grafana server" uri: "http://localhost:3000" labels: "env": "dev"
API 접근하기#
Teleport 클러스터에 로그인하고 사용 가능한 애플리케이션을 확인합니다:
$ tsh login --proxy=teleport.example.com
$ tsh apps ls
# Application Description Public Address Labels
# ----------- ------------------- ---------------------------- -------
# grafana Test Grafana server grafana.teleport.example.com env=dev
애플리케이션에 대한 단기 X.509 인증서를 발급받습니다:
$ tsh apps login grafana
# Logged into app grafana. Example curl command:
$ curl \
--cert /Users/alice/.tsh/keys/teleport.example.com/alice-app/cluster-name/grafana-x509.pem \
--key /Users/alice/.tsh/keys/teleport.example.com/alice \
https://grafana.teleport.example.com:3080
로그인 메시지는 Teleport 애플리케이션 접근을 통해 대상 애플리케이션의 API를
호출할 수 있는 curl 명령어 예시를 보여줍니다.
명령어에서 사용자 인증서/키 페어 경로를 확인하세요 - curl은 클라이언트 인증서를 사용해 Teleport에 인증합니다.
Teleport 프록시 서비스는 일반적으로 Let's Encrypt와 같은 공인 인증 기관(CA)에서 발급한
와일드카드 인증서로 구성됩니다. 자체 호스팅 Teleport 클러스터를 운영 중이고
Teleport 프록시 서비스가 자체 서명 인증서를 사용하도록 구성되어 있다면,
--cacert <path>를 사용해 curl 명령어에 해당 인증서를 포함해야 합니다.
Grafana의 API는 인증이 필요하므로, 기본 Grafana 사용자명/비밀번호로 기본 인증 정보를
제공하고 /api/users 엔드포인트를 호출하도록 curl 명령어를 업데이트해 보겠습니다:
$ curl --user admin:admin \
--cert /Users/alice/.tsh/keys/teleport.example.com/alice-app/cluster-name/grafana-x509.pem \
--key /Users/alice/.tsh/keys/teleport.example.com/alice \
https://grafana.teleport.example.com:3080/api/users
# [{"id":1,"name":"","login":"admin","email":"admin@localhost","avatarUrl":"/avatar/46d229b033af06a191ff2267bca9ae56","isAdmin":true,"isDisabled":false,"lastSeenAt":"2021-03-18T17:25:59Z","lastSeenAtAge":"\u003c 1m","authLabels":[]}]
애플리케이션의 X.509 인증서는 사용자 역할에서 허용된 TTL이 지나면 자동으로 만료됩니다. 다음과 같이 명시적으로 제거할 수도 있습니다:
$ tsh apps logout
# Logged out of app "grafana"
애플리케이션 정보#
$ tsh apps config
현재 애플리케이션 URI와 시크릿 경로를 보여줍니다.
이는 (curl 같은) CLI 도구나 (Postman 같은) GUI 도구를 설정할 때 유용합니다.
애플리케이션 정보를 표 형식으로 출력해 보겠습니다:
$ tsh apps config
# Name: grafana
# URI: https://grafana.teleport.example.com:3080
# CA: /Users/alice/.tsh/keys/teleport.example.com/certs.pem
# Cert: /Users/alice/.tsh/keys/teleport.example.com/alice-app/cluster-name/grafana-x509.pem
# Key: /Users/alice/.tsh/keys/teleport.example.com/alice
애플리케이션 설정의 특정 부분만 출력하도록 다양한 --format 값을 지정할 수도 있습니다:
$ tsh apps config --format=uri
# https://grafana-root.gravitational.io:3080
$ tsh apps config --format=ca
# /Users/alice/.tsh/keys/teleport.example.com/certs.pem
$ tsh apps config --format=cert
# /Users/alice/.tsh/keys/teleport.example.com/alice-app/cluster-name/grafana-x509.pem
$ tsh apps config --format=key
# /Users/alice/.tsh/keys/teleport.example.com/alice
이는 적절한 curl 명령어를 구성하는 등의 간단한 템플릿 작성 자동화에 유용할 수 있습니다.
위의 Grafana /api/users 예제를 사용하면 다음과 같습니다:
$ curl --user admin:admin \
--cert $(tsh apps config --format=cert) \
--key $(tsh apps config --format=key) \
$(tsh apps config --format=uri)/api/users