인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Teleport 애플리케이션 액세스를 이용한 REST API 접근
Teleport 애플리케이션 서비스는 curl 또는 Postman과 같은 도구를 사용하여 애플리케이션의 (REST 또는 Teleport의 gRPC) API에 접근하는 데 사용될 수 있습니다.
비 HTTP API 지원
비 HTTP API(예: gRPC)에는 TCP 애플리케이션 액세스를 사용하십시오.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
-
연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오.예를 들어:
tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결할 수 있고
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다. -
단순함을 위해, 우리는 Docker 컨테이너에서 실행되는 Grafana를 사용하고 API 쿼리를 실행합니다. 다음의 단일 Docker 명령을 통해 Grafana를 실행할 수 있습니다:
docker run -d -p 3000:3000 grafana/grafana
Teleport 클러스터에 Grafana를 연결하려면 Teleport App Service YAML 구성 파일에 다음 섹션을 추가하십시오:
app_service:
enabled: yes
apps:
- name: "grafana"
description: "테스트 Grafana 서버"
uri: "http://localhost:3000"
labels:
"env": "dev"
API 접근하기
Teleport 클러스터에 로그인하고 사용 가능한 애플리케이션을 확인하십시오:
tsh login --proxy=teleport.example.comtsh apps ls애플리케이션 설명 공개 주소 레이블
------------ -------------- ---------------------------- -------
grafana 테스트 Grafana 서버 grafana.teleport.example.com env=dev
애플리케이션의 단기 X.509 인증서를 가져옵니다:
tsh apps login grafana앱 grafana에 로그인했습니다. 예제 curl 명령:
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
명령을 보여줍니다.
CA 및 키 쌍 파일
명령에서 사용자의 인증서/키 쌍 경로를 주의 깊게 확인하십시오 - curl
은 클라이언트 인증서를 사용하여 Teleport에 인증합니다.
Teleport 프록시 서비스는 일반적으로 Let's Encrypt와 같은 공개 인증 기관에서 발급한 와일드카드 인증서로 구성됩니다. 자체 호스팅된 Teleport 클러스터를 실행 중이고 Teleport 프록시 서비스가 셀프 서명된 인증서를 사용하도록 구성된 경우, curl
명령에서 --cacert <path>
를 사용하여 이를 포함해야 합니다.
Grafana의 API는 인증이 필요하므로, curl
명령을 업데이트하여 기본 인증 정보를 제공하고 기본 Grafana 사용자 이름/비밀번호를 사용하여 /api/users
엔드포인트를 호출하겠습니다:
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앱 "grafana"에서 로그아웃했습니다.
애플리케이션 정보
tsh apps config
현재 앱 URI와 비밀의 경로를 보여줍니다.
이는 CLI 도구(예: curl
) 또는 GUI 도구(예: Postman)를 구성할 때 유용합니다.
앱 정보를 표 형식으로 출력해 보겠습니다:
tsh apps config이름: 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=urihttps://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