Infograb logo
Kubernetes 액세스를 위한 머신 ID

Teleport는 Kubernetes 클러스터에 대한 액세스를 보호하고 제어합니다. 머신 ID는 이러한 클러스터에 대해 기계에 안전하고 짧은 기간 동안의 액세스를 부여하는 데 사용될 수 있습니다.

이 가이드에서는 Teleport 클러스터에 등록된 Kubernetes 클러스터에 액세스하는 데 사용할 수 있는 자격 증명을 생성하도록 tbot을 구성할 것입니다.

전제 조건

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

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

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

  • Kubernetes 클러스터를 Teleport에 연결하지 않은 경우, Kubernetes 액세스 시작하기 안내서를 따르세요.
  • 당신의 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 명령어를 실행할 수도 있습니다.
  • Kubernetes 클러스터를 구성하려면 클라이언트 시스템에 kubectl이 설치되어 있어야 합니다. 설치 지침은 Kubernetes 문서를 참조하세요.
  • tbot은 이미 Kubernetes 클러스터에 액세스할 머신에 설치 및 구성되어 있어야 합니다. 더 많은 정보는 배포 가이드를 참조하세요.
  • Kubernetes 클러스터에 연결하는 것을 시연하기 위해, Kubernetes 클러스터에 액세스할 머신에는 kubectl이 설치되어 있어야 합니다. 설치 지침은 Kubernetes 문서를 참조하세요.

1단계/3단계. Teleport 및 Kubernetes RBAC 구성

먼저, 봇에게 올바른 수준의 액세스를 부여하기 위해 Teleport와 Kubernetes에 대한 RBAC를 구성해야 합니다.

봇을 대신하여 Kubernetes API에 요청을 전달할 때, Teleport Proxy는 봇의 Teleport 역할에 구성된 그룹(kubernetes_groups)을 요청에 첨부합니다. 이러한 그룹은 Kubernetes에서 RoleBinding 또는 ClusterRoleBinding을 구성하는 데 사용되어 봇에게 Kubernetes 클러스터 내의 특정 권한을 부여합니다.

이 가이드의 목적을 위해, 우리는 editor 그룹을 대부분의 Kubernetes 클러스터에서 사전 구성된 기본 edit ClusterRole에 바인딩하여 봇에게 모든 클러스터 네임스페이스의 리소스에 대한 읽기 및 쓰기 액세스를 부여할 것입니다.

생산 환경에 맞게 이를 구성할 때 고려해야 할 사항은 다음과 같습니다:

  • RoleBinding을 사용하여 봇의 액세스를 특정 네임스페이스로 제한해야 할지 여부.
  • edit와 같은 기존의 일반 Role을 사용하는 대신 최소한의 권한을 부여하는 Role을 생성해야 할지 여부.

editor 그룹을 edit Cluster Role에 바인딩하려면 다음을 실행하십시오:

kubectl create clusterrolebinding teleport-editor-edit \ --clusterrole=edit \ --group=editor

특정 그룹에 액세스를 부여하는 적절한 RoleBinding이 Kubernetes에 구성된 후, 이제 봇이 자격 증명을 생성할 때 가장 위장할 역할에 이 그룹을 추가해야 합니다. 또한, 클러스터 자체에 대한 액세스를 Teleport를 통해 봇에 부여해야 합니다. 이는 필요한 권한을 부여하는 역할을 생성한 후 이 역할을 봇에 할당하여 수행됩니다.

다음 내용을 가진 role.yaml 파일을 생성하세요:

kind: role
version: v6
metadata:
  name: example-role
spec:
  allow:
    kubernetes_labels:
      '*': '*'
    kubernetes_groups:
    - editor
    kubernetes_resources:
    - kind: "*"
      namespace: "*"
      name: "*"

example-role을 귀하의 사용 사례와 관련된 설명적인 이름으로 변경하십시오.

환경에 맞게 allow 필드를 조정합니다:

  • kubernetes_labels는 봇이 액세스해야 하는 클러스터에 대해서만 액세스를 부여하도록 조정해야 합니다. 표시된 값인 '*': '*'은 모든 Kubernetes 클러스터에 대한 액세스를 부여할 것입니다.
  • editor는 RoleBinding 또는 ClusterRoleBinding에서 지정한 그룹의 이름과 일치해야 합니다.
  • kubernetes_resources는 봇이 Kubernetes 클러스터 내에서 액세스할 수 있는 항목에 대해 추가 제한을 적용하는 데 사용될 수 있습니다. 이러한 제한은 Kubernetes 역할 내의 RBAC에 추가되어 적용됩니다.

tctl create -f ./role.yaml을 사용하여 역할을 만듭니다.

이제 tctl bots update를 사용하여 Bot에 역할을 추가합니다. example을 배포 가이드에서 생성한 Bot의 이름으로, example-role을 방금 생성한 역할의 이름으로 교체하십시오:

$ tctl bots update example --add-roles example-role

2단계/3단계. Kubernetes tbot 출력 구성

이제 tbot은 Kubernetes 자격 증명 및 클라이언트 구성 파일을 생성하기 위해 출력을 구성해야 합니다. 이는 kubernetes 출력 유형을 사용하여 수행됩니다.

자격 증명이 액세스할 Kubernetes 클러스터는 kubernetes_cluster 필드를 사용하여 지정해야 합니다. 이 예에서는 example-k8s-cluster가 사용될 것입니다.

출력은 대상과 tbot이 생성하는 자격 증명에 인코딩되어야 할 Kubernetes 클러스터의 이름으로 구성되어야 합니다. 현재 각 출력은 단일 Kubernetes 클러스터에 대한 자격 증명만 포함할 수 있습니다. 봇이 여러 Kubernetes 클러스터에 연결해야 하는 경우 각 클러스터에 대한 출력을 생성하십시오.

출력은 또한 대상을 구성해야 합니다. 이 예에서는 directory 유형이 사용됩니다. 이는 디스크의 지정된 디렉토리에 아티팩트를 기록합니다. 이 디렉토리에 대해서는 tbot이 실행되는 리눅스 사용자가 쓸 수 있어야 하며, Kubernetes 클러스터에 액세스할 리눅스 사용자가 읽을 수 있어야 합니다.

tbot 구성을 수정하여 kubernetes 출력을 추가하십시오:

outputs:
  - type: kubernetes
    # 자격 증명이 액세스를 부여하길 원하는 Kubernetes 클러스터의 이름을 지정합니다.
    kubernetes_cluster: example-k8s-cluster
    destination:
      type: directory
      # 이 가이드를 위해 /opt/machine-id를 대상으로 사용합니다.
      # 이를 사용자 정의할 수 있습니다. 여러 출력이 동일한 대상을 공유할 수 없습니다.
      path: /opt/machine-id

example-k8s-cluster를 Teleport에 등록된 Kubernetes 클러스터의 이름으로 교체하고, 원하신다면 /opt/machine-id를 조정하십시오.

tbot을 백그라운드 서비스로 운영하는 경우, 재시작하십시오. tbot을 원샷 모드로 실행하는 경우, 자격 증명을 사용하기 전에 실행해야 합니다.

3단계/3단계. 머신 ID 아이덴티티로 Kubernetes 클러스터에 연결

tbot이 새로 구성된 출력을 사용하여 실행된 후, 지정한 대상 디렉토리에 kubeconfig.yaml이라는 파일이 생성되어야 합니다. 이 파일에는 kubectl이 Teleport Proxy를 통해 Kubernetes 클러스터에 연결하는 데 필요한 모든 정보가 포함되어 있습니다.

kubectl과 함께 kubeconfig.yaml을 사용하려면, --kubeconfig 플래그 또는 KUBECONFIG 환경 변수를 kubectl에 제공할 수 있습니다:

kubectl --kubeconfig /opt/machine-id/kubeconfig.yaml get pods -A

또는, KUBECONFIG 환경 변수를 설정합니다:

export KUBECONFIG=/opt/machine-id/kubeconfig.yaml
kubectl get pods -A

이 가이드에서는 kubeconfig.yamlkubectl과 함께 사용되는 방법을 시연했지만, 이 형식은 다음 대부분의 Kubernetes 도구와 호환됩니다:

  • Helm
  • Lens
  • ArgoCD

다음 단계

Teleport 원문 보기