Teleport는 서버에 대한 SSH 접근을 보호하고 제어합니다. 머신 ID는 이 서버에 대해 안전하고 단기적인 접근을 부여하는 데 사용될 수 있습니다.
이 가이드에서는 tbot
을 구성하여 Teleport에 등록된 리눅스 서버에 접근하는 데 사용할 수 있는 자격 증명을 생성하는 방법을 설명합니다. 이 가이드는 Teleport CLI tsh
와 OpenSSH 클라이언트를 사용하는 접근 방법을 다룹니다.
사전 요구 사항
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- 서버를 Teleport에 연결하지 않았다면, 서버 접근 시작 가이드를 따라주세요.
- 당신의 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
명령어를 실행할 수도 있습니다. tbot
은 이미 SSH를 통해 리눅스 호스트에 연결할 기계에 설치 및 구성되어 있어야 합니다. 자세한 내용은 배포 가이드를 참조하세요.
1단계/3. RBAC 구성
먼저, Teleport는 봇이 생성한 자격 증명이 인프라의 SSH 서버에 연결할 수 있도록 구성되어야 합니다. 이 예에서는 root
라는 사용자 이름에 대해 모든 SSH 노드에 접근할 수 있도록 부여할 것입니다. 필요한 권한을 부여하는 역할을 생성하고 이 역할을 봇에 할당함으로써 이를 수행합니다.
다음 콘텐츠로 role.yaml
이라는 파일을 만듭니다:
kind: role
version: v6
metadata:
name: example-role
spec:
allow:
# 리눅스 사용자 'root'에 로그인 허용.
logins: ['root']
# 어떤 노드에 연결 허용. ansible이 접근해야 하는 노드와 일치하도록
# 이러한 레이블을 조정하세요.
node_labels:
'*': '*'
example-role
을 사용 사례와 관련된 설명적인 이름으로 변경하세요.
이 자격 증명을 사용하여 실행해야 할 명령에 따라 root
가 아닌 다른 사용자에 대한 접근을 허가하도록 조정할 수도 있습니다.
생산 환경에서는 이 접근을 봇이 접근해야 하는 호스트로 제한하기 위해 node_labels
를 조정해야 합니다. 이는 최소 권한 원칙으로 알려져 있으며, 유출된 자격 증명이 초래할 수 있는 손상을 제한합니다.
tctl create -f ./role.yaml
을 사용하여 역할을 생성합니다.
이제 tctl bots update
를 사용하여 역할을 봇에 추가합니다. 배포 가이드에서 생성한 봇의 이름과 방금 생성한 역할의 이름인 example-role
로 example
을 교체합니다:
$ tctl bots update example --add-roles example-role
2단계/3. tbot
출력 구성
이제, tbot
은 SSH 인증서와 OpenSSH 구성을 생성하는 출력을 구성해야 합니다. 이를 위해 identity
출력 유형을 사용합니다.
출력은 목적지가 구성되어야 합니다. 이 예에서는 directory
목적지가 사용됩니다. 이는 이러한 자격 증명을 디스크의 지정된 디렉터리에 기록합니다. 이 디렉터리에 tbot
이 실행되는 리눅스 사용자가 쓸 수 있고, SSH를 사용할 리눅스 사용자가 읽을 수 있는지 확인하세요.
tbot
구성을 수정하여 identity
출력을 추가합니다:
outputs:
- type: identity
destination:
type: directory
# 이 가이드에서는 /opt/machine-id를 목적지 디렉토리로 사용합니다.
# 이를 사용자 정의할 수 있습니다. 여러 출력이 동일한
# 목적지를 공유할 수는 없습니다.
path: /opt/machine-id
tbot
을 백그라운드 서비스로 운영하는 경우 이를 재시작하십시오. tbot
을 원샷 모드로 실행 중인 경우, tbot
이 생성한 자격 증명을 사용하여 노드에 SSH로 연결하기 전에 실행해야 합니다.
3단계/3. 출력 자격 증명 사용
tbot
이 실행되거나 재시작된 후 /opt/machine-id
아래 여러 파일이 생성됩니다:
identity
: 이는tsh
가 인증하는 데 사용할 수 있는 자격 증명 묶음입니다.ssh_config
: 이는 OpenSSH 및 다른 도구와 함께 사용되어 연결할 때 올바른 자격 증명을 사용하여 Teleport 프록시 서비스의 구성을 지원합니다.known_hosts
: 이는 Teleport SSH 호스트 CA를 포함하고 SSH 클라이언트가 호스트의 인증서를 검증할 수 있도록 허용합니다.key-cert.pub
: 이는 Teleport SSH 사용자 CA에 의해 서명된 SSH 인증서입니다.key
: 이는 SSH 인증서를 사용하기 위해 필요한 개인 키입니다.
이러한 자격 증명은 Teleport의 CLI tsh
또는 OpenSSH 클라이언트 도구인 ssh
및 sftp
와 함께 사용할 수 있습니다.
tsh
를 사용하여 연결하기
tsh
를 tbot
의 identity 출력에 사용하려면, -i
플래그를 사용하여 identity
파일의 경로를 지정해야 합니다. 또한, 연결할 때 사용해야 하는 Teleport 프록시 서비스의 주소를 지정하기 위해 --proxy
를 사용해야 합니다.
이 예에서는 tsh
를 사용하여 example.teleport.sh:443
프록시를 통해 my-host
라는 노드에 연결하고 hostname
명령을 실행합니다:
tsh -i /opt/machine-id/identity --proxy example.teleport.sh:443 ssh root@my-host hostnamemy-host
OpenSSH를 사용하여 연결하기
OpenSSH를 identity 출력을 사용하여 연결하려면, -F
플래그와 함께 ssh_config
의 경로를 제공해야 합니다.
생성된 ssh_config
와 함께 Teleport 클러스터의 이름을 노드의 이름에 추가해야 하며, 이 예에서는 hostname
명령이 example.teleport.sh
클러스터의 my-host
노드에서 root
로 실행됩니다.
ssh -F /opt/machine-id/ssh_config root@my-host.example.teleport.sh hostnamemy-host
OpenSSH의 ssh_config
는 tsh
가 설치되어 있어야 합니다. 이는 tsh
가 OpenSSH 클라이언트를 Teleport의 포트 다중화와 호환되도록 만드는 데 사용되기 때문입니다.
기타 도구를 사용하여 연결하기
기타 SSH 도구와 통합하려면 먼저 ssh_config
와 호환되는지 확인해야 합니다. 이는 Ansible과 같은 여러 도구와 호환되며, "OpenSSH를 사용하여 연결하기"에서 제공된 지침으로 충분해야 합니다.
Ansible과 통합하고자 한다면 Ansible-specific guide를 참조하세요.
사용하는 도구가 ssh_config
와 호환되지 않는 경우, 머신 ID에서 생성된 자격 증명을 사용하도록 구성하는 것이 가능할 수 있습니다. SSH 클라이언트 인증서를 지원하고 ProxyCommand 또는 ProxyJump 기능을 지원해야 합니다.
다음 단계
- 사용 가능한 모든 구성 옵션을 탐색하기 위해 구성 참조를 읽어보세요.