인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
애플리케이션 액세스를 위한 머신 ID
Teleport는 HTTP 및 TCP 애플리케이션에 대한 액세스를 보호하고 제어합니다. 머신 ID는 이 애플리케이션에 안전하고 단기적인 액세스를 부여하는 데 사용될 수 있습니다.
이 가이드에서는 tbot
을 구성하여 Teleport 클러스터에 등록된 애플리케이션에 액세스하는 데 사용할 수 있는 자격 증명을 생성합니다.
필수 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- 애플리케이션을 Teleport에 연결하지 않았다면, 애플리케이션 액세스 시작하기 가이드를 따르세요.
- 연결이 가능한지 확인하기 위해
tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결할 수 있고tsh login --proxy=teleport.example.com --user=email@example.comtctl 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.crt
와 tls.key
가 생성됩니다.
클라이언트가 Teleport 로그인 페이지로 리디렉션됨
인간 사용자와 마찬가지로, 스크립트 클라이언트는 유효한 자격 증명 없이 Teleport Proxy Service를 통해 앱에 접근하려고 할 때 Teleport 로그인 페이지로 리디렉션됩니다.
봇의 인증서가 만료되지 않았는지 확인하고, 클라이언트 애플리케이션이 클라이언트 인증서와 키를 모두 사용하도록 구성되었는지 확인하십시오.