보안 토큰으로 서비스 조인하기
Teleport v18.9이 가이드에서는 조인 토큰을 제시하여 하나 이상의 서비스를 실행하는 Teleport 프로세스를 클러스터에 등록하는 방법을 보여줍니다. 이 방식에서는 새 Teleport 프로세스를 등록하겠다는 의도를 선언하면, Teleport가 해당 프로세스가 Teleport 클러스터와 신뢰 관계를 수립하는 데 사용할 보안 토큰을 생성합니다.
이 가이드에서는 조인 토큰을 제시하여 하나 이상의 서비스를 실행하는 Teleport 프로세스를 클러스터에 등록하는 방법을 보여줍니다.
이 방식에서는 새 Teleport 프로세스를 등록하겠다는 의도를 선언하면, Teleport가 해당 프로세스가 Teleport 클러스터와 신뢰 관계를 수립하는 데 사용할 보안 토큰을 생성합니다.
사전 요구 사항#
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.
-
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다.
tctlandtshclients는 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')" -
사용 중인 플랫폼에 대한 지침에 따라
tctlandtshclients를 설치합니다:
-
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
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 프로세스를 호스팅할 Linux 서버(예: Linux 배포판 기반 이미지를 사용하는 가상 머신 또는 Docker 컨테이너).
이 가이드에서는 Teleport SSH 서비스 인스턴스를 등록하는 방법을 보여줍니다. 이 방식은 Proxy 서비스, Kubernetes 서비스, Database 서비스 등 인프라의 리소스에 접근하기 위한 다른 Teleport 서비스에도 적용됩니다.
로드 밸런서 뒤에서 여러 Proxy 서비스 인스턴스 실행하기
조인 토큰 방식은 클러스터에 단일 Proxy 서비스 인스턴스가 있는 경우와 로드 밸런서(LB) 또는 여러 값을 가진 DNS 항목 뒤에 여러 Proxy 서비스 인스턴스가 있는 경우 모두 동작합니다. Proxy 서비스 인스턴스가 여러 개인 경우, 클러스터에 조인하는 Teleport 프로세스는 모든 Proxy 서비스 인스턴스에 터널을 설정합니다.
로드 밸런서를 사용하는 경우, 라운드 로빈 또는 유사한 균형 조정 알고리즘을 사용해야 합니다. Teleport Proxy 서비스 인스턴스와 함께 스티키 로드 밸런싱 알고리즘 (예: "세션 어피니티")을 사용하지 마십시오.
TipDocker 컨테이너를 사용하는 경우, 이 가이드는 Linux 호스트에
curl과sudo가 설치되어 있다고 가정합니다.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명령을 실행할 수도 있습니다.1단계/3단계. Teleport 설치#
Linux 호스트에 Teleport를 설치합니다.
Linux 서버에 Teleport Agent를 설치하려면:
권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.
-
teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오. -
클러스터의 설치 스크립트를 실행하십시오:
$ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
2단계/3단계. Teleport 프로세스를 클러스터에 조인하기#
이 섹션에서는 다음을 통해 Teleport 프로세스를 클러스터에 조인합니다:
- 조인 토큰 획득
- 조인 토큰으로 Teleport 프로세스 실행
토큰 생성#
Teleport는 클러스터에 조인한 Teleport 프로세스를 통해서만 인프라의 리소스에 접근을 허용합니다.
로컬 머신에서
tctl도구를 사용하여 새 토큰을 생성합니다. 다음 예시에서는 TTL이 5분인 새 토큰을 생성합니다:# 새 Teleport SSH 서비스 인스턴스를 위한 단기 초대 토큰 생성: $ tctl tokens add --ttl=5m --type=node The invite token: (=presets.tokens.first=) This token will expire in 5 minutes. Run this on the new node to join the cluster: > teleport start \ --roles=node \ --token=(=presets.tokens.first=) \ --ca-pin=(=presets.ca_pin=) \ --auth-server=192.0.2.0:3025 Please note: - This invitation token will expire in 5 minutes - 192.0.2.0:3025 must be reachable from the new node이 명령에서는 토큰에
node유형을 지정하여 SSH 서비스 인스턴스에 속함을 나타냅니다.이 가이드의 이후 단계에서 사용할 수 있도록 토큰을 복사하십시오.
tctl tokens add출력의 나머지 부분은 무시해도 됩니다.지원되는 토큰 유형
조인 토큰 생성 시
--type플래그에 사용할 수 있는 모든 값은 다음과 같습니다:역할 Teleport 서비스 appApplication Service authAuth Service botMachine & Workload Identity Bot dbDatabase Service discoveryDiscovery Service kubeKubernetes Service nodeSSH Service proxyProxy Service windowsdesktopWindows Desktop Service 관리자는 필요에 따라 토큰을 생성할 수 있습니다. Teleport 프로세스는 TTL(유효 기간)이 만료될 때까지 토큰을 여러 번 사용할 수 있으며, 머신 및 워크로드 아이덴티티에서 사용하는
bot유형의 토큰은 예외입니다.생성한 모든 토큰 목록을 확인하려면 다음 명령을 실행하십시오:
$ tctl tokens ls Token Type Labels Expiry Time (UTC) -------------------------------- ---- ------ -------------------------- (=presets.tokens.first=) Node 30 Mar 23 18:15 UTC (2m8s)안전하지 않은 대안: 정적 토큰
Warning장기 정적 토큰 대신 단기 토큰을 사용하십시오. 정적 토큰은 도난, 추측, 유출이 더 쉽습니다.
정적 토큰은 관리자가 미리 정의하여 Auth 서비스의 설정 파일에 저장됩니다:
# Auth 서비스의 `/etc/teleport.yaml` 파일 내 설정 섹션 auth_service: enabled: true tokens: # 이 정적 토큰은 새 호스트가 "proxy" 또는 "node"로 클러스터에 조인할 수 있도록 허용합니다 - 'proxy,node:secret-token-value' # 토큰을 파일에 저장할 수도 있습니다. 이 예시에서는 새 Auth 서비스 인스턴스 추가를 위한 # 토큰이 /path/to/tokenfile에 저장됩니다 - 'auth:/path/to/tokenfile'초대 토큰으로 Teleport 프로세스 시작하기#
새 Teleport 프로세스를 실행하는 호스트에서 다음 명령을 실행하여 클러스터에 추가합니다.
join-token에는 앞서 생성한 토큰을,proxy-address에는 Teleport Proxy 서비스 또는 Teleport Enterprise Cloud 테넌트의 호스트와 웹 포트 (예:teleport.example.com:443)를 지정합니다:$ sudo teleport configure \ --roles=node \ --token=join-token \ --proxy=proxy-address \ -o fileTipSSH 서비스 인스턴스의 경우,
teleport configure대신teleport node configure를 실행할 수도 있습니다. 이 방식을 사용하면 명령에서--roles=node플래그를 생략할 수 있습니다.Auth 서비스에 직접 연결하기
지금까지 이 가이드는 Proxy 서비스에 연결하여 새 Teleport 프로세스를 클러스터에 조인하는 것으로 가정했습니다. (Teleport Enterprise Cloud에서는 이것이 유일한 방법입니다.) 인프라 설계에 따라, 새 Teleport 프로세스를 Auth 서비스에 직접 연결해야 할 수도 있습니다.
Warning다른 조인 방법이 적합하지 않은 경우에만 Teleport 프로세스를 Auth 서비스에 직접 연결하십시오. Auth 서비스를 최대한 적은 수의 인그레스 트래픽 소스에 노출하는 것을 권장합니다.
클러스터에 조인하는 Teleport 프로세스는 공격자가 Auth 서비스의 주소를 가로채는 것을 방지하기 위해 Auth 서비스와도 신뢰를 설정해야 합니다.
이를 위해, CA 핀이라고 불리는 Auth 서비스의 인증 기관이 생성한 보안 해시 값을 새 Teleport 프로세스에 제공합니다. 이렇게 하면 공격자가 개인 키를 위조하여 Teleport 프로세스가 악성 서비스와 통신하도록 속이기가 어려워집니다.
CA 핀 획득#
로컬 머신에서 Auth 서비스의 CA 핀을 검색합니다:
$ tctl status Cluster teleport.example.com Version 12.1.1 host CA never updated user CA never updated db CA never updated openssh CA never updated jwt CA never updated saml_idp CA never updated CA pin (=presets.ca_pin=)CA 핀을 복사하여
ca-pin의 값에 지정합니다.WarningTeleport 관리자가
tctl auth rotate를 실행하여 CA 교체를 수행하면 CA 핀이 무효화됩니다.조인 토큰과 CA 핀으로 Teleport 프로세스 구성하기#
앞서 보여준
teleport configure명령 대신 다음 명령을 실행하여 Teleport 프로세스를 구성합니다.auth-service에는 Auth 서비스 호스트의 호스트와 gRPC 포트 (예:teleport.example.com:3025)를 지정합니다.$ sudo teleport configure \ --roles=node \ --token=join-token \ --auth-server=auth-service \ -o file다음으로, Teleport 설정 파일
/etc/teleport.yaml을 편집하여 CA 핀 (teleport.ca_pin필드)을 앞서 복사한 값으로 지정합니다:$ sudo sed -i 's| ca_pin: ""| ca_pin: " />"|' /etc/teleport.yamlsystemd 서비스를 생성하여 호스트가 부팅될 때 your Teleport instance이 자동으로 시작되도록 구성합니다. 지침은 your Teleport instance을 어떻게 설치했는지에 따라 다릅니다.
Package Manager
your Teleport instance을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
$ sudo systemctl enable teleport $ sudo systemctl start teleportTAR Archive
your Teleport instance을 실행할 호스트에서 Teleport용 systemd 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
$ sudo teleport install systemd -o /etc/systemd/system/teleport.service $ sudo systemctl enable teleport $ sudo systemctl start teleportsystemctl status teleport로 your Teleport instance의 상태를 확인하고journalctl -fu teleport로 로그를 볼 수 있습니다.로컬 Docker 컨테이너를 사용하고 있습니까?
로컬 Docker 컨테이너로 이 가이드를 진행한 경우, 컨테이너 내에서 다음 명령을 실행하여 새 Teleport 프로세스를 포그라운드에서 실행합니다:
$ teleport start새 서비스가 온라인 상태가 되면 Auth 서비스에 몇 초마다 하트비트 요청을 보내기 시작합니다. 이를 통해 사용자가 클러스터 구성원 및 규모를 파악할 수 있습니다.
로컬 머신에서 다음 명령을 실행하여 클러스터의 모든 Teleport SSH 서비스 인스턴스를 확인합니다:
$ tctl nodes ls Host UUID Public Address Labels Version ------------- --------------------- -------------- ---------------------- ------- 1f58429134c4 6805dda3-779e-493b... hostname=1f58429134c4 (=teleport.version=)3단계/3단계. 초대 취소하기#
조인 토큰을 해지하여 Teleport 프로세스가 이를 사용하지 못하도록 할 수 있습니다.
로컬 머신에서 다음 명령을 실행하여 새 Proxy 서비스를 위한 토큰을 생성합니다:
$ tctl nodes add --ttl=5m --roles=proxy # The invite token: (=presets.tokens.first=). # This token will expire in 5 minutes. # # Run this on the new node to join the cluster: # # > teleport start \ # --roles=proxy \ # --token=(=presets.tokens.first=) \ # --ca-pin=(=presets.ca_pin=) \ # --auth-server=123.123.123.123:443 # # Please note: # # - This invitation token will expire in 5 minutes # - 123.123.123.123 must be reachable from the new node다음으로, 아래 명령을 실행하여 미처리 토큰 목록을 확인합니다:
$ tctl tokens ls Token Type Labels Expiry Time (UTC) -------------------------------- ----- ------ --------------------------- (=presets.tokens.first=) Node 30 Mar 23 18:20 UTC (36s) (=presets.tokens.second=) Proxy 30 Mar 23 18:24 UTC (4m39s)가입 토큰tctl tokens ls의 출력에는 클러스터에 Teleport 프로세스를 추가하는 데 사용되는 토큰과 함께 사용자 추가에 사용되는 토큰도 포함됩니다.이 가이드의 앞부분에서 새 Teleport 프로세스를 이 클러스터에 초대하기 위해
Node역할로 토큰을 생성했습니다. 두 번째 토큰은 Proxy 서비스 인스턴스를 위해 생성한 것입니다.tctl을 통해 생성된 토큰은tctl tokens rm명령으로 삭제(해지)할 수 있습니다. 위 출력에서 두 번째 토큰을 복사하고 다음 명령을 실행하여 삭제합니다. 삭제할 토큰을token-to-delete에 지정하십시오.$ tctl tokens rm token-to-delete # Token (=presets.tokens.first=) has been deleted다음 단계#
- 워크로드가 서로 다른 네트워크 또는 클라우드에 분산되어 있는 경우, 신뢰할 수 있는 클러스터를 설정하는 것을 권장합니다. 신뢰할 수 있는 클러스터 구성에서 시작하는 방법을 확인하십시오.
-