인포레터에서 최신 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 기능을 지원해야 합니다.
다음 단계
- 구성 참조를 읽어 모든 사용 가능한 구성 옵션을 탐색하세요.