역할 및 리소스에 대한 접근 요청
Teleport v18.9현재 Teleport 권한으로 Teleport 역할이나 리소스에 접근할 수 없는 경우, 제한된 시간 동안 권한을 높이기 위해 접근 요청(Access Request)을 생성할 수 있습니다. 이 페이지에서는 Teleport 접근 요청을 생성할 수 있는 tsh 명령어를 설명합니다.
현재 Teleport 권한으로 Teleport 역할이나 리소스에 접근할 수 없는 경우, 제한된 시간 동안 권한을 높이기 위해 접근 요청(Access Request)을 생성할 수 있습니다.
이 페이지에서는 Teleport 접근 요청을 생성할 수 있는 tsh 명령어를 설명합니다.
Identity Governance가 활성화된 Teleport Enterprise 계정에서는 Teleport Web UI와 Teleport Connect에서 접근 요청을 생성할 수 있습니다.
접근 요청은 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로 보호되는 쿠버네티스 클러스터 내의 리소스를 포함하여 개별 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
쿠버네티스 리소스에 대한 접근 요청#
Teleport 클러스터 리소스와 마찬가지로, 사용자는 다음 명령어를 실행하여 쿠버네티스
리소스에 대한 접근을 요청할 수 있습니다. 여기서 resource-id는 요청할
리소스의 ID입니다.
$ tsh request create resource-id
네임스페이스 범위 리소스#
쿠버네티스 네임스페이스 리소스의 경우, resource-id는 다음 형식을 갖습니다.
/TELEPORT_CLUSTER/kube:ns:NAMESPACED_PLURAL_KIND[.API_GROUP]/KUBE_CLUSTER/NAMESPACE/RESOURCE_NAME
API_GROUP 부분은 핵심 쿠버네티스 그룹에 속하는 리소스에만 필요합니다.
다음 명령어를 실행하여 API 그룹을 포함한 네임스페이스가 지정된 쿠버네티스 리소스 목록을 확인할 수 있습니다.
$ 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-]+$'
클러스터 범위 리소스#
쿠버네티스 클러스터 범위 리소스의 경우, resource-id는 다음 형식을 갖습니다.
/TELEPORT_CLUSTER/kube:cw:CLUSTER_WIDE_PLURAL_KIND[.API_GROUP]/KUBE_CLUSTER/RESOURCE_NAME
API_GROUP 부분은 핵심 쿠버네티스 그룹에 속하는 리소스에만 필요합니다.
다음 명령어를 실행하여 API 그룹을 포함한 클러스터 전역 쿠버네티스 리소스 목록을 확인할 수 있습니다.
$ 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:*.*에 대한 접근을
요청하면 됩니다. 여기서 첫 번째 *는 종류를 나타내고, 두 번째 *는 api group을
나타냅니다.
네임스페이스가 지정된 리소스의 경우, kind 형식은
kube:ns:NAMESPACED_PLURAL_KIND[.API_GROUP]입니다.
특정 네임스페이스 내의 모든 네임스페이스가 지정된 리소스에 대한 접근을 요청하려면
kube:ns:*.*에 대한 접근을 요청하면 됩니다. 여기서 첫 번째 *는 종류를 나타내고,
두 번째 *는 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
쿠버네티스 리소스 검색#
사용자가 쿠버네티스 클러스터에 대한 접근 권한이 없는 경우, 다음 명령어를 실행하여
클러스터의 리소스 목록을 검색할 수 있습니다. kube-cluster는
쿠버네티스 클러스터의 이름으로, namespace는 쿠버네티스 네임스페이스의
이름으로 대체합니다.
$ tsh request search \
--kind=kube_resource --kube-kind=pods --kube-api-group='' \
--kube-cluster=kube-cluster \
[--kube-namespace=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>는 사용자가 원하는 쿠버네티스 클러스터와 상호작용할
권한이 없더라도 작동하지만, 사용자의 search_as_roles 값이 해당 클러스터에 대한
접근을 허용해야 합니다. 사용자가 클러스터의 이름을 확실히 알지 못하는 경우, 다음
명령어를 실행하여 검색할 수 있습니다.
$ tsh request search --kind=kube_cluster
Name Hostname Labels Resource ID
----- -------- ------ ----------------------------------------
local /teleport.example.com/kube_cluster/local