리소스에 레이블 추가하기
Teleport를 사용하면 클러스터의 애플리케이션, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있습니다. 이 가이드에서는 등록된 서버 리소스에 레이블을 추가하는 방법을 설명합니다. 리소스에 할당하는 레이블은 정적 레이블, 동적 레이블 또는 리소스 기반 레이블이 될 수 있습니다.
Teleport를 사용하면 클러스터의 애플리케이션, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있습니다. 레이블을 사용하여 다음을 수행할 수 있습니다:
tctl및tsh명령을 실행할 때 반환되는 리소스를 필터링합니다.- Teleport 사용자가 접근할 수 있는 리소스를 제한하는 역할을 정의합니다.
이 가이드에서는 등록된 서버 리소스에 레이블을 추가하는 방법을 설명합니다. 다른 유형의 리소스에 레이블을 추가할 때도 유사한 단계를 따를 수 있습니다.
작동 방식#
리소스에 할당하는 레이블은 정적 레이블, 동적 레이블 또는 리소스 기반 레이블이 될 수 있습니다.
- 정적 레이블은 Teleport 구성 파일에 하드코딩되며
teleport프로세스가 실행되는 동안 변경되지 않습니다. 예를 들어 정적 레이블을 사용하여staging또는production환경의 리소스를 식별할 수 있습니다. - 동적 레이블(명령 기반 레이블이라고도 함)을 사용하면 런타임에 레이블을 생성할 수 있습니다. 동적 레이블을 사용하면
teleport프로세스가 구성 가능한 빈도로 호스트에서 외부 명령을 실행하고 명령의 출력이 레이블 값이 됩니다. - 리소스 기반 레이블을 사용하면
teleport프로세스를 재시작하거나 구성 파일을 편집하지 않고도 인스턴스에 레이블을 추가할 수 있습니다.
동일한 리소스에 여러 정적, 동적 및 리소스 기반 레이블을 추가할 수 있습니다. 그러나 다른 값으로 동일한 키를 사용하는 정적 레이블을 추가하거나 정적 레이블을 사용하여 여러 잠재적 값을 정의할 수는 없습니다.
동적 레이블은 레이블 값을 Teleport 구성에서 분리하는 데 특히 유용합니다. 예를 들어 Amazon EC2 인스턴스에서 Teleport를 시작하는 경우 EC2 인스턴스 메타데이터 API로 보내는 명령의 결과를 기반으로 region 값을 설정하는 동적 레이블을 사용할 수 있습니다. 동적 레이블을 사용하면 Amazon Machine Image의 각 서버에 동일한 구성을 사용하면서 AWS 리전에 따라 서버에 대한 접근을 필터링하고 제한할 수 있습니다.
사전 요구 사항#
-
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:
-
- Teleport 에이전트를 실행할 Linux 호스트. 이 가이드에서는 Teleport SSH Service 인스턴스에 레이블을 적용하는 방법을 보여줍니다. 가이드에 표시된 기술을 사용하여 Teleport로 보호된 모든 리소스에 레이블을 지정할 수 있습니다.
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.
1/2단계. Teleport 설치#
- Teleport 에이전트를 실행할 Linux 서버를 선택합니다.
To install a Teleport Agent on your Linux server:
The recommended installation method is the cluster install script. It will select the correct version, edition, and installation mode for your cluster.
-
Assign to your Teleport cluster hostname and port, but not the scheme (https://).
-
Run your cluster's install script:
$ curl "https:///scripts/install.sh" | sudo bash
-
호스트에 대한 초대 토큰을 생성합니다.
초대 토큰은 로컬 컴퓨터가 Teleport 클러스터에 조인하기 위해 필요합니다. 다음 예제에서는 5분 동안 유효하고 서버를 등록하는 데 사용할 수 있는 새 토큰을 생성합니다:
$ tctl tokens add --ttl=5m --type=node # The invite token: (=presets.tokens.first=) -
다음 명령을 실행하여 만료되지 않은 생성된 모든 토큰을 나열합니다:
$ tctl tokens ls # Token Type Labels Expiry Time (UTC) # -------------------------------- ----------- ------ ------------------------------- # (=presets.tokens.first=) Node,Db,App 10 Aug 23 19:49 UTC (4m11s) -
호스트의
/tmp/token파일에 조인 토큰을 씁니다:$ echo (=presets.tokens.first=) | sudo tee /tmp/token -
에이전트를 실행하려는 호스트에서 Teleport SSH Service를 활성화하는 구성 파일을 생성합니다.
teleport.example.com을 Teleport Proxy Service 또는 Teleport Enterprise (Cloud) 계정의 호스트와 포트로 교체합니다:$ sudo teleport configure \ --token="/tmp/token" \ --roles=node \ --proxy=example.teleport.sh:443 \ -o file
2/2단계. 레이블 적용#
아래 섹션 중 하나 이상을 따라 리소스에 다양한 유형의 레이블을 추가합니다.
정적 레이블 적용#
Teleport 구성 파일을 편집한 다음 Teleport를 시작하여 정적 레이블을 구성할 수 있습니다.
정적 레이블을 추가하려면:
-
Teleport 에이전트를 설치한 컴퓨터의 편집기에서 Teleport 구성 파일
/etc/teleport.yaml을 엽니다. -
ssh_service섹션 아래의labels구성을 찾습니다. -
정적 레이블 키와 값을 추가합니다. 예를 들어 레이블 키로
environment를, 값으로dev를 추가합니다:ssh_service: enabled: true labels: environment: dev앞의 예제는 간단한 값 설정을 보여줍니다. 그러나 공백이나 구두점이 포함된 더 복잡한 문자열 값을 정의하기 위해 정적 레이블을 사용할 수도 있습니다. 예를 들어:
ssh_service: enabled: true labels: location: San Francisco Bldg 301 4th floor -
변경 사항을 저장하고 파일을 닫습니다.
-
Linux 호스트에서 Teleport를 시작합니다:
Configure your Teleport instance to start automatically when the host boots up by creating a systemd service for it. The instructions depend on how you installed your Teleport instance.
You can check the status of your Teleport instance with systemctl status teleport
and view its logs with journalctl -fu teleport.
-
로컬 컴퓨터에서 다음 명령을 실행하여 레이블을 추가했는지 확인합니다.
$ tsh ls --query 'labels["environment"]=="dev"'다음과 유사한 출력이 표시되어야 합니다:
Node Name Address Labels ---------------- ---------- ------------------------------------------ ip-192-168-13-57 ⟵ Tunnel environment=dev,hostname=ip-192-168-13-57서버 상태 확인
추가한 레이블을 쿼리할 때 서버가 나열되지 않으면 서버에서 SSH Service가 실행 중인지 확인해야 합니다. 서버 로그를 확인하여 다음과 유사한 메시지가 있는지 확인합니다:
2023-08-07T22:22:21Z INFO [NODE:1] Service is starting in tunnel mode. pid:149932.1 service/service.go:2630 2023-08-07T22:22:21Z INFO [UPLOAD:1] starting upload completer service pid:149932.1 service/service.go:2723 2023-08-07T22:22:21Z INFO [PROC:1] The new service has started successfully. Starting syncing rotation status...사용자 프로필 확인
서버에서 SSH Service가 실행 중인 경우, 현재 Teleport 사용자가 로컬 호스트에 로그인이 있는지 확인합니다. 다음 명령을 실행하여 사용자 계정 상태를 확인할 수 있습니다:
$ tsh status현재 사용자에 대해 최소한 하나의 로그인이 나열된 다음과 유사한 출력이 표시되어야 합니다:
> Profile URL: https://ajuba-aws.teledocs.click:443 Logged in as: teleport-admin Cluster: teleport-aws.example.com Roles: access, editor Logins: root, ubuntu, ec2-user Kubernetes: enabled Valid until: 2023-08-08 10:08:46 +0000 UTC [valid for 10h36m0s] Extensions: login-ip, permit-agent-forwarding, permit-port-forwarding, permit-pty, private-key-policy사용자에게 유효한 로그인이 할당되지 않은 경우 최소한 하나의 유효한 로그인을 포함하도록 현재 사용자 프로필을 업데이트해야 합니다.
다음과 유사한 명령을 실행하여 사용자에게 로그인을 추가할 수 있습니다:
$ tctl users update myuser --set-logins=root이 예제는
root로그인을myuserTeleport 사용자에게 추가합니다. Teleport 사용자의 로그인 관리에 대한 자세한 내용은 로컬 사용자를 참조하세요.
숨겨진 정적 레이블 사용
역할 기반 접근 제어에 레이블을 사용하되 명령 출력이나 Teleport Web UI에 표시하지 않으려면 레이블 키에 teleport.hidden/ 접두사를 붙여 숨겨진 네임스페이스에 정의할 수 있습니다. 예를 들어:
ssh_service:
enabled: true
labels:
teleport.hidden/team-id: ai-lab-01
명령을 사용한 동적 레이블 적용#
정적 레이블과 마찬가지로 Teleport 구성 파일을 편집한 다음 서버에서 Teleport 서비스를 재시작하여 동적 레이블을 적용할 수 있습니다.
동적 레이블을 생성하는 명령을 추가하려면:
-
서버에서 실행 중인 Teleport 서비스를 중지합니다.
-
텍스트 편집기에서 Teleport 구성 파일(기본값:
/etc/teleport.yaml)을 엽니다. -
ssh_service섹션 아래의commands구성을 찾습니다. -
매 1시간마다 호스트 서버의 아키텍처를 반환하기 위해
-p인수로uname명령을 실행하는command배열을 추가합니다.예를 들어
name,command,period필드를 다음과 같이 추가합니다:... ssh_service: enabled: true labels: teleport.internal/resource-id: 1f2cdcc5-cde3-41fa-b390-bc872087821a environment: dev commands: - name: hostname command: [hostname] period: 1m0s - name: arch command: [uname, -p] period: 1h0m0scommand설정에서 첫 번째 요소는 유효한 실행 파일입니다. 이후 각 요소는 인수입니다. 다음 구문이 유효합니다:command: ["/bin/uname", "-m"]다음 구문은 유효하지 않습니다:
command: ["/bin/uname -m"]더 복잡한 명령의 경우 단일 따옴표(')와 이중 따옴표(")를 상호 교환하여 중첩 표현식을 만들 수 있습니다. 예를 들어:
command: ["/bin/sh", "-c", "uname -a | egrep -o '[0-9]+\\.[0-9]+\\.[0-9]+'"]명령을 구성할 때 다음을 명심하세요:
- 실행 파일은
$PATH에서 검색 가능하거나 절대 경로를 사용하여 지정해야 합니다. - 명령으로 사용하는 모든 파일에 실행 권한 비트를 설정해야 합니다.
- 셸 스크립트에는 shebang 줄이 있어야 합니다.
period설정은 Teleport가 각 명령을 실행하는 빈도를 지정합니다. 이 예제에서uname -p명령은 1시간(1h), 0분(0m), 0초(0s)마다 실행됩니다. 이 값은 1분 미만일 수 없습니다. - 실행 파일은
-
변경 사항을 저장하고 파일을 닫습니다.
-
INVITE_TOKEN환경 변수에 저장한 초대 토큰으로 Teleport를 시작합니다:$ sudo teleport start --token=${INVITE_TOKEN?} -
로컬 컴퓨터에서 다음 명령을 실행하여 레이블을 추가했는지 확인합니다. Teleport 사용자는 서버에 접근하도록 권한이 부여되어야 합니다.
$ tsh lsarch와environment레이블이 모두 표시된 다음과 유사한 출력이 표시되어야 합니다:Node Name Address Labels ---------------- -------------- ------------------------------------------------------ ip-192-168-13-57 ⟵ Tunnel arch=x86_64,environment=dev,hostname=ip-192-168-13-57
리소스 기반 레이블 적용#
리소스 기반 레이블 적용은 SSH 서버에만 지원됩니다.
해당 server_info 리소스를 생성하여 Teleport SSH 서버에 리소스 기반 레이블을 적용할 수 있습니다.
리소스 기반 레이블을 추가하려면 먼저 SSH 서버 세부 정보를 가져옵니다.
-
레이블을 적용하려는 SSH 서버를 가져옵니다. 에 SSH 서버의 이름을 할당합니다:
$ tctl get node/ kind: node metadata: expires: "2024-01-12T00:41:17.355013266Z" name: 116b08d2-7167-4eab-85a8-cf93f054b217 spec: addr: 127.0.0.1:3022 hostname: foo -
위 노드에 해당하는
server_info.yaml을 생성합니다.# server_info.yaml kind: server_info metadata: name: si-116b08d2-7167-4eab-85a8-cf93f054b217 spec: new_labels: "foo": "bar"server_info리소스의metadata.name은 노드 리소스의metadata.name필드에si-접두사를 붙인 것과 같아야 합니다.server_info리소스를 생성하려면 다음을 실행합니다:$ tctl create server_info.yaml -
로컬 컴퓨터에서 다음 명령을 실행하여 레이블을 추가했는지 확인합니다. Teleport 사용자는 서버에 접근하도록 권한이 부여되어야 합니다. Teleport는 더 큰 클러스터에서 Auth Service에 부담을 주지 않기 위해
server_info리소스의 레이블을 점진적으로 적용하므로 새 레이블이 나타나는 데 몇 분이 걸릴 수 있습니다.$ tsh lsdynamic/foo레이블이 표시된 다음과 유사한 출력이 표시되어야 합니다:Node Name Address Labels ---------------- -------------- ------------------------------------------------------ ip-192-168-13-57 ⟵ Tunnel dynamic/foo=bar,hostname=ip-192-168-13-57
tctl로 생성된 모든 리소스 기반 레이블에는 dynamic/ 접두사가 붙습니다. 이 접두사는 레이블이 역할의 거부 규칙에 사용되는 것을 금지합니다.
리소스 기반 레이블을 업데이트하려면 업데이트된 레이블로 server_info 리소스를 다시 만듭니다.
다음 단계#
리소스에 레이블을 지정한 후 tsh 및 tctl 명령을 실행할 때 레이블을 사용하여 명령이 반환하는 리소스를 필터링할 수 있습니다. 자세한 내용은 리소스 필터링을 참조하세요.
또한 레이블을 사용하여 다른 역할을 가진 사용자가 특정 클래스의 리소스에 대한 접근을 제한할 수 있습니다. 자세한 내용은 Teleport 역할 템플릿을 참조하세요.
