Infograb logo
Teleport 애플리케이션 액세스 시작하기

이 튜토리얼은 Teleport를 통해 애플리케이션에 대한 안전한 액세스를 구성하는 방법을 보여줍니다. 이 튜토리얼은 Grafana를 샘플 애플리케이션으로 사용합니다. 왜냐하면 Docker 컨테이너나 Kubernetes 클러스터에서 간단하게 설치하고 실행할 수 있으며 추가 구성이 필요하지 않기 때문입니다. 다른 웹 애플리케이션에 대한 액세스를 구성하고 싶다면, 이 튜토리얼을 일반 가이드로 사용하여 필요한 작업을 수행할 수 있습니다.

전반적으로 애플리케이션에 대한 액세스를 구성하는 것은 다음 단계로 이루어집니다:

  • 환경이 필수 조건을 충족하는지 확인하세요.
  • Docker 컨테이너, Kubernetes 클러스터 또는 다른 방법을 사용하여 애플리케이션을 실행할 수 있는지 확인하세요.
  • 애플리케이션이 Teleport 클러스터에 가입하기 위한 단기 초대 토큰을 생성하세요.
  • 애플리케이션 호스트에 Teleport를 설치하고 구성하세요.
  • 애플리케이션에 대한 액세스를 검증할 사용자 추가하세요.

필수 조건

이 튜토리얼을 위해 환경이 다음 요구 사항을 충족하는지 확인하세요:

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

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

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.
  • Teleport 애플리케이션 서비스를 실행할 호스트.
  • Grafana를 실행하기 위한 Docker 컨테이너 또는 Kubernetes 클러스터.

서브 도메인 및 애플리케이션

Teleport은 애플리케이션 접근을 위해 구성한 각 애플리케이션에 서브도메인을 할당합니다. 예를 들어, Grafana를 리소스로 등록하면 Teleport은 리소스를 grafana.teleport.example.com 서브도메인에 할당합니다.

Teleport 클러스터를 자체 네트워크에서 호스팅하는 경우, 애플리케이션 서브도메인을 반영하도록 DNS 구성을 업데이트해야 합니다.
DNS를 업데이트하는 방법은 두 가지가 있습니다:

  • 서브도메인 이름에 대한 와일드카드 치환을 사용하여 단일 DNS 주소(A) 또는 정식 이름(CNAME) 레코드를 생성합니다. 예를 들어, *.teleport.example.com이라는 이름으로 DNS 레코드를 생성합니다.
  • 각 애플리케이션 서브도메인에 대해 별도의 DNS 주소(A) 또는 정식 이름(CNAME) 레코드를 생성합니다.

DNS 수정은 인증 기관(예: Let's Encrypt)이 각 서브도메인에 대해 인증서를 발급할 수 있도록 하며, 클라이언트가 접근하는 애플리케이션에 관계없이 Teleport 호스트를 확인할 수 있도록 합니다.

Teleport 클라우드 플랫폼을 사용하는 경우, DNS 업데이트가 필요하지 않습니다. 왜냐하면 Teleport 클러스터가 자동으로 서브도메인과 서명된 TLS 인증서를 제공하기 때문입니다.

권한 및 허가

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

이 튜토리얼에서 사용되는 권한은 데모용입니다. 프로덕션 환경에서 Teleport를 실행하기 전에 보안 사고를 방지하기 위한 최선의 관행을 따르고 있는지 확인해야 합니다.

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

  • 필요한 경우가 아니면 프로덕션 환경에서 sudo 사용을 피하세요.
  • 새로운 비루트 사용자 계정을 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하세요.
  • 필요하지 않는 한 비루트 사용자로서 Teleport의 서비스를 실행하세요. SSH 서비스만 루트 접근을 필요로 합니다. Teleport가 1024보다 작은 포트(예: 443)에서 수신 대기하도록 하려면 루트 권한(또는 CAP_NET_BIND_SERVICE 권한)이 필요합니다.
  • 최소 권한 원칙을 따르세요. 더 제한적인 역할로도 충분할 때 사용자의 권한을 허용하는 역할을 부여하지 마세요. 예를 들어, 사용자가 모든 클러스터 리소스에 액세스하고 편집할 수 있는 내장된 access,editor 역할을 부여하지 마세요. 대신 각 사용자에게 필요한 최소 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 권한을 상승시켜주세요.
  • Teleport 리소스를 등록할 때(예: 새로운 데이터베이스나 응용 프로그램) 초대 토큰을 파일에 저장해야 합니다. 명령행에 토큰을 직접 입력하면 악의적인 사용자가 손상된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 관행이 문서에서 사용되는 예제에 반드시 반영되지 않는 점에 유의해야 합니다. 문서의 예제는 주로 시연 및 개발 환경을 위한 것입니다.

1/5 단계. 토큰 생성

초대 토큰은 Teleport 애플리케이션 서비스 인스턴스가 클러스터에 가입하도록 권한을 부여하는 데 필요합니다. 단기 가입 토큰을 생성하고 Teleport 애플리케이션 서비스를 실행할 호스트에 저장하세요. 예를 들어, Teleport Auth 서비스가 실행되는 서버에서 다음 명령을 실행하여 초대 토큰을 생성할 수 있습니다:

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

이 명령의 출력을 복사하고 토큰을 다른 파일에 저장하여 Telemetry 애플리케이션 서비스에 전달할 수 있도록 하세요.

2/5 단계. Grafana 시작하기

Docker 컨테이너 또는 Kubernetes 클러스터에서 적절한 단계를 따라 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 클러스터의 주소로 값을 설정하세요. 예를 들어:

    브라우저에서 grafana에 접근하기 위한 공개 도메인 이름

    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를 설치하면, Kubernetes 클러스터 내에서 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 에디션을 선택한 후, 설치 지침에 따라 환경을 구성합니다.

리눅스에 설치하려면:

  1. Linux 서버에 Teleport 설치하기:

    1. Teleport 에디션에 따라 edition을(를) 다음 중 하나로 지정합니다:

      에디션
      Teleport Enterprise Cloudcloud
      Teleport Enterprise (자체 호스팅)enterprise
      Teleport Community Editionoss
    2. 설치할 Teleport의 버전을 확인합니다. 클러스터에서 자동 에이전트 업데이트가 활성화되어 있는 경우, 업데이터와 호환되는 최신 Teleport 버전을 쿼리합니다:

      TELEPORT_DOMAIN=example.teleport.com
      TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"

      그렇지 않으면, Teleport 클러스터의 버전을 확인합니다:

      TELEPORT_DOMAIN=example.teleport.com
      TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')"
    3. Linux 서버에 Teleport를 설치합니다:

      curl https://cdn.teleport.dev/install-v16.2.0.sh | bash -s ${TELEPORT_VERSION} edition

      설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 지정하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.

  2. /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 명령줄 옵션을 ранее 생성한 초대 토큰을 저장한 애플리케이션 서비스 호스트의 파일 위치로 설정합니다.
    • 접근을 구성하는 경우 --app-name--app-uri 명령줄 옵션을 다른 웹 애플리케이션에 맞게 변경하세요.

호스트가 부팅될 때 Teleport 애플리케이션 서비스가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 Teleport 애플리케이션 서비스를 설치한 방법에 따라 다릅니다.

Teleport 애플리케이션 서비스를 실행할 호스트에서 Teleport를 활성화하고 시작하십시오:

sudo systemctl enable teleport
sudo systemctl start teleport

Teleport 애플리케이션 서비스를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:

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

Teleport 애플리케이션 서비스의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 journalctl -fu teleport로 볼 수 있습니다.

Teleport Helm 리포지토리를 설정하세요. Teleport Helm 리포지토리에 호스팅된 차트를 설치하도록 Helm을 허용하세요:

helm repo add teleport https://charts.releases.teleport.dev

원격 리포지토리의 차트 캐시를 업데이트하여 모든 사용 가능한 릴리즈로 업그레이드할 수 있습니다:

helm repo update

Kubernetes 클러스터에 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 16.2.0
  • proxyAddr를 Teleport 클러스터의 주소로 설정합니다 (예: teleport.example.com 또는 mytenant.teleport.sh).
  • -authToken을 이전에 생성한 초대 토큰으로 설정합니다.
  • 다른 웹 애플리케이션의 액세스를 구성하는 경우 apps[0].nameapps[0].uri를 변경하세요.

Teleport 에이전트 파드가 실행 중인지 확인하세요. 하나의 준비된 컨테이너가 있는 teleport-kube-agent 파드를 보아야 합니다:

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

4/5 단계. 사용자 생성

이제 애플리케이션이 Teleport에 의해 보호되는 리소스로 등록되었으므로, 애플리케이션에 대한 액세스를 테스트할 사용자를 생성할 수 있습니다. Teleport에는 클러스터 리소스에 액세스할 수 있는 사용자를 허용하는 내장된 역할인 access가 있습니다.

새로운 로컬 사용자 alice에게 access 역할을 부여하려면 다음 명령을 실행하세요:

tctl users add --roles=access alice

이 명령은 새로운 사용자에 대한 초대 URL을 생성합니다. URL을 사용하여 비밀번호를 선택하고, 인증을 위한 두 번째 요소를 설정하고, Teleport 웹 UI에 로그인하세요.

5/5 단계. 애플리케이션에 액세스하기

프록시된 애플리케이션에 액세스하는 몇 가지 방법이 있습니다.

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

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

다음 단계

다음 주제에서 Teleport를 사용하여 애플리케이션 보호 방법에 대해 더 알아보세요:

Teleport 원문 보기