Microsoft Entra ID의 관리 ID를 사용하면 클러스터가 Azure Key Vault 같은 다른 Microsoft Entra 보호된 리소스에 액세스할 수 있습니다. ID는 Azure 플랫폼에서 관리되며, 비밀을 프로비저닝하거나 회전하지 않아도 됩니다.
이 문서에서는 클러스터에서 관리 ID를 추가하고 제거하는 방법을 보여줍니다. 관리 ID에 대한 자세한 내용은 관리 ID 개요를 확인하세요.
참고
Azure Data Explorer 클러스터가 구독 또는 테넌트 간에 마이그레이션되는 경우 Azure Data Explorer의 관리 ID가 예상대로 작동하지 않습니다. 앱은 시스템 할당 ID를 제거한 다음 시스템 할당 ID를 추가하여 수행할 수 있는 새 ID를 가져와야 합니다. 다운스트리밍 리소스의 액세스 정책도 새 ID를 사용하도록 업데이트해야 합니다.
Azure Data Explorer 클러스터에는 두 가지 유형의 ID가 부여될 수 있습니다.
시스템 할당 ID: 클러스터에 연결되며 리소스가 삭제되면 삭제됩니다. 클러스터에는 하나의 시스템 할당 ID만 있을 수 있습니다.
사용자 할당 ID: 클러스터에 할당할 수 있는 독립 실행형 Azure 리소스입니다. 클러스터에는 여러 사용자 할당 ID가 있을 수 있습니다.
시스템 할당 ID 추가
클러스터에 연결되어 있고 클러스터가 삭제되면 삭제되는 시스템 할당 ID를 할당합니다. 클러스터에는 하나의 시스템 할당 ID만 있을 수 있습니다. 시스템 할당 ID를 사용하여 클러스터를 만들려면 클러스터에서 추가 속성을 설정해야 합니다. 아래에 설명된 대로 Azure Portal, C# 또는 Resource Manager 템플릿을 사용하여 시스템 할당 ID를 추가합니다.
리소스에 액세스할 수 있는 Microsoft Entra 애플리케이션 및 서비스 주체를 만듭니다. 구독 범위에서 역할 할당을 추가하고 필요한 Directory (tenant) ID, Application ID 및 Client Secret을 가져옵니다.
클러스터 만들기 또는 업데이트
Identity 속성을 사용하여 클러스터를 만들거나 업데이트합니다.
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceGroupName = "testrg";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var clusters = resourceGroup.GetKustoClusters();
var clusterName = "mykustocluster";
var clusterData = new KustoClusterData(
location: AzureLocation.CentralUS,
sku: new KustoSku(KustoSkuName.StandardE8adsV5, KustoSkuTier.Standard) { Capacity = 5 }
) { Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.SystemAssigned) };
await clusters.CreateOrUpdateAsync(WaitUntil.Completed, clusterName, clusterData);
결과에 Succeeded 값이 있는 ProvisioningState가 포함되어 있으면 클러스터가 만들어지거나 업데이트되었으며 다음 속성이 있어야 합니다.
var principalGuid = clusterData.Identity.PrincipalId.GetValueOrDefault();
var tenantGuid = clusterData.Identity.TenantId.GetValueOrDefault();
PrincipalId 및 TenantId는 GUID로 대체됩니다. 속성은 TenantId ID가 속한 Microsoft Entra 테넌트 식별합니다.
PrincipalId는 클러스터의 새 ID에 대한 고유 식별자입니다. Microsoft Entra ID 내에서 서비스 주체는 App Service 또는 Azure Functions instance 지정한 이름과 동일합니다.
<TENANTID> 및 <PRINCIPALID>는 GUID로 대체됩니다. 속성은 TenantId ID가 속한 Microsoft Entra 테넌트 식별합니다.
PrincipalId는 클러스터의 새 ID에 대한 고유 식별자입니다. Microsoft Entra ID 내에서 서비스 주체는 App Service 또는 Azure Functions instance 지정한 이름과 동일합니다.
시스템 할당 ID 제거
시스템 할당 ID를 제거하면 Microsoft Entra ID에서도 삭제됩니다. 클러스터 리소스가 삭제되면 시스템 할당 ID도 Microsoft Entra ID에서 자동으로 제거됩니다. 시스템 할당 ID는 기능을 사용하지 않도록 설정하여 제거할 수 있습니다. 아래에 설명된 대로 Azure Portal, C# 또는 Resource Manager 템플릿을 사용하여 시스템 할당 ID를 제거합니다.
팝업 창에서 예를 선택하여 시스템 할당 ID를 사용하지 않도록 설정합니다.
ID 창은 시스템 할당 ID를 추가하기 전과 동일한 상태로 돌아갑니다.
C#을 사용하여 시스템 할당 ID 제거
다음을 실행하여 시스템 할당 ID를 제거합니다.
var cluster = (await clusters.GetAsync(clusterName)).Value;
var clusterPatch = new KustoClusterPatch(clusterData.Location)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.None)
};
await cluster.UpdateAsync(WaitUntil.Completed, clusterPatch);
Azure Resource Manager 템플릿을 사용하여 시스템 할당 ID 제거
다음을 실행하여 시스템 할당 ID를 제거합니다.
{
"identity": {
"type": "None"
}
}
참고
클러스터에 시스템 할당 ID와 사용자 할당 ID가 동시에 있는 경우 시스템 할당 ID 제거 후 type 속성은 UserAssigned가 됩니다.
사용자 할당 ID 추가
클러스터에 사용자 할당 관리 ID 할당 클러스터에는 둘 이상의 사용자 할당 ID가 있을 수 있습니다. 사용자 할당 ID로 클러스터를 만들려면 클러스터에 추가 속성을 설정해야 합니다. 아래에 설명된 대로 Azure Portal, C# 또는 Resource Manager 템플릿을 사용하여 사용자 할당 ID를 추가합니다.
리소스에 액세스할 수 있는 Microsoft Entra 애플리케이션 및 서비스 주체를 만듭니다. 구독 범위에서 역할 할당을 추가하고 필요한 Directory (tenant) ID, Application ID 및 Client Secret을 가져옵니다.
클러스터 만들기 또는 업데이트
Identity 속성을 사용하여 클러스터를 만들거나 업데이트합니다.
var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var subscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, subscriptionId);
var resourceGroupName = "testrg";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(resourceGroupName)).Value;
var clusters = resourceGroup.GetKustoClusters();
var clusterName = "mykustocluster";
var userIdentityResourceId = new ResourceIdentifier($"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>");
var clusterData = new KustoClusterData(
location: AzureLocation.CentralUS,
sku: new KustoSku(KustoSkuName.StandardE8adsV5, KustoSkuTier.Standard) { Capacity = 5 }
)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.UserAssigned)
{
UserAssignedIdentities = { { userIdentityResourceId, new UserAssignedIdentity() } }
}
};
await clusters.CreateOrUpdateAsync(WaitUntil.Completed, clusterName, clusterData);
결과에 Succeeded 값이 있는 ProvisioningState가 포함되어 있으면 클러스터가 만들어지거나 업데이트되었으며 다음 속성이 있어야 합니다.
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId.GetValueOrDefault();
var clientGuid = userIdentity.ClientId.GetValueOrDefault();
는 PrincipalId Microsoft Entra 관리에 사용되는 ID의 고유 식별자입니다.
ClientId는 런타임 호출 중 사용할 ID를 지정하는 데 사용되는 애플리케이션의 새 ID에 대한 고유 식별자입니다.