서버 액세스 시작하기 가이드
Teleport v18.9서버에서 Teleport SSH Service를 실행하고 Teleport 클러스터에 등록하면 해당 서버를 Teleport로 보호할 수 있습니다. 이 가이드에서는 다음 방법을 안내합니다: Teleport SSH Service는 Teleport Proxy Service로 역방향 SSH 터널을 열고, SSH 클라이언트 트래픽이 이 터널을 통해 서버에 연결됩니다.
서버에서 Teleport SSH Service를 실행하고 Teleport 클러스터에 등록하면 해당 서버를 Teleport로 보호할 수 있습니다.
이 가이드에서는 다음 방법을 안내합니다:
- 서버를 Teleport 클러스터에 등록하기.
- Teleport를 사용하여 서버에 SSH 접속하기.
- Teleport 명령어로 클러스터의 서버 리소스 검사하기.
작동 방식#
Teleport SSH Service는 Teleport Proxy Service로 역방향 SSH 터널을 열고, SSH 클라이언트 트래픽이 이 터널을 통해 서버에 연결됩니다. 이 설정은 배스천 패턴과 유사합니다.
서버가 클러스터에 참여하면 Teleport RBAC 시스템이 서버에 대한 안전한 접근을 강제하고, 관리자는 Teleport 감사 로그를 통해 보안 위협을 파악할 수 있습니다.
Teleport를 사용하여 Kubernetes 노드에 안전하게 접근할 수 있습니다. 이를 위해 이 가이드의 지침에 따라 Teleport SSH Service를 설치하고 실행하도록 노드의 머신 이미지를 수정합니다. SSH Service를 Kubernetes 파드로 실행하지 마십시오. SSH Service 파드가 사용자가 접근하려는 서버에서 실행 중이라는 보장이 없습니다.
소스 코드 보기
architecture-beta
group priv(carbon-virtual-private-cloud)[Private Network]
group priv2(carbon-virtual-private-cloud)[Teleport Cloud or Private Network]
group server(carbon-bare-metal-server)[Linux Server] in priv
service audit_log(carbon-ibm-db2)[Teleport Audit Log] in priv2
service auth(teleport-logo-purple)[Teleport Auth Service] in priv2
service client(carbon-user)[SSH Client]
service proxy(teleport-logo-purple)[Teleport Proxy Service]
service ssh_service(teleport-logo-purple)[Teleport SSH Service] in server
ssh_service:L --> R:proxy
client:R --> L:proxy
proxy:B <--> T:auth
auth:R --> L:audit_log</code></pre></details></div>
사전 요구사항#
-
실행 중인 Teleport 클러스터. Teleport를 시작하려면
무료 체험판에 가입하거나 데모
환경을 구성하세요.
-
tctl and tsh clients.
Installing `tctl` and `tsh` clients
-
Teleport 클러스터의 버전을 확인합니다. tctl and tsh clients는 Teleport 클러스터
버전보다 최대 한 개의 메이저 버전까지만 뒤처질 수 있습니다. Proxy Service의
/v1/webapi/find로 GET 요청을 보내고 JSON 쿼리 도구를 사용하여 클러스터
버전을 확인합니다. teleport.example.com:443를 Teleport Proxy
Service의 웹 주소로 바꿉니다:
$ TELEPORT_DOMAIN=teleport.example.com:443
$ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')"
-
사용 중인 플랫폼에 대한 지침에 따라 tctl and tsh clients를 설치합니다:
Mac
`tctl` and `tsh` clients가 포함된, 서명된 Teleport macOS .pkg 설치 프로그램을 다운로드합니다:
```code
$ curl -O https://cdn.teleport.dev/teleport-${TELEPORT_VERSION?}.pkg
```
Finder에서 `pkg` 파일을 더블 클릭하여 설치를 시작합니다.
Warning
Homebrew를 사용하여 Teleport를 설치하는 것은 지원되지 않습니다. Homebrew의
Teleport 패키지는 Teleport에서 유지 관리하지 않으므로 신뢰성이나 보안을
보장할 수 없습니다.
Windows - Powershell
```code
$ curl.exe -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-windows-amd64-bin.zip
# Unzip the archive and move the `tctl` and `tsh` clients to your %PATH%
# NOTE: Do not place the `tctl` and `tsh` clients in the System32 directory, as this can cause issues when using WinSCP.
# Use %SystemRoot% (C:\Windows) or %USERPROFILE% (C:\Users\<username>) instead.
```
Linux
Linux 설치판의 모든 Teleport 바이너리에는 `tctl` and `tsh` clients가 포함되어 있습니다. RPM/DEB
패키지 및 i386/ARM/ARM64용 다운로드를 포함한 더 많은 옵션은
[설치 페이지](../installation/installation.mdx)를 참조하세요.
```code
$ curl -O https://cdn.teleport.dev/teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ tar -xzf teleport-v${TELEPORT_VERSION?}-linux-amd64-bin.tar.gz
$ cd teleport
$ sudo ./install
# Teleport binaries have been copied to /usr/local/bin
```
- Linux 환경(Amazon Linux, Ubuntu, CentOS Stream, Debian 등)을 실행하는 호스트 하나. 이 호스트가 Teleport 노드로 사용됩니다.
Teleport cluster에 연결할 수 있는지 확인하려면 tsh login으로 로그인한 다음,
현재 자격 증명으로 tctl 명령을 실행할 수 있는지 확인합니다.
예를 들어, teleport.example.com에 cluster 내 Teleport Proxy Service의
도메인 이름을, email@example.com에 Teleport 사용자 이름을 지정하여
다음 명령을 실행합니다:
$ tsh login --proxy=teleport.example.com --user=email@example.com
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
cluster에 연결하여 tctl status 명령을 실행할 수 있다면, 현재 자격 증명을 사용하여
워크스테이션에서 이후의 tctl 명령을 실행할 수 있습니다.
자체 Teleport cluster를 호스팅하는 경우, 전체 권한을 얻기 위해 Teleport Auth Service를
호스팅하는 컴퓨터에서 tctl 명령을 실행할 수도 있습니다.
프로덕션 보안 모범 사례
Teleport를 프로덕션 환경에서 실행할 때는 보안 사고를 방지하기 위해 다음 모범 사례를 준수해야 합니다:
- 꼭 필요한 경우가 아니면 프로덕션 환경에서
sudo사용을 피하십시오. - 새로운 non-root 사용자를 생성하고, Teleport를 테스트할 때는 테스트 인스턴스를 사용하십시오.
- 필요한 경우가 아니면 Teleport의 서비스를 non-root 사용자로 실행하십시오. root
접근이 필요한 것은 SSH Service뿐입니다. Teleport가
1024보다 작은 번호의 포트(예:443)에서 수신 대기하도록 하려면 root 권한(또는CAP_NET_BIND_SERVICE기능)이 필요하다는 점에 유의하십시오. - 최소 권한의 원칙을 따르십시오. 더 제한적인 역할로 충분한 경우 사용자에게
허용 범위가 넓은 역할을 부여하지 마십시오.
예를 들어, 모든 클러스터 리소스에 접근하고 편집할 수 있는 권한을 부여하는 내장
access,editor역할을 사용자에게 할당하지 마십시오. 대신 각 사용자에게 필요한 최소한의 권한으로 역할을 정의하고, 일시적으로 상승된 권한을 제공하기 위해 Access Request를 구성하십시오. - Teleport 리소스(예: 새 데이터베이스나 애플리케이션)를 등록할 때는
초대 토큰을 파일에 저장해야 합니다.
토큰을 명령줄에 직접 입력하면, 악의적인 사용자가 침해된 시스템에서
history명령을 실행하여 이를 볼 수 있습니다.
이러한 사례가 문서에서 사용된 예시에 반드시 반영되어 있는 것은 아니라는 점에 유의하십시오. 문서의 예시는 주로 시연 및 개발 환경을 위한 것입니다.
1단계/4단계. Linux 호스트에 Teleport 설치#
-
Linux 호스트는 프라이빗 리소스가 됩니다. 초기 접근, 구성 및 인스턴스 프로비저닝을 위해 포트 22를 열어 두십시오.
인스턴스를 구성하고 실행한 다음,
tsh도구와 SSH 모드의 Teleport를 사용하는 방법을 보여드리겠습니다. -
Teleport SSH Service를 실행할 호스트에서 환경에 맞는 지침에 따라 Teleport를 설치합니다.
Linux 서버에 Teleport Agent를 설치하려면:
권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.
-
teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오. -
클러스터의 설치 스크립트를 실행하십시오:
$ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash다음으로, Teleport SSH Service를 시작하고 클러스터에 추가하기 위한 조인 토큰을 생성합니다.
2단계/4단계. 클러스터에 서버 추가#
조인 토큰 생성#
로컬 워크스테이션에서 서버를 Teleport 클러스터에 추가하기 위한 조인 토큰을 생성합니다:
Let's save the token to a file
$ tctl tokens add --type=node --format=text > token.file
--type=node는 Teleport 프로세스가 SSH 서버로 동작하여 참여함을 지정합니다.
> token.file은 출력을 token.file이라는 파일에 저장하겠다는 의미입니다.
이는 동적으로 생성되더라도 토큰의 직접 공유를 최소화하는 데 도움이 됩니다.
서버를 클러스터에 참여시키기#
서버에서 token.file을 적절하고 안전한 디렉터리(읽기 권한이 있는 위치)에 저장합니다. 다음으로 Teleport의 SSH Service를 활성화하는 구성 파일을 생성합니다. 이 구성 파일은 나중에 검색할 수 있도록 보호된 서버에 env=example 레이블도 할당합니다.
tele.example.com을 Teleport Proxy Service의 주소로 변경합니다. --token 플래그에는 token.file을 저장한 경로를 지정합니다.
# Generate config
$ sudo teleport node configure \
--labels=env=example \
--output=file:///etc/teleport.yaml \
--token=/path/to/token.file \
--proxy=tele.example.com:443
mytenant.teleport.sh를 Teleport Cloud 테넌트 주소로 변경합니다. --token 플래그에는 token.file을 저장한 경로를 지정합니다.
# Generate config
$ sudo teleport node configure \
--labels=env=example \
--output=file:///etc/teleport.yaml \
--token=/path/to/token.file \
--proxy=mytenant.teleport.sh:443
위의 teleport node configure 명령은 /etc/teleport.yaml에 구성 파일을 생성합니다. 마지막 단계는 이 구성을 사용하여 Teleport를 시작하는 것입니다:
systemd 서비스를 생성하여 호스트가 부팅될 때 the Teleport SSH Service이 자동으로 시작되도록 구성합니다. 지침은 the Teleport SSH Service을 어떻게 설치했는지에 따라 다릅니다.
Package Manager
the Teleport SSH Service을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
$ sudo systemctl enable teleport
$ sudo systemctl start teleport
TAR Archive
the Teleport SSH Service을 실행할 호스트에서 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로 the Teleport SSH Service의 상태를 확인하고 journalctl -fu teleport로
로그를 볼 수 있습니다.
Web UI 접근#
Teleport Web UI에 접근할 수 있는 로컬 사용자를 생성하려면 다음 명령을 실행합니다:
$ tctl users add myuser --roles=editor,access --logins=root,ubuntu,ec2-user
이 명령은 myuser의 비밀번호를 설정하고 다단계 인증을 구성할 수 있는 초기 로그인 링크를 생성합니다.
최소 권한 원칙에 따라 myuser에게는 editor와 access 역할만 부여했습니다.
myuser로 로그인하면 Teleport Web UI에서 서버를 확인할 수 있습니다:

3단계/4단계. 서버에 SSH 접속#
클러스터가 실행 중이므로 이제 서버에 쉽게 연결하는 방법을 살펴보겠습니다.
tsh를 사용하여 클러스터에 SSH 접속할 수 있습니다:
클러스터 로그인#
로컬 머신에서 tsh를 통해 클러스터에 로그인합니다. --proxy 플래그에 Teleport Proxy Service의 주소를 지정합니다:
# Log in through tsh
$ tsh login --proxy=tele.example.com --user=myuser
로컬 머신에서 tsh를 통해 클러스터에 로그인합니다. --proxy 플래그에 Teleport Cloud 테넌트 주소를 지정합니다:
# Log in through tsh
$ tsh login --proxy=mytenant.teleport.sh:443 --user=myuser
이전에 설정한 비밀번호와 인증 요소를 입력하라는 메시지가 표시됩니다.
myuser는 다음과 유사한 출력을 보게 됩니다:
> Profile URL: https://tele.example.com:443
Logged in as: myuser
Cluster: tele.example.com
Roles: access, editor
Logins: root, ubuntu, ec2-user
Kubernetes: disabled
Valid until: 2021-04-30 06:39:13 -0500 CDT [valid for 12h0m0s]
Extensions: permit-agent-forwarding, permit-port-forwarding, permit-pty
이 예시에서 myuser는 이제 Teleport SSH를 통해 tele.example.com 클러스터에 로그인되었습니다.
> Profile URL: https://mytenant.teleport.sh:443
Logged in as: myuser
Cluster: mytenant.teleport.sh
Roles: access, editor
Logins: root, ubuntu, ec2-user
Kubernetes: disabled
Valid until: 2021-04-30 06:39:13 -0500 CDT [valid for 12h0m0s]
Extensions: permit-agent-forwarding, permit-port-forwarding, permit-pty
이 예시에서 myuser는 이제 Teleport SSH를 통해 mytenant.teleport.sh 클러스터에 로그인되었습니다.
클러스터 리소스 표시#
myuser는 SSH 연결 설정에 사용되는 클러스터 서버 이름을 확인하기 위해 다음 명령을 실행할 수 있습니다:
# Display cluster resources
$ tsh ls
이 예시에서 배스천 호스트는 아래 마지막 줄에 위치합니다:
Node Name Address Labels
---------------- -------------- --------------------------------------
ip-172-31-35-170 ⟵ Tunnel
ip-172-31-41-144 127.0.0.1:3022 env=example, hostname=ip-172-31-41-144
서버 연결#
myuser는 로컬에서 다음 명령을 실행하여 배스천 호스트 서버에 SSH 접속할 수 있습니다:
# Use tsh to ssh into a server
$ tsh ssh root@ip-172-31-41-144
이제 다음 작업이 가능합니다:
tsh ssh명령에서 적절한 IP 주소를 사용하여 클러스터의 다른 서버에 연결.- Linux 파일 시스템 탐색.
- 원하는 명령 실행.
myuser가 실행한 모든 명령은 기록되며 Teleport Web 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 접속하고, Linux 파일 시스템을 탐색하며, 명령을 실행할 수 있습니다.
- 정의된 역할에 따라 클러스터 내 모든 리소스에 대한 가시성을 가집니다.
- 특정 레이블이 할당된 서버나 서버 그룹을 빠르게 조회할 수 있습니다.
통합 리소스 카탈로그 표시#
배스천 호스트 콘솔에서 다음 명령을 실행합니다:
# List servers
$ tctl nodes ls
이 명령은 쿼리된 모든 리소스를 하나의 뷰로 표시하는 통합 리소스 카탈로그를 보여줍니다:
Nodename UUID Address Labels
---------------- ------------------------------------ -------------- -------------------------------------
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
가장 오른쪽의 "Labels" 열에 주목하세요. myuser는 다음 명령을 사용하여 공유 레이블이 있는 모든 리소스를 쿼리할 수 있습니다:
# Query all servers with a label
$ tsh ls env=example
커스터마이즈된 레이블은 teleport.yaml 구성 파일이나 서버 생성 시 정의할 수 있습니다.
이 기능은 고급 쿼리를 가능하게 하는 편리한 기능입니다. 예를 들어 IP 주소가 변경되더라도 관리자는 레이블이 변경되지 않으므로 해당 레이블로 현재 서버를 빠르게 찾을 수 있습니다.
레이블이 있는 모든 서버에서 명령 실행#
myuser는 또한 레이블을 공유하는 모든 서버에서 명령을 실행하여 반복 작업을 크게 단순화할 수 있습니다. 예를 들어, 다음 명령은 각 서버에서 ls 명령을 실행하고 터미널에 결과를 표시합니다:
# Run the ls command on all servers with a label
$ tsh ssh root@env=example ls
선택 사항: 서버 강화#
이전에 Teleport를 구성하고 설치하기 쉽도록 Linux 인스턴스에 포트 22를 열어 두었습니다. 일반적인 ssh 명령과 Teleport SSH를 자유롭게 비교해 보세요.
Teleport 서버를 강화하려면:
- Teleport 서버가 구성되고 실행 중이므로 프라이빗 Linux 인스턴스에서 포트
22를 닫습니다. - 셀프 호스팅 배포의 경우, 선택적으로 Proxy Service 호스트에서 포트
22를 닫습니다. tsh ssh를 사용하여 프라이빗 인스턴스에 완전히 연결할 수 있으며, 셀프 호스팅 배포의 경우 Proxy Service 호스트에도 연결할 수 있습니다.
결론#
이 가이드에서 설명한 내용을 정리합니다:
- SSH 서버를 설정하고 클러스터에 추가하는 방법.
tsh를 사용하여 클러스터에 연결하고 리소스를 관리 및 검사하는 방법.
리소스를 종료, 정리, 삭제하거나 추가적인 시작하기 연습에 활용해도 됩니다.
다음 단계#
- 이 가이드에서는 서버에 접근하기 위해 로컬 사용자를 생성하는 방법을 보여주었지만, Teleport 사용자가 Single Sign-On 공급자를 통해 인증하도록 설정할 수도 있습니다. 자세한 내용은 문서를 참조하세요.
- 참조 문서를 통해 Teleport
tsh에 대해 더 알아보세요. - Teleport에서 사용하는 전체 포트 목록은 네트워킹 가이드를 참조하세요.
참고 자료#
- SSH 배스천 호스트 설정하기
- Teleport SSH 서버 발표
- 올바른 SSH 사용 방법
- OpenSSH와 Teleport SSH 중 어떤 것이 적합한지 고려해 보세요.
- 레이블