Infograb logo
리눅스에 머신 ID 배포하기 (TPM)

이 페이지에서는 리눅스 호스트에 머신 ID를 배포하는 방법과 온보드 TPM 2.0 칩의 보안 식별을 사용하여 Teleport 클러스터에 인증하는 방법을 설명합니다.

tpm 조인 방법은 클러스터의 인증 서비스에 유효한 Teleport 엔터프라이즈 라이센스가 설치되어야 합니다.

작동 방식

tpm 조인 방법은 Bots와 Agents가 공유 비밀을 사용하지 않고 Teleport Auth Service와 인증하는 안전한 방법입니다. 공유 비밀 대신 호스트의 신뢰할 수 있는 플랫폼 모듈(Trusted Platform Module, TPM)의 고유한 신원과 공개 키 암호화를 사용하여 호스트를 인증합니다.

기계에 사용할 수 있는 다른 형태의 신원이 없는 환경, 예를 들어 온프레미스에서는 조인하는 가장 안전한 방법입니다. 이는 token 조인 방법에 필요한 공유 비밀을 배포할 필요가 없습니다.

신뢰할 수 있는 플랫폼 모듈(Trusted Platform Module, TPM)은 호스트에 설치된 안전한 물리적 암호 프로세서입니다. TPM은 암호화 자료를 저장하고 여러 암호화 작업을 수행할 수 있으며, 운영 체제에 암호화 자료를 노출하지 않습니다. 각 TPM은 고유한 키 쌍이 내장되어 있으며 이를 보증 키(Endorsement Key, EK)라고 합니다.

일부 TPM은 제조업체의 CA에 의해 서명된 이 키 쌍에 대한 X.509 인증서도 포함하고 있습니다. 이를 EK 인증서(EKCert)라고 하며, TPM이 제조업체의 CA를 신뢰하는 제3자에게 TPM이 진품이고 TPM 사양을 준수함을 증명하는 데 사용될 수 있습니다.

tpm 조인 방법을 사용할 때는 먼저 TPM의 공개 키를 쿼리한 다음 이 공개 키를 명시적으로 허용하는 조인 토큰을 생성해야 합니다. 호스트 운영 체제가 재설치되더라도 EK 공개 키는 변경되지 않으므로 TPM은 여전히 Teleport 클러스터에 조인하는 데 사용할 수 있습니다. 많은 호스트가 있는 경우 ansible과 같은 자동화 도구를 사용하여 귀하의 플릿 전체에서 TPM을 쿼리한 다음 조인 토큰을 생성하는 것이 좋습니다.

Warning

tpm 조인 방법은 현재 FIPS 140-2와 호환되지 않습니다.

전제 조건

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

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

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

  • 당신의 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 명령어를 실행할 수도 있습니다.
  • 머신 ID를 설치할 리눅스 호스트와 TPM2.0이 설치되어 있는 호스트.
  • 머신 ID를 실행할 리눅스 사용자. 이 가이드에서는 teleport를 사용합니다.

1단계/5. tbot 설치

이 단계는 리눅스 호스트에서 완료됩니다.

먼저 tbot을 머신 ID를 사용하려는 VM에 설치해야 합니다.

플랫폼에 맞는 Teleport 패키지를 다운로드합니다:

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

tbot에 TPM 장치 액세스 권한 부여

tbot을 실행할 사용자가 root가 아닌 경우에는 사용자가 TPM 장치에 액세스할 수 있도록 리눅스를 구성해야 합니다.

가장 간단한 방법은 배포판에 tss 그룹이 있는지 확인하고 해당 사용자에게 할당하는 것입니다. 그것이 불가능하거나 다른 솔루션을 찾고 있다면, TPM2 소프트웨어 스택에서 제공하는 udev 규칙과 유사한 규칙을 만드는 것이 좋습니다.

2단계/5. 봇 생성

다음으로, 봇을 생성해야 합니다. 봇은 기계 또는 기계 그룹에 대한 Teleport 아이덴티티입니다. 사용자와 마찬가지로, 봇은 액세스할 수 있는 내용을 정의하는 일련의 역할과 특성을 가지고 있습니다.

bot.yaml을 생성하세요:

kind: bot
version: v1
metadata:
  # name은 클러스터 내에서 봇의 고유 식별자입니다.
  name: example
spec:
  # roles는 봇에 부여할 역할의 목록입니다. 여기에 어떤 역할을 지정해야 할지 모르는 경우 걱정하지 마세요.
  # Access Guides가 이미 생성된 봇에 역할을 생성하고 할당하는 방법을 안내해 드립니다.
  roles: []

example을 봇에 대한 고유하고 설명적인 이름으로 교체하는 것을 잊지 마세요.

이 파일을 적용하려면 tctl을 사용하세요:

tctl create bot.yaml

3단계/5. tpm 조인 토큰 생성

봇이 생성되었으므로 이제 토큰을 생성해야 합니다. 이 토큰은 tbot이 Teleport 클러스터에 봇으로 인증하는 데 사용됩니다.

TPM에 대한 EKPub 해시 또는 EKCert 시리얼 결정

먼저, 머신 ID를 사용하려는 호스트의 TPM 특성을 결정해야 합니다. 이 특성은 조인 토큰의 허용 규칙 내에서 사용되어 이 특정 호스트에 대한 액세스를 부여합니다.

머신에서 tbot tpm identify를 실행합니다:

tbot tpm identify
TPM 정보EKPub 해시: 6c5aada1c5abee6d869369a0example2fd2beb41c850d3f0227f029c4fffc4baEKCert 감지됨: trueEKCert 시리얼: 5e:cd:5f:8e

EKPub 해시 뒤의 긴 16진수 문자열을 가져와서 ek-public-hash에 할당합니다. 이것은 이 TPM을 고유하게 식별하며 조인 토큰에 사용됩니다.

제조업체 CA 얻기

이전 단계에서 EKCert 감지됨false이면 이 섹션을 무시해도 됩니다.

이전 단계에서 EKCert 감지됨true이면, 조인 프로세스의 일부로 TPM이 합법적으로 제조되었는지 검증하기 위해 제조업체의 CA 인증서를 얻는 것이 권장됩니다.

EKCert CA를 얻는 방법은 TPM마다 다를 수 있습니다. 더 많은 정보는 TPM 문서를 참조하거나 공급업체에 문의하세요.

조인 토큰 생성

bot-token.yaml이라는 파일을 생성합니다:

kind: token
version: v2
metadata:
  # name은 토큰을 식별합니다. 설명적이게 만드는 것을 권장합니다.
  name: my-bot-token
spec:
  # 머신 ID 및 TPM 조인의 경우, 역할은 항상 "Bot"이며
  # join_method는 항상 "tpm"입니다.
  roles: [Bot]
  join_method: tpm

  # bot_name은 이 토큰이 사용될 때 접근 권한을 부여할 봇의 이름을 지정합니다.
  bot_name: my-bot

  # tpm은 이 토큰에 대한 TPM 조인 방법별 구성을 지정합니다.
  tpm:
    # ekcert_allowed_cas는 TPM EKCert를 검증하는 데 사용할 CA 인증서 목록입니다. PEM으로 감싸져야 합니다.
    #
    # 지정된 경우, 조인하려는 TPM은 지정된 CA 중 하나에 의해 서명된 EKCert를 제시해야 합니다. EKCert을 제시하지 않은 TPM은 조인할 수 없습니다.
    ekcert_allowed_cas:
      - |
        -----BEGIN CERTIFICATE-----
        ... CA 인증서 데이터 ...
        -----END CERTIFICATE-----
    # allow는 규칙 목록으로, 제시된 TPM은 이 토큰을 사용하여 조인할 수 있도록 허용 규칙 중 하나와 일치해야 합니다.
    allow:
        # description은 규칙에 대한 사람이 읽을 수 있는 설명입니다. TPM이 조인할 수 있는지 여부에 영향을 주지 않지만 특정 호스트(예: TPM이 위치한 서버의 자산 태그)와 규칙을 연관짓는 데 사용할 수 있습니다.
      - description: "example-server-100"
        # ek_public_hash는 PKIX 형식으로 직렬화된 EKPub의 SHA256 해시이며, 16진수로 인코딩됩니다. 이 값은 TPM이 EKCert를 제출할 때도 검사됩니다.
        ek_public_hash: "ek-public-hash"

TPM에 EKCert이 포함되어 있고 제조업체의 CA를 확보했다면, ekcert_allowed_cas 섹션을 PEM으로 감싸진 CA 인증서로 교체하세요. 그렇지 않으면 이 섹션을 제거하세요.

동일한 봇으로 인증하고 싶어하는 여러 호스트가 있다면, 각 호스트에 대해 allow 목록에 추가 규칙을 추가할 수 있습니다.

tctl을 사용하여 이 내용을 Teleport 클러스터에 적용합니다:

tctl create -f bot-token.yaml

4단계/5. tbot 구성

/etc/tbot.yaml을 생성합니다:

version: v2
proxy_server: example.teleport.sh:443
onboarding:
  join_method: tpm
  token: my-bot-token
storage:
  type: directory
  path: /var/lib/teleport/bot
# 출력은 액세스 가이드 완료 중에 채워질 것입니다.
outputs: []

다음 항목을 교체합니다:

  • example.teleport.sh:443에는 Teleport Proxy의 주소를 입력합니다.

스토리지 디렉토리 준비

tbot 서비스는 재시작 간에 내부 자격 증명과 상태를 저장할 방법이 필요합니다. 이를 스토리지 목적지라고 합니다.

이 예제에서는 /var/lib/teleport/bot 디렉토리를 사용합니다.

이 디렉토리는 봇의 민감한 자격 증명을 저장하므로, 이를 보호하는 것이 중요합니다. 이를 위해 디렉토리를 tbot이 실행될 리눅스 사용자만 액세스할 수 있도록 구성합니다.

다음을 실행하여 teleporttbot이 실행될 리눅스 사용자로 교체하세요:

봇 디렉토리를 만들고 소유권을 teleport 사용자에게 할당합니다.

sudo mkdir -p /var/lib/teleport/bot
sudo chown teleport:teleport /var/lib/teleport/bot

systemd 서비스 생성

기본적으로, tbot는 데몬 모드에서 실행됩니다. 그러나 이를 Linux 호스트의 서비스 관리자 내에서 서비스로 구성해야 합니다. 서비스 관리자는 부팅 시 tbot를 시작하고 실패할 경우 다시 시작되도록 보장합니다. 이 안내서에서는 systemd를 시연하지만 tbot는 모든 일반적인 대안과 호환되어야 합니다.

tbot install systemd를 사용하여 systemd 서비스 파일을 생성합니다:

tbot install systemd \ --write \ --config /etc/tbot.yaml \ --user teleport \ --group teleport \ --anonymous-telemetry

다음 항목을 바꾸는 것을 잊지 마세요:

  • teleporttbot를 실행하려는 Linux 사용자 이름으로 바꿉니다.
  • /etc/tbot.yaml을 생성한 구성 파일의 경로로 바꿉니다.

--write를 생략하면 systemd 서비스 파일이 디스크에 작성되는 대신 콘솔에 출력됩니다.

--anonymous-telemetry는 익명 사용 수집을 제출할 수 있게 합니다. 이는 tbot의 향후 개발을 형성하는 데 도움이 됩니다. 이를 생략하여 비활성화할 수 있습니다.

다음으로 서비스를 활성화하여 부팅 시 시작되도록 하고 서비스를 시작합니다:

sudo systemctl daemon-reload
sudo systemctl enable tbot
sudo systemctl start tbot

서비스가 성공적으로 시작되었는지 확인합니다:

sudo systemctl status tbot

5단계/5. 출력 구성

당신은 이제 tbot의 기본 설정을 완료했습니다. 현재 이 시점에서 tbot은 Teleport 클러스터에 자신을 식별하고 자체 자격 증명을 갱신하지만 다른 애플리케이션에서 사용할 수 있는 자격 증명을 출력하지는 않습니다.

액세스 가이드 중 하나를 따라 귀하의 액세스 요구 사항을 충족하는 출력을 구성하세요.

다음 단계

Teleport 원문 보기