RBAC 구성

이 항목에서는 Tanzu Kubernetes Grid RBAC(역할 기반 액세스 제어)를 구성하는 방법을 설명합니다.

RBAC 구성에 대해

클러스터 액세스를 위해 표준 비-관리자 kubeconfig 파일을 사용하려는 경우, ID 관리를 사용하도록 설정하고 구성한 후 RBAC 인증을 구성해야 합니다. kubeconfig 파일에 대한 자세한 내용은 아래 관리자 및 비-관리자 kubeconfig 파일을 참조하십시오.

RBAC 권한 부여를 구성하려면 표준 비-관리자 kubeconfig 파일을 사용하려는 각 관리 및 워크로드 클러스터에 대해 하나 이상의 역할 바인딩을 생성합니다.

  1. ID 관리를 구성 ID 관리에서 암호 해독된 것으로 사용하도록 설정하고 구성한 후 관리 클러스터용 역할 바인딩을 하나 이상 생성합니다. 지침은 아래 관리 클러스터용 RBAC 구성을 참조하십시오.
  2. 각 워크로드 클러스터에 하나 이상의 역할 바인딩을 생성합니다. 지침은 아래 로드 클러스터용 RBAC 구성을 참조하십시오.

역할 바인딩에 대한 자세한 내용은 아래 역할 및 역할 바인딩을 참조하십시오.

관리자 및 비-관리자 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 인증 사용을 참조하십시오.

관리 클러스터용 RBAC 구성

이 섹션에서는 다음 방법을 설명합니다.

  1. 관리 클러스터용 비-관리자 kubeconfig 파일 생성 및 테스트
  2. 관리 클러스터에서 역할 바인딩 생성

관리 클러스터용 비-관리자 kubeconfig 파일 생성 및 테스트

이 절차에서는 tanzukubectl 명령을 실행하는 시스템에 브라우저가 있는 경우 인증 프로세스의 로그인 단계를 테스트할 수 있습니다. 시스템에 브라우저가 없는 경우 브라우저가 없는 시스템에서 사용자 인증을 참조하십시오.

  1. 관리 클러스터용 표준 kubeconfig 로컬 파일로 내보냅니다(예: /tmp/id_mgmt_test_kubeconfig). 명령에는 --admin 옵션이 포함되지 않으므로 내보낸 kubeconfigadmin 버전이 아닌 표준 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 확인 메시지가 표시됩니다.

  2. 새로 생성된 kubeconfig 파일을 사용하여 관리 클러스터에 연결합니다.

    kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
    

    인증 프로세스를 수행하려면 kubectl 명령을 실행하면 사용자가 클러스터에 로그인할 수 있도록 IdP 로그인 페이지가 자동으로 열리기 때문에 사용자가 클러스터에 연결하는 시스템에 브라우저가 있어야 합니다. 브라우저가 열리고 OIDC 제공자 또는 LDAPS 로그인 페이지에 대한 로그인 페이지가 표시되어야 합니다.

    LDAPS:

    LDAPS 로그인 페이지

    OIDC:

    OIDC 로그인 페이지

    OIDC 또는 LDAP 서버에 있는 사용자 계정의 자격 증명을 입력합니다. 로그인에 성공하면 브라우저에 다음이 표시됩니다.

    로그인 성공

  3. tanzukubectl 명령을 실행하는 터미널로 돌아갑니다.

    • 인증된 사용자에 대해 클러스터에 역할 바인딩을 이미 구성한 경우 포드 정보를 표시하는 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를 설정해야 합니다. 이 역할 바인딩은 개별 인증된 사용자 또는 사용자 그룹에 역할 기반 사용 권한을 할당합니다.

역할 바인딩을 생성하는 방법:

  1. 관리 클러스터의 admin 컨텍스트를 사용하고 있는지 확인합니다.

    kubectl config current-context
    

    컨텍스트가 관리 클러스터 admin 컨텍스트가 아닌 경우 해당 컨텍스트를 사용하도록 kubectl을 설정합니다. 예:

    kubectl config use-context id-mgmt-test-admin@id-mgmt-test
    
  2. 기존 역할을 나열합니다.

    • 네임스페이스 범위 역할의 전체 목록을 보려면 다음을 실행합니다.

      kubectl get roles --all-namespaces
      
    • 클러스터 범위 역할의 전체 목록을 보려면 다음을 실행합니다.

      kubectl get clusterroles
      
  3. 지정된 사용자를 역할에 연결하려면 역할 바인딩을 생성합니다.

    • RoleBindingRole 또는 ClusterRole을 참조할 수 있습니다.
    • ClusterRoleBindingClusterRole만 참조할 수 있습니다.

    다음 예에서는 클러스터 역할 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: 사용자 이름 특성은 설치 관리자 인터페이스 또는 OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM 구성 변수의 OIDC ID 관리 소스 아래에 있는 사용자 이름 할당 필드에 설정됩니다.
    • LDAPS: 사용자 이름 특성은 설치 관리자 인터페이스 또는 LDAP_USER_SEARCH_USERNAME 구성 변수의 LDAPS ID 관리 소스 –> 사용자 검색 특성 아래에 있는 사용자 이름 필드에 설정됩니다.

    예를 들어 OIDC의 경우 사용자 이름은 종종 사용자의 이메일 주소입니다. LDAPS의 경우 이메일 주소가 아니라 LDAP 사용자 이름입니다.

  4. 이전 절차에서 생성한 kubeconfig 파일을 사용하여 관리 클러스터에 다시 연결합니다.

    kubectl get pods -A --kubeconfig /tmp/id_mgmt_test_kubeconfig
    

    이번에는 사용자가 이 관리 클러스터에서 cluster-admin 역할에 바인딩되어 있으므로 포드 목록이 표시되어야 합니다. 생성된 kubeconfig 파일을 관리 클러스터에서 역할 바인딩을 구성하는 모든 사용자와 공유할 수 있습니다.

워크로드 클러스터용 RBAC 구성

이 섹션에서는 다음 방법을 설명합니다.

워크로드 클러스터용 비-관리자 kubeconfig 파일 생성 및 테스트

이 절차에서는 tanzukubectl 명령을 실행하는 시스템에 브라우저가 있는 경우 인증 프로세스의 로그인 단계를 테스트할 수 있습니다. 시스템에 브라우저가 없는 경우 브라우저가 없는 시스템에서 사용자 인증을 참조하십시오.

워크로드 클러스터에서 사용자를 인증하려면 다음 단계를 수행합니다.

  1. 워크로드 클러스터용 표준 비-관리자 kubeconfig를 가져온 후 파일로 내보냅니다. 아래 예에서는 클러스터 my-clusterkubeconfigmy-cluster-kubeconfig 파일로 내보냅니다.

    tanzu cluster kubeconfig get my-cluster --export-file /tmp/my-cluster-kubeconfig
    
  2. 생성된 파일을 사용하여 클러스터에서 작업을 실행합니다. 예를 들어, 다음을 실행합니다.

    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를 사용하는 사용자에 역할 바인딩을 생성해야 합니다.

  1. kubectl 컨텍스트를 워크로드 클러스터의 admin kubeconfig로 설정합니다. 역할 바인딩을 생성할 수 있도록 워크로드 클러스터의 admin 컨텍스트로 전환해야 합니다. 예를 들어 다음 두 명령을 실행하여 admin 컨텍스트로 변경합니다.

    1. kubeconfig를 가져옵니다.

      tanzu cluster kubeconfig get my-cluster --admin
      
    2. 컨텍스트 전환:

      kubectl config use-context my-cluster-admin@my-cluster
      
  2. 기존 역할을 보려면 다음을 수행합니다.

    • 네임스페이스 범위 역할의 전체 목록을 보려면 다음을 실행합니다.

      kubectl get roles --all-namespaces
      
    • 클러스터 범위 역할의 전체 목록을 보려면 다음을 실행합니다.

      kubectl get clusterroles
      
  3. 지정된 사용자를 역할에 연결하려면 역할 바인딩을 생성합니다.

    • RoleBindingRole 또는 ClusterRole을 참조할 수 있습니다.
    • ClusterRoleBindingClusterRole만 참조할 수 있습니다.

    다음 예에서는 클러스터 역할 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: 사용자 이름 특성은 설치 관리자 인터페이스 또는 OIDC_IDENTITY_PROVIDER_USERNAME_CLAIM 구성 변수의 OIDC ID 관리 소스 아래에 있는 사용자 이름 할당 필드에 설정됩니다.
    • LDAPS: 사용자 이름 특성은 설치 관리자 인터페이스 또는 LDAP_USER_SEARCH_USERNAME 구성 변수의 LDAPS ID 관리 소스 –> 사용자 검색 특성 아래에 있는 사용자 이름 필드에 설정됩니다.

    예를 들어 OIDC의 경우 사용자 이름은 종종 사용자의 이메일 주소입니다. LDAPS의 경우 이메일 주소가 아니라 LDAP 사용자 이름입니다.

  4. 위에서 생성한 표준 kubeconfig 파일을 사용하여 클러스터에서 작업을 다시 실행합니다. 예를 들어, 다음을 실행합니다.

    kubectl get pods -A --kubeconfig /tmp/my-cluster-kubeconfig
    

    이번에는 워크로드 클러스터에서 실행 중인 포드 목록이 표시됩니다. 이는 my-cluster-kubeconfig 파일의 사용자가 모두 ID 제공자에 의해 인증되었으며 클러스터에 필요한 사용 권한이 있기 때문입니다. my-cluster-kubeconfig 파일을 클러스터에서 역할 바인딩을 구성하는 모든 사용자와 공유할 수 있습니다.

후속 작업

생성된 kubeconfig 파일을 다른 사용자와 공유하여 클러스터에 대한 액세스를 허용합니다.

check-circle-line exclamation-circle-line close-line
Scroll to top icon