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

Teleport는 Kubernetes 클러스터에 대한 액세스를 보호하고 제어합니다. 머신 ID를 사용하여 이러한 클러스터에 보안적이고 단기적인 액세스를 부여할 수 있습니다.

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

전제조건

  • 실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.

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

    tctltsh 다운로드 방법에 대한 지침은 설치를 방문하십시오.

  • Kubernetes 클러스터를 Teleport에 연결하지 않았다면, Kubernetes Access Getting Started Guide를 따르십시오.
  • 연결이 가능한지 확인하기 위해 tsh login 으로 로그인한 다음, 현재 자격 증명을 사용하여 tctl 명령어를 실행할 수 있는지 확인하십시오. 예를 들어:
    tsh login --proxy=teleport.example.com --user=email@example.com
    tctl status

    클러스터 teleport.example.com

    버전 17.0.0-dev

    CA 핀 sha256:abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678abdc1245efgh5678

    클러스터에 연결할 수 있고 tctl status 명령어를 실행할 수 있다면, 현재 자격 증명을 사용하여 워크스테이션에서 후속 tctl 명령어를 실행할 수 있습니다.
    자신의 Teleport 클러스터를 호스팅하는 경우, Teleport Auth Service를 호스팅하는 컴퓨터에서 전체 권한으로 tctl 명령어를 실행할 수도 있습니다.
  • Kubernetes 클러스터를 구성하려면 클라이언트 시스템에 kubectl 이 설치되어 있어야 합니다. 설치 방법은 Kubernetes documentation를 참조하세요.
  • tbot 은 Kubernetes 클러스터에 액세스할 머신에 이미 설치되어 구성되어 있어야 합니다. 더 많은 정보는 deployment guides를 참조하세요.
  • Kubernetes 클러스터에 연결하는 과정을 보여주기 위해 Kubernetes 클러스터에 액세스할 머신에 kubectl 이 설치되어 있어야 합니다. 설치 방법은 Kubernetes documentation를 참조하세요.

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

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

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

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

운영 환경을 위해 이를 구성할 때 고려해야 할 사항은 다음과 같습니다:

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

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

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

특정 그룹에 대한 액세스를 부여하기 위해 Kubernetes에서 적절한 RoleBinding이 구성되었으므로, 이제 크리덴셜을 생성할 때 봇이 가장조화할 역할에 이 그룹을 추가해야 합니다. 또한 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 역할 내에서 구성된 RBAC 위에 적용됩니다.

tctl create -f ./role.yaml 을 사용하여 역할을 생성합니다.

이제 tctl bots update 를 사용하여 봇에 역할을 추가하십시오. 배포 가이드에서 생성한 봇의 이름을 example 로 바꾸고 방금 생성한 역할의 이름을 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 이 실행되는 Linux 사용자가 쓸 수 있어야 하며, Kubernetes 클러스터에 접근할 Linux 사용자가 읽을 수 있어야 합니다.

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 클러스터에 연결하기 위해 필요한 모든 정보가 포함되어 있습니다.

kubectlkubeconfig.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 원문 보기