이 가이드에서는 CircleCI 워크플로 내에서 실행될 머신 ID의 에이전트인 tbot
을 구성합니다. 이 봇은 long-lived secrets의 필요성을 제거하기 위해 circleci
위임 가입 방법을 사용하도록 구성됩니다.
사전 요구 사항
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl status클러스터 teleport.example.com
버전 16.2.0
CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678
tctl status
명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속tctl
명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로tctl
명령어를 실행할 수도 있습니다. - 푸시할 수 있는 Git 리포지토리와 연결된 CircleCI 프로젝트가 필요합니다.
1단계/5. CircleCI 구성하기
CircleCI 워크플로가 귀하의 Teleport 클러스터에 연결할 수 있도록 규칙을 구성하려면, CircleCI 조직의 ID를 확인하고 CircleCI 컨텍스트를 생성해야 합니다.
조직 ID 찾기
CircleCI를 열고 네비게이션 바에서 "조직 설정"으로 이동합니다. "개요"라는 제목의 인터페이스와 "조직 ID"라는 섹션이 표시됩니다. 이 값을 적어두고 아래의 구성 예에서 $ORGANIZATION_ID
를 이 값으로 대체합니다.
컨텍스트 생성하기
CircleCI에는 컨텍스트라는 조직 수준 개념이 있으며, 이를 통해 워크플로 작업에 노출되어야 할 일련의 비밀을 구성할 수 있습니다. CircleCI를 구성하여 컨텍스트와 관련된 작업을 트리거할 수 있는 사용자를 제어할 수 있습니다.
워크플로 작업에 할당된 컨텍스트는 CircleCI가 작업을 위해 생성하는 ID 토큰에도 인코딩됩니다. 이것은 Teleport가 어떤 CircleCI 작업이 Teleport 클러스터에 접근할 수 있어야 하는지를 결정하는 데 이상적인 방법입니다.
이 예제에서는 teleport-access
라는 이름의 CircleCI 컨텍스트를 생성합니다. 그런 다음 이 컨텍스트에 귀하의 Teleport 클러스터에 대한 접근 권한을 부여합니다.
CircleCI에서 "조직 설정"을 열고 "컨텍스트"로 이동하여 "Create Context"를 클릭합니다. 생성하고자 하는 컨텍스트의 이름으로 teleport-access
를 제공하십시오. 이 값을 귀하의 조직에 더 의미 있는 문자열로 대체할 수 있지만, 이 가이드의 이후 단계에서는 반드시 teleport-access
를 귀하의 값으로 대체해야 합니다.
방금 생성한 컨텍스트를 선택합니다. 이제 컨텍스트를 구성할 수 있는 페이지로 이동합니다. Teleport를 구성할 때 사용할 컨텍스트의 ID를 결정하려면, 컨텍스트 설정 페이지의 URL을 찾습니다. 이 URL은 다음과 유사한 형식을 가집니다:
https://app.circleci.com/settings/organization/github/gravitational/contexts/00000000-0000-0000-0000-000000000000
이 경우, 컨텍스트 ID는: 00000000-0000-0000-0000-000000000000
입니다.
이 값을 적어두고 아래의 구성 예에서 $CONTEXT_ID
를 이 값으로 대체합니다.
2단계/5. 머신 ID 봇 생성하기
다음으로, 봇을 생성해야 합니다. 봇은 기계 또는 기계 그룹에 대한 Teleport 아이덴티티입니다. 사용자와 마찬가지로, 봇은 액세스할 수 있는 내용을 정의하는 일련의 역할과 특성을 가지고 있습니다.
bot.yaml
을 생성하세요:
kind: bot
version: v1
metadata:
# name은 클러스터 내에서 봇의 고유 식별자입니다.
name: example
spec:
# roles는 봇에 부여할 역할의 목록입니다. 여기에 어떤 역할을 지정해야 할지 모르는 경우 걱정하지 마세요.
# Access Guides가 이미 생성된 봇에 역할을 생성하고 할당하는 방법을 안내해 드립니다.
roles: []
example
을 봇에 대한 고유하고 설명적인 이름으로 교체하는 것을 잊지 마세요.
이 파일을 적용하려면 tctl
을 사용하세요:
tctl create bot.yaml
3단계/5. CircleCI용 가입 토큰 생성하기
CircleCI 워크플로가 귀하의 Teleport 클러스터와 인증할 수 있도록 하려면, 먼저 가입 토큰을 생성해야 합니다. 이 토큰은 Auth Server가 봇이나 노드의 가입 허용 여부를 결정하는 기준을 설정합니다.
bot-token.yaml
이라는 이름의 파일을 생성하고, $ORGANIZATION_ID
와 $CONTEXT_ID
를 단계 1에서 얻은 값으로 교체하십시오.
kind: token
version: v2
metadata:
name: example-bot
spec:
roles: [Bot]
join_method: circleci
bot_name: example
circleci:
organization_id: $ORGANIZATION_ID
# allow는 Auth Server가 `tbot`의 가입 허용 여부를 결정하는 규칙을 설정합니다.
allow:
- context_id: $CONTEXT_ID
토큰 리소스 필드를 좀 더 자세히 살펴보겠습니다:
metadata.name
은 토큰의 이름을 정의합니다. 이 값은 나중에 구성의 다른 부분에서 사용해야 하므로 주의하십시오.metadata.expires
는 가입 토큰이 만료되는 날짜를 정의합니다. 이 예시에서는2100
년으로 설정되어 있습니다.spec.bot_name
은 이 토큰이 접근을 부여할 머신 ID 봇의 이름입니다. 이 값도 나중에 다른 부분에서 사용해야 하므로 기억하십시오.spec.roles
는 이 토큰이 접근할 수 있는 역할을 정의합니다.[Bot]
값은 이 토큰이 머신 ID 봇에 대한 접근을 허용한다는 의미입니다.spec.join_method
는 이 토큰이 적용되는 가입 방법을 정의합니다. 이 가이드에서는 CircleCI에만 초점을 맞추므로circleci
로 설정합니다.spec.circleci.allow
는 어떤 CircleCI 실행이 이 토큰을 사용하여 인증할 수 있는지에 대한 규칙을 설정하는 데 사용됩니다.
tctl
을 사용하여 이를 귀하의 Teleport 클러스터에 적용합니다:
tctl create -f bot-token.yaml
4단계/5. CircleCI 워크플로 구성하기
봇과 가입 토큰이 생성되었으므로 이제 Teleport 클러스터에 연결할 수 있는 CircleCI 워크플로를 구성할 수 있습니다.
tbot
을 구성하려면 YAML 파일을 사용합니다. 이 예제에서는 이를 리포지토리 내에 저장하겠지만, CI 파이프라인 자체에서 생성되거나 생성될 수 있습니다.
리포지토리 내에 tbot.yaml
을 생성합니다:
version: v2
proxy_server: example.teleport.sh:443
onboarding:
join_method: circleci
token: example-bot
oneshot: true
storage:
type: memory
# outputs는 액세스 가이드 완료 중에 채워질 것입니다.
outputs: []
다음으로 교체하십시오:
example.teleport.sh:443
를 귀하의 Teleport Proxy 또는 Auth Server의 주소로 교체합니다. Teleport Proxy의 주소를 사용하는 것이 좋습니다.example-bot
을 2단계에서 생성한 토큰의 이름으로 교체합니다.
이제 CircleCI 파이프라인을 정의할 수 있습니다. 파이프라인이 tbot
을 사용하려면 환경 내에서 제공되어야 합니다. 이 예제에서는 CI 단계의 일환으로 tbot
을 다운로드하는 방법을 보여드리겠지만, 프로덕션 구현에서는 이 이진 파일을 포함하는 도커 이미지를 빌드하여 Teleport CDN에 의존하지 않도록 할 수 있습니다.
Git 리포지토리를 열고 .circleci
라는 이름의 디렉토리를 생성합니다. 그런 다음 config.yml
이라는 이름의 파일을 열고 다음 구성을 삽입합니다:
# 참조: https://circleci.com/docs/2.0/configuration-reference
version: 2.1
jobs:
write-run-log:
docker:
- image: cimg/base:stable
steps:
- checkout
- run:
name: "Install Teleport"
command: |
cd /tmp
curl -O https://cdn.teleport.dev/teleport-v16.2.0-linux-amd64-bin.tar.gz
tar -xvf teleport-v16.2.0-linux-amd64-bin.tar.gz
sudo ./teleport/install
- run:
name: "Run Machine ID"
command: |
export TELEPORT_ANONYMOUS_TELEMETRY=1
tbot start -c tbot.yaml
workflows:
write-run-log:
jobs:
- write-run-log:
context:
- teleport-access
TELEPORT_ANONYMOUS_TELEMETRY
는 익명 사용량 원격 측정을 제출할 수 있도록 합니다. 이는 tbot
의 향후 개발 방향을 계획하는 데 도움이 됩니다. 이를 생략하여 비활성화할 수 있습니다.
이 두 구성 파일을 리포지토리에 추가하고, 커밋하고 푸시하십시오.
CircleCI를 열고 작업 상태를 확인하고, 완료될 때까지 기다리며 오류가 발생하지 않는지 확인합니다.
보안 영향 및 위험에 대한 주의점
tbot start
가 작업에서 사용되면, 그 작업의 모든 후속 단계는 tbot
이 생성한 자격 증명에 접근할 수 있습니다. 이 자격 증명을 접근할 수 있는 단계의 수를 줄이기 위해 워크플로를 여러 작업으로 나누는 것을 추천합니다.
CircleCI 봇에 할당한 역할이 CI/CD가 상호 작용해야 하는 Teleport 클러스터의 리소스에만 접근할 수 있도록 확인하십시오.
5단계/5. 출력 구성하기
당신은 이제 tbot
의 기본 설정을 완료했습니다. 현재 이 시점에서 tbot
은 Teleport 클러스터에 자신을 식별하고 자체 자격 증명을 갱신하지만 다른 애플리케이션에서 사용할 수 있는 자격 증명을 출력하지는 않습니다.
액세스 가이드 중 하나를 따라 귀하의 액세스 요구 사항을 충족하는 출력을 구성하세요.
추가 단계
- 액세스 가이드를 따라 귀하의 환경에 맞게
tbot
구성을 마무리하십시오. - 구성 참조를 읽어 모든 사용 가능한 구성 옵션을 탐색하십시오.
- CircleCI에 대한 더 많은 정보는 그들의 문서를 읽어보십시오.
TELEPORT_ANONYMOUS_TELEMETRY
에 대한 더 많은 정보.