Infograb logo
서버 접근을 위한 머신 ID

Teleport는 서버에 대한 SSH 접근을 보호하고 제어합니다. 머신 ID는 이 서버에 대해 안전하고 단기적인 접근을 부여하는 데 사용될 수 있습니다.

이 가이드에서는 tbot을 구성하여 Teleport에 등록된 리눅스 서버에 접근하는 데 사용할 수 있는 자격 증명을 생성하는 방법을 설명합니다. 이 가이드는 Teleport CLI tsh와 OpenSSH 클라이언트를 사용하는 접근 방법을 다룹니다.

사전 요구 사항

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

  • tctl 관리 도구와 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • 서버를 Teleport에 연결하지 않았다면, 서버 접근 시작 가이드를 따라주세요.
  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl 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-roleexample을 교체합니다:

$ 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 클라이언트 도구인 sshsftp와 함께 사용할 수 있습니다.

tsh를 사용하여 연결하기

tshtbot의 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 hostname
my-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 hostname
my-host

OpenSSH의 ssh_configtsh가 설치되어 있어야 합니다. 이는 tsh가 OpenSSH 클라이언트를 Teleport의 포트 다중화와 호환되도록 만드는 데 사용되기 때문입니다.

기타 도구를 사용하여 연결하기

기타 SSH 도구와 통합하려면 먼저 ssh_config와 호환되는지 확인해야 합니다. 이는 Ansible과 같은 여러 도구와 호환되며, "OpenSSH를 사용하여 연결하기"에서 제공된 지침으로 충분해야 합니다.

Ansible과 통합하고자 한다면 Ansible-specific guide를 참조하세요.

사용하는 도구가 ssh_config와 호환되지 않는 경우, 머신 ID에서 생성된 자격 증명을 사용하도록 구성하는 것이 가능할 수 있습니다. SSH 클라이언트 인증서를 지원하고 ProxyCommand 또는 ProxyJump 기능을 지원해야 합니다.

다음 단계

  • 사용 가능한 모든 구성 옵션을 탐색하기 위해 구성 참조를 읽어보세요.
Teleport 원문 보기