인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
보안 토큰으로 서비스 연결
이 가이드에서는 join token을 사용하여 하나 이상의 서비스를 실행하는 Teleport 프로세스를 클러스터에 등록하는 방법을 보여줍니다.
이 접근법에서는 새 Teleport 프로세스를 등록할 의도를 선언하고, Teleport는 프로세스가 Teleport 클러스터와 신뢰 관계를 설정하는 데 사용하는 보안 토큰을 생성합니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
-
Teleport 프로세스를 호스팅할 Linux 서버, 예를 들어 Linux 배포 기반의 가상 머신이나 Docker 컨테이너.
이 가이드에서는 Teleport SSH 서비스 인스턴스를 등록하는 방법을 보여줍니다. 이 접근법은 Proxy Service, Kubernetes Service, Database Service 및 인프라의 리소스에 액세스하는 다른 Teleport 서비스에도 적용됩니다.
join token 방식은 클러스터에 단일 Proxy Service 인스턴스와 로드 밸런서(LB) 또는 여러 값을 가진 DNS 항목 뒤에 있는 여러 Proxy Service 인스턴스가 포함된 경우 작동합니다. 여러 Proxy Service 인스턴스가 있는 경우, 클러스터에 조인하는 Teleport 프로세스는 모든 Proxy Service 인스턴스와 터널을 설정합니다.
로드 밸런서를 사용하는 경우, 라운드 로빈 또는 유사한 밸런싱 알고리즘을 사용해야 합니다. Teleport Proxy Service 인스턴스와 함께 스티키 로드 밸런싱 알고리즘(즉, "세션 애피니티")을 사용하지 마십시오.
Docker 컨테이너를 사용하는 경우, 이 가이드에서는 Linux 호스트에
curl
및sudo
가 설치되어 있다고 가정합니다.
연결이 가능한지 확인하기 위해 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
명령어를 실행할 수도 있습니다.
1/3단계. Teleport 설치하기
Linux 호스트에 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-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 정의하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
2/3단계. Teleport 프로세스를 클러스터에 조인하기
이 섹션에서는 다음을 통해 Teleport 프로세스를 클러스터에 조인합니다:
- join token Obtaining
- join token으로 Teleport 프로세스 실행하기
토큰 생성
Teleport는 클러스터에 조인한 Teleport 프로세스만 귀하의 인프라 내 리소스에 대한 액세스를 허용합니다.
로컬 컴퓨터에서 tctl
도구를 사용하여 새 토큰을 생성하십시오. 다음 예제에서는 5분짜리 TTL을 갖는 새 토큰이 생성됩니다:
새로운 Teleport SSH Service 인스턴스를 위한 단기간 초대 토큰 생성:
tctl tokens add --ttl=5m --type=node초대 토큰: abcd123-insecure-do-not-use-this이 토큰은 5분 후 만료됩니다.
이 명령을 새 노드에서 실행하여 클러스터에 조인하세요:
> teleport start \ --roles=node \ --token=abcd123-insecure-do-not-use-this \ --ca-pin=sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678 \ --auth-server=192.0.2.0:3025
주의사항:
- 이 초대 토큰은 5분 후 만료됩니다. - 192.0.2.0:3025는 새 노드에서 접근 가능해야 합니다.
이 명령에서는 토큰 유형을 node
로 지정하여 SSH Service 인스턴스에 속함을 나타냅니다.
나중에 이 가이드에서 사용할 수 있도록 토큰을 복사하십시오. 나머지 tctl tokens add
출력은 무시해도 됩니다.
join token을 생성할 때 --type
플래그에 대해 지원하는 모든 값은 다음과 같습니다:
역할 | Teleport 서비스 |
---|---|
app | 애플리케이션 서비스 |
auth | 인증 서비스 |
bot | 머신 ID |
db | 데이터베이스 서비스 |
discovery | 탐색 서비스 |
kube | 쿠버네티스 서비스 |
node | SSH 서비스 |
proxy | 프록시 서비스 |
windowsdesktop | Windows 데스크톱 서비스 |
관리자는 필요에 따라 토큰을 생성할 수 있습니다. Teleport 프로세스는 TTL(생존 시간)이 만료될 때까지 여러 번 토큰을 사용할 수 있으며, bot
유형의 토큰은 머신 ID에 의해 사용됩니다.
생성한 모든 토큰을 나열하려면 다음 명령을 실행하십시오:
tctl tokens ls토큰 유형 레이블 만료 시간 (UTC)-------------------------------- ---- ------ --------------------------abcd123-insecure-do-not-use-this Node 30 Mar 23 18:15 UTC (2m8s)
장기 정적 토큰보다 단기 토큰을 사용하십시오. 정적 토큰은 훔치기, 추측하기 및 유출하기가 더 쉽습니다.
정적 토큰은 관리자가 미리 정의하여 Auth Service의 구성 파일에 저장합니다:
# Auth Service의 `/etc/teleport.yaml` 파일 내 구성 섹션
auth_service:
enabled: true
tokens:
# 이 정적 토큰은 새 호스트가 "proxy" 또는 "node"로 클러스터에 조인하도록 허용합니다
- "proxy,node:secret-token-value"
# 토큰은 파일에 저장할 수도 있습니다. 이 예에서는 새 Auth Service 인스턴스를 추가하기 위한 토큰이 /path/to/tokenfile에 저장됩니다.
- "auth:/path/to/tokenfile"
Teleport 프로세스를 초대 토큰으로 시작하기
새 Teleport 프로세스를 실행 중인 호스트에서 다음 명령을 실행하여 클러스터에 추가하세요.
이전에 생성한 토큰에 join-token을 할당하고, Teleport Proxy Service 또는 Teleport Enterprise Cloud 테넌트의 호스트와 웹 포트에 proxy-address을 할당합니다 (예: teleport.example.com:443
):
sudo teleport configure \ --roles=node \ --token=join-token \ --proxy=proxy-address \ -o file
SSH Service 인스턴스의 경우 teleport configure
대신 teleport node configure
를 실행할 수도 있습니다. 이렇게 하면 명령에서 --roles=node
플래그를 제외할 수 있습니다.
지금까지 이 가이드는 새 Teleport 프로세스를 Proxy Service에 연결하여 클러스터에 조인한다고 가정했습니다. (이는 Teleport Enterprise Cloud에서 유일한 가능성입니다.) 인프라의 설계에 따라 새 Teleport 프로세스를 Auth Service에 직접 연결해야 할 수도 있습니다.
다른 조인 방법이 적합하지 않은 경우에만 Teleport 프로세스를 Auth Service에 직접 연결하십시오. 가능한 한 적은 소스의 수신 트래픽이 Auth Service에 노출되도록 권장합니다.
클러스터에 조인하는 Teleport 프로세스는 공격자가 Auth Service 호스트의 주소를 탈취하는 것을 방지하기 위해 Auth Service와 신뢰를 구축해야 합니다.
이를 위해 Auth Service의 인증 기관에 의해 생성된 안전한 해시 값을 새 Teleport 프로세스에 제공하며, 이를 CA pin이라고 합니다. 이렇게 하면 공격자가 악성 서비스와 통신하도록 Teleport 프로세스를 속이기 위해 개인 키를 쉽게 위조할 수 없습니다.
CA pin 받기
로컬 머신에서 Auth Service의 CA pin을 검색하세요:
tctl statusCluster teleport.example.comVersion 12.1.1host CA never updateduser CA never updateddb CA never updatedopenssh CA never updatedjwt CA never updatedsaml_idp CA never updatedCA pin sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
CA pin을 복사하여 ca-pin의 값으로 할당하세요.
Teleport 관리자가 tctl auth rotate
명령을 실행하여 CA 회전을 수행하면 CA pin이 무효화됩니다.
초대 토큰 및 CA pin으로 Teleport 프로세스 구성하기
이제 이전에 보여준 teleport configure
명령 대신 다음 명령을 실행하여 Teleport 프로세스를 구성하세요.
auth-service에 Auth Service 호스트의 호스트와 gRPC 포트를 할당하세요 (예: teleport.example.com:3025
).
sudo teleport configure \ --roles=node \ --token=join-token \ --auth-server=auth-service \ -o file
그 다음, Teleport 구성 파일인 /etc/teleport.yaml
을 편집하여 복사한 CA pin을 ( teleport.ca_pin
필드) 할당하세요:
sudo sed -i 's| ca_pin: ""| ca_pin: "ca-pin"|' /etc/teleport.yaml
호스트가 부팅될 때 your Teleport instance가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 your Teleport instance를 설치한 방법에 따라 다릅니다.
your Teleport instance를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleport
your Teleport instance를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleport
systemctl status teleport
로 your Teleport instance의 상태를 확인하고, journalctl -fu teleport
로 로그를 볼 수 있습니다.
로컬 Docker 컨테이너에서 이 가이드를 따랐다면, 다음 명령을 실행하여 새 Teleport 프로세스를 포그라운드에서 실행하세요:
teleport start
새 서비스가 온라인에 접속하면 Auth Service에 몇 초마다 하트비트 요청을 전송하기 시작합니다. 이를 통해 사용자는 클러스터 구성원 및 크기를 탐색할 수 있습니다.
로컬 머신에서 다음 명령을 실행하여 클러스터의 모든 Teleport SSH Service 인스턴스를 확인하세요:
tctl nodes lsHost UUID Public Address Labels Version------------- --------------------- -------------- ---------------------- -------1f58429134c4 6805dda3-779e-493b... hostname=1f58429134c4 17.0.0-dev
3/3단계. 초대장 취소
초대 토큰을 취소하여 Teleport 프로세스가 이를 사용하는 것을 방지할 수 있습니다.
다음 명령어를 로컬 머신에서 실행하여 새로운 Proxy Service용 토큰을 생성하세요:
tctl nodes add --ttl=5m --roles=proxy초대 토큰: abcd123-insecure-do-not-use-this.
이 토큰은 5분 후에 만료됩니다.
클러스터에 조인하기 위해 새로운 노드에서 다음 명령어를 실행하세요:
> teleport start \
--roles=proxy \
--token=abcd123-insecure-do-not-use-this \
--ca-pin=sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678 \
--auth-server=123.123.123.123:443
주의사항:
- 이 초대 토큰은 5분 후에 만료됩니다
- 123.123.123.123은 새로운 노드에서 접근 가능해야 합니다
다음으로, 다음 명령어를 실행하여 발급된 토큰 목록을 확인하세요:
tctl tokens ls토큰 타입 레이블 만료 시간 (UTC)------------------------------ ----- ------ ---------------------------abcd123-insecure-do-not-use-this Node 30 Mar 23 18:20 UTC (36s)efgh456-insecure-do-not-use-this Proxy 30 Mar 23 18:24 UTC (4m39s)
가입 토큰
tctl tokens ls
의 출력에는 사용자를 추가하는 데 사용된 토큰과 클러스터에 Teleport 프로세스를 추가하는 데 사용된 토큰이 포함되어 있습니다.
이 가이드의 이전 단계에서 새로운 Teleport 프로세스를 클러스터에 초대하기 위해 Node
역할로 토큰을 생성했습니다. 두 번째 토큰은 Proxy Service 인스턴스를 위해 생성한 것입니다.
tctl
을 통해 생성된 토큰은 tctl tokens rm
명령어를 통해 삭제(취소)할 수 있습니다. 위의 출력에서 두 번째 토큰을 복사하고 다음 명령어를 실행하여 삭제하세요. 토큰을 token-to-delete에 할당합니다.
tctl tokens rm token-to-delete토큰 abcd123-insecure-do-not-use-this이 삭제되었습니다
다음 단계
- 서로 다른 네트워크 또는 클라우드에 나뉘어진 작업 부하가 있는 경우, 신뢰할 수 있는 클러스터를 설정하는 것을 권장합니다. 신뢰할 수 있는 클러스터 구성에서 시작하는 방법을 읽어보세요.