Infograb logo
GitLab CI에서 머신 ID 배포하기

이 가이드에서는 Teleport 머신 ID를 사용하여 GitLab 파이프라인이 장기 비밀 없이 안전하게 Teleport SSH 노드에 연결하는 방법을 설명합니다.

GitLab의 머신 ID는 GitLab의 클라우드 호스팅 옵션과 자체 호스팅 GitLab 설치 모두에서 작동합니다. 지원되는 최소 GitLab 버전은 15.7입니다.

이것은 비밀번호나 SSH 개인 키와 같은 장기 비밀이 GitLab 조직에서 유출되는 위험을 완화하고 감사 및 세밀한 접근 제어와 같은 Teleport의 여러 이점을 제공합니다.

사전 요구 사항

  • 실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.

  • tctl 관리 도구와 tsh 클라이언트 도구.

    tctltsh 다운로드에 대한 지침은 설치를 방문하세요.

  • 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면, tsh login으로 로그인한 다음 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 16.2.0

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결하고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 작업대에서 후속 tctl 명령어를 실행할 수 있습니다. 자신의 Teleport 클러스터를 호스팅하는 경우, Teleport 인증 서비스를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.
  • Teleport에 연결할 GitLab 프로젝트. 이는 GitLab의 클라우드 호스팅 서비스(gitlab.com)에 있을 수도 있고, 자체 호스팅 GitLab 인스턴스에 있을 수도 있습니다. 자체 호스팅 GitLab 인스턴스를 사용할 경우, Teleport 인증 서버가 GitLab 인스턴스에 연결할 수 있어야 하며, GitLab 인스턴스는 유효한 TLS 인증서로 구성되어야 합니다.

단계 1/4. 봇 생성하기

다음으로, 봇을 생성해야 합니다. 봇은 기계 또는 기계 그룹에 대한 Teleport 아이덴티티입니다. 사용자와 마찬가지로, 봇은 액세스할 수 있는 내용을 정의하는 일련의 역할과 특성을 가지고 있습니다.

bot.yaml을 생성하세요:

kind: bot
version: v1
metadata:
  # name은 클러스터 내에서 봇의 고유 식별자입니다.
  name: example
spec:
  # roles는 봇에 부여할 역할의 목록입니다. 여기에 어떤 역할을 지정해야 할지 모르는 경우 걱정하지 마세요.
  # Access Guides가 이미 생성된 봇에 역할을 생성하고 할당하는 방법을 안내해 드립니다.
  roles: []

example을 봇에 대한 고유하고 설명적인 이름으로 교체하는 것을 잊지 마세요.

이 파일을 적용하려면 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:
  # 봇 역할은 이 토큰이 노드의 가입을 허용하는 것이 아니라 봇 사용자에게 접근을 허가하는 것을 나타냅니다. 이 역할은 Teleport에 내장되어 있습니다.
  roles: [Bot]
  join_method: gitlab
  # 봇 이름은 이 토큰이 접근을 허용하는 봇 사용자를 나타냅니다. 이는 단계 1에서 생성한 봇의 이름과 일치해야 합니다.
  bot_name: example
  gitlab:
    # 도메인은 GitLab 인스턴스의 도메인이어야 합니다. GitLab의 클라우드 호스팅 서비스를 사용하는 경우 이 필드를 완전히 생략하세요.
    domain: gitlab.example.com
    # 허용은 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 파이프라인 구성하기

봇과 조인 토큰을 생성한 후, 이제 이러한 내용을 사용하도록 tbot을 설정하는 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 프록시 또는 인증 서버의 주소로 변경합니다. Teleport 프록시의 주소를 사용하는 것이 좋습니다.
  • example-bot을 두 번째 단계에서 생성한 토큰의 이름으로 변경합니다.

이제 GitLab CI 파이프라인을 정의할 수 있습니다. 파이프라인이 tbot을 사용하기 위해서는 환경 내에서 이용할 수 있어야 합니다. 이 예제에서는 CI 단계의 일환으로 tbot을 다운로드하는 방법을 보여주지만, 실제 구현에서는 Teleport CDN에 의존하지 않도록 이 이진 파일이 포함된 도커 이미지를 빌드할 수 있습니다.

리포지토리 내에 .gitlab-ci.yml을 생성합니다:

stages:
  - deploy

deploy-job:
  stage: deploy
  # id_tokens는 GitLab이 GitLab 실행의 환경에 자동으로 주입할 ID 토큰을 구성합니다.
  #
  # GitLab에서의 id_tokens 구성에 대한 추가 설명은 https://docs.gitlab.com/ee/ci/secrets/id_token_authentication.html
  #을 참조하세요.
  id_tokens:
    TBOT_GITLAB_JWT:
      # TBOT_GITLAB_JWT의 aud는 Teleport 클러스터의 이름으로 구성해야 합니다. 클러스터의 주소는 아닐 수 있으며 포트나 스킴(http/https)은 포함되지 않습니다.
      #
      # 이렇게 하면 Teleport 인증 서버가 토큰이 이를 위한 것임을 알 수 있고, 다른 서비스나 Teleport 클러스터를 위한 것이 아님을 알 수 있습니다.
      aud: teleport.example.com
  script:
    - 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
    - '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 클러스터에 자신을 식별하고 자체 자격 증명을 갱신하지만 다른 애플리케이션에서 사용할 수 있는 자격 증명을 출력하지는 않습니다.

액세스 가이드 중 하나를 따라 귀하의 액세스 요구 사항을 충족하는 출력을 구성하세요.

추가 단계

Teleport 원문 보기