Infograb logo
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 역할은 devstaging 서버에만 접근을 부여했습니다.

다음 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.yaml
role 'support-engineer' 가 생성되었습니다
tctl create -f accesslist.yaml
Access list "support-engineers" 가 생성되었습니다
Note

사용자 리소스는 역할에 의존합니다. 사용자를 만들기 전에 역할을 생성해야 하며, 존재하지 않는 역할을 가진 사용자는 유효하지 않아서 Teleport에 의해 거부됩니다.

다음 명령어로 Kubernetes CR을 생성합니다:

kubectl apply -n "$OPERATOR_NAMESPACE" -f privileged-role.yaml
teleportrolev7.resources.teleport.dev/support-engineer 가 생성되었습니다
kubectl apply -n "$OPERATOR_NAMESPACE" -f accesslist.yaml
teleportaccesslist.resources.teleport.dev/support-engineers
terraform plan
[...]Plan: 2 추가, 0 변경, 0 삭제.
terraform apply
teleport_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 로 로그인하여 bobsupport-engineers Access List에 추가할 수 있습니다.

웹 UI에서 alice 로 로그인하고 관리 패널을 열어 "Access Lists" 탭을 선택합니다. Access List가 표시되어야 하며, 열기, "Enroll members"를 선택하고 bob 을 추가합니다.

tshalice 로 로그인한 다음 Access List에 bob 을 추가합니다:

alice로 로그인

tsh login --proxy <your-cluster-domain>:<port> --user alice

tctl acl users add <access-list-name> <user> [<expires>] [<reason>]

tctl acl users add support-engineers bob "" "Bob은 이제 긴급 지원 대기자 명단의 일원이 되었습니다"

마지막으로 Access List 구성원 목록을 나열합니다:

tctl acl users ls support-engineers
support-engineers의 구성원:- bob

다음 단계

모든 지원되는 Access List 필드는 Access List 참조에서 확인할 수 있습니다.

Teleport 원문 보기