인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
Kubernetes Operator를 사용한 로그인 규칙 배포
이 가이드는 다음 방법을 설명합니다:
- Teleport의 Kubernetes Operator를 사용하여 Teleport 클러스터에 로그인 규칙을 배포합니다.
kubectl
로 배포된 로그인 규칙을 편집합니다.
이 가이드는 teleport-cluster
Helm 차트를 사용하여 Kubernetes에서 Teleport를 자가 호스팅하는 경우에 적용됩니다.
전제 조건
-
Teleport Enterprise 라이선스
-
Kubernetes 클러스터 (
teleport-cluster
Helm 차트가 이미 배포되었든 아니든 상관없음) -
다음 명령을 실행하여 Kubernetes 연결을 확인합니다:
kubectl cluster-infoKubernetes 제어판이 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 가이드에 따라 Kubernetes 클러스터에 Teleport Operator를 설치합니다.
teleport-cluster
차트의 일부로 운영자를 배포하는 경우 Enterprise 지침을 따르세요.다음 명령으로 로그인 규칙에 대한 CRD (Custom Resource Definition)가 설치되었는지 확인합니다:
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 운영자 가이드를 읽고 Teleport 운영자에 대해 자세히 알아보세요.
- 로그인 규칙 참조를 읽고 로그인 규칙 표현식 구문에 대해 더 알아보세요.