InfoGrab DocsInfoGrab Docs

Teleport로 웹 애플리케이션 보호하기

요약

이 가이드에서는 Teleport를 통해 애플리케이션에 대한 안전한 접근을 구성합니다. 애플리케이션에 대한 접근을 구성하는 과정은 대략적으로 다음 단계로 이루어집니다. 이 가이드에서 시연하는 설정에서는 Teleport Application Service가 보안 토큰을 사용하여 Teleport 클러스터에 조인합니다.

이 가이드에서는 Teleport를 통해 애플리케이션에 대한 안전한 접근을 구성합니다. 이 튜토리얼에서는 Docker 컨테이너 또는 쿠버네티스 클러스터에서 별도의 설정 없이 간편하게 설치하고 실행할 수 있는 Grafana를 예시 애플리케이션으로 사용합니다. 다른 웹 애플리케이션에 대한 접근을 구성하려는 경우, 이 튜토리얼을 일반적인 절차 안내로 활용할 수 있습니다.

애플리케이션에 대한 접근을 구성하는 과정은 대략적으로 다음 단계로 이루어집니다.

  • 환경이 사전 요구사항을 충족하는지 확인합니다.
  • Docker 컨테이너, 쿠버네티스 클러스터 또는 다른 방법을 사용하여 애플리케이션을 실행할 수 있는지 확인합니다.
  • 애플리케이션이 Teleport 클러스터에 조인할 수 있도록 단기 초대 토큰을 생성합니다.
  • 애플리케이션 호스트에 Teleport를 설치하고 구성합니다.
  • 애플리케이션에 대한 접근을 확인하기 위해 사용자를 추가합니다.

작동 방식#

이 가이드에서 시연하는 설정에서는 Teleport Application Service가 보안 토큰을 사용하여 Teleport 클러스터에 조인합니다. 구성 파일을 사용하여 Application Service가 웹 애플리케이션을 보호하도록 구성합니다. Application Service가 클러스터에 조인한 후에는 Teleport Proxy Service가 최종 사용자의 요청을 Teleport Application Service로 라우팅하고, Application Service의 응답을 다시 최종 사용자에게 전달합니다.

Application Service는 요청에 포함된 JSON 웹 토큰(JWT)을 Teleport Auth Service가 관리하는 CA와 대조하여 검증함으로써 사용자 요청을 인증합니다. 요청하는 사용자의 역할은 JWT에 인코딩되어 있으므로, Application Service는 해당 사용자가 Teleport로 보호되는 애플리케이션에 요청을 보낼 권한이 있는지 여부를 판단할 수 있습니다.

사전 요구사항#

이 튜토리얼을 진행하려면 환경이 다음 요구사항을 충족하는지 확인하세요.

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.

  • tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Teleport 클러스터의 버전을 확인합니다. tctl and tsh clients는 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')"
      
    2. 사용 중인 플랫폼에 대한 지침에 따라 tctl and tsh clients를 설치합니다:

Mac

     `tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
 
     ```code
     $ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
     ```

     Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
 
     
Warning
       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 명령을 실행할 수도 있습니다.

  • Teleport Application Service를 실행할 호스트.
  • Grafana를 실행할 Docker 컨테이너 또는 쿠버네티스 클러스터.

서브도메인과 애플리케이션#

Teleport Application Service가 웹 애플리케이션으로 트래픽을 프록시하면, Teleport Proxy Service는 다음 URL에서 애플리케이션을 사용할 수 있게 합니다.

https://.

예를 들어 Teleport 도메인 이름이 teleport.example.com인 경우, my-app이라는 애플리케이션은 https://my-app.teleport.example.com에서 사용할 수 있습니다. Proxy Service는 브라우저가 인증 기관에 대해 검증할 수 있는, 이 도메인 이름에 대한 TLS 인증서를 제시해야 합니다.

Teleport Enterprise (Cloud)를 사용하는 경우, 이 도메인 이름에 대한 DNS 레코드와 TLS 인증서가 자동으로 프로비저닝됩니다. Teleport를 셀프 호스팅하는 경우에는 이를 직접 구성해야 합니다.

  1. 다음 중 하나를 생성합니다.

    • Teleport Proxy Service 도메인의 와일드카드 서브도메인(예: *.teleport.example.com)을 Teleport Proxy Service의 IP 주소와 연결하는 DNS A 레코드.
    • Proxy Service 도메인의 와일드카드 서브도메인(예: *.teleport.example.com)을 Teleport Proxy Service의 도메인 이름과 연결하는 DNS CNAME 레코드.
  2. 시스템이 Teleport에 등록된 애플리케이션용 TLS 인증서를 프로비저닝하는지 확인합니다. 사용할 방법은 셀프 호스팅 Teleport 배포에서 원래 TLS를 설정한 방식에 따라 다르며, 이 가이드의 범위를 벗어납니다.

    일반적으로 Proxy Service의 웹 주소(예: teleport.example.com)에 대해 서명된 TLS 인증서를 프로비저닝하는 시스템은 애플리케이션에 사용되는 와일드카드 주소(예: *.teleport.example.com)에 대한 인증서도 프로비저닝해야 합니다.

등록된 애플리케이션의 Teleport 클러스터 서브도메인을 애플리케이션 자체 호스트에 매핑하는 DNS 레코드를 생성하지 않도록 주의하십시오. 그렇게 하면 애플리케이션으로 이동하려는 시도가 실패합니다.

권한#

이 튜토리얼은 Teleport 클러스터와 애플리케이션이 실행되는 로컬 컴퓨터, Docker 컨테이너 또는 쿠버네티스 구성에 대한 관리자 권한이 있다고 가정합니다.

이 튜토리얼에서 사용하는 권한은 시연 목적으로만 사용됩니다. 프로덕션 환경에서 Teleport를 실행하기 전에 보안 사고를 방지하기 위한 모범 사례를 따르고 있는지 확인해야 합니다.

프로덕션 보안 모범 사례

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

  • 꼭 필요한 경우가 아니면 프로덕션 환경에서 sudo 사용을 피하십시오.
  • 새로운 non-root 사용자를 생성하고, Teleport를 테스트할 때는 테스트 인스턴스를 사용하십시오.
  • 필요한 경우가 아니면 Teleport의 서비스를 non-root 사용자로 실행하십시오. root 접근이 필요한 것은 SSH Service뿐입니다. Teleport가 1024보다 작은 번호의 포트(예: 443)에서 수신 대기하도록 하려면 root 권한(또는 CAP_NET_BIND_SERVICE 기능)이 필요하다는 점에 유의하십시오.
  • 최소 권한의 원칙을 따르십시오. 더 제한적인 역할로 충분한 경우 사용자에게 허용 범위가 넓은 역할을 부여하지 마십시오. 예를 들어, 모든 클러스터 리소스에 접근하고 편집할 수 있는 권한을 부여하는 내장 access,editor 역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에게 필요한 최소한의 권한으로 역할을 정의하고, 일시적으로 상승된 권한을 제공하기 위해 Access Request를 구성하십시오.
  • Teleport 리소스(예: 새 데이터베이스나 애플리케이션)를 등록할 때는 초대 토큰을 파일에 저장해야 합니다. 토큰을 명령줄에 직접 입력하면, 악의적인 사용자가 침해된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 사례가 문서에서 사용된 예시에 반드시 반영되어 있는 것은 아니라는 점에 유의하십시오. 문서의 예시는 주로 시연 및 개발 환경을 위한 것입니다.

1/5단계. 토큰 생성#

Teleport Application Service 인스턴스가 클러스터에 조인할 수 있도록 인가하려면 초대 토큰이 필요합니다. 단기 조인 토큰을 생성하여 Teleport Application Service를 실행할 호스트에 저장하세요. 예를 들어 Teleport Auth Service가 실행 중인 서버에서 다음 명령을 실행하여 초대 토큰을 생성할 수 있습니다.

$ tctl tokens add \
    --type=app \
    --app-name=grafana \
    --app-uri=http://localhost:3000

이 명령의 출력 결과를 복사하여 Teleport Application Service에 전달할 수 있도록 별도의 파일에 토큰을 저장하세요.

2/5단계. Grafana 시작#

적절한 절차에 따라 Docker 컨테이너 또는 쿠버네티스 클러스터에서 Grafana를 시작할 수 있습니다.

Docker 컨테이너에서 Grafana를 시작하려면 다음을 수행합니다.

  1. Docker가 설치된 컴퓨터에서 터미널을 엽니다.

  2. 다음 명령을 실행하여 Grafana를 시작합니다.

    $ docker run --detach --name grafana --publish 3000:3000 grafana/grafana
    
  3. 컨테이너 내의 /etc/grafana/grafana.ini 파일을 편집하여 Teleport 클러스터의 주소를 사용하도록 설정합니다.

    [server] 섹션에서 domain 키의 주석 처리를 해제하고 값을 Teleport 클러스터의 주소로 설정하세요. 예를 들면 다음과 같습니다.

    # The public facing domain name used to access grafana from a browser
    domain = teleport.example.com
    

    컨테이너 내에서 이 파일을 편집할 수 없는 경우, sed 명령을 사용하여 파일을 편집할 수 있습니다. 예를 들면 다음과 같습니다.

    $ docker exec --user 0 grafana sed -i \
      's/;domain = localhost/domain = teleport.example.com/g' \
      /etc/grafana/grafana.ini
    

다음 helm 지침에 따라 Grafana를 설치하면 쿠버네티스 클러스터 내에서 http://example-grafana.example-grafana.svc.cluster.local로 접근할 수 있습니다.

$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update
$ helm install example-grafana grafana/grafana \
    --create-namespace \
    --namespace example-grafana

3/5단계. Teleport 설치 및 구성#

Teleport 에디션을 선택한 다음, 사용 중인 환경에 맞는 설치 지침을 따르세요.

Linux에 설치하려면:

Linux 서버에 Teleport Agent를 설치하려면:

권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.

  1. teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오.

  2. 클러스터의 설치 스크립트를 실행하십시오:

    $ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
    
  3. 다음과 유사한 명령을 사용하여 /etc/app_config.yaml 위치에 Grafana용 구성 파일을 생성합니다.

    $ sudo teleport configure \
      --output=file \
      --proxy=teleport.example.com:443 \
      --token=/tmp/token \
      --roles=app \
      --app-name=grafana \
      --app-uri=http://localhost:3000
    
    • --proxy 명령줄 옵션을 Teleport 클러스터의 주소로 설정합니다 (예: teleport.example.com 또는 mytenant.teleport.sh).
    • --token 명령줄 옵션을 앞서 생성한 초대 토큰을 저장한 Application Service 호스트의 파일 위치로 설정합니다.
    • 다른 웹 애플리케이션에 대한 접근을 구성하는 경우 --app-name--app-uri 명령줄 옵션을 변경합니다.

systemd 서비스를 생성하여 호스트가 부팅될 때 the Teleport Application Service이 자동으로 시작되도록 구성합니다. 지침은 the Teleport Application Service을 어떻게 설치했는지에 따라 다릅니다.

Package Manager

the Teleport Application Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:

$ sudo systemctl enable teleport
$ sudo systemctl start teleport

TAR Archive

the Teleport Application Service을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:

$ sudo teleport install systemd -o /etc/systemd/system/teleport.service
$ sudo systemctl enable teleport
$ sudo systemctl start teleport

systemctl status teleport로 the Teleport Application Service의 상태를 확인하고 journalctl -fu teleport로 로그를 볼 수 있습니다.

Teleport Helm 리포지토리에서 Teleport 차트를 가져오도록 Helm을 구성하십시오.

$ helm repo add teleport (=teleport.helm_repo_url=)

최신 차트를 가져와 로컬 Helm 캐시를 새로 고치십시오.

$ helm repo update

다음과 유사한 명령을 사용하여 teleport-kube-agent Helm 차트를 쿠버네티스 클러스터에 설치하여 Grafana를 프록시합니다.

$ JOIN_TOKEN=$(cat /tmp/token)
$ helm install teleport-kube-agent teleport/teleport-kube-agent \
  --create-namespace \
  --namespace teleport-agent \
  --set roles=app \
  --set proxyAddr=teleport.example.com:443 \
  --set authToken=${JOIN_TOKEN?} \
  --set "apps[0].name=grafana" \
  --set "apps[0].uri=http://example-grafana.example-grafana.svc.cluster.local" \
  --set "apps[0].labels.env=dev" \
  --version (=teleport.version=)
  • proxyAddr을 Teleport 클러스터의 주소로 설정합니다(예: teleport.example.com 또는 mytenant.teleport.sh).
  • -authToken을 이전에 생성한 초대 토큰으로 설정합니다.
  • 다른 웹 애플리케이션에 대한 접근을 구성하는 경우 apps[0].nameapps[0].uri를 변경합니다.

Teleport Agent 파드가 실행 중인지 확인하세요. 다음과 같이 준비 완료된 컨테이너 하나가 포함된 teleport-kube-agent 파드가 표시되어야 합니다.

$ kubectl -n teleport-agent get pods
NAME                    READY   STATUS    RESTARTS   AGE
teleport-kube-agent-0   1/1     Running   0          32s

4/5단계. 사용자 생성#

이제 애플리케이션을 Teleport로 보호되는 리소스로 등록했으므로, 애플리케이션에 대한 접근을 테스트하기 위한 사용자를 생성할 수 있습니다. Teleport에는 클러스터 리소스에 대한 접근을 허용하는 access라는 내장 역할이 있습니다.

access 역할을 alice라는 새 로컬 사용자에게 할당하려면 다음 명령을 실행합니다.

$ tctl users add --roles=access alice

이 명령은 새 사용자를 위한 초대 URL을 생성합니다. 이 URL을 사용하여 비밀번호를 선택하고, 다단계 인증을 설정하고, Teleport Web UI에 로그인할 수 있습니다.

5/5단계. 애플리케이션 접근#

프록시된 애플리케이션에 접근하는 방법은 몇 가지가 있습니다.

브라우저 사용#

Teleport 클러스터 주소를 사용하여 Teleport Web UI에 로그인하세요. 사용 가능한 모든 애플리케이션은 Applications 탭에 표시됩니다. Grafana 애플리케이션 타일에서 Launch를 클릭하여 접근합니다.

또는 애플리케이션 이름을 서브도메인으로 사용하여 애플리케이션을 직접 호출할 수 있습니다. 예를 들어 https://grafana.teleport.example.com 또는 https://grafana.mytenant.teleport.sh와 같이 호출할 수 있습니다. 아직 인증되지 않은 경우 로그인하라는 메시지가 표시됩니다.

CLI 클라이언트 사용#

명령줄 도구와 스크립트를 사용하여 Teleport로 보호되는 웹 애플리케이션에 접근할 수 있습니다. 이를 위해서는 애플리케이션에 대한 단기 X.509 인증서를 가져와야 합니다. Teleport는 이 인증서를 사용하여 요청을 인증합니다. 다음 명령을 실행하세요.

$ tsh apps login grafana

출력에는 대상 애플리케이션의 API를 호출하는 데 사용할 수 있는 curl 명령 예시가 표시됩니다. 이 curl 명령에는 API 호출을 인증하는 데 사용할 인증서와 개인 키의 파일 경로가 표시됩니다.

다음 단계#

다음 주제에서 Teleport로 애플리케이션을 보호하는 방법에 대해 자세히 알아보세요.

Teleport로 웹 애플리케이션 보호하기

Teleport v18.9
원문 보기
요약

이 가이드에서는 Teleport를 통해 애플리케이션에 대한 안전한 접근을 구성합니다. 애플리케이션에 대한 접근을 구성하는 과정은 대략적으로 다음 단계로 이루어집니다. 이 가이드에서 시연하는 설정에서는 Teleport Application Service가 보안 토큰을 사용하여 Teleport 클러스터에 조인합니다.

이 가이드에서는 Teleport를 통해 애플리케이션에 대한 안전한 접근을 구성합니다. 이 튜토리얼에서는 Docker 컨테이너 또는 쿠버네티스 클러스터에서 별도의 설정 없이 간편하게 설치하고 실행할 수 있는 Grafana를 예시 애플리케이션으로 사용합니다. 다른 웹 애플리케이션에 대한 접근을 구성하려는 경우, 이 튜토리얼을 일반적인 절차 안내로 활용할 수 있습니다.

애플리케이션에 대한 접근을 구성하는 과정은 대략적으로 다음 단계로 이루어집니다.

  • 환경이 사전 요구사항을 충족하는지 확인합니다.
  • Docker 컨테이너, 쿠버네티스 클러스터 또는 다른 방법을 사용하여 애플리케이션을 실행할 수 있는지 확인합니다.
  • 애플리케이션이 Teleport 클러스터에 조인할 수 있도록 단기 초대 토큰을 생성합니다.
  • 애플리케이션 호스트에 Teleport를 설치하고 구성합니다.
  • 애플리케이션에 대한 접근을 확인하기 위해 사용자를 추가합니다.

작동 방식#

이 가이드에서 시연하는 설정에서는 Teleport Application Service가 보안 토큰을 사용하여 Teleport 클러스터에 조인합니다. 구성 파일을 사용하여 Application Service가 웹 애플리케이션을 보호하도록 구성합니다. Application Service가 클러스터에 조인한 후에는 Teleport Proxy Service가 최종 사용자의 요청을 Teleport Application Service로 라우팅하고, Application Service의 응답을 다시 최종 사용자에게 전달합니다.

Application Service는 요청에 포함된 JSON 웹 토큰(JWT)을 Teleport Auth Service가 관리하는 CA와 대조하여 검증함으로써 사용자 요청을 인증합니다. 요청하는 사용자의 역할은 JWT에 인코딩되어 있으므로, Application Service는 해당 사용자가 Teleport로 보호되는 애플리케이션에 요청을 보낼 권한이 있는지 여부를 판단할 수 있습니다.

사전 요구사항#

이 튜토리얼을 진행하려면 환경이 다음 요구사항을 충족하는지 확인하세요.

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.

  • tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Teleport 클러스터의 버전을 확인합니다. tctl and tsh clients는 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')"
      
    2. 사용 중인 플랫폼에 대한 지침에 따라 tctl and tsh clients를 설치합니다:

Mac

     `tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
 
     ```code
     $ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
     ```

     Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
 
     
Warning
       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 명령을 실행할 수도 있습니다.

  • Teleport Application Service를 실행할 호스트.
  • Grafana를 실행할 Docker 컨테이너 또는 쿠버네티스 클러스터.

서브도메인과 애플리케이션#

Teleport Application Service가 웹 애플리케이션으로 트래픽을 프록시하면, Teleport Proxy Service는 다음 URL에서 애플리케이션을 사용할 수 있게 합니다.

https://.

예를 들어 Teleport 도메인 이름이 teleport.example.com인 경우, my-app이라는 애플리케이션은 https://my-app.teleport.example.com에서 사용할 수 있습니다. Proxy Service는 브라우저가 인증 기관에 대해 검증할 수 있는, 이 도메인 이름에 대한 TLS 인증서를 제시해야 합니다.

Teleport Enterprise (Cloud)를 사용하는 경우, 이 도메인 이름에 대한 DNS 레코드와 TLS 인증서가 자동으로 프로비저닝됩니다. Teleport를 셀프 호스팅하는 경우에는 이를 직접 구성해야 합니다.

  1. 다음 중 하나를 생성합니다.

    • Teleport Proxy Service 도메인의 와일드카드 서브도메인(예: *.teleport.example.com)을 Teleport Proxy Service의 IP 주소와 연결하는 DNS A 레코드.
    • Proxy Service 도메인의 와일드카드 서브도메인(예: *.teleport.example.com)을 Teleport Proxy Service의 도메인 이름과 연결하는 DNS CNAME 레코드.
  2. 시스템이 Teleport에 등록된 애플리케이션용 TLS 인증서를 프로비저닝하는지 확인합니다. 사용할 방법은 셀프 호스팅 Teleport 배포에서 원래 TLS를 설정한 방식에 따라 다르며, 이 가이드의 범위를 벗어납니다.

    일반적으로 Proxy Service의 웹 주소(예: teleport.example.com)에 대해 서명된 TLS 인증서를 프로비저닝하는 시스템은 애플리케이션에 사용되는 와일드카드 주소(예: *.teleport.example.com)에 대한 인증서도 프로비저닝해야 합니다.

등록된 애플리케이션의 Teleport 클러스터 서브도메인을 애플리케이션 자체 호스트에 매핑하는 DNS 레코드를 생성하지 않도록 주의하십시오. 그렇게 하면 애플리케이션으로 이동하려는 시도가 실패합니다.

권한#

이 튜토리얼은 Teleport 클러스터와 애플리케이션이 실행되는 로컬 컴퓨터, Docker 컨테이너 또는 쿠버네티스 구성에 대한 관리자 권한이 있다고 가정합니다.

이 튜토리얼에서 사용하는 권한은 시연 목적으로만 사용됩니다. 프로덕션 환경에서 Teleport를 실행하기 전에 보안 사고를 방지하기 위한 모범 사례를 따르고 있는지 확인해야 합니다.

프로덕션 보안 모범 사례

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

  • 꼭 필요한 경우가 아니면 프로덕션 환경에서 sudo 사용을 피하십시오.
  • 새로운 non-root 사용자를 생성하고, Teleport를 테스트할 때는 테스트 인스턴스를 사용하십시오.
  • 필요한 경우가 아니면 Teleport의 서비스를 non-root 사용자로 실행하십시오. root 접근이 필요한 것은 SSH Service뿐입니다. Teleport가 1024보다 작은 번호의 포트(예: 443)에서 수신 대기하도록 하려면 root 권한(또는 CAP_NET_BIND_SERVICE 기능)이 필요하다는 점에 유의하십시오.
  • 최소 권한의 원칙을 따르십시오. 더 제한적인 역할로 충분한 경우 사용자에게 허용 범위가 넓은 역할을 부여하지 마십시오. 예를 들어, 모든 클러스터 리소스에 접근하고 편집할 수 있는 권한을 부여하는 내장 access,editor 역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에게 필요한 최소한의 권한으로 역할을 정의하고, 일시적으로 상승된 권한을 제공하기 위해 Access Request를 구성하십시오.
  • Teleport 리소스(예: 새 데이터베이스나 애플리케이션)를 등록할 때는 초대 토큰을 파일에 저장해야 합니다. 토큰을 명령줄에 직접 입력하면, 악의적인 사용자가 침해된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 사례가 문서에서 사용된 예시에 반드시 반영되어 있는 것은 아니라는 점에 유의하십시오. 문서의 예시는 주로 시연 및 개발 환경을 위한 것입니다.

1/5단계. 토큰 생성#

Teleport Application Service 인스턴스가 클러스터에 조인할 수 있도록 인가하려면 초대 토큰이 필요합니다. 단기 조인 토큰을 생성하여 Teleport Application Service를 실행할 호스트에 저장하세요. 예를 들어 Teleport Auth Service가 실행 중인 서버에서 다음 명령을 실행하여 초대 토큰을 생성할 수 있습니다.

$ tctl tokens add \
    --type=app \
    --app-name=grafana \
    --app-uri=http://localhost:3000

이 명령의 출력 결과를 복사하여 Teleport Application Service에 전달할 수 있도록 별도의 파일에 토큰을 저장하세요.

2/5단계. Grafana 시작#

적절한 절차에 따라 Docker 컨테이너 또는 쿠버네티스 클러스터에서 Grafana를 시작할 수 있습니다.

Docker 컨테이너에서 Grafana를 시작하려면 다음을 수행합니다.

  1. Docker가 설치된 컴퓨터에서 터미널을 엽니다.

  2. 다음 명령을 실행하여 Grafana를 시작합니다.

    $ docker run --detach --name grafana --publish 3000:3000 grafana/grafana
    
  3. 컨테이너 내의 /etc/grafana/grafana.ini 파일을 편집하여 Teleport 클러스터의 주소를 사용하도록 설정합니다.

    [server] 섹션에서 domain 키의 주석 처리를 해제하고 값을 Teleport 클러스터의 주소로 설정하세요. 예를 들면 다음과 같습니다.

    # The public facing domain name used to access grafana from a browser
    domain = teleport.example.com
    

    컨테이너 내에서 이 파일을 편집할 수 없는 경우, sed 명령을 사용하여 파일을 편집할 수 있습니다. 예를 들면 다음과 같습니다.

    $ docker exec --user 0 grafana sed -i \
      's/;domain = localhost/domain = teleport.example.com/g' \
      /etc/grafana/grafana.ini
    

다음 helm 지침에 따라 Grafana를 설치하면 쿠버네티스 클러스터 내에서 http://example-grafana.example-grafana.svc.cluster.local로 접근할 수 있습니다.

$ helm repo add grafana https://grafana.github.io/helm-charts
$ helm repo update
$ helm install example-grafana grafana/grafana \
    --create-namespace \
    --namespace example-grafana

3/5단계. Teleport 설치 및 구성#

Teleport 에디션을 선택한 다음, 사용 중인 환경에 맞는 설치 지침을 따르세요.

Linux에 설치하려면:

Linux 서버에 Teleport Agent를 설치하려면:

권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.

  1. teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오.

  2. 클러스터의 설치 스크립트를 실행하십시오:

    $ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
    
  3. 다음과 유사한 명령을 사용하여 /etc/app_config.yaml 위치에 Grafana용 구성 파일을 생성합니다.

    $ sudo teleport configure \
      --output=file \
      --proxy=teleport.example.com:443 \
      --token=/tmp/token \
      --roles=app \
      --app-name=grafana \
      --app-uri=http://localhost:3000
    
    • --proxy 명령줄 옵션을 Teleport 클러스터의 주소로 설정합니다 (예: teleport.example.com 또는 mytenant.teleport.sh).
    • --token 명령줄 옵션을 앞서 생성한 초대 토큰을 저장한 Application Service 호스트의 파일 위치로 설정합니다.
    • 다른 웹 애플리케이션에 대한 접근을 구성하는 경우 --app-name--app-uri 명령줄 옵션을 변경합니다.

systemd 서비스를 생성하여 호스트가 부팅될 때 the Teleport Application Service이 자동으로 시작되도록 구성합니다. 지침은 the Teleport Application Service을 어떻게 설치했는지에 따라 다릅니다.

Package Manager

the Teleport Application Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:

$ sudo systemctl enable teleport
$ sudo systemctl start teleport

TAR Archive

the Teleport Application Service을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:

$ sudo teleport install systemd -o /etc/systemd/system/teleport.service
$ sudo systemctl enable teleport
$ sudo systemctl start teleport

systemctl status teleport로 the Teleport Application Service의 상태를 확인하고 journalctl -fu teleport로 로그를 볼 수 있습니다.

Teleport Helm 리포지토리에서 Teleport 차트를 가져오도록 Helm을 구성하십시오.

$ helm repo add teleport (=teleport.helm_repo_url=)

최신 차트를 가져와 로컬 Helm 캐시를 새로 고치십시오.

$ helm repo update

다음과 유사한 명령을 사용하여 teleport-kube-agent Helm 차트를 쿠버네티스 클러스터에 설치하여 Grafana를 프록시합니다.

$ JOIN_TOKEN=$(cat /tmp/token)
$ helm install teleport-kube-agent teleport/teleport-kube-agent \
  --create-namespace \
  --namespace teleport-agent \
  --set roles=app \
  --set proxyAddr=teleport.example.com:443 \
  --set authToken=${JOIN_TOKEN?} \
  --set "apps[0].name=grafana" \
  --set "apps[0].uri=http://example-grafana.example-grafana.svc.cluster.local" \
  --set "apps[0].labels.env=dev" \
  --version (=teleport.version=)
  • proxyAddr을 Teleport 클러스터의 주소로 설정합니다(예: teleport.example.com 또는 mytenant.teleport.sh).
  • -authToken을 이전에 생성한 초대 토큰으로 설정합니다.
  • 다른 웹 애플리케이션에 대한 접근을 구성하는 경우 apps[0].nameapps[0].uri를 변경합니다.

Teleport Agent 파드가 실행 중인지 확인하세요. 다음과 같이 준비 완료된 컨테이너 하나가 포함된 teleport-kube-agent 파드가 표시되어야 합니다.

$ kubectl -n teleport-agent get pods
NAME                    READY   STATUS    RESTARTS   AGE
teleport-kube-agent-0   1/1     Running   0          32s

4/5단계. 사용자 생성#

이제 애플리케이션을 Teleport로 보호되는 리소스로 등록했으므로, 애플리케이션에 대한 접근을 테스트하기 위한 사용자를 생성할 수 있습니다. Teleport에는 클러스터 리소스에 대한 접근을 허용하는 access라는 내장 역할이 있습니다.

access 역할을 alice라는 새 로컬 사용자에게 할당하려면 다음 명령을 실행합니다.

$ tctl users add --roles=access alice

이 명령은 새 사용자를 위한 초대 URL을 생성합니다. 이 URL을 사용하여 비밀번호를 선택하고, 다단계 인증을 설정하고, Teleport Web UI에 로그인할 수 있습니다.

5/5단계. 애플리케이션 접근#

프록시된 애플리케이션에 접근하는 방법은 몇 가지가 있습니다.

브라우저 사용#

Teleport 클러스터 주소를 사용하여 Teleport Web UI에 로그인하세요. 사용 가능한 모든 애플리케이션은 Applications 탭에 표시됩니다. Grafana 애플리케이션 타일에서 Launch를 클릭하여 접근합니다.

또는 애플리케이션 이름을 서브도메인으로 사용하여 애플리케이션을 직접 호출할 수 있습니다. 예를 들어 https://grafana.teleport.example.com 또는 https://grafana.mytenant.teleport.sh와 같이 호출할 수 있습니다. 아직 인증되지 않은 경우 로그인하라는 메시지가 표시됩니다.

CLI 클라이언트 사용#

명령줄 도구와 스크립트를 사용하여 Teleport로 보호되는 웹 애플리케이션에 접근할 수 있습니다. 이를 위해서는 애플리케이션에 대한 단기 X.509 인증서를 가져와야 합니다. Teleport는 이 인증서를 사용하여 요청을 인증합니다. 다음 명령을 실행하세요.

$ tsh apps login grafana

출력에는 대상 애플리케이션의 API를 호출하는 데 사용할 수 있는 curl 명령 예시가 표시됩니다. 이 curl 명령에는 API 호출을 인증하는 데 사용할 인증서와 개인 키의 파일 경로가 표시됩니다.

다음 단계#

다음 주제에서 Teleport로 애플리케이션을 보호하는 방법에 대해 자세히 알아보세요.