인포레터에서 최신 DevOps 트렌드를 격주로 만나보세요!
IaC를 사용한 접근 리스트 생성
Access Lists를 사용하면 Teleport 사용자가 Teleport 내에서 관리되는 리소스에 장기적으로 접근할 수 있습니다. Access Lists를 통해 관리자는 특정 역할과 특성에 대한 멤버십을 정기적으로 감사하고 제어할 수 있으며, 이는 Teleport의 기존 RBAC 시스템과 쉽게 연계됩니다.
이 가이드에서는 사용자가 manager
역할을 통해 특정 기준을 충족하는 사용자에게 support-engineer
역할을 부여할 수 있도록 IaC 사용자 및 역할 가이드를 후속으로 진행합니다.
Access Lists는 IaC를 통해 관리할 수 있지만 Access List 멤버십은 관리할 수 없습니다. Access Lists의 목표는 접근 부여 및 검토를 분산시키는 것입니다. 관리자가 특정 지침 내에서 접근을 부여하고 자동으로 검토를 강제함으로써, 사용자는 Teleport IaC를 관리하는 중앙 팀을 거치지 않고도 일반적인 접근 권한을 요청할 수 있습니다. 이렇게 하면 중앙 IaC/보안 팀의 부담이 줄어들고, 접근 검토자가 상황을 이해하며, 요청 해결 시간이 단축되고, 접근 부여가 주기적으로 검토됩니다.
전제 조건
이 가이드를 따르기 위해서는 먼저 기본 사용자 및 역할 IaC 가이드를 따라야 합니다. 우리는 이 가이드의 사용자와 역할을 우리 Access List에 재사용할 것입니다.
1/3단계. 매니페스트 작성
특권 역할 매니페스트 작성
우리는 support-engineer
라는 새로운 역할을 만들어 프로덕션 서버에 대한 접근을 부여할 것입니다. 이전 가이드의 engineer
역할은 dev
및 staging
서버에만 접근을 부여했습니다.
다음 privileged-role.yaml
파일을 생성합니다:
kind: role
version: v7
metadata:
name: support-engineer
spec:
allow:
logins: ["root", "ubuntu", "{{internal.logins}}"]
node_labels:
"env": ["production"]
다음 privileged-role.yaml
파일을 생성합니다:
apiVersion: resources.teleport.dev/v1
kind: TeleportRoleV7
metadata:
name: support-engineer
spec:
allow:
logins: ["root", "ubuntu", "{{internal.logins}}"]
node_labels:
"env": ["production"]
다음 privileged-role.tf
파일을 생성합니다:
resource "teleport_role" "support-engineer" {
version = "v7"
metadata = {
name = "support-engineer"
}
spec = {
allow = {
logins = ["root", "ubuntu", "{{internal.logins}}"]
node_labels = {
env = ["production"]
}
}
}
}
접근 리스트 매니페스트 작성
이번 단계에서는 manager
역할을 가진 사용자(예: alice
)가 engineer
역할을 가진 사용자에게 프로덕션 접근 권한을 부여할 수 있는 접근 리스트를 생성합니다.
다음 accesslist.yaml
파일을 생성합니다:
version: v1
kind: access_list
metadata:
name: support-engineers
spec:
title: "지원 엔지니어를 위한 프로덕션 접근 권한"
audit:
recurrence:
frequency: 6months
description: "이 접근 리스트를 사용하여 지원 회전에서 등록된 엔지니어에게 프로덕션 접근 권한을 부여합니다."
owners:
- description: "NA 지원 팀의 관리자"
name: alice
ownership_requires:
roles:
- manager
grants:
roles:
- support-engineer
membership_requires:
roles:
- engineer
다음 accesslist.yaml
파일을 생성합니다:
apiVersion: resources.teleport.dev/v1
kind: TeleportAccessList
metadata:
name: support-engineers
spec:
title: "지원 엔지니어를 위한 프로덕션 접근 권한"
description: "이 접근 리스트를 사용하여 지원 회전에서 등록된 엔지니어에게 프로덕션 접근 권한을 부여합니다."
audit:
recurrence:
frequency: 6months
owners:
- description: "NA 지원 팀의 관리자"
name: alice
ownership_requires:
roles:
- manager
grants:
roles:
- support-engineer
membership_requires:
roles:
- engineer
다음 accesslist.tf
파일을 생성합니다:
resource "teleport_access_list" "support-engineers" {
header = {
version = "v1"
metadata = {
name = "support-engineers"
}
}
spec = {
title = "지원 엔지니어를 위한 프로덕션 접근 권한"
description = "이 접근 리스트를 사용하여 지원 회전에서 등록된 엔지니어에게 프로덕션 접근 권한을 부여합니다."
audit = {
recurrence = {
frequency = 6
}
}
owners = [
{
description = "NA 지원 팀의 관리자"
name = "alice"
}
]
ownership_requires = {
roles = ["manager"]
}
grants = {
roles = ["support-engineer"]
}
membership_requires = {
roles = ["engineer"]
}
}
}
2/3단계. 매니페스트 적용하기
tctl create -f privileged-role.yamlrole 'support-engineer' 가 생성되었습니다tctl create -f accesslist.yamlAccess list "support-engineers" 가 생성되었습니다
Note
사용자 리소스는 역할에 의존합니다. 사용자를 만들기 전에 역할을 생성해야 하며, 존재하지 않는 역할을 가진 사용자는 유효하지 않아서 Teleport에 의해 거부됩니다.
다음 명령어로 Kubernetes CR을 생성합니다:
kubectl apply -n "$OPERATOR_NAMESPACE" -f privileged-role.yamlteleportrolev7.resources.teleport.dev/support-engineer 가 생성되었습니다kubectl apply -n "$OPERATOR_NAMESPACE" -f accesslist.yamlteleportaccesslist.resources.teleport.dev/support-engineers
terraform plan[...]Plan: 2 추가, 0 변경, 0 삭제.terraform applyteleport_access_list.support-engineers: 생성 중...teleport_role.support-engineer: 생성 중...teleport_role.support-engineer: 0초 후 생성 완료 [id=support-engineer]teleport_access_list.support-engineers: 0초 후 생성 완료 [id=support-engineers]
3/3단계. alice
로 로그인하고 bob
에게 접근 권한 부여하기
이제 alice
에게 support-engineer
역할을 부여할 수 있는 Access List가 생성되었습니다.
alice
로 로그인하여 bob
을 support-engineers
Access List에 추가할 수 있습니다.
웹 UI에서 alice
로 로그인하고 관리 패널을 열어 "Access Lists" 탭을 선택합니다. Access List가 표시되어야 하며, 열기, "Enroll members"를 선택하고 bob
을 추가합니다.
tsh
로 alice
로 로그인한 다음 Access List에 bob
을 추가합니다:
alice로 로그인
tsh login --proxy <your-cluster-domain>:<port> --user alicetctl acl users add <access-list-name> <user> [<expires>] [<reason>]
tctl acl users add support-engineers bob "" "Bob은 이제 긴급 지원 대기자 명단의 일원이 되었습니다"
마지막으로 Access List 구성원 목록을 나열합니다:
tctl acl users ls support-engineerssupport-engineers의 구성원:- bob
다음 단계
모든 지원되는 Access List 필드는 Access List 참조에서 확인할 수 있습니다.