이 가이드는 다음을 설명합니다:
- Teleport의 Kubernetes Operator를 사용하여 Teleport 클러스터에 로그인 규칙을 배포하는 방법
kubectl
을 사용하여 배포된 로그인 규칙을 편집하는 방법
이 가이드는 teleport-cluster
Helm 차트를 사용하여 Kubernetes에서 Teleport를 자체 호스팅하는 경우에 해당합니다.
전제 조건
-
Teleport Enterprise 라이센스
-
Kubernetes 클러스터(
teleport-cluster
Helm 차트가 이미 배포되었든 아니든 상관없이) -
다음 명령을 실행하여 Kubernetes 연결을 검증하세요:
kubectl cluster-infoKubernetes control plane은 https://127.0.0.1:6443에서 실행 중입니다.
CoreDNS는 https://127.0.0.1:6443/api/v1/namespaces/kube-system/services/kube-dns:dns/proxy에서 실행 중입니다.
Tip로컬에서 Operator를 실험하고 싶은 사용자는 minikube를 사용하여 로컬 Kubernetes 클러스터를 시작할 수 있습니다:
minikube start -
Teleport operator guides를 따라 Kubernetes 클러스터에 Teleport Operator를 설치하세요.
teleport-cluster
차트의 일부로 오퍼레이터를 배포하는 경우 Enterprise 지침을 따르세요.다음 명령으로 로그인 규칙의 CRD(사용자 지정 리소스 정의)가 설치되었는지 확인하세요:
kubectl explain TeleportLoginRule.specKIND: TeleportLoginRuleVERSION: resources.teleport.dev/v1
RESOURCE: spec <Object>
DESCRIPTION: 로그인 규칙 리소스 정의 v1 from Teleport
FIELDS: priority <integer> 우선순위는 동일 클러스터 내 다른 로그인 규칙에 대한 로그인 규칙의 우선순위입니다. 번호가 낮은 우선순위를 가진 로그인 규칙이 먼저 평가됩니다.
traits_expression <string> TraitsExpression은 로그인을 수행할 사용자에 대한 원하는 특성을 반환해야 하는 술어 표현입니다.
traits_map <> TraitsMap은 특성 키에 대한 리스트로 이루어진 맵으로, 해당 특성에 대한 원하는 값을 평가해야 하는 술어 표현의 리스트입니다.이 명령이 실패하면 Teleport Operator를 설치하지 않았거나 구버전을 설치했을 수 있습니다.
1단계/2. kubectl
을 사용하여 로그인 규칙 만들기
다음 내용을 login-rules.yaml
이라는 파일에 붙여넣어 두 개의 사용자 지정 로그인 규칙 리소스를 설명하세요:
# login-rules.yaml
apiVersion: resources.teleport.dev/v1
kind: TeleportLoginRule
metadata:
name: example-traits-map-rule
labels:
example: "true"
spec:
# 가장 낮은 우선순위를 가진 규칙이 먼저 평가됩니다.
priority: 0
# traits_map은 모든 원하는 특성 키와 특성 값을 결정하는 표현식의 리스트를 담고 있습니다.
traits_map:
# "logins" 특성은 외부 "username" 특성을 소문자로 변환하고,
# 어떤 외부 "logins" 특성을 추가합니다.
logins:
- 'strings.lower(external.username)'
- 'external.logins'
# 외부 "groups" 특성은 변경되지 않고 그대로 전달되며, 다른 모든 특성은 필터링됩니다.
groups:
- external.groups
---
apiVersion: resources.teleport.dev/v1
kind: TeleportLoginRule
metadata:
name: example-traits-expression-rule
labels:
example: "true"
spec:
# 이 규칙은 더 높은 우선순위 값을 가지고 있어,
# "terraform-test-map-rule" 이후에 평가됩니다.
priority: 1
# traits_expression은 모든 원하는 특성을 단일 표현식으로 반환하는 traits_map의 대안입니다.
traits_expression: |
external.put("groups",
choose(
option(external.groups.contains("admins"), external.groups.add("app-admins", "db-admins")),
option(external.groups.contains("ops"), external.groups.add("k8s-admins")),
option(true, external.groups)))
Kubernetes 리소스를 생성합니다:
kubectl apply -f login-rules.yaml
생성된 Kubernetes 리소스를 나열합니다:
kubectl get loginrulesNAME AGEexample-traits-expression-rule 8m8sexample-traits-map-rule 8m8s
로그인 규칙이 Teleport에서 생성되었는지 확인합니다:
AUTH_POD=$(kubectl get pods -l app=teleport-cluster -o jsonpath='{.items[0].metadata.name}')kubectl exec -i $AUTH_POD -c teleport -- tctl get login_ruleskind: login_rulemetadata: id: 1680225062340767900 labels: example: "true" teleport.dev/origin: kubernetes name: example-traits-expression-rulespec: priority: 1 traits_expression: | external.put("groups", choose( option(external.groups.contains("admins"),external.groups.add("app-admins", "db-admins")), option(external.groups.contains("ops"),external.groups.add("k8s-admins")), option(true, external.groups)))version: v1---kind: login_rulemetadata: id: 1680225067068319000 labels: example: "true" teleport.dev/origin: kubernetes name: example-traits-map-rulespec: priority: 0 traits_map: groups: - external.groups logins: - strings.lower(external.username) - external.loginsversion: v1
로그인 규칙을 테스트하여 tctl login_rule test
명령의 표준 입력으로 일부 예제 입력 특성을 보내고 클러스터에서 모든 로그인 규칙을 로드합니다.
echo '{"groups": ["admins", "ops"], "username": ["Alice"], "logins": ["user", "root"]}' | \ kubectl exec -i $AUTH_POD -c teleport -- tctl login_rule test --load-from-clustergroups:- admins- ops- app-admins- db-adminslogins:- alice- user- root
2단계/2. kubectl
로 로그인 규칙 편집하기
example-traits-map-rule
을 편집하여 추가 로그인 example
를 추가합니다.
--- a/login-rules.yaml
+++ b/login-rules.yaml
@@ -18,6 +18,7 @@ spec:
logins:
- 'strings.lower(external.username)'
- 'external.logins'
+ - 'example'
# 외부 "groups" 특성은 변경되지 않고 그대로 전달되며, 다른 모든 특성은 필터링됩니다.
Kubernetes 리소스에 업데이트를 적용합니다:
kubectl apply -f login-rules.yaml
추가된 example
로그인을 확인하기 위해 로그인 규칙을 다시 테스트합니다:
echo '{"groups": ["admins", "ops"], "username": ["Alice"], "logins": ["user", "root"]}' | \ kubectl exec -i $AUTH_POD -c teleport -- tctl login_rule test --load-from-clustergroups:- ops- app-admins- db-admins- adminslogins:- root- user- example- alice
다음 단계
- Teleport Operator Guide를 읽고 Teleport Operator에 대해 더 알아보세요.
- 로그인 규칙 참조를 읽고 로그인 규칙 표현식 문법에 대해 더 알아보세요.