Infograb logo
리소스에 레이블 추가

Teleport는 클러스터 내 응용 프로그램, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있습니다. 레이블을 사용하여 다음과 같은 작업을 수행할 수 있습니다:

  • tctltsh 명령을 실행할 때 반환되는 리소스를 필터링합니다.
  • Teleport 사용자가 접근할 수 있는 리소스를 제한하는 역할을 정의합니다.

이 가이드는 등록된 서버 리소스에 레이블을 추가하는 방법을 보여줍니다. 그러나 다른 유형의 리소스에도 레이블을 추가하는 유사한 단계를 따를 수 있습니다.

정적, 동적 및 리소스 기반 레이블

리소스에 할당하는 레이블은 정적 레이블, 동적 레이블 또는 리소스 기반 레이블일 수 있습니다.

  • 정적 레이블은 Teleport 구성 파일에 하드코딩되어 있으며 teleport 프로세스가 실행되는 동안 변경되지 않습니다. 예를 들어, staging 또는 production 환경의 리소스를 식별하기 위해 정적 레이블을 사용할 수 있습니다.
  • 동적 레이블—또는 명령 기반 레이블—은 런타임에 레이블을 생성할 수 있습니다. 동적 레이블을 사용하면 teleport 프로세스가 호스트에서 외부 명령을 실행하고 그 출력이 레이블 값이 됩니다.
  • 리소스 기반 레이블은 teleport 프로세스를 재시작하거나 구성 파일을 편집하지 않고 인스턴스에 레이블을 추가할 수 있습니다.

같은 리소스에 대해 여러 개의 정적, 동적 및 리소스 기반 레이블을 추가할 수 있습니다. 그러나 다른 값으로 동일한 키를 사용하는 정적 레이블을 추가하거나 정적 레이블을 사용하여 여러 개의 잠재적인 값을 정의할 수는 없습니다.

동적 레이블은 Teleport 구성에서 레이블 값을 분리하는 데 특히 유용합니다. 예를 들어, Amazon EC2 인스턴스에서 Teleport를 시작하면 EC2 인스턴스에 전송된 명령의 결과를 기반으로 region 값을 설정하기 위해 동적 레이블을 사용할 수 있습니다 메타데이터 API. 동적 레이블은 배포된 Amazon 머신 이미지의 각 서버에 대해 동일한 구성을 사용하면서도 AWS 지역에 따라 서버 접근을 필터링하고 제한할 수 있게 해줍니다.

전제 조건

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

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

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

  • Teleport 에이전트를 실행할 Linux 호스트. 이 가이드는 Teleport SSH 서비스 인스턴스에 레이블을 적용하는 방법을 보여줍니다. 안내서에 표시된 기술을 사용하여 모든 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 명령어를 실행할 수도 있습니다.

1단계/2단계. Teleport 설치

  1. Teleport 에이전트를 실행할 Linux 서버를 선택합니다.

  2. 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 패키지 리포지토리에 대해 알아보세요.

  3. 호스트에 대한 초대 토큰을 생성합니다.

    초대 토큰은 로컬 컴퓨터가 Teleport 클러스터에 참여하는 데 필요합니다.
    다음 예제는 5분 동안 유효한 새 토큰을 생성하며 서버를 등록하는 데 사용할 수 있습니다:

    tctl tokens add --ttl=5m --type=node

    초대 토큰: abcd123-insecure-do-not-use-this

  4. 다음 명령을 실행하여 생성된 모든 만료되지 않은 토큰을 나열합니다:

    tctl tokens ls

    토큰 유형 레이블 만료 시간 (UTC)

    -------------------------------- ----------- ------ -------------------------------

    abcd123-insecure-do-not-use-this Node,Db,App 10 Aug 23 19:49 UTC (4m11s)

  5. 호스트의 /tmp/token에 조인 토큰을 파일로 저장합니다:

    echo abcd123-insecure-do-not-use-this | sudo tee /tmp/token
  6. 에이전트를 실행할 호스트에서 Teleport SSH 서비스가 활성화된 구성 파일을 생성합니다. teleport.example.com을 Teleport 프록시 서비스 또는 Teleport Enterprise (Cloud) 계정의 호스트와 포트로 교체합니다:

    sudo teleport configure \ --token="/tmp/token" \ --roles=node \ --proxy=example.teleport.sh:443 \ -o file

2단계/2단계. 레이블 적용

다양한 유형의 레이블을 리소스에 추가하려면 아래 섹션을 하나 이상 따르십시오.

정적 레이블 적용

Teleport 구성 파일을 편집하여 정적 레이블을 구성한 다음 Teleport를 시작할 수 있습니다.

정적 레이블을 추가하려면:

  1. Teleport 에이전트를 설치한 컴퓨터에서 /etc/teleport.yaml 구성 파일을 편집기에서 엽니다.

  2. ssh_service 섹션 아래의 labels 구성을 찾습니다.

  3. 정적 레이블 키와 값을 추가합니다. 예를 들어, environment를 레이블 키로 추가하고 dev를 값으로 설정합니다:

    ssh_service:
      enabled: true
      labels:
        environment: dev
    

    앞선 예시는 간단한 값 설정을 보여줍니다. 그러나 정적 레이블을 사용하여 공백이나 구두점을 포함한 더 복잡한 문자열 값을 정의할 수도 있습니다. 예를 들어:

    ssh_service: enabled: true labels: location: 샌프란시스코 빌딩 301 4층
  4. 변경 내용을 저장하고 파일을 닫습니다.

  5. Linux 호스트에서 Teleport를 시작합니다:

    호스트가 부팅될 때 your Teleport instance가 자동으로 시작되도록 시스템 데몬 서비스를 생성하여 구성합니다. 지침은 your Teleport instance를 설치한 방법에 따라 다릅니다.

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

    sudo systemctl enable teleport
    sudo systemctl start teleport

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

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

    your Teleport instance의 상태는 systemctl status teleport로 확인할 수 있으며, 로그는 journalctl -fu teleport로 볼 수 있습니다.

  6. 다음 명령을 로컬 컴퓨터에서 실행하여 레이블이 추가되었는지 확인합니다.

    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]    서비스가 터널 모드에서 시작되고 있습니다. pid:149932.1 service/service.go:2630
    2023-08-07T22:22:21Z INFO [UPLOAD:1]  업로드 완료 서비스 pid:149932.1 service/service.go:2723
    2023-08-07T22:22:21Z INFO [PROC:1]    새 서비스가 성공적으로 시작되었습니다. 상태 동기화 진행 중...
    

    사용자 프로파일 점검

    SSH 서비스가 서버에서 실행 중이면, 현재 Teleport 사용자가 로컬 호스트에 로그인할 수 있는 권한이 있는지 확인합니다. 다음 명령을 실행하여 사용자 계정의 상태를 확인할 수 있습니다:

    tsh status

    다음과 유사한 출력을 보게 되며, 현재 사용자에 대해 적어도 하나 이상의 로그인이 나열되어야 합니다:

    > 프로파일 URL: https://ajuba-aws.teledocs.click:443 로그인한 사용자: teleport-admin 클러스터: teleport-aws.example.com 역할: access, editor 로그인: root, ubuntu, ec2-user 쿠버네티스: 사용 가능 유효 기간: 2023-08-08 10:08:46 +0000 UTC [유효 기간 10시간 36분 0초] 확장: login-ip, permit-agent-forwarding, permit-port-forwarding, permit-pty, private-key-policy

    사용자에게 유효한 로그인 권한이 부여되지 않은 경우, 현재 사용자 프로파일을 업데이트하여 적어도 하나의 유효한 로그인을 포함해야 합니다.

    사용자는 다음과 유사한 명령을 실행하여 로그인을 추가할 수 있습니다:

    tctl users update myuser --set-logins=root

    이 예시는 myuser Teleport 사용자에게 root 로그인을 추가합니다. Teleport 사용자의 로그인 관리를 위한 추가 정보는 로컬 사용자를 참조하십시오.

숨기려는 정적 레이블 사용하기

역할 기반 접근 제어를 위해 레이블을 사용하고 싶지만, 명령 출력이나 Teleport 웹 UI에 레이블을 표시하고 싶지 않은 경우, 레이블 키에 teleport.hidden/를 접두어로 하여 숨겨진 네임스페이스에 정의할 수 있습니다. 예를 들어:

ssh_service:
  enabled: true
  labels:
    teleport.hidden/team-id: ai-lab-01

동적 레이블 적용 명령 사용하기

정적 레이블과 마찬가지로, Teleport 구성 파일을 편집한 다음 서버에서 Teleport 서비스를 재시작하여 동적 레이블을 적용할 수 있습니다.

동적 레이블 생성을 위해 명령을 추가하려면:

  1. 서버에서 실행 중인 Teleport 서비스를 중지합니다.

  2. 기본값인 /etc/teleport.yaml에서 Teleport 구성 파일을 텍스트 편집기로 엽니다.

  3. ssh_service 섹션 아래의 commands 구성을 찾습니다.

  4. 호스트 서버의 아키텍처를 반환하기 위해 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에서 발견 가능해야 하며 절대 경로를 사용해 지정할 수 있습니다.
    • 사용한 모든 파일의 실행 권한 비트가 설정되어 있어야 합니다.
    • 셸 스크립트에는 셰방 라인이 있어야 합니다.

    period 설정은 Teleport가 각 명령을 실행하는 빈도를 지정합니다. 이 예에서 uname -p 명령은 매 시간마다(1h), 0분, 0초마다 실행됩니다. 이 값은 1분 미만일 수 없습니다.

  5. 변경 내용을 저장하고 파일을 닫습니다.

  6. 저장한 초대 토큰을 사용하여 Teleport를 시작합니다:

    sudo teleport start --token=${INVITE_TOKEN?}
  7. 로컬 컴퓨터에서 다음 명령을 실행하여 레이블이 추가되었는지 확인하십시오. 사용자의 Teleport 사용자 계정이 서버에 접근할 수 있는 권한이 있어야 합니다.

    tsh ls

    archenvironment 레이블이 표시된 출력과 유사한 출력을 보게 될 것입니다:

    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_infosi-<name>이라는 이름을 가져야 합니다.

리소스 기반 레이블을 추가하려면:

  1. 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의 값을 저장합니다.

  2. 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
  3. 로컬 컴퓨터에서 다음 명령을 실행하여 레이블이 추가되었는지 확인합니다. 사용자의 Teleport 사용자 계정이 서버에 접근할 수 있는 권한이 있어야 합니다. Teleport는 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 리소스를 재생성합니다.

다음 단계

리소스에 레이블을 추가한 후, tshtctl 명령을 실행할 때 레이블을 사용하여 명령이 반환하는 리소스를 필터링할 수 있습니다. 자세한 내용은 리소스 필터링을 참조하십시오.

또한 레이블을 사용하여 다양한 역할을 가진 사용자가 특정 리소스 클래스에 대한 접근을 제한하는 데 사용할 수 있습니다. 자세한 내용은 Teleport 역할 템플릿을 참조하십시오.

Teleport 원문 보기