인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
머신 ID 시작 가이드
이 시작 가이드에서는 머신 ID를 구성하여 봇 사용자가 원격 호스트에 연결할 수 있도록 인증서를 발급하는 방법을 안내합니다.
수행할 작업에 대한 개요는 다음과 같습니다:
- 머신 ID를 실행할 호스트에
tbot
을 다운로드하고 설치합니다. - 봇 사용자를 생성합니다.
- 머신 ID를 시작합니다.
- 머신 ID에서 발급된 인증서를 사용하여 SSH를 통해 원격 머신에 연결합니다.
이 가이드는 개발 및 학습 목적을 위한 머신 ID 구성에 대해 다룹니다. 프로덕션 준비가 완료된 머신 ID 구성을 원하시면 머신 ID 배포 가이드를 참조하세요.
전제 조건
- 머신 ID를 사용하여 신원을 부여하고자 하는 호스트.
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
연결이 가능한지 확인하기 위해 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/4단계. Teleport 다운로드 및 설치
이 단계에서는 신원을 부여하고자 하는 머신에 Teleport 바이너리를 다운로드하고 설치합니다.
우리의 다운로드 페이지에서 제공되는 각 Teleport 패키지는 teleport
, tctl
, tsh
, tbot
, 및 fdpass-teleport
를 포함한 여러 유용한 바이너리를 포함합니다:
teleport
는 Teleport 클러스터를 초기화하는 데 사용되는 데몬이며, 이 가이드에서는 사용되지 않습니다.tctl
은 봇 사용자를 생성하는 데 사용될 관리 도구입니다(1/4단계).tsh
는 Teleport 클러스터에 로그인하는 데 사용할 클라이언트 도구입니다(2/4단계 및 4/4단계).tbot
은 머신 ID 도구로, 봇 사용자와 머신을 연결하는 데 사용됩니다(3/4단계).fdpass-teleport
는 SSH 연결을 설정할 때 성능을 높이고 자원 소비를 줄이기 위해 머신 ID를 OpenSSH와 통합하는 데 사용됩니다; 이 가이드에서는 사용되지 않습니다.
귀하의 플랫폼에 맞는 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/4단계. 봇 만들기
Teleport에서 봇은 머신의 신원을 나타냅니다. 이는 사용자와 마찬가지로 인간의 신원을 나타내는 것과 유사합니다. 사용자와 같이 봇은 리소스에 대한 접근을 관리하기 위해 역할이 할당됩니다. 그러나 사용자와는 달리 봇은 사용자 이름, 비밀번호 또는 SSO를 사용하여 인증하지 않습니다. 대신, 봇은 조인이라는 과정에서 초기 인증을 합니다.
Teleport는 봇이 실행되는 플랫폼에 특정한 여러 안전한 조인 방법을 지원하지만, 이 가이드에서는 더 간단한 token
조인 방법을 사용할 것입니다. 플랫폼에 사용할 수 있는 안전한 조인 방법에 대해 배우려면 나중에 배포 가이드를 참조하시기 바랍니다.
봇 사용자를 만들기 전에 부여할 역할을 결정해야 합니다. 아래의 tctl
명령을 사용하여 시스템에 어떤 역할이 존재하는지 확인할 수 있습니다.
클라이언트 머신에서 tsh
를 사용하여 Teleport에 로그인한 후, 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 액세스 제어 참조를 참조하세요.
기본 access
역할을 사용하는 경우, 봇을 추가할 때 --logins
플래그를 사용하여 봇이 호스트에서 접근할 수 있는 SSH 로그인을 지정하십시오. 예제에서는 root
를 사용합니다.
봇을 생성하려면 tctl bots add
를 사용하세요:
tctl bots add robot --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
TELEPORT_ANONYMOUS_TELEMETRY
는 익명 사용 통계를 제출할 수 있도록 활성화합니다. 이는 tbot
의 향후 개발 방향을 shaping하는 데 도움이 됩니다. 이를 생략하면 비활성화할 수 있습니다.
다음 필드를 귀하의 클러스터의 값으로 바꾸십시오.
token
은tctl bots add
명령에서 출력된 토큰이거나 IAM 방법 토큰의 이름입니다.destination-dir
은 머신 ID가 응용 프로그램 및 도구가 사용할 수 있는 사용자 인증서를 기록하는 위치입니다.data-dir
은 머신 ID가 자신의 단기 갱신 가능한 인증서를 포함하여 개인 데이터를 기록하는 위치입니다. 이러한 인증서는 응용 프로그램 및 도구에서 사용될 수 없습니다.proxy-server
는 Teleport Proxy 서비스의 주소입니다. 예를 들면example.teleport.sh: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
파일이 포함되어 있습니다.
4/4단계. 머신 ID에서 발급된 인증서 사용
머신 ID를 사용하려면 tsh ls
를 사용하여 클러스터 내에서 연결할 호스트를 찾습니다. 시스템에서 다음과 같은 출력을 볼 수 있습니다.
tsh lsNode Name Address Labels--------- -------------- -----------------------------node-name 127.0.0.1:3022 arch=x86_64,group=api-servers
Teleport의 Auth 서비스가 Teleport 노드를 목록화하라는 요청을 받을 때(예: 웹 UI에서 노드를 표시하거나 tsh ls
를 통해), 현재 사용자가 볼 수 있는 노드만 반환합니다.
사용자의 Teleport 클러스터의 각 노드에 대해 Auth 서비스는 다음과 같은 검사를 순서대로 적용하며, 하나의 검사가 실패할 경우 해당 노드를 사용자에게 숨깁니다:
- 사용자의 역할 중 어느 것도 노드의 레이블과 일치하는
deny
규칙을 포함하지 않습니다. - 사용자의 역할 중 최소 하나가 노드의 레이블과 일치하는
allow
규칙을 포함합니다.
예상치 못하게 노드가 보이지 않는 경우, 사용자의 역할에 적절한 allow
및 deny
규칙이 포함되어 있는지 확인하십시오. 이는 Teleport Access Controls Reference에서 문서화되어 있습니다.
OpenSSH 통합과 함께 머신 ID를 사용하려면, 클러스터 example.com
내의 node-name
에 연결하기 위해 다음 명령을 실행합니다.
ssh -F /opt/machine-id/ssh_config root@node-name.example.com
ssh
클라이언트 외에도 tsh
를 사용할 수 있습니다. --proxy
매개변수를 프록시 주소로 바꾸십시오.
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
를 실행하여 역할을 export 합니다.access.yaml
에서logins
필드를 편집합니다.tctl create -f access.yaml
를 실행하여 역할을 업데이트합니다.
이제 위의 명령으로 ssh
호출을 대체하여 귀하의 응용 프로그램 및 도구에 회전 가능하고 감사 가능하며 Teleport 접근 제어로 관리할 수 있는 머신 ID를 제공할 수 있습니다.
향후 단계
- 아키텍처 개요를 읽고 Machine ID의 작동 방식을 더 자세히 알아보십시오.
- 배포 가이드를 확인하여 플랫폼에 맞게
tbot
을 프로덕션 준비 완료 방식으로 구성하는 방법을 알아보십시오. - 액세스 가이드를 확인하여 SSH와 다른 용례를 위한
tbot
구성 방법을 알아보십시오. - 구성 참조를 읽고 사용 가능한 모든 구성 옵션을 탐색하십시오.
TELEPORT_ANONYMOUS_TELEMETRY
에 대한 자세한 정보.