인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
리소스에 레이블 추가
Teleport는 클러스터의 애플리케이션, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있도록 합니다. 레이블을 사용하여 다음과 같은 작업을 수행할 수 있습니다:
tctl
및tsh
명령을 실행할 때 반환되는 리소스를 필터링합니다.- Teleport 사용자가 액세스할 수 있는 리소스를 제한하는 역할을 정의합니다.
이 가이드는 등록된 서버 리소스에 레이블을 추가하는 방법을 설명합니다. 그러나 유사한 단계를 따라 다른 유형의 리소스에도 레이블을 추가할 수 있습니다.
정적, 동적 및 리소스 기반 레이블
리소스에 할당하는 레이블은 정적 레이블, 동적 레이블, 또는 리소스 기반 레이블이 될 수 있습니다.
- 정적 레이블은 Teleport 구성 파일에 하드코딩되어 있으며
teleport
프로세스가 실행되는 동안 변경되지 않습니다. 예를 들어,staging
또는production
환경의 리소스를 식별하는 데 정적 레이블을 사용할 수 있습니다. - 동적 레이블—명령 기반 레이블이라고도 함—은 런타임에 레이블을 생성할 수 있게 해줍니다. 동적 레이블을 사용하면
teleport
프로세스가 호스트에서 외부 명령을 구성 가능한 주기로 실행하고 명령의 출력이 레이블 값이 됩니다. - 리소스 기반 레이블은
teleport
프로세스를 재시작하거나 구성 파일을 편집하지 않고도 인스턴스에 레이블을 추가할 수 있습니다.
같은 리소스에 대해 여러 개의 정적, 동적 및 리소스 기반 레이블을 추가할 수 있습니다. 그러나 값이 다른 동일한 키를 사용하는 정적 레이블이나 여러 잠재적 값을 정의하는 정적 레이블을 추가할 수는 없습니다.
동적 레이블은 Teleport 구성에서 레이블 값을 분리하는 데 특히 유용합니다. 예를 들어, Amazon EC2 인스턴스에서 Teleport를 시작하는 경우, 동적 레이블을 사용하여 EC2 인스턴스에 전송된 명령의 결과를 기반으로 region
값을 설정할 수 있습니다 metadata API. 동적 레이블은 Amazon Machine Image의 각 서버에 대해 동일한 구성을 사용할 수 있게 하지만, AWS 리전을 기반으로 서버에 대한 액세스를 필터링하고 제한할 수 있게 해줍니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- Teleport Agent를 실행할 Linux 호스트. 이 가이드는 Teleport SSH 서비스의 인스턴스에 레이블을 적용하는 방법을 보여줍니다. 가이드에서 설명하는 기술을 사용하여 모든 Teleport 보호 리소스에 레이블을 붙일 수 있습니다.
연결이 가능한지 확인하기 위해 tsh login
으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl
명령어를 실행할 수 있는지 확인하십시오.
예를 들어:
tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 17.0.0-dev
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
클러스터에 연결할 수 있고 tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl
명령어를 실행할 수 있습니다.
자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl
명령어를 실행할 수도 있습니다.
1/2단계. Teleport 설치
-
Teleport Agent를 실행할 Linux 서버를 선택합니다.
-
Linux 서버에 Teleport 설치하기:
-
Teleport 에디션에 따라 edition를 다음 중 하나로 할당합니다:
에디션 값 Teleport Enterprise Cloud cloud
Teleport Enterprise (자가 호스팅) enterprise
Teleport Community Edition oss
-
설치할 Teleport 버전을 가져옵니다. 클러스터에서 자동 에이전트 업데이트가 활성화된 경우, 최신 Teleport 버전을 쿼리하여 업데이트된 내용과의 호환성을 확인합니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/automaticupgrades/channel/default/version | sed 's/v//')"그렇지 않으면, Teleport 클러스터의 버전을 가져옵니다:
TELEPORT_DOMAIN=example.teleport.comTELEPORT_VERSION="$(curl https://$TELEPORT_DOMAIN/v1/webapi/ping | jq -r '.server_version')" -
Linux 서버에 Teleport를 설치합니다:
curl https://cdn.teleport.dev/install-v15.4.11.sh | bash -s ${TELEPORT_VERSION} edition설치 스크립트는 Linux 서버에서 패키지 관리자를 감지하고 이를 사용하여 Teleport 바이너리를 설치합니다. 설치를 사용자 정의하려면 설치 가이드에서 Teleport 패키지 리포지토리에 대해 알아보세요.
-
-
호스트에 대한 초대 토큰을 생성합니다.
초대 토큰은 로컬 컴퓨터가 Teleport 클러스터에 가입하는 데 필요합니다.
다음 예제는 5분 동안 유효한 새 토큰을 생성하며, 서버 등록에 사용할 수 있습니다:tctl tokens add --ttl=5m --type=node초대 토큰: abcd123-insecure-do-not-use-this
-
다음 명령을 실행하여 생성된 만료되지 않은 토큰을 모두 나열합니다:
tctl tokens ls토큰 유형 레이블 만료 시간 (UTC)
-------------------------------- ----------- ------ -------------------------------
abcd123-insecure-do-not-use-this Node,Db,App 10 Aug 23 19:49 UTC (4m11s)
-
호스트의
/tmp/token
파일에 조인 토큰을 기록합니다:echo abcd123-insecure-do-not-use-this | sudo tee /tmp/token -
Agent를 실행할 계획인 호스트에서 Teleport SSH 서비스를 활성화하는 구성 파일을 생성합니다.
teleport.example.com
을 Teleport Proxy 서비스 또는 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를 시작합니다:
호스트가 부팅될 때 your Teleport instance가 자동으로 시작되도록 systemd 서비스를 생성하여 구성합니다. 지침은 your Teleport instance를 설치한 방법에 따라 다릅니다.
your Teleport instance를 실행할 호스트에서 Teleport를 활성화하고 시작합니다:
sudo systemctl enable teleportsudo systemctl start teleportyour Teleport instance를 실행할 호스트에서 Teleport의 systemd 서비스 구성을 만들고, Teleport 서비스를 활성화한 후 Teleport를 시작합니다:
sudo teleport install systemd -o /etc/systemd/system/teleport.servicesudo systemctl enable teleportsudo systemctl start teleportsystemctl status teleport
로 your Teleport instance의 상태를 확인하고,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 서비스가 실행 중인지 확인해야 합니다. 다음과 유사한 로그 메시지가 있는지 확인합니다:
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 서비스가 실행 중인 경우, 현재 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이 예제는
myuser
Teleport 사용자에게root
로그인을 추가합니다. Teleport 사용자에 대한 로그인을 관리하는 방법에 대한 자세한 내용은 Local Users를 참조하십시오.
숨겨진 정적 레이블 사용
역할 기반 액세스 제어에 레이블을 사용하려고 하지만, 명령 출력이나 Teleport 웹 UI에 레이블이 표시되지 않도록 하려면, 레이블 키 앞에 teleport.hidden/
를 접두사로 추가하여 숨겨진 네임스페이스에서 정의할 수 있습니다. 예를 들어:
ssh_service:
enabled: true
labels:
teleport.hidden/team-id: ai-lab-01
동적 레이블을 명령어를 사용하여 적용하기
정적 레이블과 마찬가지로 Teleport 구성 파일을 편집한 다음 서버에서 Teleport 서비스를 재시작하여 동적 레이블을 적용할 수 있습니다.
동적 레이블을 생성하는 명령을 추가하려면:
-
서버에서 실행 중인 Teleport 서비스를 중지합니다.
-
기본적으로
/etc/teleport.yaml
에 위치한 Teleport 구성 파일을 텍스트 편집기로 엽니다. -
ssh_service
섹션 아래의commands
구성을 찾습니다. -
호스트 서버의 아키텍처를 반환하기 위해
uname
명령을-p
인수와 함께 실행하여 매시간 실행되는command
배열을 추가합니다.예를 들어, 다음과 같이
name
,command
,period
필드를 추가합니다:--- ssh_service: enabled: "yes" 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: 1h0m0s
command
설정에서 첫 번째 요소는 유효한 실행 파일입니다. 이후의 각 요소는 인수입니다. 다음 구문은 유효합니다: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
명령은 매시간(1h), 0분(0m), 0초(0s)마다 실행됩니다. 이 값은 1분보다 적을 수 없습니다. - 실행 파일은
-
변경 사항을 저장하고 파일을 닫습니다.
-
INVITE_TOKEN
환경 변수에 저장된 초대 토큰을 사용하여 Teleport를 시작합니다:sudo teleport start --token=${INVITE_TOKEN?} -
로컬 컴퓨터에서 다음 명령을 실행하여 레이블을 추가했는지 확인합니다. Teleport 사용자는 서버에 접근할 수 있는 권한이 있어야 합니다.
tsh ls다음과 유사한 출력이 나타나야 하며,
arch
및environment
레이블이 모두 표시됩니다:Node Name Address Labels---------------- -------------- ------------------------------------------------------ip-192-168-13-57 ⟵ Tunnel arch=x86_64,environment=dev,hostname=ip-192-168-13-57
리소스 기반 레이블 적용
리소스 기반 레이블은 서버에 대해서만 지원됩니다.
Teleport 인스턴스에 리소스 기반 레이블을 적용하려면 인스턴스에 대한 server_info
리소스를 생성해야 합니다. <name>
이라는 이름의 서버에 대해 일치하는 server_info
는 si-<name>
이라고 명명되어야 합니다.
리소스 기반 레이블을 추가하려면:
-
tctl get node/hostname를 실행하여 레이블을 적용할 노드 리소스의 이름을 가져옵니다. 다음과 유사한 출력을 받아야 합니다:
kind: node metadata: expires: "2024-01-12T00:41:17.355013266Z" id: <id> name: <name-uuid> revision: <revision-uuid> spec: # ...
다음 단계에서 사용할
metadata.name
의 값을 저장합니다. -
server_info.yaml
파일을 만들고 그 안에 다음 내용을 붙여넣습니다:# server_info.yaml kind: server_info metadata: name: si-<node-name> spec: new_labels: "foo": "bar"
<node-name>
을 이전 단계에서 저장한 리소스 이름으로 교체합니다. 다음 명령어를 실행하여server_info
리소스를 생성합니다:tctl create server_info.yaml -
로컬 컴퓨터에서 다음 명령어를 실행하여 레이블을 추가했는지 확인합니다. Teleport 사용자는 서버에 접근할 수 있는 권한이 있어야 합니다. Teleport는 Auth Service에 대한 부담을 줄이기 위해
server_info
리소스의 레이블을 점진적으로 적용하므로 새로운 레이블이 나타나기까지 몇 분이 걸릴 수 있습니다.tsh ls다음과 유사한 출력에서
dynamic/foo
레이블이 표시되는 것을 볼 수 있어야 합니다:Node Name Address Labels---------------- -------------- ------------------------------------------------------ip-192-168-13-57 ⟵ Tunnel dynamic/foo=bar,hostname=ip-192-168-13-57
Warning
tctl
로 생성된 모든 리소스 기반 레이블은 dynamic/
접두사를 갖습니다. 이
접두사는 해당 레이블이 역할의 거부 규칙에서 사용되는 것을 금지합니다.
리소스 기반 레이블을 업데이트하려면 업데이트된 레이블로 server_info
리소스를 다시 생성하십시오.
다음 단계
리소스에 레이블을 지정한 후, tsh
및 tctl
명령을 실행할 때 해당 레이블을 사용하여 명령이 반환하는 리소스를 필터링할 수 있습니다. 더 많은 정보는 리소스 필터링을 참조하십시오.
또한 레이블을 사용하여 서로 다른 역할을 가진 사용자가 특정 리소스 클래스에 접근하는 것을 제한할 수 있습니다. 더 많은 정보는 Teleport 역할 템플릿을 참조하십시오.