Настройка управляемых удостоверений для кластера Azure Data Explorer
Статья
Управляемое удостоверение из идентификатора Microsoft Entra позволяет кластеру получать доступ к другим Microsoft Entra защищенным ресурсам, таким как Azure Key Vault. Удостоверения управляются платформой Azure, и для них не нужно подготавливать или изменять секреты.
В этой статье показано, как добавлять и удалять управляемые удостоверения в кластере. Подробнее управляемые удостоверения описаны в статье Общие сведения об управляемых удостоверениях.
Примечание
Управляемые удостоверения для Azure Data Explorer не будут вести себя должным образом, если кластер Azure Data Explorer переносится между подписками или клиентами. Приложению потребуется получить новое удостоверение, которое можно сделать, удалив назначаемое системой удостоверение , а затем добавив удостоверение, назначаемое системой. Для использования нового удостоверения также необходимо будет обновить политики доступа к ресурсам нижестоящего уровня.
Примеры кода, основанные на предыдущих версиях пакета SDK, см. в архивной статье.
Типы управляемых удостоверений
Кластеру Azure Data Explorer могут быть предоставлены два типа удостоверений.
Назначаемое системой удостоверение: привязан к вашему кластеру и удаляется при удалении вашего ресурса. У кластера может быть только одно удостоверение, назначенное системой.
Назначаемое пользователем удостоверение: автономный ресурс Azure, который можно назначить вашему кластеру. Кластер может иметь несколько идентификаторов, назначаемых пользователем.
Добавление назначаемого системой удостоверения
Назначьте назначенное системой удостоверение, которое привязано к вашему кластеру и удаляется при удалении вашего кластера. У кластера может быть только одно удостоверение, назначенное системой. Для создания кластера с идентификатором, назначенным системой, необходимо установить дополнительное свойство в кластере. Добавьте назначенное системой удостоверение с помощью портала Azure, C# или шаблона Resource Manager, как описано ниже.
Создайте приложение 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);
Выполните следующую команду, чтобы проверить, был ли ваш кластер успешно создан или обновлен с идентификатором:
Если результат содержит ProvisioningState со значением Succeeded, то кластер был создан или обновлен и должен иметь следующие свойства.
var principalGuid = clusterData.Identity.PrincipalId.GetValueOrDefault();
var tenantGuid = clusterData.Identity.TenantId.GetValueOrDefault();
PrincipalId и TenantId заменяются идентификаторами GUID. Свойство TenantId идентифицирует клиент Microsoft Entra, которому принадлежит удостоверение.
PrincipalId — это уникальный идентификатор новой идентичности кластера. В идентификаторе Microsoft Entra субъект-служба имеет то же имя, которое вы присвоили экземпляру Служба приложений или Функции Azure.
Добавление назначенного системой удостоверения с помощью шаблона Azure Resource Manager
Добавление назначенного системой типа указывает Azure создать удостоверение для вашего кластера и управлять им. Любой ресурс типа Microsoft.Kusto/clusters можно создать с помощью удостоверения, добавив следующее свойство в определение ресурса:
<TENANTID> и <PRINCIPALID> заменяются идентификаторами GUID. Свойство TenantId идентифицирует клиент Microsoft Entra, которому принадлежит удостоверение.
PrincipalId — это уникальный идентификатор новой идентичности кластера. В идентификаторе Microsoft Entra субъект-служба имеет то же имя, которое вы присвоили экземпляру Служба приложений или Функции Azure.
Удаление удостоверения, назначаемого системой
При удалении удостоверения, назначаемого системой, также будет удалено из Microsoft Entra идентификатора. Удостоверения, назначаемые системой, также автоматически удаляются из идентификатора Microsoft Entra при удалении ресурса кластера. Назначенное системой удостоверение можно удалить, отключив эту функцию. Удалите назначенного системой удостоверение с помощью портала Azure, C# или шаблона Resource Manager, как описано ниже.
На левой панели портала выберите Настройки>Идентификатор.
На панели Удостоверение откройте вкладку >Назначено системой:
Переместите ползунок Состояния в положение Вкл.
Нажмите кнопку Сохранить.
Во всплывающем окне выберите Да, чтобы отключить идентификатор, назначенный системой. Панель Идентификатор вернется в то же состояние, что и до добавления идентификатора, назначенного системой.
Удаление назначенного системой идентификатора с помощью C#
Выполните следующее, чтобы удалить идентификатор, назначенный системой.
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
Выполните следующее, чтобы удалить идентификатор, назначенный системой.
{
"identity": {
"type": "None"
}
}
Примечание
Если в кластере одновременно были назначены как системой, так и пользователем удостоверения, после удаления назначенного системой идентификатора свойство type будет UserAssigned.
Назначьте кластеру управляемое удостоверение, назначенное пользователем. Кластер может иметь несколько идентификаторов, назначаемых пользователем. Для создания кластера с идентификатором, назначенным пользователем, необходимо установить дополнительное свойство в кластере. Добавьте назначенное пользователем удостоверение с помощью портала Azure, C# или шаблона Resource Manager, как описано ниже.
Создайте приложение 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);
Выполните следующую команду, чтобы проверить, был ли ваш кластер успешно создан или обновлен с идентификатором:
Если результат содержит ProvisioningState со значением Succeeded, то кластер был создан или обновлен и должен иметь следующие свойства.
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId.GetValueOrDefault();
var clientGuid = userIdentity.ClientId.GetValueOrDefault();
— PrincipalId это уникальный идентификатор удостоверения, используемого для администрирования Microsoft Entra.
ClientId — это уникальный идентификатор нового идентификатора приложения, который используется для указания, какой идентификатор использовать во время вызовов времени выполнения.
Добавление назначенного пользователем удостоверения с помощью шаблона Azure Resource Manager
Любой ресурс типа Microsoft.Kusto/clusters может быть создан с идентификатором, назначенным пользователем, включив следующее свойство в определение ресурса, заменив <RESOURCEID> идентификатором ресурса желаемого идентификатора:
— PrincipalId это уникальный идентификатор удостоверения, используемого для администрирования Microsoft Entra.
ClientId — это уникальный идентификатор нового идентификатора приложения, который используется для указания, какой идентификатор использовать во время вызовов времени выполнения.
Примечание
Кластер может одновременно иметь как системные, так и пользовательские идентификаторы. В этом случае свойство type будет иметь значение SystemAssigned,UserAssigned.
Удаление назначенного пользователем управляемого идентификатора из кластера
Удалите назначенное пользователем идентификатора с помощью портала Azure, C# или шаблона Resource Manager, как описано ниже.
На левой панели портала выберите Настройки>Идентификатор.
Выберите вкладку Назначено пользователем.
Найдите созданное ранее удостоверение и выберите его. Щелкните Удалить.
Во всплывающем окне выберите Да, чтобы удалить идентификатор, назначенный пользователем. Панель Идентификатор вернется в то же состояние, что и до добавления идентификатора, назначенного пользователем.
Удаление назначенного пользователем идентификатора с помощью C#
Выполните следующее, чтобы удалить идентификатор, назначенный пользователем.
var cluster = (await clusters.GetAsync(clusterName)).Value;
var clusterUpdate = new KustoClusterPatch(clusterData.Location)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.UserAssigned)
{
UserAssignedIdentities = { { userIdentityResourceId, null } }
}
};
await cluster.UpdateAsync(WaitUntil.Completed, clusterUpdate);
Удаление назначенного пользователем идентификатора с помощью шаблона Azure Resource Manager
Выполните следующее, чтобы удалить идентификатор, назначенный пользователем.
Чтобы удалить удостоверения, установите для них значение null. Все остальные существующие идентификаторы не будут затронуты.
Чтобы удалить все присвоенные пользователем идентификаторы, свойство type будет None,
Если бы в кластере были одновременно назначены как системой, так и пользователем идентификаторы, свойство type будет SystemAssigned,UserAssigned с идентификаторами, которые необходимо удалить, или SystemAssigned для удаления всех идентификаторов, назначенных пользователем.