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

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

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

이 가이드는 여러분이 다음을 수행하는 방법을 보여줍니다:

  • Teleport 클러스터에 서버 등록하기.
  • Teleport를 사용하여 서버에 SSH 연결하기.
  • Teleport 명령어를 사용하여 클러스터 내 서버 리소스 확인하기.

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

Teleport Bastion

필수 조건

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

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

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

  • Linux 환경(예: Ubuntu 20.04, CentOS 8.0, 또는 Debian 10)에서 실행되는 호스트 1대. 이는 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 명령어를 실행할 수도 있습니다.

프로덕션에서 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-v16.2.0.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 서비스가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 Teleport SSH 서비스를 설치한 방법에 따라 다릅니다.

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

sudo systemctl enable teleport
sudo systemctl start teleport

Teleport SSH 서비스를 실행할 호스트에서 Teleport에 대한 시스템 데몬 서비스 구성을 생성하고, Teleport 서비스를 활성화한 후 Teleport를 시작하십시오:

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

Teleport SSH 서비스의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 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 연결하기

클러스터를 설정했으니 서버에 연결하는 것이 얼마나 쉬운지 보겠습니다.

tsh를 사용하여 클러스터에 SSH 연결할 수 있습니다:

클러스터에 로그인하기

로컬 컴퓨터에서 tsh를 통해 클러스터에 로그인하고 --proxy 플래그를 Teleport 프록시 서비스의 주소로 설정하십시오:

tsh를 통해 로그인

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

로컬 컴퓨터에서 tsh를 통해 클러스터에 로그인하고 --proxy 플래그를 Teleport 클라우드 테넌트의 주소로 설정하십시오:

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
쿠버네티스:         비활성화
유효 기간:        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
쿠버네티스:         비활성화
유효 기간:        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 연결할 수 있습니다:

서버에 ssh로 접속하기 위해 tsh 사용

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

이제 그들은 다음을 수행할 수 있습니다:

  • 적절한 IP 주소를 사용하여 클러스터 내의 다른 서버에 연결하기.
  • Linux 파일 시스템 탐색하기.
  • 원하는 명령 실행하기.

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

tsh ssh 명령을 사용하면 사용자가 제3자 도구를 사용하여 서버에 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로 연결할 수 있는 능력을 갖추었으며, Linux 파일 시스템을 탐색하고 명령을 실행할 수 있습니다.

  • 이들은 정의되고 할당된 역할 덕분에 클러스터 내 모든 리소스를 볼 수 있습니다.
  • 특정 레이블이 할당된 모든 서버 또는 서버 그룹을 신속하게 볼 수도 있습니다.

통합 리소스 카탈로그 표시하기

배스천 호스트 콘솔에서 다음 명령을 실행하십시오:

서버 목록 표시

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

선택 사항: 서버 보안 강화하기

이전에 Linux 인스턴스를 구성하여 Teleport를 쉽게 설정하고 설치할 수 있도록 포트 22를 열어두었습니다. 일반적인 ssh 명령과 비교하여 Teleport SSH를 확인해 보시기 바랍니다.

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

  • Teleport 서버가 구성되고 실행 중인 현재 개인 Linux 인스턴스에서 포트 22를 닫습니다.
  • 자체 호스팅 배포의 경우, 선택적으로 프록시 서비스 호스트에서 포트 22를 닫습니다.
  • tsh ssh를 사용하여 개인 인스턴스와 자체 호스팅 배포의 프록시 서비스 호스트에 완전히 연결할 수 있습니다.

결론

이 가이드는 다음을 설명했습니다:

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

자원들을 종료, 정리 및 삭제하거나 이후 시작하기 위한 연습에서 사용할 수 있습니다.

다음 단계

리소스

Teleport 원문 보기