인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Kubernetes 액세스를 위한 머신 ID
Teleport는 Kubernetes 클러스터에 대한 액세스를 보호하고 제어합니다. 머신 ID를 사용하여 이러한 클러스터에 보안적이고 단기적인 액세스를 부여할 수 있습니다.
이 가이드에서는 tbot 을 구성하여 Teleport 클러스터에 등록된 Kubernetes 클러스터에 액세스하는 데 사용할 수 있는 자격 증명을 생성합니다.
전제조건
-
실행 중인 Teleport 클러스터 버전 17.0.0-dev 이상. Teleport를 시작하려면 가입하여 무료 평가판을 이용하거나 데모 환경 설정 방법을 확인하십시오.
-
tctl관리자 도구와tsh클라이언트 도구.tctl및tsh다운로드 방법에 대한 지침은 설치를 방문하십시오.
- Kubernetes 클러스터를 Teleport에 연결하지 않았다면, Kubernetes Access Getting Started Guide를 따르십시오.
- 연결이 가능한지 확인하기 위해
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명령어를 실행할 수도 있습니다. - 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 클러스터에 연결하기 위해 필요한 모든 정보가 포함되어 있습니다.
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 Access RBAC 가이드를 읽으십시오.