인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
리눅스에서 머신 ID 배포 (TPM)
이 페이지에서는 리눅스 호스트에 머신 ID를 배포하는 방법과 온보드 TPM 2.0 칩의 보안 식별을 사용하여 Teleport 클러스터에 인증하는 방법을 설명합니다.
tpm
조인 방법은 클러스터의 Auth Service에 유효한 Teleport Enterprise 라이선스가 설치되어 있어야 합니다.
작동 원리
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의 공개 키를 쿼리한 다음 이 공개 키를 명시적으로 허용하는 조인 토큰을 생성해야 합니다. 감지된 TPM에 대한 정보를 나열하려면 teleport tpm identify
명령을 실행합니다.
호스트가 많을 경우 Ansible과 같은 자동화 도구를 사용하여 전체 면에서 TPM을 쿼리하고 조인 토큰을 생성하는 것이 좋습니다.
Warning
tpm
조인 방법은 현재 FIPS 140-2와 호환되지 않습니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- 연결이 가능한지 확인하기 위해
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
명령어를 실행할 수도 있습니다. - 머신 ID를 설치할 리눅스 호스트, TPM 2.0이 설치되어 있어야 합니다.
- 해당 호스트에서 머신 ID가 실행될 리눅스 사용자. 이 가이드에서는
teleport
를 사용할 것입니다.
1/5단계. tbot
설치
이 단계는 리눅스 호스트에서 완료합니다.
먼저 머신 ID를 사용하고자 하는 VM에 tbot
을 설치해야 합니다.
플랫폼에 맞는 Teleport 패키지를 다운로드합니다:
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 패키지 리포지토리에 대해 알아보세요.
TPM 장치에 대한 tbot
액세스 권한 부여
tbot
을 실행할 사용자가 root
가 아닌 경우, Linux에서 사용자가 TPM 장치에 접근할 수 있도록 구성해야 합니다.
가장 간단한 방법은 배포판이 tss
그룹을 제공하는지 확인하고 해당 사용자에게 할당하는 것입니다. 만약 그게 불가능하거거나 다른 해결책을 원하신다면, TPM2 소프트웨어 스택에서 제공하는 규칙과 유사한 udev 규칙을 생성하는 것을 권장합니다.
2/5단계. 봇 생성
다음으로, Bot을 생성해야 합니다. Bot은 기계 또는 기계 그룹에 대한 Teleport ID입니다. 사용자와 마찬가지로 Bot도 액세스할 수 있는 권한을 정의하는 역할과 특성을 가지고 있습니다.
bot.yaml
을 생성합니다:
kind: bot
version: v1
metadata:
# name은 클러스터에서 Bot의 고유 식별자입니다.
name: example
spec:
# roles는 Bot에 부여할 역할 목록입니다. 여기에서 어떤 역할을 지정해야 할지 모른다면 걱정하지 마세요.
# 액세스 가이드가 이미 생성된 Bot에 역할을 생성하고 할당하는 방법을 안내할 것입니다.
roles: []
example
을 Bot에 대한 고유하고 설명적인 이름으로 교체했는지 확인하세요.
다음과 같이 tctl
을 사용하여 이 파일을 적용합니다:
tctl create bot.yaml
3/5단계. tpm
조인 토큰 생성
봇이 생성되었으므로 이제 토큰을 생성해야 합니다. 이 토큰은 tbot
이 Teleport 클러스터에 봇으로 인증하는 데 사용됩니다.
TPM의 EKPub 해시 또는 EKCert 일련 번호 결정
먼저, 머신 ID를 사용하고자 하는 호스트에서 TPM의 특성을 결정해야 합니다. 이 특성은 조인 토큰의 허용 규칙 내에서 이 특정 호스트에 대한 액세스를 부여하는 데 사용됩니다.
호스트에서 tbot tpm identify
를 실행합니다:
tbot tpm identifyTPM 정보EKPub 해시: 6c5aada1c5abee6d869369a0example2fd2beb41c850d3f0227f029c4fffc4baEKCert 감지됨: trueEKCert 일련 번호: 5e:cd:5f:8e
EKPub 해시
뒤에 있는 긴 16진수 문자열을 가져와서 ek-public-hash에 할당합니다. 이는 이 TPM을 고유하게 식별하며 조인 토큰에서 사용됩니다.
제조업체 CA 얻기
이전 단계에서 EKCert 감지e
이 false
인 경우, 이 섹션은 무시하셔도 됩니다.
이전 단계에서 EKCert 감지e
이 true
인 경우, 제조업체의 CA 인증서를 얻는 것이 권장됩니다. 이는 조인 프로세스의 일환으로 TPM을 정품으로 검증하는 데 도움이 될 것입니다.
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 규칙과 일치해야 합니다.
allow:
# description은 규칙에 대한 사람이 읽을 수 있는 설명입니다. 이는 TPM이 조인할 수 있는지 여부에 영향을 미치지 않지만,
# 특정 호스트(예: TPM이 있는 서버의 자산 태그)와 규칙을 연결하는 데 사용될 수 있습니다.
- description: "example-server-100"
# ek_public_hash는 EKPub의 SHA256 해시로, PKIX 형식으로 직렬화되고 16진수로 인코딩되어야 합니다.
# TPM이 EKCert를 제출할 때 이 값도 체크되며, EKCert의 공개 키가 이 검사를 위해 사용됩니다.
ek_public_hash: "ek-public-hash"
여러분의 TPM이 EKCert를 포함하고 있고 제조업체의 CA를 얻었다면,
ekcert_allowed_cas
섹션을 PEM으로 감싼 CA 인증서로 교체하세요.
그렇지 않다면, 이 섹션을 제거하세요.
동일한 Bot으로 인증하고자 하는 호스트가 여러 개 있는 경우,
각 호스트에 대해 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는 접근 가이드 완료 시 채워집니다.
outputs: []
다음 내용을 교체합니다:
example.teleport.sh:443
을 여러분의 Teleport Proxy 주소로 변경하세요.
저장소 디렉토리 준비
tbot
서비스는 재시작 간 상태(예: 내부 자격 증명)를 저장할 방법이 필요합니다. 이는 저장소 목적지로 알려져 있습니다.
이 예제에서는 /var/lib/teleport/bot
디렉토리를 사용합니다.
이 디렉토리는 봇의 민감한 자격 증명을 저장하므로 보호하는 것이 중요합니다. 이를 위해,
디렉토리를 tbot
이 실행될 Linux 사용자에게만 접근 가능하도록 구성합니다.
다음 명령을 실행하세요. teleport
을 tbot
을 실행할 Linux 사용자로 교체하세요:
봇 디렉토리를 만들고 소유권을 teleport 사용자에게 할당합니다
sudo mkdir -p /var/lib/teleport/botsudo 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
다음 항목을 교체해야 합니다:
teleport
는tbot
을 실행할 Linux 사용자 이름으로 바꿉니다./etc/tbot.yaml
은 생성한 구성 파일의 경로로 바꿉니다.
--write
를 생략하면 시스템 서비스 파일이 콘솔에 출력되며 디스크에 작성되지 않습니다.
--anonymous-telemetry
는 익명 사용 통계를 제출하는 기능을 활성화합니다. 이를 통해 tbot
의 미래 개발에 도움을 줄 수 있습니다. 이를 비활성화하려면 이 파라미터를 생략하면 됩니다.
다음으로, 서비스가 부팅 시 시작되도록 활성화하고 서비스를 시작합니다:
sudo systemctl daemon-reloadsudo systemctl enable tbotsudo systemctl start tbot
서비스가 성공적으로 시작되었는지 확인합니다:
sudo systemctl status tbot
5/5단계. 출력 구성
tbot
의 기본 구성을 준비했습니다. 이 시점에서 tbot
은 Teleport 클러스터에 자신을 식별하고 자신의 자격 증명을 갱신하지만, 다른 애플리케이션에서 사용할 자격 증명을 출력하지 않습니다.
당신의 접근 요구를 충족하는 출력을 구성하려면 접근 가이드 중 하나를 따르십시오.
다음 단계
- 환경을 위해
tbot
구성을 마치려면 접근 가이드를 따르세요. tpm
조인에 대해 더 알아보려면 TPM 조인 참조를 읽으세요.- 모든 사용 가능한 구성 옵션을 탐색하려면 구성 참조를 읽으세요.
TELEPORT_ANONYMOUS_TELEMETRY
에 대한 더 많은 정보.