Infograb logo
머신 ID 아키텍처

이 섹션에서는 Teleport 머신 ID의 내부 작동 방식에 대한 개요를 제공합니다.

머신 ID에 대한 초기 사양 및 설계는 토론 요청서에서 확인할 수 있습니다.

봇이란 무엇입니까?

Teleport 내에서 "봇"은 기계에서 사용하도록 설계된 특별한 사용자를 의미합니다. 봇은 일반 사용자와 유사하지만 정적 사용자 이름/비밀번호 자격 증명을 사용하여 인증하지 않습니다.

봇은 Teleport 내에서 단일 독립적인 리소스로 존재하지 않습니다. 대신, 세 개의 연결된 리소스로 구성됩니다. 이들은 다음과 같습니다:

  • 봇 사용자: 머신 ID 에이전트가 인증하는 사용자입니다.
  • 봇 역할: 봇 사용자에게 봇 역할이 할당되며, 봇 역할에는 봇이 기능을 수행하는 데 필요한 여러 권한이 포함됩니다. 예를 들어, 인증 기관을 감시하는 능력과 역할 임슨할 수 있는 능력입니다.
  • 토큰: 온보딩 과정에서, 머신 ID 에이전트가 처음으로 봇 사용자로 인증할 수 있도록 허용하는 토큰이 존재해야 합니다. 기존 토큰이 지정되지 않은 경우, Auth 서버에 의해 단일 사용 토큰이 생성됩니다.

이러한 리소스 생성은 tctl bots add로 관리됩니다.

봇과 tbot 인스턴스 간의 구분을 인식하는 것이 중요합니다. 이는 항상 일대일 관계가 아니므로, 여러 tbot가 동일한 봇 신원을 사용하는 경우가 많기 때문입니다.

역할 임슨

역할 임슨은 머신 ID에 의해 많이 사용되는 Teleport의 RBAC 기능입니다.

역할 임슨을 통해 사용자는 요청된 역할 세트로 자격 증명을 생성할 수 있습니다. 사용자는 이러한 역할을 보유할 필요는 없지만, 임슨할 수 있는 권한이 부여되어야 합니다. 임슨된 자격 증명은 여전히 생성한 사용자의 사용자 이름을 포함하므로, 작업은 사용자에게 귀속될 수 있습니다.

이러한 자격 증명은 역할의 구성된 권한으로 허용된 모든 작업을 완료하는 데 사용될 수 있습니다.

머신 ID의 경우, 봇 사용자에게 봇 역할이 할당되어 있으며, 여기에는 사용자가 구성한 역할을 임슨할 수 있는 권한이 포함됩니다.

tbot

tbot은 Teleport에 의해 보호되는 리소스에 접근해야 하는 머신 ID의 에이전트 역할을 하는 이진 파일입니다. 일반적으로 두 가지 모드 중 하나로 실행됩니다. 기본적으로 데몬과 같은 장기 실행 프로세스입니다. 이는 머신이 장기 실행되어 리소스에 지속적으로 접근해야 하는 상황에 적합합니다. tbot은 또한 "원샷" 모드에서 실행할 수 있으며, 이 모드에서는 머신의 자격 증명을 한 번 가져온 후 종료됩니다. 이는 CI/CD 작업 흐름과 같은 단기 환경에 이상적입니다.

tbot을 시작하기 전에 구성 파일이나 실행 시 제공된 인수로 최소 두 가지 구성 부분을 제공해야 합니다. 이는 다음으로 구성됩니다:

  • 봇이 Teleport 클러스터에 가입할 수 있어야 한다고 증명하는 데 사용할 가입 방법.
  • 일련의 출력. 출력은 자격 증명을 출력해야 하는 위치와 이러한 자격 증명에 적용해야 하는 모든 옵션을 지정하는 구성 설정으로 구성됩니다 (예: 어떤 역할을 임슨해야 하는지).

구성 옵션에 대한 자세한 내용은 참조 문서를 참조하세요.

초기 로드에서 tbot은 구성된 가입 방법을 사용하여 Teleport Auth 서비스에서 봇 사용자에 대한 자격 증명 세트를 얻습니다. 그런 다음 이 자격 증명을 사용하여 봇으로 Auth 서비스와 통신할 수 있습니다.

그 후, 구성된 정기 주기에 따라 tbot은 갱신 프로세스를 시작합니다. 먼저 봇 자신을 갱신하거나 구성된 온보딩 방법에 따라 새 자격 증명 세트를 가져오는 방식으로 봇의 자격 증명을 새롭게 합니다.

tbot 구성에서 제공된 각 출력에 대해 tbot 프로그램은 구성된 출력의 역할에 대해 Auth 서비스로부터 자격 증명을 얻기 위해 임슨을 사용합니다. tbot이 역할에 대한 자격 증명을 가져오면, 이를 출력의 목적지에 현재 인증 기관 인증서와 같은 유용한 아티팩트와 함께 다양한 형식으로 지속적으로 저장합니다.

이와 동시에, tbot은 Teleport 인증 기관을 모니터링하여 인증서 회전을 감지합니다. 이 경우 추가 갱신을 트리거하여 출력 목적지가 최신 인증 기관에서 서명된 인증서를 계속 보유하도록 합니다.

가입 및 인증

가입은 tbot이 Teleport Auth 서비스에 봇으로서 초기 인증을 수행하는 과정입니다.

머신 ID는 Teleport 내의 기존 토큰 리소스를 활용하며, 토큰은 추가적인 botName 필드를 포함하여 토큰과 관련된 봇 사용자를 식별합니다.

머신 ID는 현재 몇 가지 주요 차이점이 있는 두 가지 가입 방법을 지원합니다.

일시적인 토큰

  • 토큰의 이름은 Teleport 클러스터에 가입하는 데 필요한 불투명한 비밀로 사용됩니다. 즉, 안전하게 저장되고 전달되어야 합니다.
  • 사용된 후, 이 토큰 리소스는 스스로 파괴됩니다. 즉, 단일 봇을 Teleport 클러스터에 가입하는 데만 사용할 수 있습니다.

이 토큰은 단 한 번만 사용할 수 있으므로, 일시적인 토큰을 사용할 때 발급되는 인증서는 갱신 가능합니다. 이를 통해 단기 인증서를 사용하여 새로운 단기 인증서를 요청할 수 있습니다.

봇 사용자 자격 증명이 도난당할 위험을 줄이기 위해, 갱신 가능한 봇 사용자 인증서에는 세대 카운터가 포함됩니다.

세대 카운터는 데이터베이스의 사용자 정보와 인증서 내에 저장됩니다. 이 카운터는 사용자가 인증서를 갱신할 때마다 증가됩니다. 봇이 갱신을 시도할 경우, Auth 서버는 인증서 내의 값과 데이터베이스의 값이 일치하는지 확인합니다. 일치하지 않을 경우, 봇 사용자가 자동으로 잠깁니다. 이는 인증서가 도난당하고 봇이 여전히 실행 중일 때, 다음 갱신이 이를 무용지물로 만들기 때문입니다.

동적 가입 토큰 (예: AWS IAM)

  • 이 토큰은 봇이 클러스터에 가입할 수 있는지 증명할 수 있도록 허용하는 외부 권한에 의존합니다. 토큰의 이름은 구성 정보를 포함한 Teleport 내의 토큰 리소스를 식별합니다.
  • 이 토큰은 원하는 만큼 많은 봇을 가입하는 데 사용할 수 있으며, 일시적인 토큰과 같은 방식으로 스스로 파괴되지 않습니다.
  • 토큰과 교환된 인증서는 갱신할 수 없습니다. 봇이 인증서를 갱신하려면 원본 가입 단계를 반복하기만 하면 됩니다.

가능하면 일시적인 토큰보다 동적 가입 토큰을 사용하는 것이 좋습니다. 이렇게 하면 비밀을 처리할 필요가 없기 때문입니다.

파일 권한

tbot에서 사용되는 두 종류의 폴더가 있습니다:

  • 봇 자신의 파일: 이 파일들은 tbot 프로세스 자체에 속한 자격 증명을 저장합니다. 이 자격 증명은 갱신 가능성이 있으므로, 봇 사용자에게 할당된 모든 역할을 임슨할 수 있습니다. 이 파일들은 /var/lib/teleport/bot/에 기본적으로 저장됩니다.
  • 출력 목적지: 디렉터리 목적지가 구성된 경우, 봇은 지정된 디렉터리에 역할 임슨 자격 증명을 파일 형식으로 출력합니다.

이 파일들이 시스템의 최소 수의 Linux 프로세스와 사용자만 접근할 수 있도록 보장하는 것이 중요합니다.

봇의 파일들을 경우, tbot 실행을 위해 특정 Linux 사용자를 생성하고, 오직 이 사용자만 이 디렉터리에 접근하도록 하는 것이 모범 사례입니다.

디렉터리 목적지의 경우, 봇이 실행되는 프로세스는 읽기 및 쓰기 권한이 필요하며, 봇이 출력해야 하는 자격 증명을 필요로 하는 프로세스는 읽기 권한이 필요합니다. 이러한 파일에 접근할 필요가 있는 프로세스를 위해 특정 Linux 사용자를 생성할 것을 권장합니다. tbot init를 사용할 때 이 Linux 사용자를 "리더"로 지정하여 목적지에 대한 접근을 부여합니다.

기본 POSIX 파일 시스템 권한 외에도, tbot init은 시스템이 지원하는 경우 Linux ACL을 설정합니다. 이렇게 하면 개별 사용자에게 접근 권한을 부여하기 위해 더 세부적인 제어가 가능합니다.

마지막으로, 시스템이 이를 지원하는 경우, tbot은 기본적으로 파일을 읽고 쓰는 동안 심볼릭 링크의 해석을 방지하려고 시도합니다. 이는 종종 심볼릭 링크 공격이라고 알려진 공격의 한 종류를 방지합니다. 이 동작은 목적지를 구성할 때 insecure 심볼릭 링크 옵션을 사용하여 비활성화할 수 있습니다.

Teleport 원문 보기