Infograb logo
머신 ID 시작하기 가이드

이 시작하기 가이드에서는 머신 ID를 구성하여 봇 사용자가 원격 호스트에 연결할 수 있도록 인증서를 발급합니다.

여기에서 수행할 작업에 대한 개요는 다음과 같습니다:

  • 머신 ID가 실행될 호스트에 tbot을 다운로드하고 설치합니다.
  • 봇 사용자를 생성합니다.
  • 머신 ID를 시작합니다.
  • 머신 ID에서 발급한 인증서를 사용하여 SSH로 원격 머신에 연결합니다.

이 가이드는 개발 및 학습 목적으로 머신 ID 구성을 다룹니다. 생산 준비가 완료된 머신 ID 구성에 대한 내용은 머신 ID 배포 가이드를 참조하세요.

전제 조건

  • 머신 ID를 사용하여 신원을 할당할 호스트가 필요합니다.
  • 실행 중인 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 명령어를 실행할 수도 있습니다.

단계 1/4. Teleport 다운로드 및 설치

이 단계에서는 신원을 할당할 머신에 Teleport 바이너리를 다운로드하고 설치합니다.

우리의 다운로드 페이지에 호스팅된 각 Teleport 패키지는 teleport, tctl, tsh, tbot을 포함한 여러 유용한 바이너리와 함께 제공됩니다:

  • teleport는 Teleport 클러스터를 초기화하는 데 사용되는 데몬입니다. 이 바이너리는 이 가이드에서 사용되지 않습니다.
  • tctl은 봇 사용자를 생성하는 데 사용할 관리 도구입니다(단계 1/4).
  • tsh는 Teleport 클러스터에 로그인하는 데 사용할 클라이언트 도구입니다(단계 2/4 및 4/4).
  • tbot은 봇 사용자를 머신과 연결하는 데 사용할 머신 ID 도구입니다(단계 3/4).

플랫폼에 맞는 적절한 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 패키지 리포지토리에 대해 알아보세요.

단계 2/4. 봇 사용자 생성

봇 사용자를 생성하기 전에 할당 할 역할을 결정해야 합니다. 아래 tctl 명령을 사용하여 시스템에 어떤 역할이 존재하는지 확인할 수 있습니다.

클라이언트 머신에서 tsh를 사용하여 Teleport에 로그인한 후, tctl을 사용하여 시스템에 어떤 역할이 존재하는지 확인하세요.

Teleport Auth 서버에 연결하고 tctl을 사용하여 시스템에 어떤 역할이 존재하는지 확인하세요.

tctl get roles --format=text

신규 설치된 Teleport에서 기본 역할들이 있는 아래와 같은 출력을 볼 수 있습니다. 귀하의 클러스터에는 다른 역할이 있을 수 있습니다. 이 예제에서는 봇에 access 역할을 부여하여 클러스터 내 머신에 연결할 수 있도록 하겠습니다.

Role    Allowed to login as                           Node Labels Access to resources
------- --------------------------------------------- ----------- ----------------------------------------
access  {{internal.logins}}                           <all nodes> event:list,read,session:read,list
auditor no-login-6566121f-b602-47f1-a118-c9c618ee5aec             session:list,read,event:list,read
editor                                                            user:list,create,read,update,delete,...

internal.logins 특성은 Teleport 로컬 사용자 데이터베이스에서 값을 대체합니다. Teleport 역할의 특성이 작동하는 방식에 대한 전체 세부 정보는 Teleport 액세스 제어 참조를 참조하세요.

머신 ID는 토큰 또는 AWS의 IAM 방법으로 참여할 수 있습니다.

기본 access 역할을 사용하고 있다고 가정할 때, 봇이 호스트에서 접근할 수 있는 SSH 로그인을 지정하기 위해 --logins 플래그를 사용해야 합니다. 우리의 예제에서는 root를 사용할 것입니다.

tctl bots add robot --roles=access --logins=root

먼저, 봇이 참여할 수 있는 AWS 계정을 지정하는 IAM 방법 토큰을 생성해야 합니다. 아래 파일을 iam-token.yaml으로 만든 후 tctl create -f iam-token.yaml을 실행합니다.

kind: token
version: v2
metadata:
  # 토큰 이름은 비밀이 아니므로 인스턴스는 이 토큰을 사용하려면 AWS 계정 내에서 실행되고 있음을 증명해야 합니다.
  name: iam-token
spec:
  # 봇만 이 토큰을 사용하여 참여할 수 있도록 허용합니다.
  roles: [Bot]

  # 참여 방법을 IAM으로 설정합니다.
  join_method: iam

  # 이 토큰을 사용할 수 있는 봇 이름을 정의합니다.
  bot_name: robot

  allow:
  # 이 토큰을 사용할 수 있는 AWS 계정과(선택적으로) ARN을 제한합니다.
  # 이 정보는 CLI에서 "aws sts get-caller-identity" 명령을 실행하여 얻을 수 있습니다.
  - aws_account: "111111111111"
    aws_arn: "arn:aws:sts::111111111111:assumed-role/teleport-bot-role/i-*"

다음으로, 봇 사용자를 생성합니다.

$ tctl bots add robot --token=iam-token --roles=access --logins=root

단계 3/4. 머신 ID 시작

이제 tbot 바이너리를 사용하여 머신 ID를 시작합니다. tbot start 명령은 머신 ID를 루프에서 실행하여 /var/lib/teleport/bot에 갱신 가능한 인증서를 작성하고 /opt/machine-id에 애플리케이션이 사용할 단기 인증서를 기록합니다.

생산 환경에서는 시스템 관리자인 systemd와 같은 서비스를 사용하여 머신 ID를 백그라운드에서 실행해야 합니다. 그러나 이 가이드에서는 작동 방식을 더 잘 이해하기 위해 포그라운드에서 실행합니다.

export TELEPORT_ANONYMOUS_TELEMETRY=1
sudo tbot start \ --data-dir=/var/lib/teleport/bot \ --destination-dir=/opt/machine-id \ --token=abcd123-insecure-do-not-use-this \ --join-method=token \ --proxy-server=example.teleport.sh:443
export TELEPORT_ANONYMOUS_TELEMETRY=1
sudo tbot start \ --data-dir=/var/lib/teleport/bot \ --destination-dir=/opt/machine-id \ --token=iam-token \ --join-method=iam \ --proxy-server=example.teleport.sh:443

TELEPORT_ANONYMOUS_TELEMETRY는 익명 사용량 텔레메트리 제출을 가능하게 합니다. 이는 tbot의 향후 개발을 형성하는 데 도움이 됩니다. 이를 생략하여 비활성화할 수 있습니다.

다음 필드를 귀하의 클러스터 값으로 교체합니다.

  • tokentctl bots add 명령에 의해 출력된 토큰 또는 IAM 방법 토큰의 이름입니다.
  • destination-dir은 머신 ID가 애플리케이션 및 도구에서 사용할 수 있는 사용자 인증서를 기록하는 곳입니다.
  • data-dir은 머신 ID가 자체 단기 갱신 가능한 인증서를 포함한 개인 데이터를 기록하는 곳입니다. 이는 애플리케이션과 도구에서 사용해서는 안 됩니다.
  • auth-server는 Teleport Cloud Proxy 서버의 주소입니다. 예: example.teleport.sh:443.
  • tokentctl bots add 명령에 의해 출력된 토큰 또는 IAM 방법 토큰의 이름입니다.
  • ca-pin은 Teleport 클러스터의 CA Pin이며, tctl bots add 명령에 의해 출력됩니다.
  • destination-dir은 머신 ID가 애플리케이션 및 도구에서 사용할 수 있는 사용자 인증서를 기록하는 곳입니다.
  • data-dir은 머신 ID가 자신의 단기 갱신 가능한 인증서를 포함한 개인 데이터를 기록하는 곳입니다. 이는 애플리케이션과 도구에서 사용해서는 안 됩니다.
  • auth-server는 일반적으로 Teleport Proxy 서버의 주소 (teleport.example.com:443)입니다. 그러나 직접 연결성이 상태에서는 Auth 서버의 주소를 사용할 수도 있습니다 (teleport.example.com:443).

이제 머신 ID가 성공적으로 시작되었으므로, /opt/machine-id 디렉토리를 조사하여 디스크에 기록된 내용을 확인해보세요.

tree /opt/machine-id
machine-id├── identity├── key├── key-cert.pub├── key.pub├── known_hosts├── ssh_config├── teleport-database-ca.crt├── teleport-host-ca.crt├── teleport-user-ca.crt└── tlscert
0 directories, 10 files

이 디렉토리에는 key.* 파일에 개인 키 자료가 포함되어 있으며, identity 파일에는 SSH 인증서, tls**.crt 파일에는 X.509 인증서가 포함되어 있습니다. ssh_configknown_hosts 파일에는 머신 ID와 외부 애플리케이션 및 도구 간의 통합을 쉽게 해주기 위한 OpenSSH 구성이 포함되어 있습니다.

단계 4/4. 머신 ID에서 발급한 인증서 사용

머신 ID를 사용하려면, 클러스터 내에서 연결하려는 호스트를 찾기 위해 tsh ls를 실행합니다. 시스템에서 아래와 같은 출력을 볼 수 있습니다.

tsh ls
Node Name Address Labels--------- -------------- -----------------------------node-name 127.0.0.1:3022 arch=x86_64,group=api-servers

When Teleport의 인증 서비스가 Teleport 노드를 나열하라는 요청을 받으면 (예: 웹 UI에서 노드를 표시하거나 tsh ls를 통해), 현재 사용자가 볼 수 있는 권한이 있는 노드만 반환합니다.

사용자의 Teleport 클러스터에 있는 각 노드에 대해 인증 서비스는 다음 검사를 순서대로 적용하며, 하나의 검사가 실패하면 해당 노드를 사용자에게 숨깁니다:

  • 사용자의 역할 중 어느 것도 노드의 레이블과 일치하는 deny 규칙을 포함하지 않아야 합니다.
  • 사용자의 역할 중 적어도 하나는 노드의 레이블과 일치하는 allow 규칙을 포함해야 합니다.

예상할 때 노드를 볼 수 없다면, 사용자의 역할에 Teleport 접근 제어 참조에 문서화된 적절한 allowdeny 규칙이 포함되어 있는지 확인하세요.

머신 ID를 OpenSSH 통합과 함께 사용하려면, 다음 명령을 실행하여 example.com 클러스터 내의 node-name에 연결합니다.

ssh -F /opt/machine-id/ssh_config root@node-name.example.com

ssh 클라이언트 외에도 tsh를 사용할 수 있습니다. --proxy 매개변수를 자신의 프록시 주소로 교체하세요.

tsh ssh --proxy=teleport.example.com -i /opt/machine-id/identity root@node-name
tsh ssh --proxy=mytenant.teleport.sh -i /opt/machine-id/identity root@node-name
역할에 로그인이 정의되어 있어야 합니다

봇이 요청된 사용자로 노드에 로그인할 권한이 없을 때 아래 오류가 발생할 수 있습니다:

ssh -F /opt/machine-id/ssh_config root@node-name.example.com
root@node-name: Permission denied (publickey).kex_exchange_identification: Connection closed by remote host

이 문제는 두 가지 경우에 발생할 수 있습니다:

  • 로그인하려는 사용자가 사용 중인 역할의 logins에 명시되어 있지 않습니다.
  • 봇 사용자 생성 시 --logins를 사용한 경우, 봇이 가장 자주 사용하던 역할에는 {{ internal.logins }} 변수가 명시되어 있지 않습니다.

access 역할을 따르면서 작업해왔다면, 다음과 같이 진행하세요.

  • tctl get roles/access > access.yaml를 실행하여 역할을 내보냅니다.
  • access.yaml에서 logins 필드를 편집합니다.
  • tctl create -f access.yaml를 실행하여 역할을 업데이트합니다.

이제 위의 명령으로 ssh 호출을 대체하여 애플리케이션 및 도구에 회전 가능하고 감사 가능하며 Teleport 액세스 제어를 사용할 수 있는 머신 아이덴티티를 제공합니다.

다음 단계

Teleport 원문 보기