다음을 통해 공유


Microsoft Entra ID 및 Kubernetes RBAC를 사용하여 액세스 제어

적용 대상: Azure 로컬의 AKS 버전 23H2

사용자 인증에 Microsoft Entra ID를 사용하도록 AKS(Azure Kubernetes Service)를 구성할 수 있습니다. 이 구성에서는 Microsoft Entra 인증 토큰을 사용하여 Kubernetes 클러스터에 로그인합니다. 인증되면 기본 제공 Kubernetes RBAC(Kubernetes 역할 기반 액세스 제어)를 사용하여 사용자의 ID 또는 그룹 멤버 자격을 기반으로 네임스페이스 및 클러스터 리소스에 대한 액세스를 관리할 수 있습니다.

이 문서에서는 AKS의 Microsoft Entra 그룹 멤버 자격을 기반으로 Kubernetes 클러스터에서 Kubernetes RBAC를 사용하여 액세스를 제어하는 방법을 설명합니다. Microsoft Entra ID에서 데모 그룹 및 사용자를 만듭니다. 그런 다음 클러스터에서 역할 및 역할 바인딩을 만들어 리소스를 만들고 볼 수 있는 적절한 권한을 부여합니다.

필수 조건

Microsoft Entra ID를 사용하여 Kubernetes RBAC를 설정하기 전에 다음 필수 구성 요소가 있어야 합니다.

  • Azure Arc 클러스터에서 사용하도록 설정된 AKS입니다. 클러스터를 설정해야 하는 경우 Azure Portal 또는 Azure CLI 사용에 대한 지침을 참조하세요.
  • Azure CLI가 설치 및 구성되었습니다. CLI를 설치하거나 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.
  • Azure CLI 및 connectedk8s 확장. Azure CLI(Azure 명령줄 인터페이스)는 Azure 리소스를 만들고 관리하는 데 사용되는 명령 세트입니다. Azure CLI가 있는지 확인하려면 명령줄 도구를 열고 다음 az -v을 입력합니다. 또한 Kubernetes 클러스터에 대한 채널을 열기 위해 connectedk8s 확장을 설치합니다. 설치 지침은 Azure CLI 설치 방법을 참조하세요.
  • Kubectl. Kubernetes 명령줄 도구인 kubectl을 사용하면 Kubernetes 클러스터를 대상으로 하는 명령을 실행할 수 있습니다. kubectl을 설치했는지 확인하려면 명령줄 도구를 열고 다음 kubectl version --client을 입력합니다. kubectl 클라이언트 버전이 적어도 v1.24.0있는지 확인합니다. 설치 지침은 kubectl을 참조 하세요.
  • 직접 모드 또는 프록시 모드를 사용하여 지정된 권한으로 Kubernetes 클러스터에 액세스할 수 있습니다.
    • 명령을 사용하여 az aksarc get-credentials Kubernetes 클러스터에 직접 액세스하려면 Azure Kubernetes Service Arc 클러스터 사용자 역할 권한에 포함된 Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action이 필요합니다.
    • 명령을 사용하여 az connectedk8s proxy 프록시 모드로 어디서나 Kubernetes 클러스터에 액세스하려면 Azure Arc 지원 Kubernetes 클러스터 사용자 역할 권한에 포함된 Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action이 필요합니다. 한편, 온보딩 프로세스를 수행하는 에이전트와 컴퓨터가 Azure Arc 지원 Kubernetes 네트워크 요구 사항의 네트워크 요구 사항을 충족하는지 확인해야 합니다.

선택적 첫 번째 단계

구성원이 포함된 Microsoft Entra 그룹이 아직 없는 경우 그룹을 만들고 일부 구성원을 추가하여 이 문서의 지침을 따를 수 있습니다.

Microsoft Entra ID 및 Kubernetes RBAC로 작업하는 방법을 보여 주려면 Kubernetes RBAC 및 Microsoft Entra ID가 클러스터 리소스에 대한 액세스를 제어하는 방법을 보여 주는 데 사용할 수 있는 애플리케이션 개발자를 위한 Microsoft Entra 그룹을 만들 수 있습니다. 프로덕션 환경에서는 Microsoft Entra 테넌트 내에서 기존 사용자와 그룹을 사용할 수 있습니다.

Microsoft Entra ID에서 데모 그룹 만들기

먼저 명령을 사용하여 애플리케이션 개발자를 위해 테넌트에서 Microsoft Entra ID로 az ad group create 그룹을 만듭니다. 다음 예제에서는 Azure 테넌트에 로그인하라는 메시지를 표시한 다음 appdev라는 그룹을 만듭니다.

az login
az ad group create --display-name appdev --mail-nickname appdev

그룹에 사용자 추가

애플리케이션 개발자를 위한 Microsoft Entra ID로 만든 예제 그룹을 사용하여 그룹에 사용자를 appdev 추가합니다. 이 사용자 계정을 사용하여 AKS 클러스터에 로그인하고 Kubernetes RBAC 통합을 테스트합니다.

명령을 사용하여 이전 섹션에서 만든 appdev 그룹에 사용자를 추가합니다az ad group member add. 세션을 종료하는 경우 .를 사용하여 az loginAzure에 다시 연결합니다.

$AKSDEV_ID = az ad user create --display-name <name> --password <strongpassword> --user-principal-name <name>@contoso.onmicrosoft.com
az ad group member add --group appdev --member-id $AKSDEV_ID

Microsoft Entra 그룹의 AKS 클러스터 리소스에 사용자 지정 Kubernetes RBAC 역할 바인딩 만들기

Microsoft Entra 그룹이 클러스터에 액세스할 수 있도록 AKS 클러스터를 구성합니다. 그룹 및 사용자를 추가하려면 Microsoft Entra ID에서 데모 그룹 만들기를 참조하세요.

  1. az aksarc get-credentials 명령을 사용하여 클러스터 관리자 자격 증명을 가져옵니다.

    az aksarc get-credentials --name "$aks_cluster_name" --resource-group "$resource_group_name" --admin
    
  2. 명령을 사용하여 Kubernetes 클러스터에 네임스페이스를 만듭니다 kubectl create namespace . 다음 예에서는 dev라는 네임스페이스를 만듭니다.

    kubectl create namespace dev
    

Kubernetes 에서 역할은 부여할 권한을 정의하고 RoleBindings는 원하는 사용자 또는 그룹에 권한을 적용합니다. 이러한 할당은 지정된 네임스페이스 또는 전체 클러스터에 적용할 수 있습니다. 자세한 내용은 Kubernetes RBAC 권한 부여 사용을 참조하세요.

개발 네임스페이스에 대한 역할을 만듭니다. 이 역할은 네임스페이스에 대한 모든 권한을 부여합니다. 프로덕션 환경에서는 다른 사용자 또는 그룹에 대해 더 세부적인 권한을 지정할 수 있습니다.

  1. role-dev-namespace.yaml이라는 파일을 만들고 다음 YAML 매니페스트를 복사하여 붙여넣습니다.

    kind: Role
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: dev-user-full-access
      namespace: dev
    rules:
    - apiGroups: ["", "extensions", "apps"]
      resources: ["*"]
      verbs: ["*"]
    - apiGroups: ["batch"]
      resources:
      - jobs
      - cronjobs
      verbs: ["*"]
    
  2. 명령을 사용하여 kubectl apply 역할을 만들고 YAML 매니페스트의 파일 이름을 지정합니다.

    kubectl apply -f role-dev-namespace.yaml
    
  3. az ad group show 명령을 사용하여 appdev 그룹의 리소스 ID를 가져옵니다. 이 그룹은 다음 단계에서 RoleBinding의 주체로 설정됩니다.

    az ad group show --group appdev --query objectId -o tsv
    

    az ad group show 명령은 다음과 같이 groupObjectId사용하는 값을 반환합니다.

    38E5FA30-XXXX-4895-9A00-050712E3673A
    
  4. rolebinding-dev-namespace.yaml이라는 파일을 만들고 다음 YAML 매니페스트를 복사하여 붙여넣습니다. appdev 그룹이 네임스페이스 액세스에 역할을 사용할 수 있도록 하는 역할 바인딩을 role-dev-namespace 설정합니다. 마지막 줄에서 명령으로 생성된 az ad group show 그룹 개체 ID로 바꿉 groupObjectId 니다.

    kind: RoleBinding
    apiVersion: rbac.authorization.k8s.io/v1
    metadata:
      name: dev-user-access
      namespace: dev
    roleRef:
      apiGroup: rbac.authorization.k8s.io
      kind: Role
      name: dev-user-full-access
    subjects:
    - kind: Group
      namespace: dev
      name: groupObjectId
    

    단일 사용자에 대한 RoleBinding을 만들려면 예제에서 UPN(사용자 계정 이름)을 지정 kind: User 하고 바꿉 groupObjectId 니다.

  5. 명령을 사용하여 RoleBinding을 kubectl apply 만들고 YAML 매니페스트의 파일 이름을 지정합니다.

    kubectl apply -f rolebinding-dev-namespace.yaml
    
    rolebinding.rbac.authorization.k8s.io/dev-user-access created
    

AKS 클러스터 리소스에 기본 제공 Kubernetes RBAC 역할 사용

Kubernetes는 기본 제공 사용자 연결 역할도 제공합니다. 이러한 기본 제공 역할은 다음과 같습니다.

  • 슈퍼 사용자 역할(클러스터 관리자)
  • ClusterRoleBindings를 사용하여 클러스터 전체에 부여할 역할
  • RoleBindings(관리자, 편집, 보기)를 사용하여 특정 네임스페이스 내에서 부여할 역할

기본 제공 Kubernetes RBAC 역할에 대한 자세한 내용은 Kubernetes RBAC 사용자 연결 역할을 참조하세요.

사용자 연결 역할

기본 ClusterRole 기본 ClusterRoleBinding 설명
cluster-admin system:masters 그룹 모든 리소스에 대해 모든 작업을 수행할 수 있도록 슈퍼 사용자 액세스를 허용합니다. ClusterRoleBinding에서 사용되는 경우 이 역할은 클러스터 및 모든 네임스페이스의 모든 리소스를 완전히 제어합니다. RoleBinding에서 사용되는 경우 네임스페이스 자체를 포함하여 역할 바인딩 네임스페이스의 모든 리소스를 완전히 제어할 수 있습니다.
관리자 None 역할 바인딩을 사용하여 네임스페이스 내에서 부여할 관리자 액세스를 허용합니다. 역할 바인딩에서 사용되는 경우 네임스페이스 내에서 역할 및 역할 바인딩을 만드는 기능을 포함하여 네임스페이스의 대부분의 리소스에 대한 읽기/쓰기 액세스를 허용합니다. 이 역할은 리소스 할당량 혹은 네임스페이스 자체에 대한 쓰기 권한을 허용하지 않습니다. 또한 이 역할은 Kubernetes v1.22+를 사용하여 만든 클러스터의 엔드포인트에 대한 쓰기 액세스를 허용하지 않습니다. 자세한 내용은 엔드포인트에 대한 쓰기 액세스를 참조 하세요.
edit None 네임스페이스에 있는 대부분의 개체에 대해 읽기/쓰기 액세스 권한을 허용합니다. 이 역할은 역할 또는 역할 바인딩을 보거나 수정할 수 없습니다. 그러나 이 역할을 사용하면 비밀에 액세스하고 네임스페이스에서 모든 ServiceAccount로 Pod를 실행할 수 있으므로 네임스페이스에서 모든 ServiceAccount의 API 액세스 수준을 얻는 데 사용할 수 있습니다. 또한 이 역할은 Kubernetes v1.22+를 사용하여 만든 클러스터의 엔드포인트에 대한 쓰기 액세스를 허용하지 않습니다. 자세한 내용은 엔드포인트에 대한 쓰기 액세스를 참조 하세요.
view None 네임스페이스에 있는 대부분의 개체를 볼 수 있는 읽기 전용 권한을 허용합니다. 역할 또는 역할 바인딩 조회는 할 수 없습니다. 비밀의 내용을 읽으면 네임스페이스의 ServiceAccount 자격 증명에 액세스할 수 있으므로 이 역할은 비밀을 볼 수 없으므로 네임스페이스의 모든 ServiceAccount로 API 액세스를 허용합니다(권한 상승의 한 형태).

Microsoft Entra ID와 함께 기본 제공 Kubernetes RBAC 역할 사용

Microsoft Entra ID와 함께 기본 제공 Kubernetes RBAC 역할을 사용하려면 다음 단계를 수행합니다.

  1. Microsoft Entra 그룹에 기본 제공 view Kubernetes RBAC 역할을 적용합니다.

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --group=<Azure AD group object ID>
    
  2. 각 Microsoft Entra 사용자에게 기본 제공 view Kubernetes RBAC 역할을 적용합니다.

    kubectl create clusterrolebinding <name of your cluster role binding> --clusterrole=view --user=<Azure AD user object ID>
    

Kubernetes 클러스터에 액세스

이제 직접 모드 또는 프록시 모드를 사용하여 지정된 권한으로 Kubernetes 클러스터에 액세스할 수 있습니다.

kubectl을 사용하여 클러스터에 액세스(직접 모드)

지정된 사용 권한으로 Kubernetes 클러스터에 액세스하려면 Kubernetes 운영자에게 명령을 사용할 수 있는 Microsoft Entra kubeconfigaz aksarc get-credentials 필요합니다. 이 명령은 관리자 기반 kubeconfig 및 사용자 기반 kubeconfig에 대한 액세스를 제공합니다. 관리자 기반 kubeconfig 파일에는 비밀이 포함되어 있으며 정기적으로 안전하게 저장 및 회전해야 합니다. 반면에 사용자 기반 Microsoft Entra ID kubeconfig는 비밀을 포함하지 않으며 클라이언트 컴퓨터에서 연결하는 사용자에게 배포할 수 있습니다.

이 Azure CLI 명령을 실행하려면 Azure Kubernetes Service Arc 클러스터 사용자 역할 권한에 포함된 Microsoft.HybridContainerService/provisionedClusterInstances/listUserKubeconfig/action이 필요합니다.

az aksarc get-credentials -g $resource_group_name -n $aks_cluster_name --file <file-name>

이제 kubectl을 사용하여 클러스터를 관리할 수 있습니다. 예를 들어 kubectl get nodes를 사용하여 클러스터의 노드를 나열할 수 있습니다. 처음 실행할 때는 다음 예제와 같이 로그인해야 합니다.

kubectl get nodes

클라이언트 디바이스에서 클러스터 액세스(프록시 모드)

명령을 사용하여 az connectedk8s proxy 프록시 모드로 어디서나 Kubernetes 클러스터에 액세스하려면 Azure Arc 지원 Kubernetes 클러스터 사용자 역할 권한에 포함된 Microsoft.Kubernetes/connectedClusters/listClusterUserCredential/action이 필요합니다.

다른 클라이언트 디바이스에서 다음 단계를 실행합니다.

  1. Microsoft Entra 인증을 사용하여 로그인합니다.

  2. 클러스터를 둘러싼 방화벽 외부에서도 어디서나 클러스터와 통신하는 데 필요한 클러스터 연결을 kubeconfig 가져옵니다.

    az connectedk8s proxy -n $aks_cluster_name -g $resource_group_name
    

    참고 항목

    이 명령은 프록시를 열고 현재 셸을 차단합니다.

  3. 다른 셸 세션에서 kubectl을 사용하여 클러스터에 요청을 보냅니다.

    kubectl get pods -A
    

이제 default 네임스페이스 아래의 모든 Pod 목록이 포함된 클러스터의 응답이 표시되어야 합니다.

자세한 내용은 클라이언트 디바이스에서 클러스터 액세스를 참조 하세요.

할당된 네임스페이스 외부에서 클러스터 리소스 만들기 및 보기

개발 네임스페이스 외부에서 Pod를 보려면 플래그가 kubectl get pods 있는 --all-namespaces 명령을 사용합니다.

kubectl get pods --all-namespaces

사용자의 그룹 멤버 자격에는 이 작업을 허용하는 Kubernetes 역할이 없습니다. 권한이 없으면 명령은 다음 오류를 생성합니다.

Error from server (Forbidden): pods is forbidden: User cannot list resource "pods" in API group "" at the cluster scope

다음 단계