이 시작하기 가이드에서는 머신 ID를 구성하여 봇 사용자가 원격 호스트에 연결할 수 있도록 인증서를 발급합니다.
여기에서 수행할 작업에 대한 개요는 다음과 같습니다:
- 머신 ID가 실행될 호스트에
tbot
을 다운로드하고 설치합니다. - 봇 사용자를 생성합니다.
- 머신 ID를 시작합니다.
- 머신 ID에서 발급한 인증서를 사용하여 SSH로 원격 머신에 연결합니다.
이 가이드는 개발 및 학습 목적으로 머신 ID 구성을 다룹니다. 생산 준비가 완료된 머신 ID 구성에 대한 내용은 머신 ID 배포 가이드를 참조하세요.
전제 조건
- 머신 ID를 사용하여 신원을 할당할 호스트가 필요합니다.
-
실행 중인 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
명령어를 실행할 수도 있습니다.
단계 1/4. Teleport 다운로드 및 설치
이 단계에서는 신원을 할당할 머신에 Teleport 바이너리를 다운로드하고 설치합니다.
우리의 다운로드 페이지에 호스팅된 각 Teleport 패키지는 teleport
, tctl
, tsh
, tbot
을 포함한 여러 유용한 바이너리와 함께 제공됩니다:
teleport
는 Teleport 클러스터를 초기화하는 데 사용되는 데몬입니다. 이 바이너리는 이 가이드에서 사용되지 않습니다.tctl
은 봇 사용자를 생성하는 데 사용할 관리 도구입니다(단계 1/4).tsh
는 Teleport 클러스터에 로그인하는 데 사용할 클라이언트 도구입니다(단계 2/4 및 4/4).tbot
은 봇 사용자를 머신과 연결하는 데 사용할 머신 ID 도구입니다(단계 3/4).
플랫폼에 맞는 적절한 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 패키지 리포지토리에 대해 알아보세요.
단계 2/4. 봇 사용자 생성
봇 사용자를 생성하기 전에 할당 할 역할을 결정해야 합니다. 아래 tctl
명령을 사용하여 시스템에 어떤 역할이 존재하는지 확인할 수 있습니다.
클라이언트 머신에서 tsh
를 사용하여 Teleport에 로그인한 후, tctl
을 사용하여 시스템에 어떤 역할이 존재하는지 확인하세요.
Teleport Auth 서버에 연결하고 tctl
을 사용하여 시스템에 어떤 역할이 존재하는지 확인하세요.
tctl get roles --format=text
신규 설치된 Teleport에서 기본 역할들이 있는 아래와 같은 출력을 볼 수 있습니다. 귀하의 클러스터에는 다른 역할이 있을 수 있습니다. 이 예제에서는 봇에 access
역할을 부여하여 클러스터 내 머신에 연결할 수 있도록 하겠습니다.
Role Allowed to login as Node Labels Access to resources
------- --------------------------------------------- ----------- ----------------------------------------
access {{internal.logins}} <all nodes> event:list,read,session:read,list
auditor no-login-6566121f-b602-47f1-a118-c9c618ee5aec session:list,read,event:list,read
editor user:list,create,read,update,delete,...
internal.logins
특성은 Teleport 로컬 사용자 데이터베이스에서 값을 대체합니다. Teleport 역할의 특성이 작동하는 방식에 대한 전체 세부 정보는 Teleport 액세스 제어 참조를 참조하세요.
머신 ID는 토큰 또는 AWS의 IAM 방법으로 참여할 수 있습니다.
기본 access
역할을 사용하고 있다고 가정할 때,
봇이 호스트에서 접근할 수 있는 SSH 로그인을 지정하기 위해 --logins
플래그를 사용해야 합니다. 우리의 예제에서는 root
를 사용할 것입니다.
tctl bots add robot --roles=access --logins=root
먼저, 봇이 참여할 수 있는 AWS 계정을 지정하는 IAM 방법 토큰을 생성해야 합니다. 아래 파일을 iam-token.yaml
으로 만든 후 tctl create -f iam-token.yaml
을 실행합니다.
kind: token
version: v2
metadata:
# 토큰 이름은 비밀이 아니므로 인스턴스는 이 토큰을 사용하려면 AWS 계정 내에서 실행되고 있음을 증명해야 합니다.
name: iam-token
spec:
# 봇만 이 토큰을 사용하여 참여할 수 있도록 허용합니다.
roles: [Bot]
# 참여 방법을 IAM으로 설정합니다.
join_method: iam
# 이 토큰을 사용할 수 있는 봇 이름을 정의합니다.
bot_name: robot
allow:
# 이 토큰을 사용할 수 있는 AWS 계정과(선택적으로) ARN을 제한합니다.
# 이 정보는 CLI에서 "aws sts get-caller-identity" 명령을 실행하여 얻을 수 있습니다.
- aws_account: "111111111111"
aws_arn: "arn:aws:sts::111111111111:assumed-role/teleport-bot-role/i-*"
다음으로, 봇 사용자를 생성합니다.
$ tctl bots add robot --token=iam-token --roles=access --logins=root
단계 3/4. 머신 ID 시작
이제 tbot
바이너리를 사용하여 머신 ID를 시작합니다. tbot start
명령은 머신 ID를 루프에서 실행하여 /var/lib/teleport/bot
에 갱신 가능한 인증서를 작성하고 /opt/machine-id
에 애플리케이션이 사용할 단기 인증서를 기록합니다.
생산 환경에서는 시스템 관리자인 systemd와 같은 서비스를 사용하여 머신 ID를 백그라운드에서 실행해야 합니다. 그러나 이 가이드에서는 작동 방식을 더 잘 이해하기 위해 포그라운드에서 실행합니다.
export TELEPORT_ANONYMOUS_TELEMETRY=1sudo tbot start \ --data-dir=/var/lib/teleport/bot \ --destination-dir=/opt/machine-id \ --token=abcd123-insecure-do-not-use-this \ --join-method=token \ --proxy-server=example.teleport.sh:443
export TELEPORT_ANONYMOUS_TELEMETRY=1sudo tbot start \ --data-dir=/var/lib/teleport/bot \ --destination-dir=/opt/machine-id \ --token=iam-token \ --join-method=iam \ --proxy-server=example.teleport.sh:443
TELEPORT_ANONYMOUS_TELEMETRY
는 익명 사용량 텔레메트리 제출을 가능하게 합니다. 이는 tbot
의 향후 개발을 형성하는 데 도움이 됩니다. 이를 생략하여 비활성화할 수 있습니다.
다음 필드를 귀하의 클러스터 값으로 교체합니다.
token
은tctl bots add
명령에 의해 출력된 토큰 또는 IAM 방법 토큰의 이름입니다.destination-dir
은 머신 ID가 애플리케이션 및 도구에서 사용할 수 있는 사용자 인증서를 기록하는 곳입니다.data-dir
은 머신 ID가 자체 단기 갱신 가능한 인증서를 포함한 개인 데이터를 기록하는 곳입니다. 이는 애플리케이션과 도구에서 사용해서는 안 됩니다.auth-server
는 Teleport Cloud Proxy 서버의 주소입니다. 예:example.teleport.sh:443
.
token
은tctl bots add
명령에 의해 출력된 토큰 또는 IAM 방법 토큰의 이름입니다.ca-pin
은 Teleport 클러스터의 CA Pin이며,tctl bots add
명령에 의해 출력됩니다.destination-dir
은 머신 ID가 애플리케이션 및 도구에서 사용할 수 있는 사용자 인증서를 기록하는 곳입니다.data-dir
은 머신 ID가 자신의 단기 갱신 가능한 인증서를 포함한 개인 데이터를 기록하는 곳입니다. 이는 애플리케이션과 도구에서 사용해서는 안 됩니다.auth-server
는 일반적으로 Teleport Proxy 서버의 주소 (teleport.example.com:443
)입니다. 그러나 직접 연결성이 상태에서는 Auth 서버의 주소를 사용할 수도 있습니다 (teleport.example.com:443
).
이제 머신 ID가 성공적으로 시작되었으므로, /opt/machine-id
디렉토리를 조사하여 디스크에 기록된 내용을 확인해보세요.
tree /opt/machine-idmachine-id├── identity├── key├── key-cert.pub├── key.pub├── known_hosts├── ssh_config├── teleport-database-ca.crt├── teleport-host-ca.crt├── teleport-user-ca.crt└── tlscert
0 directories, 10 files
이 디렉토리에는 key.*
파일에 개인 키 자료가 포함되어 있으며, identity
파일에는 SSH 인증서, tls*
및 *.crt
파일에는 X.509 인증서가 포함되어 있습니다. ssh_config
및 known_hosts
파일에는 머신 ID와 외부 애플리케이션 및 도구 간의 통합을 쉽게 해주기 위한 OpenSSH 구성이 포함되어 있습니다.
단계 4/4. 머신 ID에서 발급한 인증서 사용
머신 ID를 사용하려면, 클러스터 내에서 연결하려는 호스트를 찾기 위해 tsh ls
를 실행합니다. 시스템에서 아래와 같은 출력을 볼 수 있습니다.
tsh lsNode Name Address Labels--------- -------------- -----------------------------node-name 127.0.0.1:3022 arch=x86_64,group=api-servers
When Teleport의 인증 서비스가 Teleport 노드를 나열하라는 요청을 받으면 (예: 웹 UI에서 노드를 표시하거나 tsh ls
를 통해), 현재 사용자가 볼 수 있는 권한이 있는 노드만 반환합니다.
사용자의 Teleport 클러스터에 있는 각 노드에 대해 인증 서비스는 다음 검사를 순서대로 적용하며, 하나의 검사가 실패하면 해당 노드를 사용자에게 숨깁니다:
- 사용자의 역할 중 어느 것도 노드의 레이블과 일치하는
deny
규칙을 포함하지 않아야 합니다. - 사용자의 역할 중 적어도 하나는 노드의 레이블과 일치하는
allow
규칙을 포함해야 합니다.
예상할 때 노드를 볼 수 없다면, 사용자의 역할에 Teleport 접근 제어 참조에 문서화된 적절한 allow
및 deny
규칙이 포함되어 있는지 확인하세요.
머신 ID를 OpenSSH 통합과 함께 사용하려면, 다음 명령을 실행하여 example.com
클러스터 내의 node-name
에 연결합니다.
ssh -F /opt/machine-id/ssh_config root@node-name.example.com
ssh
클라이언트 외에도 tsh
를 사용할 수 있습니다. --proxy
매개변수를 자신의 프록시 주소로 교체하세요.
tsh ssh --proxy=teleport.example.com -i /opt/machine-id/identity root@node-name
tsh ssh --proxy=mytenant.teleport.sh -i /opt/machine-id/identity root@node-name
봇이 요청된 사용자로 노드에 로그인할 권한이 없을 때 아래 오류가 발생할 수 있습니다:
ssh -F /opt/machine-id/ssh_config root@node-name.example.comroot@node-name: Permission denied (publickey).kex_exchange_identification: Connection closed by remote host
이 문제는 두 가지 경우에 발생할 수 있습니다:
- 로그인하려는 사용자가 사용 중인 역할의
logins
에 명시되어 있지 않습니다. - 봇 사용자 생성 시
--logins
를 사용한 경우, 봇이 가장 자주 사용하던 역할에는{{ internal.logins }}
변수가 명시되어 있지 않습니다.
access
역할을 따르면서 작업해왔다면, 다음과 같이 진행하세요.
tctl get roles/access > access.yaml
를 실행하여 역할을 내보냅니다.access.yaml
에서logins
필드를 편집합니다.tctl create -f access.yaml
를 실행하여 역할을 업데이트합니다.
이제 위의 명령으로 ssh
호출을 대체하여 애플리케이션 및 도구에 회전 가능하고 감사 가능하며 Teleport 액세스 제어를 사용할 수 있는 머신 아이덴티티를 제공합니다.
다음 단계
- 머신 ID의 작동 방식에 대한 자세한 내용을 알아보려면 아키텍처 개요를 읽어보세요.
tbot
을 생산 준비 방식으로 구성하는 방법을 배우려면 배포 가이드를 참조하세요.- SSH와 다른 사용 사례를 위해
tbot
을 구성하는 방법을 배우려면 액세스 가이드를 참조하세요. - 모든 구성을 탐색하려면 구성 참조를 읽어보세요.
- TELEPORT_ANONYMOUS_TELEMETRY에 대한 추가 정보.