Infograb logo
서버 액세스 시작 가이드

서버에서 Teleport SSH 서비스를 실행하고 이를 Teleport 클러스터에 등록하여 서버를 보호할 수 있습니다. 서버가 클러스터에 조인하면 Teleport RBAC 시스템이 서버에 대한 안전한 액세스를 시행하며, 관리자는 Teleport 감사 로그를 사용하여 보안 위협을 식별할 수 있습니다.

Teleport SSH 서비스는 Teleport 프록시 서비스에 대한 역 SSH 터널을 열고, SSH 클라이언트 트래픽은 이 터널을 사용하여 서버에 연결합니다. 이 설정은 바스티온 패턴과 유사합니다.

이 가이드는 다음과 같은 내용을 다룹니다:

  • 서버를 Teleport 클러스터에 등록하기.
  • Teleport를 사용하여 서버에 SSH로 접속하기.
  • Teleport 명령어를 사용하여 클러스터의 서버 리소스 검사하기.

Teleport를 사용하여 Kubernetes 노드에 대한 안전한 액세스를 활성화할 수 있습니다. 이를 위해 이 가이드의 지침에 따라 노드의 머신 이미지를 수정하여 Teleport SSH 서비스를 설치하고 실행하십시오. SSH 서비스를 Kubernetes 파드로 실행하지 마십시오. 사용자가 액세스하려는 서버에서 SSH 서비스 파드가 실행되고 있다는 보장이 없기 때문입니다.

Teleport Bastion

필수 조건

  • 실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.

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

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하십시오.

  • 리눅스 환경 (예: Ubuntu 20.04, CentOS 8.0 또는 Debian 10)에서 실행되는 호스트 하나. 이것은 Teleport 노드로 사용됩니다.
  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결할 수 있고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl 명령어를 실행할 수 있습니다.
    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.

Teleport를 운영 환경에서 실행할 때 보안 사고를 피하기 위해 다음의 모범 사례를 준수해야 합니다:

  • 필요하지 않는 한 운영 환경에서 sudo 사용을 피하십시오.
  • 새로운 비루트 사용자를 생성하고 Teleport 실험을 위해 테스트 인스턴스를 사용하십시오.
  • 필요하지 않은 한 비루트 사용자로 Teleport의 서비스를 실행하십시오. SSH 서비스만 루트 액세스를 요구합니다. Teleport가 < 1024 (예: 443 )로 번호 매겨진 포트에서 수신 대기하도록 하려면 루트 권한(또는 CAP_NET_BIND_SERVICE 권한)이 필요합니다.
  • 최소 권한 원칙을 따르십시오. 더 제한적인 역할로도 충분할 때 사용자에게 허용적인 역할을 부여하지 마십시오. 예를 들어, 클러스터 리소스에 액세스하고 편집할 수 있는 권한을 부여하는 내장된 access,editor 역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에 대해 최소한의 필수 권한을 가진 역할을 정의하고 액세스 요청을 구성하여 일시적으로 상승된 권한을 부여하십시오.
  • 새로운 데이터베이스나 애플리케이션과 같은 Teleport 리소스를 등록할 때 초대 토큰을 파일에 저장해야 합니다. 명령줄에 직접 토큰을 입력하면 악성 사용자가 손상된 시스템에서 history 명령을 실행하여 이를 볼 수 있습니다.

이러한 관행이 문서에서 사용된 예제에 반드시 반영되는 것은 아닙니다. 문서의 예제는 주로 데모 및 개발 환경을 위한 것입니다.

1/4단계. Linux 호스트에 Teleport 설치하기

  1. Linux 호스트는 개인 리소스가 될 것입니다. 초기 액세스, 구성 및 인스턴스 프로비저닝을 위해 포트 22를 열어야 합니다.

    인스턴스를 구성하고 시작한 후, tsh 도구와 SSH 모드에서 Teleport 사용 방법을 시연할 것입니다.

  2. Teleport SSH 서비스를 실행할 호스트에서 해당 환경에 따라 Teleport 설치 지침을 따릅니다.

    Linux 서버에 Teleport 설치하기:

    1. Teleport 에디션에 따라 edition를 다음 중 하나로 할당합니다:

      에디션
      Teleport Enterprise Cloudcloud
      Teleport Enterprise (자가 호스팅)enterprise
      Teleport Community Editionoss
    2. 설치할 Teleport 버전을 가져옵니다. 클러스터에서 자동 에이전트 업데이트가 활성화된 경우, 최신 Teleport 버전을 쿼리하여 업데이트된 내용과의 호환성을 확인합니다:

      TELEPORT_DOMAIN=example.teleport.com
      TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"

      그렇지 않으면, Teleport 클러스터의 버전을 가져옵니다:

      TELEPORT_DOMAIN=example.teleport.com
      TELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')"
    3. Linux 서버에 Teleport를 설치합니다:

      curl https://cdn.teleport.dev/install-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition

      설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 정의하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.

    다음으로, Teleport SSH 서비스를 시작하고 클러스터에 추가하기 위해 조인 토큰을 생성합니다.

2/4단계. 클러스터에 서버 추가하기

조인 토큰 생성하기

로컬 워크스테이션에서 서버를 Teleport 클러스터에 추가하기 위해 조인 토큰을 생성합니다:

토큰을 파일로 저장합시다
tctl tokens add --type=node --format=text > token.file

--type=node 는 Teleport 프로세스가 SSH 서버로 작동하고 조인하겠다는 것을 지정합니다.

> token.file 은 출력 내용을 token.file 이라는 파일 이름으로 저장하겠다는 것을 나타냅니다.

이는 동적으로 생성되는 토큰조차도 직접 공유되는 것을 최소화하는 데 도움이 됩니다.

서버를 클러스터에 조인하기

서버에서 token.file 을 적절하고 안전한 디렉토리에 저장합니다. 다음으로, Teleport의 SSH 서비스를 활성화하는 구성 파일을 생성합니다.

tele.example.com 을 Teleport 프록시 서비스의 주소로 변경합니다. --token 플래그를 token.file 을 저장한 경로로 지정합니다.

구성 생성

sudo teleport node configure \ --output=file:///etc/teleport.yaml \ --token=/path/to/token.file \ --proxy=tele.example.com:443

mytenant.teleport.sh 를 Teleport 클라우드 테넌트 주소로 변경합니다. --token 플래그를 token.file 을 저장한 경로로 지정합니다.

구성 생성

sudo teleport node configure \ --output=file:///etc/teleport.yaml \ --token=/path/to/token.file \ --proxy=mytenant.teleport.sh:443

위의 teleport node configure 명령어는 /etc/teleport.yaml 에 구성 파일을 생성했습니다. 마지막 단계는 이 구성을 가리키며 Teleport를 시작하는 것입니다:

호스트가 부팅될 때 Teleport SSH 서비스가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 Teleport SSH 서비스를 설치한 방법에 따라 다릅니다.

Teleport SSH 서비스를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:

sudo systemctl enable teleport
sudo systemctl start teleport

Teleport SSH 서비스를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:

sudo teleport install systemd -o /etc/systemd/system/teleport.service
sudo systemctl enable teleport
sudo systemctl start teleport

systemctl status teleport 로 Teleport SSH 서비스의 상태를 확인하고, journalctl -fu teleport 로 로그를 볼 수 있습니다.

웹 UI에 접근하기

Teleport 웹 UI에 접근할 수 있는 로컬 사용자를 생성하려면 다음 명령어를 실행하십시오:

tctl users add myuser --roles=editor,access --logins=root,ubuntu,ec2-user

이 명령어는 비밀번호를 생성하고 myuser 에 대한 다중 인증을 설정할 수 있는 초기 로그인 링크를 생성합니다.

참고

우리는 최소 권한 원칙에 따라 myuser 에게 editoraccess 역할만 부여했습니다.

이제 myuser 로 로그인하면 Teleport 웹 UI에서 서버를 볼 수 있습니다:

웹 UI에서의 두 서버

3/4단계. 서버에 SSH 접속하기

클러스터가 실행 중이므로, 이제 서버에 연결하는 것이 얼마나 쉬운지 살펴보겠습니다.

클러스터에 SSH 접속하기 위해 tsh 를 사용할 수 있습니다:

클러스터에 로그인하기

로컬 머신에서 Teleport Proxy Service의 주소에 --proxy 플래그를 할당하여 tsh 를 통해 클러스터에 로그인하십시오:

tsh로 로그인

tsh login --proxy=tele.example.com --user=myuser

로컬 머신에서 Teleport Cloud 테넌트의 주소에 --proxy 플래그를 할당하여 tsh 를 통해 클러스터에 로그인하십시오:

tsh로 로그인

tsh login --proxy=mytenant.teleport.sh:443 --user=myuser

이전에 설정한 비밀번호와 두 번째 인증요소를 입력하라는 메시지가 표시됩니다.

myuser 는 이제 다음과 유사한 내용을 보게 됩니다:

> 프로필 URL:      https://tele.example.com:443
사용자:            myuser
클러스터:          tele.example.com
역할:              access, editor
로그인:             root, ubuntu, ec2-user
Kubernetes:         비활성화
유효 기간:        2021-04-30 06:39:13 -0500 CDT [12시간 유효]
확장 기능:         permit-agent-forwarding, permit-port-forwarding, permit-pty

이 예에서는 myuser 가 Teleport SSH를 통해 tele.example.com 클러스터에 로그인한 상태입니다.

> 프로필 URL:        https://mytenant.teleport.sh:443
사용자:            myuser
클러스터:          mytenant.teleport.sh
역할:              access, editor
로그인:             root, ubuntu, ec2-user
Kubernetes:         비활성화
유효 기간:        2021-04-30 06:39:13 -0500 CDT [12시간 유효]
확장 기능:         permit-agent-forwarding, permit-port-forwarding, permit-pty

이 예에서는 myuser 가 Teleport SSH를 통해 mytenant.teleport.sh 클러스터에 로그인한 상태입니다.

클러스터 리소스 표시

myuser 는 클러스터의 서버 이름을 찾기 위해 다음 명령을 실행할 수 있으며, 이는 SSH 연결을 설정하는 데 사용됩니다:

클러스터 리소스 표시

tsh ls

이 예제에서, 바스천 호스트는 아래의 가장 아래 줄에 위치해 있습니다:

노드 이름          주소            레이블
---------------- -------------- --------------------------------------
ip-172-31-35-170 ⟵ 터널
ip-172-31-41-144 127.0.0.1:3022 env=example, hostname=ip-172-31-41-144

서버에 연결

myuser 는 로컬에서 다음 명령을 실행하여 바스천 호스트 서버에 SSH로 접속할 수 있습니다:

tsh를 사용하여 서버에 ssh로 접속

tsh ssh root@ip-172-31-41-144

이제, 그들은:

  • tsh ssh 명령에서 적절한 IP 주소를 사용하여 클러스터 내의 다른 서버에 연결할 수 있습니다.
  • 리눅스 파일 시스템을 탐색할 수 있습니다.
  • 원하는 명령을 실행할 수 있습니다.

myuser 가 실행한 모든 명령은 기록되며, Teleport 웹 UI에서 재생할 수 있습니다.

tsh ssh 명령은 사용자가 서드파티 도구를 사용하여 서버에 SSH로 연결할 수 있는 모든 작업을 수행할 수 있도록 합니다. 두 개의 동등한 명령을 비교해 보세요:

tsh ssh root@ip-172-31-41-144

ssh 클라이언트를 사용하려면 SSH 구성 파일을 생성하고 노드 이름 뒤에 클러스터 이름을 붙입니다.

tsh config > ssh_config_teleport
ssh -F ssh_config_teleport root@ip-172-31-41-144.example.teleport.sh

4/4단계. tsh와 통합 리소스 카탈로그를 사용하여 클러스터를 조사하기

이제 myuser 는 클러스터 내의 다른 서버에 SSH로 접속하고, 리눅스 파일 시스템을 탐색하며, 명령을 실행할 수 있는 능력을 갖추게 되었습니다.

  • 그들은 정의된 역할 덕분에 클러스터 내의 모든 리소스에 대한 가시성을 가지고 있습니다.
  • 또한 특정 레이블이 지정된 서버나 서버 그룹을 빠르게 볼 수 있습니다.

통합 리소스 카탈로그 표시

바스천 호스트 콘솔 내에서 다음 명령을 실행합니다:

서버 목록

tctl nodes ls

이 명령은 모든 쿼리된 리소스를 하나의 보기로 통합 리소스 카탈로그를 표시합니다:

노드 이름         UUID                                 주소          레이블
---------------- ------------------------------------ -------------- -------------------------------------
ip-172-31-35-170 4980899c-d260-414f-9aea-874feef71747
ip-172-31-41-144 f3d2a65f-3fa7-451d-b516-68d189ff9ae5 127.0.0.1:3022 env=example,hostname=ip-172-31-41-144

맨 오른쪽의 "레이블" 열을 주목하세요. myuser 는 다음 명령을 사용하여 공유 레이블이 있는 모든 리소스를 쿼리할 수 있습니다:

레이블이 있는 모든 서버 쿼리

tsh ls env=example

사용자 정의 레이블은 teleport.yaml 구성 파일에서 또는 서버 생성 시 정의할 수 있습니다.

이것은 더 고급 쿼리를 가능하게 하는 편리한 기능입니다. 예를 들어 IP 주소가 변경되는 경우, 관리자는 해당 레이블에 따라 현재 서버를 신속하게 찾을 수 있습니다.

모든 서버에서 레이블로 명령 실행

myuser 는 레이블을 공유하는 모든 서버에서 명령을 실행할 수 있으며, 이를 통해 반복적인 작업을 크게 간소화할 수 있습니다. 예를 들어, 다음 명령은 각 서버에서 ls 명령을 실행하고 결과를 터미널에 표시합니다:

레이블이 있는 모든 서버에서 ls 명령 실행

tsh ssh root@env=example ls

선택 사항: 서버 보안 강화

이전에는 Teleport를 쉽게 구성하고 설치하기 위해 22 포트를 개방하도록 Linux 인스턴스를 설정했습니다. Teleport SSH와 일반 ssh 명령을 비교해 보십시오.

Teleport 서버의 보안을 강화하려면:

  • Teleport 서버가 구성되고 실행 중이므로 사설 Linux 인스턴스에서 22 포트를 닫으십시오.
  • 자가 호스팅 배포의 경우, 선택적으로 Proxy Service 호스트에서 22 포트를 닫으십시오.
  • tsh ssh 를 사용하여 사설 인스턴스 및 자가 호스팅 배포의 Proxy Service 호스트에 완전히 연결할 수 있습니다.

결론

요약하자면, 이 가이드는 다음을 설명했습니다:

  • SSH 서버를 클러스터에 설정하고 추가하는 방법.
  • 리소스를 관리하고 조사하기 위해 tsh 를 사용하여 클러스터에 연결하는 방법.

리소스를 종료하고 정리하거나, 추가적인 시작하기 연습에 사용할 수 있습니다.

다음 단계

  • 이 가이드는 서버에 접근하기 위해 로컬 사용자를 생성하는 방법을 보여주지만, Teleport 사용자가 단일 로그인 제공자를 통해 인증되도록 활성화할 수도 있습니다. 자세한 내용은 문서를 읽어보십시오.
  • 참조 문서를 통해 Teleport tsh 에 대해 더 알아보십시오.
  • Teleport에서 사용하는 포트 목록을 보려면 네트워킹 가이드를 참조하십시오.

리소스

Teleport 원문 보기