Teleport 접근 제어 시작하기
Teleport 역할 기반 접근 제어(RBAC)는 인프라 내에서 누가 무엇에 접근할 수 있는지 관리하는 시스템입니다. 이 가이드는 리소스에 레이블을 적용하고, 최소 역할을 설정하고, 특정 역할에서 사용 가능한 리소스에 접근하는 과정을 안내하여 Teleport의 RBAC를 이해하는 데 도움이 됩니다.
Teleport 역할 기반 접근 제어(RBAC)는 인프라 내에서 누가 무엇에 접근할 수 있는지 관리하는 시스템입니다. 사용자에게 직접 권한을 할당하는 대신, 권한 세트를 정의하는 역할을 만든 다음 해당 역할을 사용자에게 할당합니다.
이 가이드는 리소스에 레이블을 적용하고, 최소 역할을 설정하고, 특정 역할에서 사용 가능한 리소스에 접근하는 과정을 안내하여 Teleport의 RBAC를 이해하는 데 도움이 됩니다.
작동 방식#
이 가이드에서는 Docker 컨테이너와 Teleport SSH Service를 사용하여 Teleport에 서버를 등록하고 서버 접근을 위한 RBAC 규칙을 적용하는 방법을 설명합니다. 예제에서는 Teleport로 보호된 서버를 사용하지만, 인프라 리소스 접근을 위한 RBAC 규칙 적용은 모든 Teleport로 보호된 리소스에서 유사하게 작동합니다.
사전 요구 사항#
-
A running Teleport cluster. If you want to get started with Teleport, sign up for a free trial or set up a demo environment.
-
The
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Determine the version of your Teleport cluster. The
tctlandtshclients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at/v1/webapi/findand use a JSON query tool to obtain your cluster version. Replace with the web address of your Teleport Proxy Service:$ TELEPORT_DOMAIN= $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
Follow the instructions for your platform to install
tctlandtshclients:
-
To check that you can connect to your Teleport cluster, sign in with tsh login, then
verify that you can run tctl commands using your current credentials.
For example, run the following command, assigning to the domain name of the Teleport Proxy Service in your cluster and to your Teleport username:
$ tsh login --proxy= --user=
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
If you can connect to the cluster and run the tctl status command, you can use your
current credentials to run subsequent tctl commands from your workstation.
If you host your own Teleport cluster, you can also run tctl commands on the computer that
hosts the Teleport Auth Service for full permissions.
- 조인 토큰과 다른 역할을 생성할 권한이 있는 Teleport 사용자. 사전 설정
editor역할이 있는 데모 클러스터를 사용하는 것을 권장합니다. - 워크스테이션에 Docker가 설치되어 있어야 합니다. Docker는 이 가이드에서 사용하는 로컬 데모 환경에만 필요합니다. Docker 설치 지침은 Docker 웹사이트에서 확인할 수 있습니다. Docker 없이 Teleport에 서버를 등록하려면 서버 접근 시작하기 가이드를 참조하세요.
1/3단계. 레이블로 리소스 등록#
이 섹션에서는 Teleport 클러스터에 두 개의 서버를 등록합니다. 하나의 서버에는 env:local-dev 레이블이 있고 다른 하나에는 env:local-prod 레이블이 있습니다. 이 가이드의 뒷부분에서 env:local-dev 레이블이 있는 서버에 대한 접근을 허용하고 env:local-prod 레이블에 대한 접근을 거부하는 역할을 만들 것입니다.
이 지침을 따르기 전에 에 Teleport 클러스터 호스트명과 포트를 할당합니다(scheme(https://)은 제외).
env:local-dev 레이블로 서버 등록#
-
서버가 클러스터에 조인하기 위해 사용할 조인 토큰을 생성합니다:
$ tctl tokens add --type=node --format=text -
토큰을 에, Teleport Proxy Service의 호스트와 웹 포트를 에 할당합니다.
-
다음 Teleport 구성을
local-dev.yaml파일에 복사합니다:version: v3 teleport: data_dir: /var/lib/teleport join_params: token_name: name="token" /> method: token proxy_server: name="example.teleport.sh:443" /> auth_service: enabled: "false" ssh_service: enabled: "true" labels: env: local-dev proxy_service: enabled: "false"이 Teleport 구성은 Teleport SSH Service를 활성화하여 Teleport 클러스터에 서버를 등록합니다.
ssh_service.labels필드는 서버에env:local-dev라는 레이블을 추가합니다. -
생성한 구성 파일의 절대 경로를 에 할당합니다.
-
워크스테이션에서 Docker 컨테이너를 시작하여 Teleport 클러스터에 리소스로 등록하려는 서버를 준비합니다:
$ docker run -v :/etc/teleport.yaml --interactive --tty ubuntu:24.04 /bin/bash -
컨테이너 셸에서 curl과 sudo를 설치합니다:
$ apt-get update && apt-get install -y curl sudo -
컨테이너 셸에서 컨테이너에 Teleport를 설치합니다:
$ curl "https:///scripts/install.sh" | bash -
컨테이너 셸에서 Teleport SSH Service를 시작합니다:
$ teleport start컨테이너 셸에 연결된 터미널을 열어두세요.
-
잠시 기다립니다.
tsh login으로 로그인했는지 확인하고 레이블로 등록된 서버를 나열하여 서버가 클러스터에 조인했는지 확인합니다. 방금 등록한 서버가 표시되어야 합니다:$ tsh ls env=local-dev Node Name Address Labels ------------ ---------- ------------- 80f60427d316 ⟵ Tunnel env=local-dev
env:local-prod 레이블로 서버 등록#
-
별도의 터미널을 엽니다.
-
서버가 클러스터에 조인하기 위해 사용할 조인 토큰을 생성합니다:
$ tctl tokens add --type=node --format=text -
토큰을 에 할당합니다.
-
다음 YAML 문서를
local-prod.yaml파일에 복사합니다. 이 구성은env:local-prod레이블로 Teleport SSH Service를 시작합니다:version: v3 teleport: data_dir: /var/lib/teleport join_params: token_name: name="token" /> method: token proxy_server: name="example.teleport.sh:443" /> auth_service: enabled: "false" ssh_service: enabled: "true" labels: env: local-prod proxy_service: enabled: "false" -
생성한 구성 파일의 절대 경로를 에 할당합니다.
-
워크스테이션에서 Docker 컨테이너를 시작하여 Teleport 클러스터에 리소스로 등록하려는 서버를 준비합니다:
$ docker run -v :/etc/teleport.yaml --interactive --tty ubuntu:24.04 /bin/bash -
컨테이너 셸에서 curl과 sudo를 설치합니다:
$ apt-get update && apt-get install -y curl sudo -
컨테이너 셸에서 컨테이너에 Teleport를 설치합니다:
$ curl "https:///scripts/install.sh" | bash -
컨테이너 셸에서 Teleport SSH Service를 시작합니다:
$ teleport start컨테이너 셸에 연결된 터미널을 열어두세요.
-
서버가 클러스터에 조인했는지 확인합니다:
$ tsh ls env=local-prod Node Name Address Labels ------------ ---------- -------------- ba2290caf694 ⟵ Tunnel env=local-prod
2/3단계. Teleport 역할 생성#
env:local-dev 레이블이 있는 서버에는 접근할 수 있지만 env:local-prod 레이블이 있는 서버에는 접근할 수 없는 역할을 생성합니다.
-
다음 내용으로
role.yaml파일을 생성합니다:kind: role version: v7 metadata: name: local-dev-only spec: allow: logins: [root] node_labels: env: local-* deny: node_labels: env: local-prodallow블록은 사용자가 접근할 수 있는 항목을 나타냅니다. 기본적으로 아무것도 허용되지 않으므로 각 역할에는 권한을 제공하는 최소한 하나의allow필드가 포함되어야 합니다.spec.allow.logins필드를 사용하면 서버에 연결할 때root로그인을 사용할 수 있습니다. 덜 허용적인 로그인으로 변경할 수 있지만, 여기서는 스핀업한 Docker 컨테이너에서 유일하게 사용 가능한 로그인이기 때문에root를 사용합니다.spec.allow.node_labels는 하나 이상의 문자와 일치하는 와일드카드 구문을 사용하여 서버에 할당한env:local-dev및env:local-prod레이블과 같이env:local-로 시작하는 레이블이 있는 모든 서버에 사용자가 연결할 수 있게 합니다.그러나
deny.node_labels필드가env:local-prod를 지정하므로, 이 역할을 가진 사용자는env:local-dev레이블이 있는 서버에만 접근할 수 있습니다. -
역할을 생성합니다:
$ tctl create role.yaml
3/3단계. 서버 접근#
이 단계에서는 local-dev-only 역할로 로컬 Teleport 사용자를 만들고, 사용 가능한 서버를 나열한 다음 env:local-dev 레이블이 있는 서버에 연결합니다.
-
local-dev-only역할로alice라는 로컬 사용자를 생성합니다:$ tctl users add alice --roles=local-dev-only -
터미널의 지침에 따라
alice로 로그인합니다. -
터미널에서 클러스터에서 로그아웃하고 다시 로그인합니다. 에 Teleport Proxy Service의 도메인 이름을 할당합니다:
$ tsh logout $ tsh login --user=alice --proxy= -
사용자가 접근할 수 있는 모든 서버를 나열합니다. 하나만 표시되어야 합니다:
$ tsh ls Node Name Address Labels ------------ ---------- ------------- ba2290caf694 ⟵ Tunnel env=local-devalice는env:local-prod레이블이 있는 서버에 대한 접근이 거부되므로env:local-dev레이블이 있는 서버만 연결 가능합니다. -
tsh ls에 표시된Node Name필드의 값을 사용하여 서버에 접근합니다. 에 서버의 이름을 할당합니다:$ tsh ssh root@
다음 단계#
이 가이드에서는 서버를 등록할 때 붙인 레이블에 따라 SSH 서버에 대한 접근을 허용하고 거부하는 Teleport 역할을 만들었습니다. Teleport 역할로 할 수 있는 더 많은 것들을 읽어보세요.
Teleport RBAC 기본 사항 더 알아보기#
Teleport 역할을 사용하여 RBAC를 관리하는 방법에 대해 자세히 알아보세요:
특정 종류의 리소스에 대한 RBAC 구성#
모든 Teleport로 보호된 리소스에 레이블을 지정하고 해당 레이블을 사용하여 RBAC 정책을 설정할 수 있습니다. 또한 각 종류의 Teleport 리소스에는 접근을 제어하는 데 사용할 수 있는 더 구체적인 속성이 있습니다. 각 종류의 리소스에 대한 RBAC를 세밀화하려면 아래 가이드를 읽으세요:
참조 가이드#
Teleport 역할에서 구성할 수 있는 필드에 대한 전체 설명은 Teleport 접근 제어 참조를 참조하세요.
