애플리케이션 접근과 머신 및 워크로드 아이덴티티
Teleport는 HTTP 및 TCP 애플리케이션에 대한 접근을 보호하고 제어합니다. 이 가이드에서는 머신 및 워크로드 아이덴티티의 에이전트 tbot이 Teleport 클러스터에 등록된 애플리케이션에 접근하는 데 사용할 수 있는 자격 증명을 생성하도록 설정합니다.
Teleport는 HTTP 및 TCP 애플리케이션에 대한 접근을 보호하고 제어합니다. 머신 및 워크로드 아이덴티티를 사용하여 머신에 이러한 애플리케이션에 대한 안전하고 단기적인 접근을 허용할 수 있습니다.
이 가이드에서는 머신 및 워크로드 아이덴티티의 에이전트 tbot이 Teleport 클러스터에 등록된 애플리케이션에 접근하는 데 사용할 수 있는 자격 증명을 생성하도록 설정합니다.
사전 조건#
-
A running Teleport cluster. If you want to get started with Teleport, sign up for a free trial or set up a demo environment.
-
The
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Determine the version of your Teleport cluster. The
tctlandtshclients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at/v1/webapi/findand use a JSON query tool to obtain your cluster version. Replace with the web address of your Teleport Proxy Service:$ TELEPORT_DOMAIN= $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
Follow the instructions for your platform to install
tctlandtshclients:
-
- 아직 애플리케이션을 Teleport에 연결하지 않았다면 Teleport로 웹 애플리케이션 보호를 따르세요.
To check that you can connect to your Teleport cluster, sign in with tsh login, then
verify that you can run tctl commands using your current credentials.
For example, run the following command, assigning to the domain name of the Teleport Proxy Service in your cluster and to your Teleport username:
$ tsh login --proxy= --user=
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
If you can connect to the cluster and run the tctl status command, you can use your
current credentials to run subsequent tctl commands from your workstation.
If you host your own Teleport cluster, you can also run tctl commands on the computer that
hosts the Teleport Auth Service for full permissions.
- 애플리케이션에 접근할 머신에
tbot이 이미 설치되고 설정되어 있어야 합니다. 자세한 내용은 배포 가이드를 참조하세요.
1단계/3단계. RBAC 설정#
먼저 Teleport가 tbot이 생성한 자격 증명을 애플리케이션 연결에 사용할 수 있도록 설정해야 합니다. 이는 필요한 권한을 부여하는 역할을 만들고 해당 역할을 봇에 할당하는 방식으로 수행됩니다.
다음 내용으로 role.yaml 파일을 만듭니다:
kind: role
version: v6
metadata:
name: example-role
spec:
allow:
# 모든 애플리케이션에 대한 접근을 허용합니다.
app_labels:
'*': '*'
example-role을 사용 사례와 관련된 설명적인 이름으로 교체하세요.
이는 모든 애플리케이션에 대한 접근을 허용합니다. 프로덕션 환경에서는 머신이 접근해야 하는 애플리케이션에만 접근을 허용하도록 이 레이블을 수정해야 합니다.
tctl create -f ./role.yaml을 사용하여 역할을 만듭니다.
이제 tctl bots update를 사용하여 봇에 역할을 추가합니다. example을 배포 가이드에서 만든 봇의 이름으로, 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이 원샷 모드로 실행되도록 설정되어 있지 않은지 확인하세요.
새 설정을 적용하기 위해 tbot을 재시작합니다.
출력 서비스는 대상으로 설정해야 합니다. 이 예시에서는 directory 대상을 사용합니다. 이는 아티팩트를 디스크의 지정된 디렉터리에 기록합니다. tbot이 실행되는 Linux 사용자가 이 디렉터리에 쓸 수 있고 애플리케이션에 접근하는 Linux 사용자가 읽을 수 있도록 하세요.
tbot 설정을 수정하여 application 서비스를 추가합니다:
services:
- type: application
# 자격 증명이 접근 권한을 부여할 애플리케이션 이름을 지정합니다.
app_name: dumper
destination:
type: directory
# 이 가이드에서는 /opt/machine-id를 대상 디렉터리로 사용합니다.
# 필요에 따라 커스터마이즈할 수 있습니다. 여러 출력 서비스는
# 동일한 대상을 공유할 수 없습니다.
path: /opt/machine-id
dumper를 Teleport에 등록한 애플리케이션 이름으로 교체하세요.
tbot을 백그라운드 서비스로 실행 중인 경우 재시작하세요. 원샷 모드로 실행 중이라면 자격 증명을 사용하기 전에 실행해야 합니다.
3단계/3단계. 웹 애플리케이션에 연결#
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는 공개 웹 주소의 서브도메인을 통해 앱을 사용 가능하게 합니다. https://example.teleport.sh:443의 Teleport Proxy와 dumper라는 디버그 애플리케이션이 있다면 https://dumper.example.teleport.sh:443에서 앱에 접근할 수 있습니다.
예를 들어 curl을 사용하여 애플리케이션에 접근하려면:
$ curl \
--cert /opt/machine-id/tlscert \
--key /opt/machine-id/key \
https://dumper.example.teleport.sh/
Teleport Proxy가 Let's Encrypt 또는 다른 공개 인증 기관의 유효한 와일드카드 CA로 설정되어 있으면 CA 인증서를 지정할 필요가 없습니다.
인증서가 유효하지 않거나 잘못 설정된 경우 클라이언트는 앱에 접근하려고 할 때 Teleport 로그인 페이지로 리디렉션됩니다.
문제 해결#
클라이언트 애플리케이션이 표준 확장자의 인증서를 필요로 하는 경우#
자동화 서비스가 특정 파일 확장자의 TLS 인증서를 필요로 하는 경우 출력 서비스에 specific_tls_naming 옵션을 활성화할 수 있습니다:
services:
- type: application
destination:
type: directory
path: /opt/machine-id
app_name: grafana-example
specific_tls_naming: true
이렇게 하면 위에 나열된 인증서 파일과 동일한 내용으로 /opt/machine-id 내에 tls.crt 및 tls.key가 생성됩니다.
클라이언트가 Teleport 로그인 페이지로 리디렉션되는 경우#
인간 사용자와 마찬가지로 스크립트 클라이언트도 유효한 자격 증명 없이 Teleport Proxy Service를 통해 앱에 접근하려고 하면 Teleport 로그인 페이지로 리디렉션됩니다.
봇의 인증서가 만료되지 않았고 클라이언트 애플리케이션이 클라이언트 인증서와 키 모두를 사용하도록 설정되어 있는지 확인하세요.
다음 단계#
- 봇이 접근할 수 있는 애플리케이션 및 기타 Teleport 리소스를 제한하는 방법에 대해 접근 제어 레퍼런스를 검토하세요.
- 추가 로그인 자격 증명의 필요성을 제거하기 위해 애플리케이션에 JWT를 설정하세요.
- 사용 가능한 모든 설정 옵션을 확인하려면 설정 레퍼런스를 읽으세요.
