이 튜토리얼은 Teleport를 통해 애플리케이션에 대한 안전한 액세스를 구성하는 방법을 보여줍니다. 이 튜토리얼은 Grafana를 샘플 애플리케이션으로 사용합니다. 왜냐하면 Docker 컨테이너나 Kubernetes 클러스터에서 간단하게 설치하고 실행할 수 있으며 추가 구성이 필요하지 않기 때문입니다. 다른 웹 애플리케이션에 대한 액세스를 구성하고 싶다면, 이 튜토리얼을 일반 가이드로 사용하여 필요한 작업을 수행할 수 있습니다.
전반적으로 애플리케이션에 대한 액세스를 구성하는 것은 다음 단계로 이루어집니다:
- 환경이 필수 조건을 충족하는지 확인하세요.
- Docker 컨테이너, Kubernetes 클러스터 또는 다른 방법을 사용하여 애플리케이션을 실행할 수 있는지 확인하세요.
- 애플리케이션이 Teleport 클러스터에 가입하기 위한 단기 초대 토큰을 생성하세요.
- 애플리케이션 호스트에 Teleport를 설치하고 구성하세요.
- 애플리케이션에 대한 액세스를 검증할 사용자 추가하세요.
필수 조건
이 튜토리얼을 위해 환경이 다음 요구 사항을 충족하는지 확인하세요:
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl 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를 시작하려면:
-
Docker가 설치된 컴퓨터의 터미널을 엽니다.
-
다음 명령을 실행하여 Grafana를 시작합니다:
docker run --detach --name grafana --publish 3000:3000 grafana/grafana -
컨테이너 내의
/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-chartshelm repo updatehelm install example-grafana grafana/grafana \ --create-namespace \ --namespace example-grafana
3/5 단계. Teleport 설치 및 구성
Teleport 에디션을 선택한 후, 설치 지침에 따라 환경을 구성합니다.
리눅스에 설치하려면:
-
Linux 서버에 Teleport 설치하기:
-
Teleport 에디션에 따라 edition을(를) 다음 중 하나로 지정합니다:
에디션 값 Teleport Enterprise Cloud cloud
Teleport Enterprise (자체 호스팅) enterprise
Teleport Community Edition oss
-
설치할 Teleport의 버전을 확인합니다. 클러스터에서 자동 에이전트 업데이트가 활성화되어 있는 경우, 업데이터와 호환되는 최신 Teleport 버전을 쿼리합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"그렇지 않으면, Teleport 클러스터의 버전을 확인합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')" -
Linux 서버에 Teleport를 설치합니다:
curl https://cdn.teleport.dev/install-v16.2.0.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 지정하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
-
-
/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 teleportsudo systemctl start teleport
Teleport 애플리케이션 서비스를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo 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].name
과apps[0].uri
를 변경하세요.
Teleport 에이전트 파드가 실행 중인지 확인하세요.
하나의 준비된 컨테이너가 있는 teleport-kube-agent
파드를 보아야 합니다:
kubectl -n teleport-agent get podsNAME 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를 사용하여 애플리케이션 보호 방법에 대해 더 알아보세요:
- 애플리케이션 연결.
- JWT 토큰 통합.
- RESTful API로 애플리케이션에 접근하기.
- 애플리케이션 액세스 참조에서 구성 옵션 설정 및 CLI 명령 실행.
- Let's Encrypt ACME 프로토콜 사용 .