Infograb logo
IaC를 사용한 액세스 목록 만들기

액세스 목록은 Teleport 사용자가 Teleport 내에서 관리되는 리소스에 대한 장기 액세스를 부여받을 수 있도록 합니다. 액세스 목록을 사용하면 관리자는 특정 역할 및 특성에 대한 구성원을 정기적으로 감사하고 제어할 수 있으며, 이는 Teleport의 기존 RBAC 시스템과 쉽게 결합됩니다.

이 가이드에서는 사용자가 특정 기준을 충족하는 사용자에게 support-engineer 역할을 부여할 수 있도록 manager 역할을 가진 사용자를 허용하여 사용자 및 역할 IaC 가이드를 후속적으로 다루겠습니다.

액세스 목록은 IaC를 통해 관리될 수 있지만, 액세스 목록의 구성원은 관리할 수 없음을 유의하세요. 액세스 목록의 목표는 액세스를 부여하고 검토하는 것을 분산시키는 것입니다. 관리자가 특정 가이드라인 내에서 액세스를 부여하도록 허용하고 검토를 자동으로 시행함으로써, 사용자는 Teleport IaC를 관리하는 중앙 팀을 거치지 않고도 일반적인 액세스 권한을 요청할 수 있습니다. 이는 중앙 IaC/보안 팀의 부담을 줄이고, 액세스 검토자가 맥락을 인식하게 하며, 요청 해결 시간을 단축시키고, 액세스 부여가 주기적으로 검토되도록 합니다.

필수 조건

이 가이드를 따르기 위해서는 먼저 기본 사용자 및 역할 IaC 가이드를 따라야 합니다. 우리는 액세스 목록을 위해 그 사용자를 재사용할 것입니다.

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' has been created
tctl create -f accesslist.yaml
Access list "support-engineers" has been created
Note

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

다음 명령어로 Kubernetes CR을 생성하세요:

kubectl apply -n "$OPERATOR_NAMESPACE" -f privileged-role.yaml
teleportrolev7.resources.teleport.dev/support-engineer created
kubectl apply -n "$OPERATOR_NAMESPACE" -f accesslist.yaml
teleportaccesslist.resources.teleport.dev/support-engineers
terraform plan
[...]Plan: 2 to add, 0 to change, 0 to destroy.
terraform apply
teleport_access_list.support-engineers: Creating...teleport_role.support-engineer: Creating...teleport_role.support-engineer: Creation complete after 0s [id=support-engineer]teleport_access_list.support-engineers: Creation complete after 0s [id=support-engineers]

3단계/3 - alice로 로그인하여 bob에게 액세스 부여

이제 alicesupport-engineer 역할을 그 엔지니어에게 부여할 수 있는 액세스 목록을 만들었습니다.

alice로 로그인하고 support-engineers 액세스 목록에 bob을 추가할 수 있습니다.

웹 UI에서 alice로 로그인하고 관리 패널을 열어 "액세스 목록" 탭을 선택하세요. 당신의 액세스 목록이 표시될 것이며, 그것을 열고 "구성원 등록"을 선택 후 bob을 추가하세요.

tshalice로 로그인한 다음, 액세스 목록에 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은 이제 온콜 지원 회전에 포함되었습니다."

마지막으로, 액세스 목록 구성원을 나열하세요:

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

다음 단계

모든 지원되는 액세스 목록 필드는 액세스 목록 참조에서 확인할 수 있습니다.

Teleport 원문 보기