Kubernetes 접근과 머신 및 워크로드 아이덴티티
Teleport는 Kubernetes 클러스터에 대한 접근을 보호하고 제어합니다. 이 가이드에서는 Teleport 클러스터에 등록된 Kubernetes 클러스터에 접근하는 데 사용할 수 있는 자격 증명을 생성하도록 tbot을 설정합니다.
Teleport는 Kubernetes 클러스터에 대한 접근을 보호하고 제어합니다. 머신 및 워크로드 아이덴티티를 사용하여 머신에 이러한 클러스터에 대한 안전하고 단기적인 접근을 허용할 수 있습니다.
이 가이드에서는 Teleport 클러스터에 등록된 Kubernetes 클러스터에 접근하는 데 사용할 수 있는 자격 증명을 생성하도록 tbot을 설정합니다.
사전 조건#
-
A running Teleport cluster. If you want to get started with Teleport, sign up for a free trial or set up a demo environment.
-
The
tctlandtshclients.Installing `tctl` and `tsh` clients
-
Determine the version of your Teleport cluster. The
tctlandtshclients must be at most one major version behind your Teleport cluster version. Send a GET request to the Proxy Service at/v1/webapi/findand use a JSON query tool to obtain your cluster version. Replace with the web address of your Teleport Proxy Service:$ TELEPORT_DOMAIN= $ TELEPORT_VERSION="$(curl -s https://$TELEPORT_DOMAIN/v1/webapi/find | jq -r '.server_version')" -
Follow the instructions for your platform to install
tctlandtshclients:
-
- 아직 Kubernetes 클러스터를 Teleport에 연결하지 않았다면 Kubernetes 클러스터 등록을 따르세요.
To check that you can connect to your Teleport cluster, sign in with tsh login, then
verify that you can run tctl commands using your current credentials.
For example, run the following command, assigning to the domain name of the Teleport Proxy Service in your cluster and to your Teleport username:
$ tsh login --proxy= --user=
$ tctl status
# Cluster (=teleport.url=)
# Version (=teleport.version=)
# CA pin (=presets.ca_pin=)
If you can connect to the cluster and run the tctl status command, you can use your
current credentials to run subsequent tctl commands from your workstation.
If you host your own Teleport cluster, you can also run tctl commands on the computer that
hosts the Teleport Auth Service for full permissions.
- Kubernetes 클러스터를 설정하려면 클라이언트 시스템에
kubectl이 설치되어 있어야 합니다. 설치 지침은 Kubernetes 문서를 참조하세요. - Kubernetes 클러스터에 접근할 머신에
tbot이 이미 설치되고 설정되어 있어야 합니다. 자세한 내용은 배포 가이드를 참조하세요. - Kubernetes 클러스터 연결을 보여주기 위해 Kubernetes 클러스터에 접근할 머신에
kubectl이 설치되어 있어야 합니다. 설치 지침은 Kubernetes 문서를 참조하세요.
1단계/3단계. Teleport 및 Kubernetes RBAC 설정#
먼저 봇에게 올바른 수준의 접근을 부여하기 위해 Teleport와 Kubernetes 모두에 대한 RBAC를 설정해야 합니다.
봇을 대신하여 Kubernetes API에 요청을 전달할 때, Teleport Proxy는 봇의 Teleport 역할에서 설정된 그룹(kubernetes_groups 사용)을 요청에 첨부합니다. 이 그룹은 그런 다음 Kubernetes에서 RoleBinding 또는 ClusterRoleBinding을 설정하여 Kubernetes 클러스터 내에서 봇에게 특정 권한을 부여하는 데 사용됩니다.
이 가이드의 목적을 위해 대부분의 Kubernetes 클러스터에 사전 설정된 기본 edit ClusterRole에 editor 그룹을 바인딩하여 봇에게 모든 클러스터 네임스페이스의 리소스에 대한 읽기 및 쓰기 접근을 부여합니다.
프로덕션 환경에서 이를 설정할 때 고려해야 할 사항:
- 봇의 접근을 특정 네임스페이스로 제한하기 위해 ClusterRoleBinding 대신 RoleBinding을 사용해야 하는지.
- 기존의 일반 역할인
edit를 사용하는 것 대신 봇에게 최소 필요 권한을 부여하는 역할을 만들어야 하는지.
editor 그룹을 edit ClusterRole에 바인딩하려면 다음을 실행합니다:
$ kubectl create clusterrolebinding teleport-editor-edit \
--clusterrole=edit \
--group=editor
특정 그룹에 접근을 부여하도록 Kubernetes에서 적절한 RoleBinding이 설정되면 이제 봇이 자격 증명을 생성할 때 가장할 역할에 이 그룹을 추가해야 합니다. 또한 클러스터 자체에 대한 Teleport를 통한 접근을 봇에게 부여해야 합니다. 이는 필요한 권한을 부여하는 역할을 만들고 해당 역할을 봇에 할당하는 방식으로 수행됩니다.
다음 내용으로 role.yaml 파일을 만듭니다:
kind: role
version: v7
metadata:
name: example-role
spec:
allow:
kubernetes_labels:
'*': '*'
kubernetes_groups:
- editor
kubernetes_resources:
- kind: "*"
namespace: "*"
name: "*"
verbs: ["*"]
example-role을 사용 사례와 관련된 설명적인 이름으로 교체하세요.
환경에 맞게 allow 필드를 조정합니다:
kubernetes_labels는 봇이 접근해야 하는 클러스터에만 접근을 허용하도록 조정해야 합니다. 표시된 값'*': '*'은 모든 Kubernetes 클러스터에 대한 접근을 허용합니다.editor는 RoleBinding 또는 ClusterRoleBinding에서 지정한 그룹 이름과 일치해야 합니다.kubernetes_resources는 봇이 Kubernetes 클러스터 내에서 접근할 수 있는 것에 대한 추가 제한을 적용하는 데 사용할 수 있습니다. 이 제한은 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 출력 서비스 설정#
이제 Kubernetes 자격 증명과 클라이언트 설정 파일을 생성할 출력 서비스로 tbot을 설정해야 합니다. 이는 kubernetes/v2 서비스 유형을 사용하여 수행됩니다.
사용 가능하게 하려는 Kubernetes 클러스터는 selectors 목록의 항목을 사용하여 지정해야 합니다. 이 예시에서 example-k8s-cluster는 이름 선택기를 사용하여 선택되고, environment=dev 레이블이 있는 모든 클러스터도 선택됩니다.
출력 서비스는 대상으로도 설정해야 합니다. 이 예시에서는 directory 유형이 사용됩니다. 이는 아티팩트를 디스크의 지정된 디렉터리에 기록합니다. tbot이 실행되는 Linux 사용자가 이 디렉터리에 쓸 수 있고 Kubernetes 클러스터에 접근하는 Linux 사용자가 읽을 수 있도록 하세요.
tbot 설정을 수정하여 kubernetes/v2 서비스를 추가합니다:
services:
- type: kubernetes/v2
selectors:
# 자격 증명이 접근 권한을 부여할 Kubernetes 클러스터의 이름을 지정합니다.
# 와일드카드는 지원되지 않습니다.
- name: example-k8s-cluster
# 레이블 선택기를 지정하여 한 번에 많은 클러스터를 동적으로 선택합니다.
# 선택기의 모든 레이블이 클러스터를 선택하기 위해 일치해야 하며,
# 원하는 경우 여러 개의 별도 선택기를 지정할 수 있습니다.
# 와일드카드는 지원되지 않습니다.
- labels:
environment: dev
destination:
type: directory
# 이 가이드에서는 /opt/machine-id를 대상 디렉터리로 사용합니다.
# 필요에 따라 커스터마이즈할 수 있습니다. 여러 출력 서비스는
# 동일한 대상을 공유할 수 없습니다.
path: /opt/machine-id
example-k8s-cluster를 Teleport에 등록된 Kubernetes 클러스터 이름으로 교체하고 원하는 경우 /opt/machine-id를 조정하세요.
tbot을 백그라운드 서비스로 실행 중인 경우 재시작하세요. 원샷 모드로 실행 중이라면 자격 증명을 사용하기 전에 실행해야 합니다.
3단계/3단계. Kubernetes 클러스터에 연결#
새 서비스가 설정된 상태로 tbot이 실행되면 지정한 대상 디렉터리에 kubeconfig.yaml 파일이 생성되어 있어야 합니다. 이 파일에는 kubectl이 Teleport Proxy를 통해 Kubernetes 클러스터에 연결하는 데 필요한 모든 정보가 포함되어 있습니다.
kubectl과 함께 kubeconfig.yaml을 사용하려면 kubectl에 --kubeconfig 플래그 또는 KUBECONFIG 환경 변수를 제공합니다:
$ kubectl --kubeconfig /opt/machine-id/kubeconfig.yaml get pods -A
# 또는 KUBECONFIG 환경 변수 설정:
$ export KUBECONFIG=/opt/machine-id/kubeconfig.yaml
$ kubectl get pods -A
여러 클러스터를 선택한 경우 생성된 kubeconfig.yaml에서 별도의 컨텍스트로 노출되며 $teleportClusterName-$kubeClusterName 형식을 따라 이름이 지정됩니다. 특정 클러스터를 대상으로 하려면 --context 플래그를 사용합니다:
$ kubectl --kubeconfig /opt/machine-id/kubeconfig.yaml --context=example.teleport.sh-my-kube-cluster get pods -A
tbot.yaml에서 첫 번째로 선택된 클러스터가 기본 컨텍스트로 사용됩니다. 레이블 선택기를 사용하는 경우 Teleport에서 클러스터가 추가되거나 제거되면 기본 컨텍스트가 시간이 지남에 따라 달라질 수 있습니다.
Teleport에서 새로운 일치하는 클러스터가 추가되거나 제거되면 kubeconfig.yaml이 봇의 다음 인증서 갱신 시 변경 사항을 반영하여 재생성됩니다. 필요한 경우 tbot 프로세스를 재시작하거나 즉시 다시 로드를 트리거하는 신호(pkill -USR1 tbot)로 신호를 보낼 수 있습니다. current-context 필드에 대한 변경과 같은 kubeconfig.yaml의 수정 사항은 덮어쓰여집니다.
이 가이드에서는 kubectl과 함께 kubeconfig.yaml을 사용하는 것을 보여주었지만, 이 형식은 다음을 포함한 대부분의 Kubernetes 도구와 호환됩니다:
- Helm
- Lens
- ArgoCD
다음 단계#
- 사용 가능한 모든 설정 옵션을 확인하려면 설정 레퍼런스를 읽으세요.
- Kubernetes 접근 제어에 대한 자세한 내용은 Teleport Kubernetes RBAC 가이드를 읽으세요.
