안녕하세요.
오늘은 AKS의 인증 및 권한 부여에 대해 알아보겠습니다.
여기서 말하는 인증 및 권한 부여는 컨트롤 플레인(= AKS API 서버)에 대한 인증 입니다.

설정은 보안 구성 → 인증 및 권한 부여에서 설정이 가능합니다.
이제 각 항목 별 차이점을 알아보겠습니다.
# Kubernetes RBAC가 있는 로컬 계정
이 방식은 Azure와 거의 관계없는 순수 Kubernetes 방식입니다.
저희가 익히 알고 있는 인증서, 토큰을 통해서 API를 호출하는 방식으로 kubeconfig 파일을 들고 있는 사람이 관리자가 됩니다.
보안상 가장 취약한 인증 방법으로 로그인과 권한 인증 모두 Kubernetes가 하게됩니다.
사용자는 최초로 AKS 인증서를 불러올 권한만 있으면 됩니다.
az aks get-credentials --resource-group <resource group> --name <aks-name>
위 명령어로 인증서를 갖고 오면 바로 Kubernetes의 관리자 권한을 얻게 됩니다.

보시는 바와 같이 바로 node가 불러와 지는 것을 확인 가능합니다.
# Kubernetes RBAC를 사용한 Microsoft Entra ID 인증
이 방식은 로그인은 Entra ID, 권한 판단은 Kubernetes가 하는 방식입니다.
API 접근은 Entra ID가 판단하지만 어떤 권한을 줄지 예를 들어 파드를 볼 수 있는 권한 노드를 볼 수 있는 권한 등은 Kubernetes 내부에서 정하게 됩니다.

"Kubernetes RBAC를 사용한 Microsoft Entra ID 인증" 으로 변경하겠습니다.
참고로 "Kubernetes RBAC가 있는 로컬 계정" 해당 인증에서 다른 인증으로 변경하면 원래대로 못 돌아가니 주의해야합니다.
"클러스터 관리자 ClusterRoleBinding" 은 Entra ID 사용자 중에서 Kubernetes 관리자 권한을 가질 그룹 입니다.
해당 그룹 내에 속한 사용자는 Kubernetes에서 관리자 권한을 갖게 됩니다.
"Kubernetes 로컬 계정" 은 Azure와 무관한 Kubernetes 자체 관리자 계정 입니다.
해당 옵션을 키면 Kubernetes 내부에 Azure의 관리를 받지 않는 Admin 계정을 하나 만드는 것이고 사실상 "Kubernetes RBAC가 있는 로컬 계정" 과 똑같은 역할을 하게 됩니다.
az aks get-credentials --resource-group <resource group> --name <aks-name> --admin
위 명령어를 통해 불러올 수 있습니다.
"Kubernetes RBAC를 사용한 Microsoft Entra ID 인증" 방법은 권한 판단은 Kubernetes가 하기 때문에 일단 모든 권한을 갖고 있는 admin 계정으로 role binding이 필수적입니다.
# Azure RBAC를 사용한 Microsoft Entra ID 인증
이 방식은 로그인 및 권한 판단 모두 Azure Entra ID에서 진행하는 것입니다.

"Azure RBAC를 사용한 Microsoft Entra ID 인증" 으로 변경 후 저장 합니다.
이제 kubectl 명령어를 실행해보겠습니다.

그러나 위와 같이 나오면서 제대로 실행이 되지 않는 것을 확인할 수 있습니다.
이 메시지에서 핵심은 바로 kubelogin not found 입니다.
왜 갑자기 kubelogin이 필요해졌을까?
기존에는 AKS 클러스터에 접근할 때 단순히 아래 명령만으로도 문제가 없었습니다.
기존 방식은 AKS 로컬 계정 기반의 인증 방식으로,
kubeconfig 안에 포함된 클라이언트 인증서를 사용해 Kubernetes API Server에 직접 인증하는 구조였습니다.
그러나 MS Entra ID 기반 인증 방식은 말 그대로 MS Entra ID를 통해서 토큰을 받아 인증을 해야합니다.
그런데 kubectl 자체에는 Entra ID 토큰을 발급받는 기능이 없기 때문에 그 역할을 kubelogin이 대신 수행하는 것입니다.
그래서 토큰을 받아오기 위해서 `kubelogin` 이라는 명령어가 필요한 것입니다.
`kubelogin`을 통해서 사용자 인증 받는 방식은 여러가지가 있는데요.
Azure CLI, SPN, Mid, 웹 브라우저 등 다양하게 있습니다.
저는 여기서 spn으로 해보겠습니다.
az aks install-cli
먼저 설치를 진행합니다.
kubelogin convert-kubeconfig -l spn --client-id "<client-id>" --client-secret "<secret>"
그 후 spn으로 연결하겠습니다.
이제 다시 명령어를 날려보겠습니다.

다시 오류가 발생합니다.
오류에서도 알 수 있듯이 이번에는 Entra ID에는 접근이 되나 그냥 AKS에 붙을 권한이 없는 것입니다.

해당 AKS에 "Azure Kubernetes Service 클러스터 사용자 역할"을 할당해주겠습니다.

이제 정상적으로 명령어가 실행되는 것을 확인 가능합니다.
감사합니다.
* 참조
kubelogin을 사용하여 AKS(Azure Kubernetes Service)에서 인증 - Azure Kubernetes Service
AKS(Azure Kubernetes Service)의 모든 Microsoft Entra 인증 방법에 kubelogin 플러그 인을 사용하는 방법을 알아봅니다.
learn.microsoft.com