Azure 역할 기반 액세스 제어를 사용하여 AKS(Azure Kubernetes Service)의 Kubernetes 구성 파일에 대한 액세스를 정의합니다.

kubectl 도구를 사용하여 Kubernetes 클러스터와 상호 작용할 수 있습니다. Azure CLI는 kubectl을 사용하여 AKS 클러스터에 연결하는 데 필요한 액세스 자격 증명 및 kubeconfig 구성 파일을 쉽게 가져올 수 있는 방법을 제공합니다. Azure RBAC(Azure 역할 기반 액세스 제어)를 사용하여 kubeconfig 파일에 액세스할 수 있는 사용자와 해당 사용자가 가진 권한을 제한할 수 있습니다.

이 문서에서는 AKS 클러스터의 구성 정보를 받을 수 있는 사람을 제한하는 Azure 역할을 할당하는 방법을 보여줍니다.

시작하기 전에

  • 이 문서에서는 기존 AKS 클러스터가 있다고 가정합니다. AKS 클러스터가 필요한 경우 Azure CLI, Azure PowerShell 또는 Azure Portal을 사용하여 만듭니다.
  • 또한 이 문서에서는 Azure CLI 버전 2.0.65 이상을 실행해야 합니다. az --version을 실행하여 버전을 찾습니다. 설치 또는 업그레이드해야 하는 경우 Azure CLI 설치를 참조하세요.

클러스터 역할의 사용 가능한 권한

kubectl 도구를 사용하여 AKS 클러스터와 상호 작용하는 경우 kubeconfig라는 구성 파일에서 클러스터 연결 정보를 정의합니다. 이러한 구성 파일은 일반적으로 ~/.kube/config에 저장됩니다. 이 kubeconfig 파일에 여러 클러스터를 정의할 수 있습니다. kubectl config use-context 명령을 사용하여 클러스터 간에 전환할 수 있습니다.

az aks get-credentials 명령을 사용하여 AKS 클러스터의 액세스 자격 증명을 가져올 수 있고 이 자격 증명을 kubeconfig 파일에 병합합니다. Azure RBAC를 사용하여 이 자격 증명에 대한 액세스를 제어할 수 있습니다. 이 Azure 역할을 사용하여 kubeconfig 파일을 검색할 수 있는 사용자와 해당 사용자가 클러스터 내에서 가지는 권한을 정의할 수 있습니다.

Microsoft Entra 사용자 또는 그룹에 적용할 수 있는 다음 두 가지 Azure 역할이 있습니다.

  • Azure Kubernetes Service 클러스터 관리자 역할

    • Microsoft.ContainerService/managedClusters/listClusterAdminCredential/action API 호출에 대한 액세스를 허용합니다. 이 API 호출은 클러스터 관리자 자격 증명을 나열합니다.
    • clusterAdmin 역할의 kubeconfig를 다운로드합니다.
  • Azure Kubernetes Service 클러스터 사용자 역할

    • Microsoft.ContainerService/managedClusters/listClusterUserCredential/action API 호출에 대한 액세스를 허용합니다. 이 API 호출은 클러스터 사용자 자격 증명을 나열합니다.
    • clusterUser 역할의 kubeconfig를 다운로드합니다.

참고 항목

Microsoft Entra ID를 사용하는 클러스터에서 clusterUser 역할이 있는 사용자에게는 로그인을 요청하는 빈 kubeconfig 파일이 있습니다. 로그인되면 사용자는 해당 Microsoft Entra 사용자 또는 그룹 설정에 따라 액세스 권한을 가집니다. clusterAdmin 역할이 있는 사용자에게는 관리자 액세스 권한이 있습니다.

Microsoft Entra ID를 사용하지 않는 클러스터에서, clusterUser 역할은 clusterAdmin 역할과 동일한 효과가 있습니다.

사용자 또는 그룹에 역할 권한 할당

사용 가능한 역할 중 하나를 할당하려면 다음 단계를 사용하여 AKS 클러스터의 리소스 ID와 Microsoft Entra 사용자 계정 또는 그룹의 ID를 가져와야 합니다.

  1. myResourceGroup 리소스 그룹에 있는 myAKSCluster라는 클러스터에 az aks show 명령을 사용하여 클러스터 리소스 ID를 가져옵니다. 필요에 따라 고유한 클러스터 및 리소스 그룹 이름을 지정합니다.
  2. az account showaz ad user show 명령을 사용하여 사용자 ID를 가져옵니다.
  3. az role assignment create 명령을 사용하여 역할을 할당합니다.

다음 예에서는 Azure Kubernetes Service 클러스터 관리자 역할을 개별 사용자 계정에 할당합니다.

# Get the resource ID of your AKS cluster
AKS_CLUSTER=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query id -o tsv)

# Get the account credentials for the logged in user
ACCOUNT_UPN=$(az account show --query user.name -o tsv)
ACCOUNT_ID=$(az ad user show --id $ACCOUNT_UPN --query objectId -o tsv)

# Assign the 'Cluster Admin' role to the user
az role assignment create \
    --assignee $ACCOUNT_ID \
    --scope $AKS_CLUSTER \
    --role "Azure Kubernetes Service Cluster Admin Role"

Microsoft Entra 그룹에 권한을 할당하려면 ‘사용자’가 아닌 ‘그룹’의 개체 ID를 사용하여 이전 예제에 표시된 --assignee 매개 변수를 업데이트합니다.

그룹의 개체 ID를 가져오려면 az ad group show 명령을 사용합니다. 다음 명령은 appdev라는 Microsoft Entra 그룹의 개체 ID를 가져옵니다.

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

Important

경우에 따라 Microsoft Entra 게스트 사용자와 같이 계정에 있는 user.nameuserPrincipalName과 다릅니다.

$ az account show --query user.name -o tsv
user@contoso.com

$ az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv
user_contoso.com#EXT#@contoso.onmicrosoft.com

이 경우 ACCOUNT_UPN 값을 Microsoft Entra 사용자의 userPrincipalName으로 설정합니다. 예를 들어 계정 user.nameuser@contoso.com인 경우 이 작업은 다음 예제와 같이 표시됩니다.

ACCOUNT_UPN=$(az ad user list --query "[?contains(otherMails,'user@contoso.com')].{UPN:userPrincipalName}" -o tsv)

구성 정보를 가져와서 확인

역할이 할당된 후 az aks get-credentials 명령을 사용하여 AKS 클러스터의 kubeconfig 정의를 가져옵니다. 다음 예제에서는 사용자에게 클러스터 관리자 역할이 부여된 경우에만 올바르게 작동하는 --admin 자격 증명을 가져옵니다.

az aks get-credentials --resource-group myResourceGroup --name myAKSCluster --admin

그런 다음, kubectl config view 명령을 사용하여 클러스터의 컨텍스트에 관리자 구성 정보가 적용되었다고 표시되는지 확인할 수 있습니다.

$ kubectl config view

출력은 다음 예제 출력과 비슷하게 됩니다.

apiVersion: v1
clusters:
- cluster:
    certificate-authority-data: DATA+OMITTED
    server: https://myaksclust-myresourcegroup-19da35-4839be06.hcp.eastus.azmk8s.io:443
  name: myAKSCluster
contexts:
- context:
    cluster: myAKSCluster
    user: clusterAdmin_myResourceGroup_myAKSCluster
  name: myAKSCluster-admin
current-context: myAKSCluster-admin
kind: Config
preferences: {}
users:
- name: clusterAdmin_myResourceGroup_myAKSCluster
  user:
    client-certificate-data: REDACTED
    client-key-data: REDACTED
    token: e9f2f819a4496538b02cefff94e61d35

역할 권한 제거

역할 할당을 제거하려면 az role assignment delete 명령을 사용합니다. 이전 단계에서 가져온 계정 ID 및 클러스터 리소스 ID를 지정합니다. 사용자가 아닌 그룹에 역할을 할당한 경우 --assignee 매개 변수에 대한 계정 개체 ID 대신 해당하는 그룹 개체 ID를 지정합니다.

az role assignment delete --assignee $ACCOUNT_ID --scope $AKS_CLUSTER

다음 단계

AKS 클러스터에 대한 액세스 보안을 강화하기 위해 Microsoft Entra 인증을 통합합니다.