인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
CircleCI에서 Machine ID 배포
이 가이드에서는 tbot
이라는 Machine ID의 에이전트를 CircleCI 워크플로 내에서 실행할 수 있도록 구성합니다. 이 봇은 긴 수명의 비밀이 필요하지 않도록 circleci
위임 조인 방법을 사용하도록 구성됩니다.
전제 조건
-
실행 중인 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
명령어를 실행할 수도 있습니다. - 푸시할 수 있는 Git 저장소에 연결된 CircleCI 프로젝트.
1/5단계. CircleCI 구성
Teleport 클러스터에 연결할 수 있는 CircleCI 워크플로우 규칙을 구성하려면, CircleCI 조직의 ID를 결정하고 CircleCI 컨텍스트를 만들어야 합니다.
조직 ID 찾기
CircleCI를 열고 내비게이션 바에서 "조직 설정"으로 이동합니다.
"개요"라는 제목의 인터페이스가 표시되고 "조직 ID"라는 섹션이 보일 것입니다. 이 값을 기록해 두고 구성 예제에서 organization-id를 이 값으로 대체하십시오.
컨텍스트 만들기
CircleCI에는 컨텍스트라는 조직 수준의 개념이 있습니다. 이는 워크플로우 작업에 노출되어야 하는 일련의 비밀을 구성할 수 있게 해줍니다. CircleCI를 구성하여 컨텍스트와 연결된 작업을 트리거할 수 있는 액터를 제어할 수 있습니다.
워크플로우 작업에 할당된 컨텍스트는 CircleCI가 작업을 위해 생성하는 ID 토큰에 인코딩됩니다. 이는 Teleport가 어떤 CircleCI 작업이 Teleport 클러스터에 대한 액세스를 부여받아야 하는지를 결정하는 이상적인 방법입니다.
이 예제에서는 teleport-access
라는 이름의 CircleCI 컨텍스트를 만들 것입니다. 그런 다음 이 컨텍스트에 Teleport 클러스터에 대한 액세스를 부여합니다.
CircleCI에서 컨텍스트를 만들기 위해 "조직 설정"을 열고 "컨텍스트"로 이동합니다. "컨텍스트 생성"을 클릭하고 만들고자 하는 컨텍스트의 이름으로 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단계. Machine ID 봇 생성
다음으로, 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단계. CircleCI의 조인 토큰 생성
CircleCI 워크플로가 Teleport 클러스터와 인증할 수 있도록 하려면 먼저 조인 토큰을 생성해야 합니다. 이 토큰은 Auth Server가 봇이나 노드가 조인하도록 허용할지를 결정하는 기준을 설정합니다.
bot-token.yaml
이라는 이름의 파일을 생성하고, 1단계에서 가져온 organization-id 및 context-id 값을 대체합니다.
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
은 이 토큰이 액세스를 부여할 Machine ID 봇의 이름입니다. 이 값도 나중 구성의 다른 부분에서 사용되어야 합니다.spec.roles
는 이 토큰이 부여할 액세스 역할을 정의합니다.[Bot]
의 값은 이 토큰이 Machine ID 봇에 대한 액세스를 부여함을 나타냅니다.spec.join_method
는 토큰이 적용되는 조인 방법을 정의합니다. 이 가이드는 CircleCI에만 초점을 맞추므로 이를circleci
로 설정합니다.spec.circleci.allow
는 어떤 CircleCI 실행이 토큰을 사용하여 인증할 수 있는지에 대한 규칙을 설정하는 데 사용됩니다.
다음 명령어를 사용하여 이를 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
을 두 번째 단계에서 생성한 토큰의 이름으로 대체합니다.
이제 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: "Teleport 설치"
command: |
cd /tmp
curl -O https://cdn.teleport.dev/teleport-v17.0.0-dev-linux-amd64-bin.tar.gz
tar -xvf teleport-v17.0.0-dev-linux-amd64-bin.tar.gz
sudo ./teleport/install
- run:
name: "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
에 대한 추가 정보를 확인하십시오.