인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
GitHub와 Teleport의 인증 기관 사용
Teleport는 구성 가능한 키 확장을 통해 사용자 SSH 인증서를 내보내는 것을 지원합니다. 이를 통해 Teleport CA를 GitHub의 SSH 인증 기관 지원과 함께 사용할 수 있습니다. 이렇게 하면 사용자는 단기 서명된 SSH 인증서를 통해 조직의 리포지토리에 접근할 수 있습니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl
관리자 도구와tsh
클라이언트 도구.tctl
및tsh
다운로드 방법에 대한 지침은 설치를 방문하십시오.
- GitHub Enterprise에 대한 접근 권한과 GitHub의 SSH 인증 기관을 수정할 수 있는 권한.
- 연결이 가능한지 확인하기 위해
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
명령어를 실행할 수도 있습니다.
1/3단계. Teleport CA를 GitHub에 가져오기
Teleport CA를 내보내려면 다음 명령을 실행하여 proxy를 Teleport Proxy Service의 주소로 설정합니다:
curl 'https://proxy/webapi/auth/export?type=user' | sed 's/^cert-authority //g'
다음으로 아래 가이드의 지침에 따라 Teleport CA를 GitHub에 가져옵니다:
내보낸 teleport.ca
파일의 내용은 "New CA"를 클릭한 후 "Key" 필드에 붙여넣어야 합니다.
2/3단계. GitHub 키 확장 구성
cert_extensions
옵션을 포함하도록 역할을 생성하거나 업데이트합니다. name
의 값은 login@github.com
이어야 합니다.
kind: role
version: v5
metadata:
name: developer
spec:
options:
cert_extensions:
- type: ssh
mode: extension
name: login@github.com # 필수: `login@github.com` .
value: "{{ external.logins }}"
developer
역할을 Teleport 사용자에게 할당하려면, 인증 제공자에 맞는 적절한 명령어를 실행하십시오:
-
로컬 사용자의 역할을 쉼표로 구분된 목록으로 가져옵니다:
ROLES=$(tsh status -f json | jq -r '.active.roles | join(",")') -
새로운 역할을 추가하기 위해 로컬 사용자를 수정합니다:
tctl users update $(tsh status -f json | jq -r '.active.username') \ --set-roles "${ROLES?},developer" -
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
텍스트 편집기에서
github
인증 커넥터를 엽니다:tctl edit github/github -
github
커넥터를 수정하여teams_to_roles
섹션에developer
을 추가합니다.이 역할에 매핑해야 하는 팀은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 팀은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 팀이어야 합니다.
예시는 다음과 같습니다:
teams_to_roles: - organization: octocats team: admins roles: - access + - developer
-
파일을 편집하고 저장하여 변경 사항을 적용합니다.
-
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
saml
구성 리소스를 가져옵니다:tctl get --with-secrets saml/mysaml > saml.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을saml.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하므로, 리소스를 업데이트한 후 즉시saml.yaml
파일을 삭제해야 합니다. -
saml.yaml
을 수정하여attributes_to_roles
섹션에developer
을 추가합니다.이 역할에 매핑해야 하는 속성은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 그룹은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 그룹이어야 합니다.
예시는 다음과 같습니다:
attributes_to_roles: - name: "groups" value: "my-group" roles: - access + - developer
-
변경 사항을 적용합니다:
tctl create -f saml.yaml -
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
-
oidc
구성 리소스를 가져옵니다:tctl get oidc/myoidc --with-secrets > oidc.yaml--with-secrets
플래그는spec.signing_key_pair.private_key
의 값을oidc.yaml
파일에 추가합니다. 이 키는 민감한 값을 포함하므로, 리소스를 업데이트한 후 즉시oidc.yaml
파일을 삭제해야 합니다. -
oidc.yaml
을 수정하여claims_to_roles
섹션에developer
을 추가합니다.이 역할에 매핑해야 하는 클레임은 조직의 역할 기반 액세스 제어(RBAC) 설계에 따라 다릅니다. 그러나 그룹은 귀하의 사용자 계정을 포함해야 하며, 조직 내에서 가장 작은 그룹이어야 합니다.
예시는 다음과 같습니다:
claims_to_roles: - name: "groups" value: "my-group" roles: - access + - developer
-
변경 사항을 적용합니다:
tctl create -f oidc.yaml -
Teleport 클러스터에서 로그아웃한 후 다시 로그인하여 새로운 역할을 가집니다.
3/3단계. 사용자 인증서 발급
이전에 정의한 developer
역할을 가정하기 위해 Teleport에 인증하면, Teleport는 사용자 인증서에 구성한 인증서 확장을 추가합니다. 그런 다음 로컬 SSH 구성에서 이 경로를 참조할 수 있습니다.
편의를 위해 터미널을 열고 사용자 인증서의 위치에 대한 환경 변수를 할당합니다. example.teleport.sh를 Teleport 클러스터의 도메인 이름으로, myuser를 Teleport 사용자의 이름으로 교체합니다:
export TELEPORT_CERT=~/.tsh/keys/example.teleport.sh/myuser-ssh/example.teleport.sh-cert.pub
이 서명된 인증서로 인증이 제대로 작동하는지 테스트하려면 조직의 사용자로 github.com
에 SSH로 접속합니다:
ssh -i $TELEPORT_CERT org-<ID>@github.com
인증이 성공하면 터미널에 "You've successfully authenticated" 메시지가 표시되어야 합니다.
새로 생성된 인증서는 다음을 ~/.ssh/config
파일에 추가하여 SSH를 통해 GitHub와 상호 작용할 때 사용할 수 있습니다:
Host github.com HostName github.com IdentityFile path/to/cert.pub
SSH 인증 기관을 사용할 때는 GitHub UI에서 GitHub 리포지토리의 SSH URL을 가져와야 올바른 SSH 사용자가 인증에 사용됩니다. 자세한 내용은 SSH 인증서가 있는 SSH URL에 대한 정보를 참조하세요.