InfoGrab Docs

리소스에 레이블 추가하기

요약

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

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

  • tctltsh 명령을 실행할 때 반환되는 리소스를 필터링합니다.
  • 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 tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Determine the version of your Teleport cluster. The tctl and tsh clients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at /v1/webapi/find and 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')"
      
    2. Follow the instructions for your platform to install tctl and tsh clients:

  • 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 설치#

  1. 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.

  1. Assign to your Teleport cluster hostname and port, but not the scheme (https://).

  2. Run your cluster's install script:

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

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

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

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

    $ echo (=presets.tokens.first=) | sudo tee /tmp/token
    
  4. 에이전트를 실행하려는 호스트에서 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를 시작합니다:

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.

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

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

  • tctltsh 명령을 실행할 때 반환되는 리소스를 필터링합니다.
  • 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 tctl and tsh clients.

    Installing `tctl` and `tsh` clients
    1. Determine the version of your Teleport cluster. The tctl and tsh clients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at /v1/webapi/find and 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')"
      
    2. Follow the instructions for your platform to install tctl and tsh clients:

  • 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 설치#

  1. 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.

  1. Assign to your Teleport cluster hostname and port, but not the scheme (https://).

  2. Run your cluster's install script:

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

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

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

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

    $ echo (=presets.tokens.first=) | sudo tee /tmp/token
    
  4. 에이전트를 실행하려는 호스트에서 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를 시작합니다:

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.

  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 서버를 가져옵니다. 에 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
    
  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 역할 템플릿을 참조하세요.