이 항목에서는 Tanzu Kubernetes Grid RBAC(역할 기반 액세스 제어)를 구성하는 방법을 설명합니다.
클러스터 액세스를 위해 표준 비-관리자 kubeconfig
파일을 사용하려는 경우, ID 관리를 사용하도록 설정하고 구성한 후 RBAC 인증을 구성해야 합니다. kubeconfig
파일에 대한 자세한 내용은 아래 관리자 및 비-관리자 kubeconfig
파일을 참조하십시오.
RBAC 권한 부여를 구성하려면 표준 비-관리자 kubeconfig
파일을 사용하려는 각 관리 및 워크로드 클러스터에 대해 하나 이상의 역할 바인딩을 생성합니다.
역할 바인딩에 대한 자세한 내용은 아래 역할 및 역할 바인딩을 참조하십시오.
kubeconfig
파일사용자에게 관리 또는 워크로드 클러스터에 대한 액세스 권한을 부여하려면 kubeconfig
파일을 생성한 다음 해당 사용자와 파일을 공유합니다. 사용자에게 클러스터용 관리자 kubeconfig
를 제공하면 클러스터에 대한 모든 액세스 권한을 갖게 되고 인증이 필요 없습니다. 그러나 사용자에게 표준 비-관리자 kubeconfig
를 제공하는 경우 사용자에게 OIDC 또는 LDAP ID 제공자에 사용자 계정이 있어야 하며 지정된 사용자에게 액세스 권한을 부여하도록 클러스터에서 RBAC를 구성해야 합니다.
관리 또는 워크로드 클러스터에 대해 kubeconfig
파일을 생성하려면 관리 클러스터에 대해 tanzu mc kubeconfig get
또는 워크로드 클러스터에 대해 tanzu cluster kubeconfig get
을 실행합니다. --admin
옵션을 사용하거나 사용하지 않고 이러한 명령 중 하나를 실행하는 경우 명령은 다음과 같이 실행됩니다.
--admin
의 경우, 명령이 내장형 자격 증명이 포함된 관리자 kubeconfig
를 생성합니다. 이 admin
버전의 kubeconfig
이 있는 경우, 공유하는 모든 사용자가 클러스터에 대한 모든 액세스 권한을 갖게 되며 IdP(ID 제공자) 인증은 무시됩니다.--admin
이 없는 경우, 명령이 사용자에게 외부 ID 제공자를 사용하여 인증하라는 메시지를 표시하는 표준 비-관리자 kubeconfig
를 생성합니다. 그런 다음 ID 제공자는 사용자가 클러스터의 리소스에 액세스하기 전에 사용자의 ID를 확인합니다.이러한 명령에 대한 자세한 내용은 다음을 참조하십시오.
역할은 사용 권한 집합을 정의합니다. Role
을 생성하여 특정 네임스페이스 내에서 역할을 정의하거나 ClusterRole
을 생성하여 클러스터 전체 역할을 정의할 수 있습니다. 해당 역할에 정의된 사용 권한을 사용자 또는 사용자 그룹에 부여하려면 역할 바인딩을 생성해야 합니다.
리소스 | 범위 | 설명 |
---|---|---|
Role |
네임스페이스 | 네임스페이스별 RoleBinding 에서 사용할 수 있는 사용 권한을 정의합니다. |
ClusterRole |
클러스터 | ClusterRoleBinding 또는 네임스페이스별 RoleBinding 을 사용할 수 있는 사용 권한을 정의합니다. |
RoleBinding |
네임스페이스 | 특정 네임스페이스 내에서 사용 권한을 부여합니다. Role 또는 ClusterRole 을 참조할 수 있습니다. |
ClusterRoleBinding |
클러스터 | 클러스터의 모든 네임스페이스에 사용 권한을 부여합니다. ClusterRole 만 참조할 수 있습니다. |
기본 사용자 역할에는 다음이 포함됩니다.
cluster-admin
: 클러스터에 대한 모든 액세스 권한입니다. RoleBinding
을 사용하는 경우 이 역할은 바인딩에 지정된 네임스페이스의 모든 리소스에 대한 모든 액세스 권한을 부여합니다.admin
: 네임스페이스의 대부분의 리소스에 대한 관리자 액세스 권한입니다. 네임스페이스 내에서 역할 및 역할 바인딩을 생성하고 수정할 수 있습니다.edit
: 배포, 서비스, 포드와 같은 네임스페이스의 대부분의 개체에 대한 읽기-쓰기 액세스 권한입니다. 역할 및 역할 바인딩을 보거나 생성하거나 수정할 수 없습니다.view
: 네임스페이스의 대부분의 개체에 대한 읽기 전용 액세스 권한입니다. 역할 및 역할 바인딩을 보거나 생성하거나 수정할 수 없습니다.이러한 역할에 대한 자세한 내용은 Kubernetes 설명서에서 RBAC 인증 사용을 참조하십시오.
이 섹션에서는 다음 방법을 설명합니다.
kubeconfig
파일 생성 및 테스트이 절차에서는 tanzu
및 kubectl
명령을 실행하는 시스템에 브라우저가 있는 경우 인증 프로세스의 로그인 단계를 테스트할 수 있습니다. 시스템에 브라우저가 없는 경우 브라우저가 없는 시스템에서 사용자 인증을 참조하십시오.
관리 클러스터용 표준 kubeconfig
로컬 파일로 내보냅니다(예: /tmp/id_mgmt_test_kubeconfig
). 명령에는 --admin
옵션이 포함되지 않으므로 내보낸 kubeconfig
는 admin
버전이 아닌 표준 kubeconfig
입니다.
tanzu mc kubeconfig get --export-file /tmp/id_mgmt_test_kubeconfig
You can now access the cluster by specifying '--kubeconfig /tmp/id_mgmt_test_kubeconfig' flag when using 'kubectl' command
확인 메시지가 표시됩니다.
새로 생성된 kubeconfig
파일을 사용하여 관리 클러스터에 연결합니다.
kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
인증 프로세스를 수행하려면 kubectl
명령을 실행하면 사용자가 클러스터에 로그인할 수 있도록 IdP 로그인 페이지가 자동으로 열리기 때문에 사용자가 클러스터에 연결하는 시스템에 브라우저가 있어야 합니다. 브라우저가 열리고 OIDC 제공자 또는 LDAPS 로그인 페이지에 대한 로그인 페이지가 표시되어야 합니다.
LDAPS:
OIDC:
OIDC 또는 LDAP 서버에 있는 사용자 계정의 자격 증명을 입력합니다. 로그인에 성공하면 브라우저에 다음이 표시됩니다.
tanzu
및 kubectl
명령을 실행하는 터미널로 돌아갑니다.
인증된 사용자에 대해 클러스터에 역할 바인딩을 이미 구성한 경우 포드 정보를 표시하는 kubectl get pods -A
출력이 표시됩니다.
클러스터에 역할 바인딩을 구성하지 않은 경우 포드에 대한 사용자 계정 액세스를 거부하는 메시지가 표시됩니다. Error from server (Forbidden): pods is forbidden: User "[email protected]" cannot list resource "pods" in API group "" at the cluster scope
. 이 문제는 사용자가 성공적으로 인증되었지만 클러스터의 리소스에 액세스할 수 있는 권한이 아직 없기 때문에 발생합니다. 사용자에게 클러스터 리소스에 액세스하도록 권한을 부여하려면 아래 설명된 대로 관리 클러스터에서 역할 바인딩을 생성해야 합니다.
관리자가 아닌 사용자에게 관리 클러스터에 대한 액세스 권한을 부여하려면 위의 kubeconfig
관리 클러스터용 비-관리자 파일 생성 및 테스트kubeconfig
에 설명된 대로 파일을 생성하고 배포합니다. 이 kubeconfig
가 작동하려면 먼저 관리 클러스터에서 역할 바인딩을 생성하여 RBAC를 설정해야 합니다. 이 역할 바인딩은 개별 인증된 사용자 또는 사용자 그룹에 역할 기반 사용 권한을 할당합니다.
역할 바인딩을 생성하는 방법:
관리 클러스터의 admin
컨텍스트를 사용하고 있는지 확인합니다.
kubectl config current-context
컨텍스트가 관리 클러스터 admin
컨텍스트가 아닌 경우 해당 컨텍스트를 사용하도록 kubectl
을 설정합니다. 예:
kubectl config use-context id-mgmt-test-admin@id-mgmt-test
기존 역할을 나열합니다.
네임스페이스 범위 역할의 전체 목록을 보려면 다음을 실행합니다.
kubectl get roles --all-namespaces
클러스터 범위 역할의 전체 목록을 보려면 다음을 실행합니다.
kubectl get clusterroles
지정된 사용자를 역할에 연결하려면 역할 바인딩을 생성합니다.
RoleBinding
은 Role
또는 ClusterRole
을 참조할 수 있습니다.ClusterRoleBinding
은 ClusterRole
만 참조할 수 있습니다.다음 예에서는 클러스터 역할 cluster-admin
을 사용자 [email protected]
에 바인딩하는 id-mgmt-test-rb
라는 클러스터 역할 바인딩을 생성합니다.
kubectl create clusterrolebinding id-mgmt-test-rb --clusterrole cluster-admin --user [email protected]
--user
의 경우 사용자의 OIDC 또는 LDAP 사용자 이름을 지정합니다. Tanzu Kubernetes Grid 설치 관리자 인터페이스의 Identity Management 섹션에서 또는 LDAP_*
또는 OIDC_*
변수를 설정하여 사용자 이름 특성 및 기타 ID 제공자 세부 정보를 구성했습니다.
OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM
구성 변수의 OIDC ID 관리 소스 아래에 있는 사용자 이름 할당 필드에 설정됩니다.LDAP_USER_SEARCH_NAME_ATTRIBUTE
구성 변수의 LDAPS ID 관리 소스 –> 사용자 검색 특성 아래에 있는 사용자 이름 필드에 설정됩니다.예를 들어 OIDC의 경우 사용자 이름은 종종 사용자의 이메일 주소입니다. LDAPS의 경우 이메일 주소가 아니라 LDAP 사용자 이름입니다.
이전 절차에서 생성한 kubeconfig
파일을 사용하여 관리 클러스터에 다시 연결합니다.
kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
이번에는 사용자가 이 관리 클러스터에서 cluster-admin
역할에 바인딩되어 있으므로 포드 목록이 표시되어야 합니다. 생성된 kubeconfig
파일을 관리 클러스터에서 역할 바인딩을 구성하는 모든 사용자와 공유할 수 있습니다.
이 섹션에서는 다음 방법을 설명합니다.
kubeconfig
파일 생성 및 테스트이 절차에서는 tanzu
및 kubectl
명령을 실행하는 시스템에 브라우저가 있는 경우 인증 프로세스의 로그인 단계를 테스트할 수 있습니다. 시스템에 브라우저가 없는 경우 브라우저가 없는 시스템에서 사용자 인증을 참조하십시오.
워크로드 클러스터에서 사용자를 인증하려면 다음 단계를 수행합니다.
워크로드 클러스터용 표준 비-관리자 kubeconfig
를 가져온 후 파일로 내보냅니다. 아래 예에서는 클러스터 my-cluster
의 kubeconfig
를 my-cluster-kubeconfig
파일로 내보냅니다.
tanzu cluster kubeconfig get my-cluster --export-file /tmp/my-cluster-kubeconfig
생성된 파일을 사용하여 클러스터에서 작업을 실행합니다. 예를 들어, 다음을 실행합니다.
kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
ID 제공자의 로그인 페이지로 리디렉션되어야 합니다. ID 제공자의 사용자 계정으로 로그인한 후 인증된 사용자에 대해 클러스터에 역할 바인딩을 이미 구성한 경우 출력에 포드 정보가 표시됩니다.
클러스터에 역할 바인딩을 구성하지 않은 경우 Error from server (Forbidden): pods is forbidden: User "<user>" cannot list resource "pods" in API group "" at the cluster scope
메시지가 표시됩니다. 이 문제는 이 사용자에게 클러스터에 대한 사용 권한이 아직 없기 때문에 발생합니다. 사용자에게 클러스터 리소스에 액세스하도록 권한을 부여하려면 워크로드 클러스터에서 역할 바인딩을 생성해야 합니다.
워크로드 클러스터의 ID 관리 구성을 완료하려면 이전 단계에서 생성한 kubeconfig
를 사용하는 사용자에 역할 바인딩을 생성해야 합니다.
kubectl
컨텍스트를 워크로드 클러스터의 admin
kubeconfig
로 설정합니다. 역할 바인딩을 생성할 수 있도록 워크로드 클러스터의 admin
컨텍스트로 전환해야 합니다. 예를 들어 다음 두 명령을 실행하여 admin
컨텍스트로 변경합니다.
kubeconfig
를 가져옵니다.
tanzu cluster kubeconfig get my-cluster --admin
컨텍스트 전환:
kubectl config use-context my-cluster-admin@my-cluster
기존 역할을 보려면 다음을 수행합니다.
네임스페이스 범위 역할의 전체 목록을 보려면 다음을 실행합니다.
kubectl get roles --all-namespaces
클러스터 범위 역할의 전체 목록을 보려면 다음을 실행합니다.
kubectl get clusterroles
지정된 사용자를 역할에 연결하려면 역할 바인딩을 생성합니다.
RoleBinding
은 Role
또는 ClusterRole
을 참조할 수 있습니다.ClusterRoleBinding
은 ClusterRole
만 참조할 수 있습니다.다음 예에서는 클러스터 역할 cluster-admin
을 사용자 [email protected]
에 바인딩하는 workload-test-rb
라는 클러스터 역할 바인딩을 생성합니다.
kubectl create clusterrolebinding workload-test-rb --clusterrole cluster-admin --user [email protected]
--user
의 경우 사용자의 OIDC 또는 LDAP 사용자 이름을 지정합니다. Tanzu Kubernetes Grid 설치 관리자 인터페이스의 Identity Management 섹션에서 또는 LDAP_*
또는 OIDC_*
변수를 설정하여 사용자 이름 특성 및 기타 ID 제공자 세부 정보를 구성했습니다.
OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM
구성 변수의 OIDC ID 관리 소스 아래에 있는 사용자 이름 할당 필드에 설정됩니다.LDAP_USER_SEARCH_NAME_ATTRIBUTE
구성 변수의 LDAPS ID 관리 소스 –> 사용자 검색 특성 아래에 있는 사용자 이름 필드에 설정됩니다.예를 들어 OIDC의 경우 사용자 이름은 종종 사용자의 이메일 주소입니다. LDAPS의 경우 이메일 주소가 아니라 LDAP 사용자 이름입니다.
위에서 생성한 표준 kubeconfig
파일을 사용하여 클러스터에서 작업을 다시 실행합니다. 예를 들어, 다음을 실행합니다.
kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
이번에는 워크로드 클러스터에서 실행 중인 포드 목록이 표시됩니다. 이는 my-cluster-kubeconfig
파일의 사용자가 모두 ID 제공자에 의해 인증되었으며 클러스터에 필요한 사용 권한이 있기 때문입니다. my-cluster-kubeconfig
파일을 클러스터에서 역할 바인딩을 구성하는 모든 사용자와 공유할 수 있습니다.
생성된 kubeconfig
파일을 다른 사용자와 공유하여 클러스터에 대한 액세스를 허용합니다.