InfoGrab DocsInfoGrab Docs

리소스에 레이블 추가하기

요약

Teleport를 사용하면 클러스터의 애플리케이션, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있습니다. 이 가이드에서는 등록된 서버 리소스에 레이블을 추가하는 방법을 설명합니다. 리소스에 할당하는 레이블은 정적 레이블, 동적 레이블 또는 리소스 기반 레이블이 될 수 있습니다.

Teleport를 사용하면 클러스터의 애플리케이션, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있습니다. 레이블을 사용하여 다음을 수행할 수 있습니다:

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

이 가이드에서는 등록된 서버 리소스에 레이블을 추가하는 방법을 설명합니다. 다른 유형의 리소스에 레이블을 추가할 때도 유사한 단계를 따를 수 있습니다.

작동 방식#

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

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

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

동적 레이블은 레이블 값을 Teleport 구성에서 분리하는 데 특히 유용합니다. 예를 들어 Amazon EC2 인스턴스에서 Teleport를 시작하는 경우 EC2 인스턴스 메타데이터 API로 보내는 명령의 결과를 기반으로 region 값을 설정하는 동적 레이블을 사용할 수 있습니다. 동적 레이블을 사용하면 Amazon Machine Image의 각 서버에 동일한 구성을 사용하면서 AWS 리전에 따라 서버에 대한 접근을 필터링하고 제한할 수 있습니다.

사전 요구 사항#

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.

  • tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. 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')"
      
    2. 사용 중인 플랫폼에 대한 지침에 따라 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
     ```
   

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

1/2단계. Teleport 설치#

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

Linux 서버에 Teleport Agent를 설치하려면:

권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.

  1. teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오.

  2. 클러스터의 설치 스크립트를 실행하십시오:

    $ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
    
  3. 호스트에 대한 초대 토큰을 생성합니다.

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

    $ tctl tokens add --ttl=5m --type=node
    # The invite token: (=presets.tokens.first=)
    
  4. 다음 명령을 실행하여 만료되지 않은 생성된 모든 토큰을 나열합니다:

    $ tctl tokens ls
    # Token                            Type        Labels Expiry Time (UTC)
    # -------------------------------- ----------- ------ -------------------------------
    # (=presets.tokens.first=) Node,Db,App        10 Aug 23 19:49 UTC (4m11s)
    
  5. 호스트의 /tmp/token 파일에 조인 토큰을 씁니다:

    $ echo (=presets.tokens.first=) | sudo tee /tmp/token
    
  6. 에이전트를 실행하려는 호스트에서 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를 시작하여 정적 레이블을 구성할 수 있습니다.

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

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

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

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

    ssh_service:
      enabled: true
      labels:
        environment: dev
    

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

    ssh_service:
      enabled: true
      labels:
        location: San Francisco Bldg 301 4th floor
    
  4. 변경 사항을 저장하고 파일을 닫습니다.

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

systemd 서비스를 생성하여 호스트가 부팅될 때 your Teleport instance이 자동으로 시작되도록 구성합니다. 지침은 your Teleport instance을 어떻게 설치했는지에 따라 다릅니다.

Package Manager

your Teleport instance을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:

$ sudo systemctl enable teleport
$ sudo systemctl start teleport

TAR Archive

your Teleport instance을 실행할 호스트에서 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로 your Teleport instance의 상태를 확인하고 journalctl -fu teleport로 로그를 볼 수 있습니다.

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

    $ 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 로그인을 myuser Teleport 사용자에게 추가합니다. Teleport 사용자의 로그인 관리에 대한 자세한 내용은 로컬 사용자를 참조하세요.

숨겨진 정적 레이블 사용

역할 기반 접근 제어에 레이블을 사용하되 명령 출력이나 Teleport Web UI에 표시하지 않으려면 레이블 키에 teleport.hidden/ 접두사를 붙여 숨겨진 네임스페이스에 정의할 수 있습니다. 예를 들어:

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

명령을 사용한 동적 레이블 적용#

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

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

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

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

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

  4. 매 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: 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 명령은 1시간(1h), 0분(0m), 0초(0s)마다 실행됩니다. 이 값은 1분 미만일 수 없습니다.

  5. 변경 사항을 저장하고 파일을 닫습니다.

  6. INVITE_TOKEN 환경 변수에 저장한 초대 토큰으로 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
    

리소스 기반 레이블 적용#

리소스 기반 레이블 적용은 SSH 서버에만 지원됩니다.

해당 server_info 리소스를 생성하여 Teleport SSH 서버에 리소스 기반 레이블을 적용할 수 있습니다.

리소스 기반 레이블을 추가하려면 먼저 SSH 서버 세부 정보를 가져옵니다.

  1. 레이블을 적용하려는 SSH 서버를 가져옵니다. node_name에 SSH 서버의 이름을 할당합니다:

    $ tctl get node/node_name
    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
    
  2. 위 노드에 해당하는 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
    
  3. 로컬 컴퓨터에서 다음 명령을 실행하여 레이블을 추가했는지 확인합니다. 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 리소스를 다시 만듭니다.

다음 단계#

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

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

리소스에 레이블 추가하기

Teleport v18.9
원문 보기
요약

Teleport를 사용하면 클러스터의 애플리케이션, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있습니다. 이 가이드에서는 등록된 서버 리소스에 레이블을 추가하는 방법을 설명합니다. 리소스에 할당하는 레이블은 정적 레이블, 동적 레이블 또는 리소스 기반 레이블이 될 수 있습니다.

Teleport를 사용하면 클러스터의 애플리케이션, 서버, 데이터베이스 및 기타 리소스에 임의의 키-값 쌍을 추가할 수 있습니다. 레이블을 사용하여 다음을 수행할 수 있습니다:

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

이 가이드에서는 등록된 서버 리소스에 레이블을 추가하는 방법을 설명합니다. 다른 유형의 리소스에 레이블을 추가할 때도 유사한 단계를 따를 수 있습니다.

작동 방식#

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

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

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

동적 레이블은 레이블 값을 Teleport 구성에서 분리하는 데 특히 유용합니다. 예를 들어 Amazon EC2 인스턴스에서 Teleport를 시작하는 경우 EC2 인스턴스 메타데이터 API로 보내는 명령의 결과를 기반으로 region 값을 설정하는 동적 레이블을 사용할 수 있습니다. 동적 레이블을 사용하면 Amazon Machine Image의 각 서버에 동일한 구성을 사용하면서 AWS 리전에 따라 서버에 대한 접근을 필터링하고 제한할 수 있습니다.

사전 요구 사항#

  • 실행 중인 Teleport 클러스터. Teleport를 시작하려면 무료 체험판에 가입하거나 데모 환경을 구성하세요.

  • tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. 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')"
      
    2. 사용 중인 플랫폼에 대한 지침에 따라 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
     ```
   

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

1/2단계. Teleport 설치#

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

Linux 서버에 Teleport Agent를 설치하려면:

권장 설치 방법은 클러스터 설치 스크립트입니다. 이 스크립트는 클러스터에 맞는 올바른 버전, 에디션, 설치 모드를 선택합니다.

  1. teleport.example.com:443에 Teleport 클러스터의 호스트명과 포트를 할당하되, 스킴(https://)은 포함하지 마십시오.

  2. 클러스터의 설치 스크립트를 실행하십시오:

    $ curl "https://teleport.example.com:443/scripts/install.sh" | sudo bash
    
  3. 호스트에 대한 초대 토큰을 생성합니다.

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

    $ tctl tokens add --ttl=5m --type=node
    # The invite token: (=presets.tokens.first=)
    
  4. 다음 명령을 실행하여 만료되지 않은 생성된 모든 토큰을 나열합니다:

    $ tctl tokens ls
    # Token                            Type        Labels Expiry Time (UTC)
    # -------------------------------- ----------- ------ -------------------------------
    # (=presets.tokens.first=) Node,Db,App        10 Aug 23 19:49 UTC (4m11s)
    
  5. 호스트의 /tmp/token 파일에 조인 토큰을 씁니다:

    $ echo (=presets.tokens.first=) | sudo tee /tmp/token
    
  6. 에이전트를 실행하려는 호스트에서 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를 시작하여 정적 레이블을 구성할 수 있습니다.

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

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

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

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

    ssh_service:
      enabled: true
      labels:
        environment: dev
    

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

    ssh_service:
      enabled: true
      labels:
        location: San Francisco Bldg 301 4th floor
    
  4. 변경 사항을 저장하고 파일을 닫습니다.

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

systemd 서비스를 생성하여 호스트가 부팅될 때 your Teleport instance이 자동으로 시작되도록 구성합니다. 지침은 your Teleport instance을 어떻게 설치했는지에 따라 다릅니다.

Package Manager

your Teleport instance을 실행할 호스트에서 Teleport를 활성화하고 시작합니다:

$ sudo systemctl enable teleport
$ sudo systemctl start teleport

TAR Archive

your Teleport instance을 실행할 호스트에서 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로 your Teleport instance의 상태를 확인하고 journalctl -fu teleport로 로그를 볼 수 있습니다.

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

    $ 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 로그인을 myuser Teleport 사용자에게 추가합니다. Teleport 사용자의 로그인 관리에 대한 자세한 내용은 로컬 사용자를 참조하세요.

숨겨진 정적 레이블 사용

역할 기반 접근 제어에 레이블을 사용하되 명령 출력이나 Teleport Web UI에 표시하지 않으려면 레이블 키에 teleport.hidden/ 접두사를 붙여 숨겨진 네임스페이스에 정의할 수 있습니다. 예를 들어:

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

명령을 사용한 동적 레이블 적용#

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

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

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

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

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

  4. 매 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: 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 명령은 1시간(1h), 0분(0m), 0초(0s)마다 실행됩니다. 이 값은 1분 미만일 수 없습니다.

  5. 변경 사항을 저장하고 파일을 닫습니다.

  6. INVITE_TOKEN 환경 변수에 저장한 초대 토큰으로 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
    

리소스 기반 레이블 적용#

리소스 기반 레이블 적용은 SSH 서버에만 지원됩니다.

해당 server_info 리소스를 생성하여 Teleport SSH 서버에 리소스 기반 레이블을 적용할 수 있습니다.

리소스 기반 레이블을 추가하려면 먼저 SSH 서버 세부 정보를 가져옵니다.

  1. 레이블을 적용하려는 SSH 서버를 가져옵니다. node_name에 SSH 서버의 이름을 할당합니다:

    $ tctl get node/node_name
    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
    
  2. 위 노드에 해당하는 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
    
  3. 로컬 컴퓨터에서 다음 명령을 실행하여 레이블을 추가했는지 확인합니다. 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 리소스를 다시 만듭니다.

다음 단계#

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

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