Infograb logo
애플리케이션 액세스를 위한 머신 ID

Teleport는 HTTP 및 TCP 애플리케이션에 대한 액세스를 보호하고 제어합니다. 머신 ID는 이 애플리케이션에 안전하고 단기적인 액세스를 부여하는 데 사용될 수 있습니다.

이 가이드에서는 tbot 을 구성하여 Teleport 클러스터에 등록된 애플리케이션에 액세스하는 데 사용할 수 있는 자격 증명을 생성합니다.

필수 조건

  • 실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.

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

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하십시오.

  • 애플리케이션을 Teleport에 연결하지 않았다면, 애플리케이션 액세스 시작하기 가이드를 따르세요.
  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결할 수 있고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl 명령어를 실행할 수 있습니다.
    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.
  • tbot 은 애플리케이션에 액세스할 머신에 이미 설치되고 구성되어 있어야 합니다. 자세한 내용은 배포 가이드를 참조하세요.

1/3단계. RBAC 구성

먼저, Teleport는 tbot 이 생성한 자격 증명을 사용하여 애플리케이션에 연결할 수 있도록 구성되어야 합니다. 이는 필요한 권한을 부여하는 역할을 생성한 다음 이 역할을 Bot에 할당하여 수행합니다.

다음 내용으로 role.yaml 이라는 파일을 만듭니다:

kind: role
version: v6
metadata:
  name: example-role
spec:
  allow:
    # 모든 애플리케이션에 대한 액세스를 부여합니다.
    app_labels:
      "*": "*"

example-role 을 귀하의 사용 사례와 관련된 설명적인 이름으로 바꿉니다.

이는 모든 애플리케이션에 대한 액세스를 부여합니다. 운영 환경에서는 이 레이블을 수정하여 머신이 필요로 하는 애플리케이션에만 액세스를 부여해야 합니다.

tctl create -f ./role.yaml 을 사용하여 역할을 생성하세요.

이제 tctl bots update 를 사용하여 Bot에 역할을 추가합니다. example 을 배포 가이드에서 생성한 Bot의 이름으로, example-role 을 방금 생성한 역할의 이름으로 바꿉니다:

tctl bots update example --add-roles example-role

2/3단계. tbot 구성

tbot 을 사용하여 클라이언트가 애플리케이션에 액세스할 수 있도록 하는 두 가지 구현 옵션이 있습니다. 선택한 옵션은 특정 요구 사항에 따라 다릅니다.

첫 번째 옵션은 application-tunnel 서비스입니다. 이 서비스는 클라이언트가 연결할 수 있는 로컬 프록시를 운영합니다. 서비스는 자격 증명을 연결에 자동으로 첨부하므로 클라이언트는 클라이언트 인증서를 지원할 필요가 없습니다. 하지만 이 경우 클라이언트가 애플리케이션에 액세스하기 위해서는 tbot 프로세스가 실행 중이어야 합니다.

두 번째 옵션은 application 출력입니다. 이 출력은 TLS 자격 증명을 클라이언트가 읽을 수 있는 대상에 기록합니다. 클라이언트는 클라이언트 인증서를 지원해야 하며, 갱신될 때 디스크에서 다시 로드할 수 있어야 합니다. 또한, 이 옵션은 클라이언트와 Teleport Proxy 서비스 사이에 TLS 종료 로드 밸런서와 호환되지 않습니다. application-tunnel 과 달리 클라이언트가 애플리케이션에 접근하기 위해 tbot 프로세스가 실행 중일 필요는 없으며, 이는 CI/CD 파이프라인에 이상적일 수 있습니다.

어떤 것을 사용할지 확실하지 않다면, 더 많은 클라이언트와 호환되는 application-tunnel 서비스를 사용하는 것을 추천합니다.

application-tunnel 서비스를 구성하려면 먼저 리스너가 바인딩될 위치를 결정하세요. 서비스 리스너에 연결할 수 있는 모든 클라이언트가 애플리케이션에 접근할 수 있으므로, 다른 호스트의 접근을 방지하기 위해 루프백 인터페이스(예: 127.0.0.1 )에 바인딩하는 것이 좋습니다.

tbot 구성을 수정하여 application-tunnel 서비스를 추가합니다:

services:
  - type: application-tunnel
    app_name: dumper
    listen: tcp://127.0.0.1:1234

다음 내용을 바꿉니다:

  • dumper 를 Teleport에 등록한 애플리케이션의 이름으로.
  • listen 을 서비스가 바인딩될 주소와 포트로.

변경 사항을 적용하려면 tbot 을 재시작하세요.

출력은 대상을 지정하도록 구성되어야 합니다. 이 예에서는 directory 대상을 사용합니다. 이 출력은 디스크의 지정된 디렉토리에 아티팩트를 기록합니다. 이 디렉토리는 tbot 이 실행되는 리눅스 사용자가 쓸 수 있어야 하며, 애플리케이션에 접근할 리눅스 사용자가 읽을 수 있어야 합니다.

tbot 구성을 수정하여 application 출력을 추가합니다:

outputs:
  - type: application
    # 자격 증명을 부여할 애플리케이션의 이름을 지정합니다.
    app_name: dumper
    destination:
      type: directory
      # 이 가이드에서는 /opt/machine-id를 대상으로 사용합니다.
      # 이 경로를 사용자 지정할 수 있습니다. 여러 출력은 같은
      # 대상을 공유할 수 없습니다.
      path: /opt/machine-id

dumper 를 Teleport에 등록한 애플리케이션의 이름으로 바꾸는 것을 잊지 마세요.

tbot 을 백그라운드 서비스로 운영하는 경우, 재시작해야 합니다. tbot 을 일회성 모드로 실행하는 경우, 자격 증명을 사용하기 전에 반드시 실행해야 합니다.

3/3단계. 머신 ID ID로 웹 애플리케이션에 연결하기

application-tunnel 서비스가 구성되면, 지정한 리슨 주소를 사용하여 애플리케이션에 연결할 수 있습니다.

예를 들어, curl 을 사용하여 애플리케이션에 접근하려면:

curl http://127.0.0.1:1234/

tbot 가 실행되면, 자격 증명이 지정된 목적지의 디렉토리에 출력됩니다. /opt/machine-id 의 예를 사용하면:

  • /opt/machine-id/tlscert : 클라이언트 TLS 인증서
  • /opt/machine-id/key : TLS 인증서의 개인 키

이 자격 증명은 이를 지원하는 모든 클라이언트 애플리케이션에서 사용할 수 있습니다.

Teleport Proxy는 공개 웹 주소의 서브 도메인을 통해 앱을 사용할 수 있게 합니다. dumper 라는 디버그 애플리케이션과 https://example.teleport.sh:443 의 Teleport Proxy가 있을 경우, 앱은 https://dumper.example.teleport.sh:443 에서 접근할 수 있습니다.

예를 들어, curl 을 사용하여 애플리케이션에 접근하려면:

curl \--cert /opt/machine-id/tlscert \--key /opt/machine-id/key \https://dumper.example.teleport.sh/

유효한 Let's Encrypt 또는 다른 공인 인증 기관의 와일드카드 CA가 구성된 경우, CA 인증서를 지정할 필요는 없습니다.

인증서가 유효하지 않거나 잘못 구성된 경우, 클라이언트는 앱에 접근하려 할 때 Teleport 로그인 페이지로 리디렉션됩니다.

문제 해결

클라이언트 애플리케이션에 표준 확장자가 있는 인증서 요구

자동화된 서비스에서 특정 파일 확장이 있는 TLS 인증서를 요구하는 경우, 출력에 대한 specific_tls_naming 옵션을 활성화할 수 있습니다:

outputs:
  - type: application
    destination:
      type: directory
      path: /opt/machine-id
    app_name: grafana-example
    specific_tls_naming: true

이렇게 하면 /opt/machine-id 에 상기 인증서 파일과 동일한 내용을 가진 tls.crttls.key 가 생성됩니다.

클라이언트가 Teleport 로그인 페이지로 리디렉션됨

인간 사용자와 마찬가지로, 스크립트 클라이언트는 유효한 자격 증명 없이 Teleport Proxy Service를 통해 앱에 접근하려고 할 때 Teleport 로그인 페이지로 리디렉션됩니다.

봇의 인증서가 만료되지 않았는지 확인하고, 클라이언트 애플리케이션이 클라이언트 인증서와 키를 모두 사용하도록 구성되었는지 확인하십시오.

다음 단계

  • 액세스 제어 참조를 검토하여 봇이 접근할 수 있는 애플리케이션 및 기타 Teleport 리소스 제한에 대해 알아보십시오.
  • 추가 로그인 자격 증명의 필요성을 제거하기 위해 JWTs를 애플리케이션에 구성하십시오.
  • 모든 가능한 구성 옵션을 탐색하기 위해 구성 참조를 읽어보십시오.
Teleport 원문 보기