인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
GitLab CI에 Machine ID 배포
이 가이드에서는 Teleport Machine ID를 사용하여 GitLab 파이프라인이 장기 사용 비밀 없이 Teleport SSH 노드에 안전하게 연결할 수 있도록 합니다.
GitLab용 Machine ID는 GitLab의 클라우드 호스팅 옵션과 자체 호스팅된 GitLab 설치와 함께 작동합니다. 최소 지원되는 GitLab 버전은 15.7입니다.
이것은 비밀번호나 SSH 개인 키와 같은 장기 사용 비밀이 GitLab 조직에서 유출될 위험을 완화하고 감사 및 세부적인 접근 제어와 같은 Teleport의 많은 다른 이점을 제공합니다.
필수 조건
-
실행 중인 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
명령어를 실행할 수도 있습니다. - Teleport에 연결할 GitLab 프로젝트. 이는 GitLab의 클라우드 호스팅 서비스 (gitlab.com) 또는 자체 호스팅된 GitLab 인스턴스에 있을 수 있습니다. 자체 호스팅된 GitLab 인스턴스를 사용하는 경우, Teleport Auth Server가 GitLab 인스턴스에 연결할 수 있어야 하며, GitLab 인스턴스는 유효한 TLS 인증서로 구성되어야 합니다.
1/4단계. 봇 생성
다음으로, 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
2/4단계. 조인 토큰 생성
GitLab CI가 Teleport 클러스터에 인증할 수 있도록 하려면 먼저 조인 토큰을 생성해야 합니다. GitLab 조인 토큰은 해당 토큰을 사용하여 Teleport 클러스터에 조인할 수 있는 파이프라인을 설명하는 허용 규칙을 포함합니다. 규칙은 여러 필드를 포함할 수 있으며, 단일 규칙 내의 모든 필드와 일치하는 파이프라인은 접근이 허용됩니다.
이 예에서는 특정 GitLab 프로젝트 내의 모든 GitLab CI 작업에
접근을 허용하는 규칙이 포함된 토큰을 생성합니다. GitLab 프로젝트의
정확한 경로를 확인합니다. 여기에는 사용자 이름(또는 그룹)과
프로젝트 이름이 포함됩니다. 예: my-user/my-project
.
bot-token.yaml
라는 이름의 파일을 생성합니다. 이 예의 주석에서
제안하는 값을 대체해야 합니다:
kind: token
version: v2
metadata:
name: example-bot
spec:
# Bot 역할은 이 토큰이 노드의 조인을 허용하는 것이 아니라
# 봇 사용자에 대한 접근을 허용함을 나타냅니다. 이 역할은 Teleport에 내장되어 있습니다.
roles: [Bot]
join_method: gitlab
# bot_name은 이 토큰이 접근을 허용하는 봇 사용자입니다. 이
# 이름은 1단계에서 생성한 봇의 이름과 일치해야 합니다.
bot_name: example
gitlab:
# domain은 GitLab 인스턴스의 도메인입니다. GitLab의 클라우드 호스팅 서비스를
# 사용하는 경우, 이 필드는 아예 생략하세요.
domain: gitlab.example.com
# allow는 Teleport에서 수용할 GitLab 토큰을 제어하는 규칙을 정의합니다.
# 어떤 허용 규칙과도 일치하지 않는 토큰은 거부됩니다.
allow:
# project_path는 이전에 결정한 GitLab
# 프로젝트의 정확한 경로여야 합니다. 이 필드는 해당 프로젝트에서
# 실행되는 모든 GitLab CI에 접근을 허용합니다.
- project_path: my-user/my-project
GitLab 조인에 대한 토큰 구성 옵션의 전체 목록은 GitLab CI 참조 페이지.에서 확인할 수 있습니다.
tctl
을 사용하여 이를 Teleport 클러스터에 적용합니다:
tctl create -f bot-token.yaml
3/4단계. GitLab 파이프라인 구성
봇과 조인 토큰이 생성되었으므로 이제 이러한 설정을 사용하기 위해 GitLab 파이프라인을 구성할 수 있습니다.
tbot
을 구성하기 위해 YAML 파일이 사용됩니다. 이 예시에서는 이를 리포지토리 내에 저장하지만, CI 파이프라인 자체에서 생성하거나 생성할 수 있습니다.
리포지토리 내에 tbot.yaml
파일을 생성합니다:
version: v2
proxy_server: example.teleport.sh:443
onboarding:
join_method: gitlab
token: example-bot
oneshot: true
storage:
type: memory
# outputs는 액세스 가이드 완료 시 채워질 것입니다.
outputs: []
다음을 교체합니다:
example.teleport.sh:443
을 귀하의 Teleport Proxy 또는 Auth Server의 주소로 교체합니다. Teleport Proxy의 주소를 사용하는 것이 좋습니다.example-bot
을 두 번째 단계에서 생성한 토큰의 이름으로 교체합니다.
이제 GitLab CI 파이프라인을 정의할 수 있습니다. 파이프라인이 tbot
을 사용하기 전에, 환경 내에서 사용할 수 있어야 합니다. 이 예시에서는 CI 단계의 일부로 tbot
을 다운로드하는 방법을 보여주지만, 프로덕션 구현에서는 이 바이너리를 포함하는 도커 이미지를 빌드하여 Teleport CDN에 의존하지 않는 것이 좋습니다.
리포지토리 내에 .gitlab-ci.yml
파일을 생성합니다:
stages:
- deploy
deploy-job:
stage: deploy
# id_tokens는 GitLab이 GitLab 실행 환경에 자동으로 주입할 ID 토큰을 구성합니다.
#
# id_tokens 구성에 대한 추가 설명은 https://docs.gitlab.com/ee/ci/secrets/id_token_authentication.html 을 참조하십시오.
id_tokens:
TBOT_GITLAB_JWT:
# TBOT_GITLAB_JWT의 aud는 귀하의 Teleport 클러스터 이름으로 구성되어야 합니다.
# 이는 반드시 귀하의 Teleport 클러스터 주소가 아니며 포트나 프로토콜 (http/https)을 포함하지 않습니다.
#
# 이 설정은 Teleport Auth Server가 이 토큰이 자신을 위한 것임을 이해하는 데 도움을 줍니다.
aud: teleport.example.com
script:
- 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
- "TELEPORT_ANONYMOUS_TELEMETRY=1 tbot start -c tbot.yaml"
teleport.example.com
을 귀하의 Teleport 클러스터 이름으로 교체합니다. 이는 반드시 귀하의 Teleport 클러스터 주소가 아니며 포트나 프로토콜 (예: http/https)을 포함하지 않습니다.
TELEPORT_ANONYMOUS_TELEMETRY
는 익명 사용량 텔레메트리 제출을 활성화합니다. 이는 tbot
의 향후 개발에 기여합니다. 이를 생략하여 비활성화할 수 있습니다.
이 두 파일을 리포지토리에 커밋하고 푸시합니다.
GitLab CI 상태를 확인하고 커밋에서 발생한 로그 결과를 검사하여 실패 여부를 확인합니다.
4/4단계. 출력 구성
tbot
의 기본 구성을 준비했습니다. 이 시점에서 tbot
은 Teleport 클러스터에 자신을 식별하고 자신의 자격 증명을 갱신하지만, 다른 애플리케이션에서 사용할 자격 증명을 출력하지 않습니다.
당신의 접근 요구를 충족하는 출력을 구성하려면 접근 가이드 중 하나를 따르십시오.
추가 단계
- GitLab 조인에 대한 추가 정보는 GitLab CI 참조 페이지를 읽어보십시오.
- GitLab 자체에 대한 추가 정보는 그들의 문서를 읽어보십시오.
- 액세스 가이드를 따라 귀하의 환경에 대한
tbot
구성을 완료하십시오. - 사용 가능한 모든 구성 옵션을 탐색하려면 구성 참조를 읽어보십시오.
TELEPORT_ANONYMOUS_TELEMETRY
에 대한 추가 정보를 참조하십시오.