이 섹션에서는 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
심볼릭 링크 옵션을 사용하여 비활성화할 수 있습니다.