다음을 통해 공유


AKS(Azure Kubernetes Service)에서 관리 ID 사용

AKS(Azure Kubernetes Service) 클러스터에는 부하 분산 장치 및 관리 디스크와 같은 Azure 리소스에 액세스하려면 Microsoft Entra ID가 필요합니다. Azure 리소스에 대한 관리 ID는 AKS 클러스터에서 다른 Azure 서비스에 대한 액세스를 권한 부여하는 데 권장되는 방법입니다.

관리 ID를 사용하면 자격 증명을 관리하거나 코드에 포함하지 않고도 Microsoft Entra 권한 부여를 지원하는 모든 서비스에 대한 AKS 클러스터의 액세스를 권한 부여할 수 있습니다. 관리 ID에 Azure RBAC(역할 기반 액세스 제어) 역할을 할당하여 Azure의 특정 리소스에 대한 권한을 부여합니다. 예를 들어, 클러스터에서 사용할 Azure Key Vault의 비밀에 액세스하기 위한 권한을 관리 ID에 부여할 수 있습니다. Azure RBAC에 대한 자세한 내용은 Azure RBAC(Azure 역할 기반 액세스 제어)를 참조하세요.

이 문서에서는 새 AKS 클러스터 또는 기존 AKS 클러스터에서 다음 형식의 관리 ID를 사용하도록 설정하는 방법을 보여 줍니다.

  • 시스템이 할당한 관리 ID. 시스템이 할당한 관리 ID는 AKS 클러스터와 같은 단일 Azure 리소스와 연결됩니다. 이는 클러스터의 수명 주기 동안만 존재합니다.
  • 사용자가 할당한 관리 ID. 사용자가 할당한 관리 ID는 AKS 클러스터가 다른 Azure 서비스에 대한 액세스 권한을 부여하는 데 사용할 수 있는 독립 실행형 Azure 리소스입니다. AKS 클러스터와 별도로 유지되며 여러 Azure 리소스에서 사용될 수 있습니다.
  • 미리 만든 kubelet 관리 ID 미리 만들어진 kubelet 관리 ID는 kubelet이 Azure의 다른 리소스에 액세스하는 데 사용할 수 있는 선택적 사용자 할당 ID입니다. kubelet에 대해 사용자 할당 관리 ID를 지정하지 않으면 AKS는 노드 리소스 그룹에 사용자 할당 kubelet ID를 만듭니다.

관리 ID에 대해 자세히 알아보려면 Azure 리소스에 대한 관리 ID를 참조하세요.

개요

AKS 클러스터는 관리 ID를 사용하여 Microsoft Entra에 토큰을 요청합니다. 이러한 토큰은 Azure에서 실행되는 다른 리소스에 대한 액세스를 권한 부여하는 데 사용됩니다. 관리 ID에 Azure RBAC 역할을 할당하여 클러스터에 특정 리소스에 대한 액세스 권한을 부여할 수 있습니다. 예를 들어, 클러스터가 Azure Key Vault의 비밀에 액세스해야 하는 경우 클러스터의 관리 ID에 해당 권한을 부여하는 Azure RBAC 역할을 할당할 수 있습니다.

관리 ID는 시스템 할당 ID이거나 사용자 할당 ID일 수 있습니다. 두 가지 형식의 관리 ID는 두 형식 중 하나를 사용하여 AKS 클러스터에서 Azure 리소스에 대한 액세스 권한을 부여할 수 있다는 점에서 유사합니다. 두 가지의 주요 차이점은 시스템이 할당한 관리 ID가 AKS 클러스터와 같은 단일 Azure 리소스와 연결되는 반면, 사용자가 할당한 관리 ID는 그 자체가 독립 실행형 Azure 리소스라는 것입니다. 관리 ID 유형 간 차이점에 대한 자세한 내용은 Azure 리소스의 관리 ID에서 관리 ID 유형을 참조하세요.

두 가지 형식의 관리 ID는 모두 Azure 플랫폼에서 관리되므로 비밀을 프로비전하거나 회전할 필요 없이 애플리케이션에서 액세스 권한을 부여할 수 있습니다. Azure는 사용자를 대신하여 ID 자격 증명을 관리합니다.

AKS 클러스터를 배포하면 기본적으로 시스템에서 할당한 관리 ID가 만들어집니다. 사용자가 할당한 관리 ID로 클러스터를 만들 수도 있습니다.

관리 ID 대신 애플리케이션 서비스 주체를 사용하여 클러스터를 만드는 것도 가능합니다. 보안과 사용 편의성을 위해 서비스 주체보다 관리 ID가 권장됩니다. 서비스 주체를 사용하여 클러스터를 만드는 방법에 대한 자세한 내용은 AKS(Azure Kubernetes Service)와 함께 서비스 주체 사용을 참조하세요.

애플리케이션 서비스 주체의 관리 ID를 사용하도록 기존 클러스터를 업데이트할 수 있습니다. 기존 클러스터를 다른 형식의 관리 ID로 업데이트할 수도 있습니다. 클러스터가 이미 관리 ID를 사용 중이고 ID가 변경된 경우(예: 클러스터 ID 유형을 시스템 할당에서 사용자 할당으로 업데이트한 경우) 컨트롤 플레인 구성 요소가 새 ID로 전환하는 동안 지연이 발생합니다. 컨트롤 플레인 구성 요소는 토큰이 만료될 때까지 이전 ID를 계속 사용합니다. 토큰이 새로 고쳐지면 새 ID로 전환됩니다. 이 프로세스는 몇 시간 정도 걸릴 수 있습니다.

시스템 할당 ID 및 사용자 할당 ID 형식은 Pod에서 실행되는 애플리케이션에서 사용하기 위한 Microsoft Entra 워크로드 ID와 다릅니다.

시작하기 전에

이 문서의 예를 실행하기 전에 az account set 명령을 호출하고 구독 ID를 전달하여 구독을 현재 활성 구독으로 설정합니다.

az account set --subscription <subscription-id>

아직 Azure 리소스 그룹이 없으면 az group create 명령을 호출하여 리소스 그룹을 만듭니다.

az group create \
    --name myResourceGroup \
    --location westus2

시스템 할당 관리 ID 사용

시스템이 할당한 관리 ID는 AKS 클러스터 또는 다른 Azure 리소스와 연결된 ID입니다. 시스템이 할당한 관리 ID는 클러스터의 수명 주기에 연결됩니다. 클러스터가 삭제되면 시스템에서 할당한 관리 ID도 삭제됩니다.

AKS 클러스터는 시스템이 할당한 관리 ID를 사용하여 Azure에서 실행되는 다른 리소스에 대한 액세스 권한을 부여할 수 있습니다. 시스템이 할당한 관리 ID에 Azure RBAC 역할을 할당하여 클러스터에 특정 리소스에 대한 액세스 권한을 부여할 수 있습니다. 예를 들어, 클러스터가 Azure Key Vault의 비밀에 액세스해야 하는 경우 시스템에서 할당한 관리 ID에 해당 권한을 부여하는 Azure RBAC 역할을 할당할 수 있습니다.

새 AKS 클러스터에서 시스템 할당 관리 ID 사용

새 클러스터에서 시스템이 할당한 관리 ID를 사용하도록 설정하려면 az aks create를 호출합니다. 새 클러스터에서는 시스템에서 할당한 관리 ID가 기본적으로 사용하도록 설정됩니다.

az aks create 명령을 사용하여 AKS 클러스터를 만듭니다.

az aks create \
    --resource-group myResourceGroup \
    --name myManagedCluster \
    --generate-ssh-keys

클러스터가 만들어진 후 시스템에서 할당한 관리 ID가 클러스터에 대해 사용하도록 설정되었는지 확인하려면 클러스터가 사용하는 관리 ID 유형 확인을 참조하세요.

기존 AKS 클러스터를 업데이트하여 시스템에서 할당한 관리 ID를 사용합니다.

서비스 주체를 사용하는 기존 AKS 클러스터를 업데이트하여 대신 시스템에서 할당한 관리 ID를 사용하려면 --enable-managed-identity 매개 변수와 함께 az aks update 명령을 실행합니다.

az aks update \
    --resource-group myResourceGroup \
    --name myManagedCluster \
    --enable-managed-identity

서비스 주체 대신 시스템이 할당한 관리 ID를 사용하도록 클러스터를 업데이트한 후에는 컨트롤 플레인과 Pod가 Azure의 다른 서비스에 액세스할 때 시스템이 할당한 관리 ID를 사용하여 권한을 부여합니다. Kubelet은 사용자가 에이전트 풀을 업그레이드할 때까지 서비스 주체를 계속 사용합니다. 노드에서 az aks nodepool upgrade --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-image-only 명령을 사용하여 관리 ID로 업데이트할 수 있습니다. 노드 풀을 업그레이드할 때 노드 풀의 노드가 차단/드레이닝되고 이미지로 다시 설치되면서 AKS 클러스터에 대해 가동 중지 시간이 발생합니다.

참고 항목

클러스터를 업데이트할 때 다음 정보에 유의하세요.

  • 업데이트는 사용할 VHD 업데이트가 있는 경우에만 작동합니다. 최신 VHD를 실행하는 경우 다음 VHD를 사용할 수 있을 때까지 기다린 후에 업데이트를 수행해야 합니다.

  • Azure CLI를 사용하면 마이그레이션 후 추가 기능의 사용 권한이 올바르게 설정됩니다. Azure CLI를 사용하여 마이그레이션 작업을 수행하지 않는 경우에는 추가 기능 ID의 사용 권한을 직접 처리해야 합니다. ARM(Azure Resource Manager) 템플릿을 사용하는 예는 ARM 템플릿을 사용하여 Azure 역할 할당을 참조하세요.

  • 클러스터가 --attach-acr을 사용하여 ACR(Azure Container Registry)의 이미지에서 끌어온 경우, 관리 ID에 사용되는 새로 만든 kubelet이 ACR로부터 끌어올 수 있는 권한을 얻을 수 있도록 클러스터를 업데이트한 후에 az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR resource ID> 명령을 실행해야 합니다. 그렇지 않으면 업데이트 후 ACR에서 끌어올 수 없습니다.

시스템에서 할당된 관리 ID에 대한 역할 할당 추가

시스템이 할당한 관리 ID에 Azure RBAC 역할을 할당하면 클러스터에 다른 Azure 리소스에 대한 권한을 부여할 수 있습니다. Azure RBAC는 권한 수준을 지정하는 기본 제공 역할 정의와 사용자 지정 역할 정의를 모두 지원합니다. Azure RBAC 역할을 할당하는 방법에 대한 자세한 내용은 Azure 역할을 할당하는 단계를 참조하세요.

관리 ID에 Azure RBAC 역할을 할당하는 경우 역할의 범위를 정의해야 합니다. 일반적으로 역할의 범위를 관리 ID에 필요한 최소한의 권한으로 제한하는 것이 가장 좋습니다. Azure RBAC 역할 범위 지정에 대한 자세한 내용은 Azure RBAC 범위 이해를 참조하세요.

리소스에서 작업자 노드 리소스 그룹 외부에 있는 사용자 고유의 VNet, 연결된 Azure 디스크, 고정 IP 주소, 경로 테이블 또는 사용자가 할당한 kubelet ID를 만들고 사용할 때 Azure CLI에서 자동으로 역할 할당을 추가합니다. ARM 템플릿이나 다른 방법을 사용하는 경우 관리 ID의 주체 ID를 사용하여 역할 할당을 수행합니다.

Azure CLI를 사용하지 않지만 작업자 노드 리소스 그룹 외부에 있는 사용자 고유의 VNet, 연결된 Azure 디스크, 고정 IP 주소, 경로 테이블 또는 사용자가 할당한 kubelet ID를 사용하는 경우에는 컨트롤 플레인에 대해 사용자가 할당한 관리 ID를 사용하는 것이 좋습니다. 컨트롤 플레인이 시스템에서 할당한 관리 ID를 사용하는 경우 ID는 클러스터와 동시에 만들어지므로 클러스터가 만들어질 때까지 역할 할당을 수행할 수 없습니다.

시스템이 할당한 관리 ID의 보안 주체 ID를 가져옵니다.

클러스터의 시스템이 할당한 관리 ID에 Azure RBAC 역할을 할당하려면 먼저 관리 ID에 대한 주체 ID가 필요합니다. az aks show 명령을 호출하여 클러스터의 시스템 할당 관리 ID에 대한 주체 ID를 가져옵니다.

# Get the principal ID for a system-assigned managed identity.
CLIENT_ID=$(az aks show \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --query identity.principalId \
    --output tsv)

시스템이 할당한 관리 ID에 Azure RBAC 역할 할당

Azure에서 리소스에 대한 시스템이 할당한 관리 ID 권한을 부여하려면 az role assignment create 명령을 호출하여 관리 ID에 Azure RBAC 역할을 할당합니다.

기본 작업자 노드 리소스 그룹 외부에 있는 VNet, 연결된 Azure 디스크, 고정 IP 주소, 경로 테이블의 경우 사용자 지정 리소스 그룹에 Network Contributor 역할을 할당해야 합니다.

예를 들어, az role assignment create 명령을 사용하여 사용자 지정 리소스 그룹에 Network Contributor 역할을 할당합니다. --scope 매개 변수의 경우 클러스터의 리소스 그룹에 대한 리소스 ID를 제공합니다.

az role assignment create \
    --assignee $CLIENT_ID \
    --role "Network Contributor" \
    --scope "<resource-group-id>"

참고 항목

클러스터의 관리 ID에 부여된 권한이 전파되는 데 최대 60분이 걸릴 수 있습니다.

사용자가 할당한 관리 ID 사용

사용자 할당 관리 ID는 독립 실행형 Azure 리소스입니다. 컨트롤 플레인에 대해 사용자가 할당한 관리 ID로 클러스터를 만들 경우, 클러스터를 만들기 전에 사용자가 할당한 관리 ID 리소스가 존재해야 합니다. 이 기능을 사용하면 사용자 지정 VNet이나 아웃바운드 형식의 UDR(사용자 지정 라우팅)을 사용하여 클러스터를 만드는 시나리오가 가능합니다.

사용자 할당 관리 ID 만들기

아직 사용자가 할당한 관리 ID 리소스가 없으면 az identity create 명령을 사용하여 리소스를 만듭니다.

az identity create \
    --name myIdentity \
    --resource-group myResourceGroup

다음 예와 유사하게 출력됩니다.

{                                  
  "clientId": "<client-id>",
  "clientSecretUrl": "<clientSecretUrl>",
  "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
  "location": "westus2",
  "name": "myIdentity",
  "principalId": "<principal-id>",
  "resourceGroup": "myResourceGroup",                       
  "tags": {},
  "tenantId": "<tenant-id>",
  "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

사용자가 할당한 관리 ID의 주체 ID를 가져옵니다.

사용자가 할당한 관리 ID의 주체 ID를 가져오려면 az identity show를 호출하고 principalId 속성에 대해 쿼리합니다.

CLIENT_ID=$(az identity show \
    --name myIdentity \
    --resource-group myResourceGroup \
    --query principalId \
    --output tsv)

사용자가 할당한 관리 ID의 리소스 ID입니다.

사용자가 할당한 관리 ID로 클러스터를 만들려면 새 관리 ID에 대한 리소스 ID가 필요합니다. 사용자가 할당한 관리 ID의 리소스 ID를 가져오려면 az aks show를 호출하고 id 속성에 대해 쿼리합니다.

RESOURCE_ID=$(az identity show \
    --name myIdentity \
    --resource-group myResourceGroup \
    --query id \
    --output tsv)

사용자가 할당한 관리 ID에 Azure RBAC 역할을 할당합니다.

클러스터를 만들기 전에 az role assignment create 명령을 호출하여 관리 ID에 대한 역할 할당을 추가합니다.

다음 예에서는 사용자가 할당한 관리 ID에 키 자격 증명 모음 읽기 권한자 역할을 할당하여 Key Vault의 비밀에 액세스할 수 있는 권한을 부여합니다. 역할 할당은 키 자격 증명 모음 리소스로 범위가 지정됩니다.

az role assignment create \
    --assignee $CLIENT_ID \
    --role "Key Vault Secrets User" \
    --scope "<keyvault-resource-id>"

참고 항목

클러스터의 관리 ID에 부여된 사용 권한이 채워지려면 최대 60분이 걸릴 수 있습니다.

사용자가 할당한 관리 ID로 클러스터를 만듭니다.

사용자가 할당한 관리 ID로 AKS 클러스터를 만들려면 az aks create 명령을 호출합니다. --assign-identity 매개 변수를 포함하고 사용자가 할당한 관리 ID에 대한 리소스 ID를 전달합니다.

az aks create \
    --resource-group myResourceGroup \
    --name myManagedCluster \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --assign-identity $RESOURCE_ID \
    --generate-ssh-keys

참고 항목

Azure US Government 클라우드의 USDOD Central, USDOD East 및 USGov Iowa 지역에서는 사용자가 할당한 관리 ID로 클러스터를 만드는 것을 지원하지 않습니다.

기존 클러스터를 업데이트하여 사용자가 지정한 관리 ID를 사용합니다.

기존 클러스터를 업데이트하여 사용자가 할당한 관리 ID를 사용하려면 az aks update 명령을 호출합니다. --assign-identity 매개 변수를 포함하고 사용자가 할당한 관리 ID에 대한 리소스 ID를 전달합니다.

az aks update \
    --resource-group myResourceGroup \
    --name myManagedCluster \
    --enable-managed-identity \
    --assign-identity $RESOURCE_ID

사용자가 할당한 관리 ID를 사용하여 클러스터를 성공적으로 업데이트할 경우 출력은 다음 출력 예와 유사해야 합니다.

  "identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
        "clientId": "<client-id>",
        "principalId": "<principal-id>"
      }
    }
  },

참고 항목

컨트롤 플레인에 대한 관리 ID를 시스템이 할당한 ID에서 사용자가 할당한 ID로 마이그레이션해도 컨트롤 플레인 및 에이전트 풀에 가동 중지 시간이 발생하지 않습니다. 컨트롤 플레인 구성 요소는 다음 토큰이 새로 고쳐질 때까지 최대 몇 시간 동안 기존 시스템에 할당된 ID를 계속 사용합니다.

클러스터가 사용하는 관리 ID 유형을 확인합니다.

기존 AKS 클러스터가 사용하는 관리 ID 유형을 확인하려면 az aks show 명령을 호출하고 ID의 type 속성을 쿼리합니다.

az aks show \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --query identity.type \
    --output tsv       

클러스터가 관리 ID를 사용하는 경우 type 속성의 값은 SystemAssigned 또는 UserAssigned가 됩니다.

클러스터가 서비스 주체를 사용하는 경우 type 속성 값은 null이 됩니다. 관리 ID를 사용하도록 클러스터를 업그레이드하는 것이 좋습니다.

미리 만든 kubelet 관리 ID 사용

미리 만들어진 kubelet ID는 클러스터를 만들기 전부터 사용자가 할당한 관리 ID입니다. 이 기능을 사용하면 클러스터를 만드는 동안 ACR(Azure Container Registry)에 연결하는 등의 시나리오가 가능합니다.

참고 항목

사용자 고유의 kubelet 관리 ID를 지정하지 않으면 AKS에서 사용자가 할당한 kubelet ID를 노드 리소스 그룹에 만듭니다.

기본 작업자 노드 리소스 그룹 외부에 있는 사용자가 할당한 kubelet ID의 경우 컨트롤 플레인 관리 ID의 kubelet ID에 관리 ID 운영자 역할을 할당해야 합니다.

kubelet 관리 ID

kubelet 관리 ID가 없는 경우 az identity create 명령을 사용하여 만듭니다.

az identity create \
    --name myKubeletIdentity \
    --resource-group myResourceGroup

다음 예와 유사하게 출력됩니다.

{
  "clientId": "<client-id>",
  "clientSecretUrl": "<clientSecretUrl>",
  "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", 
  "location": "westus2",
  "name": "myKubeletIdentity",
  "principalId": "<principal-id>",
  "resourceGroup": "myResourceGroup",                       
  "tags": {},
  "tenantId": "<tenant-id>",
  "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

kubelet 관리 ID에 RBAC 역할 할당

az role assignment create 명령을 사용하여 kubelet ID에 ACRPull 역할을 할당합니다. $KUBELET_CLIENT_ID 변수에 대한 kubelet ID의 보안 주체 ID를 제공하고 $ACR_REGISTRY_ID 변수에 대한 ACR 레지스트리 ID를 제공합니다.

az role assignment create \
    --assignee $KUBELET_CLIENT_ID \
    --role "acrpull" \
    --scope "$ACR_REGISTRY_ID"

kubelet ID를 사용하기 위한 클러스터 만들기

이제 기존 ID를 사용하여 AKS 클러스터를 만들 수 있습니다. assign-identity 인수와, assign-kubelet-identity 인수를 사용하는 kubelet 관리 ID를 포함하여 컨트롤 플레인에 대한 관리 ID의 리소스 ID를 제공해야 합니다.

az aks create 명령을 사용하는 기존 ID로 AKS 클러스터를 만듭니다.

az aks create \
    --resource-group myResourceGroup \
    --name myManagedCluster \
    --network-plugin azure \
    --vnet-subnet-id <subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --assign-identity <identity-resource-id> \
    --assign-kubelet-identity <kubelet-identity-resource-id> \
    --generate-ssh-keys

kubelet 관리 ID를 사용하여 AKS 클러스터를 성공적으로 만들면 다음과 비슷한 출력이 표시됩니다.

  "identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
        "clientId": "<client-id>",
        "principalId": "<principal-id>"
      }
    }
  },
  "identityProfile": {
    "kubeletidentity": {
      "clientId": "<client-id>",
      "objectId": "<object-id>",
      "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
    }
  },

기존 클러스터를 업데이트하여 kubelet ID 사용

기존 클러스터를 업데이트하여 kubelet 관리 ID를 사용하려면 먼저 AKS 클러스터에 대한 현재 컨트롤 플레인 관리 ID를 가져옵니다.

Warning

kubelet 관리 ID를 업데이트하면 AKS 클러스터의 노드 풀이 업그레이드되며, 노드 풀의 노드가 차단/드레이닝되고 이미지로 다시 설치되면서 클러스터가 가동 중지 시간됩니다.

  1. az aks show 명령을 사용하여 AKS 클러스터가 사용자가 할당한 관리 ID를 사용하고 있는지 확인합니다.

    az aks show \
        --resource-group <RGName> \
        --name <ClusterName> \
        --query "servicePrincipalProfile"
    

    클러스터에서 관리 ID를 사용하는 경우 출력에 msi 값이 있는 clientId가 표시됩니다. 서비스 주체를 사용하는 클러스터에 개체 ID가 표시됩니다. 예시:

    # The cluster is using a managed identity.
    {
      "clientId": "msi"
    }
    
  2. 클러스터가 관리 ID를 사용하고 있는지 확인한 후 az aks show 명령을 사용하여 관리 ID의 리소스 ID를 찾습니다.

    az aks show --resource-group <RGName> \
        --name <ClusterName> \
        --query "identity"
    

    사용자가 할당한 관리 ID의 경우 다음 예와 유사하게 출력됩니다.

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    
  3. az aks update 명령을 사용하여 클러스터를 기존 ID로 업데이트합니다. assign-identity 인수에 대한 컨트롤 플레인의 사용자 할당 관리 ID의 리소스 ID를 제공합니다. assign-kubelet-identity 인수에 대한 kubelet 관리 ID의 리소스 ID를 제공합니다.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

사용자 고유의 kubelet 관리 ID를 사용하여 성공적으로 클러스터를 업데이트하면 다음 예와 유사하게 출력됩니다.

  "identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
      "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
        "clientId": "<client-id>",
        "principalId": "<principal-id>"
      }
    }
  },
  "identityProfile": {
    "kubeletidentity": {
      "clientId": "<client-id>",
      "objectId": "<object-id>",
      "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
    }
  },

참고 항목

클러스터가 --attach-acr을 사용하여 Azure Container Registry의 이미지에서 끌어온 경우, 관리 ID에 사용되는 새로 만든 kubelet이 ACR로부터 끌어올 수 있는 권한을 얻을 수 있도록 클러스터를 업데이트한 후에 az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR Resource ID> 명령을 실행합니다. 그렇지 않으면 업그레이드 후 ACR에서 끌어올 수 없습니다.

kubelet ID의 속성 가져오기

kubelet ID의 속성을 가져오려면 az aks show를 호출하고 identityProfile.kubeletidentity 속성에 대해 쿼리를 실행합니다.

az aks show \
    --name myAKSCluster \
    --resource-group myResourceGroup \
    --query "identityProfile.kubeletidentity"

미리 만든 kubelet ID 제한 사항

미리 만들어진 kubelet ID에 대한 다음 제한 사항을 참고합니다.

  • 미리 만들어진 kubelet ID는 사용자가 할당한 관리 ID여야 합니다.
  • 21Vianet에서 운영하는 Microsoft Azure의 중국 동부 및 중국 북부 지역은 지원되지 않습니다.

AKS에서 사용하는 관리 ID 요약

AKS는 기본 제공 서비스 및 추가 항목에 대해 여러 관리 ID를 사용합니다.

ID 이름 사용 사례 기본 권한 사용자 고유의 ID 가져오기
제어 평면 AKS 클러스터 이름 AKS 컨트롤 플레인 구성 요소에서 수신 부하 분산 장치 및 AKS 관리 공용 IP, 클러스터 자동 크기 조정기, Azure 디스크, 파일, Blob CSI 드라이버를 관리하는 데 사용합니다. 노드 리소스 그룹에 대한 기여자 역할 지원 여부
kubelet AKS Cluster Name-agentpool ACR(Azure Container Registry)로 인증합니다. 해당 없음(kubernetes v1.15 이상의 경우) 지원 여부
추가 기능 AzureNPM ID가 필요하지 않습니다. 해당 없음 아니요
추가 기능 AzureCNI network monitoring ID가 필요하지 않습니다. 해당 없음 아니요
추가 기능 azure-policy(gatekeeper) ID가 필요하지 않습니다. 해당 없음 아니요
추가 기능 azure-policy ID가 필요하지 않습니다. 해당 없음 아니요
추가 기능 Calico ID가 필요하지 않습니다. 해당 없음 아니요
추가 기능 application-routing Azure DNS 및 Azure Key Vault 인증서를 관리합니다. Key Vault Secrets Key Vault에 대한 사용자 역할, DNS 영역에 대한 DNS 영역 기여자 역할, 프라이빗 DNS 영역에 대한 프라이빗 DNS 영역 기여자 역할 아니요
추가 기능 HTTPApplicationRouting 필요한 네트워크 리소스를 관리합니다. 노드 리소스 그룹에 대한 읽기 권한자 역할, DNS 영역에 대한 기여자 역할 아니요
추가 기능 수신 애플리케이션 게이트웨이 필요한 네트워크 리소스를 관리합니다. 노드 리소스 그룹에 대한 기여자 역할 아니요
추가 기능 omsagent Azure Monitor에 AKS 메트릭을 전송하는 데 사용됩니다. 모니터링 메트릭 게시자 역할 아니요
추가 기능 Virtual-Node(ACIConnector) ACI(Azure Container Instances)에 필요한 네트워크 리소스를 관리합니다. 노드 리소스 그룹에 대한 기여자 역할 아니요
추가 기능 비용 분석 비용 할당 데이터를 수집하는 데 사용됩니다.
워크로드 ID Microsoft Entra 워크로드 ID Microsoft Entra 워크로드 ID를 통해 애플리케이션이 클라우드 리소스에 안전하게 액세스할 수 있도록 지원합니다. 해당 없음 아니요

Important

Azure Kubernetes Service의 오픈 소스 Microsoft Entra Pod 관리 ID(미리 보기)는 2022년 10월 24일에 더 이상 사용되지 않으며 프로젝트는 2023년 9월에 보관되었습니다. 자세한 내용은 사용 중단 알림을 참조하세요. AKS 관리 추가 기능은 2024년 9월에 더 이상 사용되지 않습니다.

Microsoft Entra 워크로드 ID를 검토하는 것이 좋습니다. Entra 워크로드 ID 인증은 더 이상 사용되지 않는 Pod 관리 ID(미리 보기) 기능을 바꿉니다. Entra 워크로드 ID는 Pod에서 실행되는 애플리케이션이 이를 지원하는 다른 Azure 서비스에 대해 자체 인증을 받을 수 있도록 하는 권장 방법입니다.

제한 사항

  • 관리 ID가 사용하도록 설정된 클러스터를 다른 테넌트로 이동하거나 마이그레이션하는 것은 지원되지 않습니다.

  • 클러스터에 Microsoft Entra Pod 관리 ID(aad-pod-identity)가 사용하도록 설정된 경우, NMI(노드 관리 ID) Pod는 노드의 iptables를 수정하여 IMDS(Azure 인스턴스 메타데이터) 엔드포인트에 대한 호출을 가로챕니다. 이 구성은 특정 Pod가 aad-pod-identity를 사용하지 않더라도 IMDS 엔드포인트에 대한 모든 요청이 NMI에 의해 가로채진다는 것을 의미합니다.

    AzurePodIdentityException CRD(사용자 지정 리소스 정의)를 구성하면 CRD에 정의된 레이블과 일치하는 Pod에서 시작된 IMDS 엔드포인트에 대한 요청이 NMI에서 어떠한 처리 없이 프록시되어야 함을 지정할 수 있습니다. AzurePodIdentityException CRD를 구성하여 aad-pod-identitykube-system 네임스페이스에서 kubernetes.azure.com/managedby: aks 레이블이 있는 시스템 Pod를 제외합니다. 자세한 내용은 Azure Kubernetes Service에서 Microsoft Entra Pod 관리 ID 사용을 참조하세요.

    예외를 구성하려면 mic-exception YAML을 설치합니다.

  • AKS는 사용자 지정 프라이빗 DNS 영역을 사용하는 경우 시스템이 할당한 관리 ID의 사용을 지원하지 않습니다.

다음 단계