Teleport는 Kubernetes 클러스터에 대한 액세스를 보호하고 제어합니다. 머신 ID는 이러한 클러스터에 대해 기계에 안전하고 짧은 기간 동안의 액세스를 부여하는 데 사용될 수 있습니다.
이 가이드에서는 Teleport 클러스터에 등록된 Kubernetes 클러스터에 액세스하는 데 사용할 수 있는 자격 증명을 생성하도록 tbot
을 구성할 것입니다.
전제 조건
-
실행 중인 Teleport 클러스터 버전 이상. Teleport를 시작하려면, 가입하기 위해 무료 평가판에 등록하거나 데모 환경 설정하기를 참조하세요.
-
tctl
관리 도구와tsh
클라이언트 도구.tctl
과tsh
다운로드에 대한 지침은 설치를 방문하세요.
- Kubernetes 클러스터를 Teleport에 연결하지 않은 경우, Kubernetes 액세스 시작하기 안내서를 따르세요.
- 당신의 Teleport 클러스터에 연결할 수 있는지 확인하려면,
tsh login
으로 로그인한 다음 현재 자격 증명을 사용하여tctl
명령어를 실행할 수 있는지 확인하십시오. 예를 들어:클러스터에 연결하고tsh login --proxy=teleport.example.com --user=email@example.comtctl 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.yamlkubectl get pods -A
이 가이드에서는 kubeconfig.yaml
이 kubectl
과 함께 사용되는 방법을 시연했지만, 이 형식은 다음 대부분의 Kubernetes 도구와 호환됩니다:
- Helm
- Lens
- ArgoCD
다음 단계
- 사용 가능한 모든 구성 옵션을 탐색하기 위해 구성 참조를 읽어보세요.
- Kubernetes 액세스를 제어하는 방법에 대한 자세한 내용은 Kubernetes 액세스 RBAC 가이드를 읽어보세요.