역할 및 리소스에 대한 접근 요청
현재 Teleport 권한으로 Teleport 역할이나 리소스에 접근할 수 없는 경우 제한된 시간 동안 권한을 높이기 위한 접근 요청을 만들 수 있습니다. 이 가이드는 tsh를 사용하여 Teleport 접근 요청을 만드는 방법을 설명합니다.
현재 Teleport 권한으로 Teleport 역할이나 리소스에 접근할 수 없는 경우 제한된 시간 동안 권한을 높이기 위한 접근 요청을 만들 수 있습니다.
이 가이드는 tsh를 사용하여 Teleport 접근 요청을 만드는 방법을 설명합니다.
Identity Governance가 활성화된 Teleport Enterprise 계정에서는 Teleport Web UI와 Teleport Connect에서 Access Request를 생성할 수 있습니다.
Access Request는 Teleport Web UI와 Teleport Connect에서도 생성할 수 있습니다. Teleport Web UI에서는 왼쪽 사이드바에서 Identity Governance > Access Requests > New Request로 이동합니다. Teleport Connect에서는 새 탭 버튼을 클릭하여 클러스터 리소스가 있는 새 탭을 열거나 오른쪽 상단의 Access Requests 버튼을 클릭합니다.
역할에 대한 접근 요청#
tsh request create 명령과 --roles 플래그를 사용하여 하나 이상의 Teleport 역할에 대한 접근을 요청할 수 있습니다:
$ tsh request create --roles "dev,analyst"
위 명령은 dev 및 analyst 역할에 대한 접근 요청을 만듭니다.
Teleport 클러스터 리소스에 대한 접근 요청#
Teleport 역할 외에도 Teleport로 보호된 Kubernetes 클러스터 내의 리소스를 포함하여 개별 Teleport 리소스에 대한 접근을 요청할 수 있습니다.
Teleport로 보호된 인프라 리소스에 대한 접근을 요청하려면 가능한 리소스를 검색하고, 접근을 요청할 리소스의 ID를 검색한 다음, 해당 리소스 ID에 대한 접근 요청을 만들 수 있습니다.
Teleport Web UI에서는 사이드바의 Resources로 이동하여 접근을 요청할 수 있는 리소스를 볼 수 있습니다.
-
접근을 요청할 리소스를 검색하세요:
$ tsh request search --kind=--kind를 접근을 요청하고자 하는 Teleport 리소스 유형으로 대체하세요. 다음 중 하나일 수 있습니다:nodekube_clusterkube_resourcedbappwindows_desktop
-
접근을 요청할 리소스의 ID를 확인하세요. 리소스 ID는 다음 형식을 가집니다:
/CLUSTER_ADDRESS/TYPE/RESOURCE_NAME예를 들어, 접근을 요청할 다음 Teleport로 보호된 서버를 찾았다고 가정합니다:
$ tsh request search --kind=node Name Hostname Labels Resource ID ------------------------------------ -------- ------ ---------------------------------------------- 00000000-0000-0000-0000-000000000000 myhost /teleport.example.com/node/00000000-0000-00...오른쪽의 리소스 ID가 잘려 있지만 위의 형식을 사용하여 다음과 같음을 추론할 수 있습니다:
/teleport.example.com/node/00000000-0000-0000-0000-000000000000 -
이전 단계에서 찾은 리소스 ID를 입력하여 다음 명령을 실행하여 리소스에 대한 접근을 요청하세요:
$ tsh request create --resource RESOURCE_ID
Kubernetes 리소스에 대한 접근 요청#
Teleport 클러스터 리소스와 마찬가지로 사용자는 다음 명령을 실행하여 Kubernetes 리소스에 대한 접근을 요청할 수 있습니다. 여기서 는 리소스의 ID입니다:
$ tsh request create
네임스페이스 범위 리소스#
Kubernetes 네임스페이스 리소스의 경우 resource-id는 다음 형식입니다:
/TELEPORT_CLUSTER/kube:ns:NAMESPACED_PLURAL_KIND[.API_GROUP]/KUBE_CLUSTER/NAMESPACE/RESOURCE_NAME
API_GROUP 부분은 코어 Kubernetes 그룹에 속하는 리소스에만 필요합니다.
다음 명령을 실행하여 API 그룹을 포함한 네임스페이스 Kubernetes 리소스 목록을 볼 수 있습니다:
$ kubectl api-resources --namespaced=true -o name --sort-by=name
예를 들어 dev 네임스페이스의 nginx-1이라는 파드에 대한 접근을 요청하려면 다음 명령을 실행하세요:
$ tsh request create --resource /teleport.example.com/kube:ns:pods/mycluster/dev/nginx-1
prod 네임스페이스의 website라는 디플로이먼트에 대한 접근을 요청하려면 다음 명령을 실행하세요:
$ tsh request create --resource /teleport.example.com/kube:ns:deployments.apps/mycluster/prod/website
NAMESPACED_PLURAL_KIND 값에 *를 사용하여 모두 일치시킬 수 있습니다. API_GROUP, NAMESPACE, RESOURCE_NAME 값에는 와일드카드(*) 또는 정규 표현식을 사용하여 문자 범위를 일치시킬 수 있습니다. 정규 표현식은 ^로 시작하고 $로 끝나야 합니다.
예를 들어 정규 표현식 /^nginx-[a-z0-9-]+$/과 일치하는 모든 네임스페이스의 모든 파드에 대한 접근 요청을 만들려면 다음 명령을 실행하세요:
$ tsh request create --resource '/teleport.example.com/kube:ns:pods/mycluster/*/^nginx-[a-z0-9-]+$'
클러스터 범위 리소스#
Kubernetes 클러스터 범위 리소스의 경우 resource-id는 다음 형식입니다:
/TELEPORT_CLUSTER/kube:cw:CLUSTER_WIDE_PLURAL_KIND[.API_GROUP]/KUBE_CLUSTER/RESOURCE_NAME
API_GROUP 부분은 코어 Kubernetes 그룹에 속하는 리소스에만 필요합니다.
다음 명령을 실행하여 API 그룹을 포함한 클러스터 전체 Kubernetes 리소스 목록을 볼 수 있습니다:
$ kubectl api-resources --namespaced=false -o name --sort-by=name
예를 들어 prod라는 네임스페이스에 대한 접근을 요청하려면 다음 명령을 실행하세요:
$ tsh request create --resource /teleport.example.com/kube:cw:namespaces/mycluster/prod
이는 네임스페이스 리소스 자체에만 접근 권한을 부여하며, 그 안에 있는 네임스페이스 리소스에는 접근 권한을 부여하지 않습니다.
CLUSTER_WIDE_PLURAL_KIND 값에 *를 사용하여 모두 일치시킬 수 있습니다. API_GROUP 및 RESOURCE_NAME 값에는 와일드카드(*) 또는 정규 표현식을 사용하여 문자 범위를 일치시킬 수 있습니다. 정규 표현식은 ^로 시작하고 $로 끝나야 합니다.
예를 들어 정규 표현식 /^dev-[a-z0-9-]+$/과 일치하는 dev로 시작하는 모든 네임스페이스에 대한 접근 요청을 만들려면 다음 명령을 실행하세요:
$ tsh request create --resource '/teleport.example.com/kube:cw:namespaces/mycluster/^dev-[a-z0-9-]+$'
와일드카드 요청#
네임스페이스 및 그 안의 모든 리소스에 대한 접근과 모든 클러스터 전체 리소스에 대한 접근을 요청할 수 있습니다. 이를 위해 리소스 ID에 와일드카드를 사용할 수 있습니다.
클러스터 전체 리소스의 경우 위에서 설명한 kind 형식은 kube:cw:CLUSTER_WIDE_PLURAL_KIND[.API_GROUP]입니다. 모든 클러스터 전체 리소스에 대한 접근을 요청하려면 kube:cw:*.*에 대한 접근을 요청할 수 있습니다. 첫 번째 *는 kind를 나타내고 두 번째 *는 api group을 나타냅니다.
네임스페이스 리소스의 경우 kind 형식은 kube:ns:NAMESPACED_PLURAL_KIND[.API_GROUP]입니다. 특정 네임스페이스 내의 모든 네임스페이스 리소스에 대한 접근을 요청하려면 kube:ns:*.*에 대한 접근을 요청할 수 있습니다. 첫 번째 *는 kind를 나타내고 두 번째 *는 api group을 나타냅니다.
예를 들어 prod 네임스페이스(클러스터 전체) 및 그 안의 모든 리소스(즉, 네임스페이스)에 대한 접근을 요청하려면 다음 명령을 실행하세요:
$ tsh request create \
--resource /teleport.example.com/kube:cw:namespaces/mycluster/prod \
--resource '/teleport.example.com/kube:ns:*.*/mycluster/prod/*'
마찬가지로 클러스터 내의 모든 것에 대한 접근을 요청하려면 다음 명령을 사용할 수 있습니다:
$ tsh request create \
--resource '/teleport.example.com/kube:cw:*.*/mycluster/*' \
--resource '/teleport.example.com/kube:ns:*.*/mycluster/*/*'
이는 다음과 동일합니다:
$ tsh request create \
--resource /teleport.example.com/kube_cluster/mycluster
Kubernetes 리소스 검색#
사용자가 Kubernetes 클러스터에 대한 접근 권한이 없는 경우 를 Kubernetes 클러스터 이름으로, 를 Kubernetes 네임스페이스 이름으로 대체하여 다음 명령을 실행하여 클러스터의 리소스 목록을 검색할 수 있습니다:
$ tsh request search \
--kind=kube_resource --kube-kind=pods --kube-api-group='' \
--kube-cluster= \
[--kube-namespace=|--all-kube-namespaces]
Name Namespace Labels Resource ID
----------------- --------- --------- ----------------------------------------------------------
nginx-deployment-0 default app=nginx /teleport.example.com/kube:ns:pods/local/default/nginx-deployment-0
nginx-deployment-1 default app=nginx /teleport.example.com/kube:ns:pods/local/default/nginx-deployment-1
To request access to these resources, run
> tsh request create \
--resource /teleport.example.com/kube:ns:pods/local/default/nginx-deployment-0 \
--resource /teleport.example.com/kube:ns:pods/local/default/nginx-deployment-1 \
--reason <request reason>
반환된 목록에는 리소스 이름, 해당하는 경우 속하는 네임스페이스, 레이블, 리소스 ID가 포함됩니다. 목록에 포함된 리소스는 사용자의 search_as_roles의 kubernetes_resources 필드와 일치하는 리소스입니다. 그런 다음 사용자는 다음을 할 수 있습니다:
tsh request search명령이 제공한 명령을 실행하여 리소스에 대한 접근을 요청합니다.- 명령을 편집하여 리소스의 일부에 대한 접근을 요청합니다.
- 와일드카드나 정규 표현식을 사용한 사용자 정의 요청을 사용합니다.
tsh request search --kind=kube_resource --kube-kind=<kind> --kube-api-group=<api_group>은 사용자가 원하는 Kubernetes 클러스터와 상호작용할 권한이 없더라도 작동하지만, 사용자의 search_as_roles 값이 클러스터에 대한 접근을 허용해야 합니다. 클러스터 이름을 모르는 경우 다음 명령을 실행하여 검색할 수 있습니다:
$ tsh request search --kind=kube_cluster
Name Hostname Labels Resource ID
----- -------- ------ ----------------------------------------
local /teleport.example.com/kube_cluster/local
