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