Настройка управляемых идентичностей для кластера Azure Data Explorer
Статья
Управляемое удостоверение из Azure Active Directory позволяет кластеру легко получить доступ к другим ресурсам, защищенным Azure AD, таким как Azure Key Vault. Идентификация осуществляется платформой Azure, и вам не нужно подготавливать или изменять какие-либо секреты. В настоящее время конфигурация управляемого удостоверения поддерживается только для включения управляемых клиентом ключей для кластера.
Кластер Azure Data Explorer может получить два типа удостоверений:
назначаемое системой удостоверение: привязано к вашему кластеру и удаляется, если ваш ресурс удален. Кластер может иметь только одну идентичность, назначенную системой.
Пользовательский идентификатор: автономный ресурс Azure, который можно связать с вашим кластером. Кластер может иметь несколько пользовательских удостоверений.
В этой статье описывается, как добавлять и удалять управляемые удостоверения, назначаемые системой и пользователем, для кластеров Azure Data Explorer.
Примечание.
Управляемые удостоверения для Azure Data Explorer не будут работать должным образом, если кластер Azure Data Explorer переносится между подписками или клиентами. Приложению потребуется получить новое удостоверение, что можно сделать, отключив и снова включив функцию. Политики доступа ресурсов нижнего уровня также должны быть обновлены для использования новой идентичности.
Добавить назначаемую системой идентификацию
Назначьте системное удостоверение, привязанное к вашему кластеру, которое удаляется вместе с ним, если кластер будет удалён. Кластер может иметь только одну системно назначаемую идентичность. Для создания кластера с удостоверением, автоматически назначаемым системой, необходимо установить дополнительное свойство для кластера. Добавьте назначаемое системой удостоверение с помощью портала Azure, C# или шаблона диспетчера ресурсов, как описано ниже.
создание приложения Azure AD и субъекта-службы, которые могут получить доступ к ресурсам. Вы добавляете назначение ролей на уровне подписки и получаете необходимые 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 authClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithClientSecret(clientSecret)
.Build();
var result = authClient.AcquireTokenForClient(new[] { "https://management.core.windows.net/" }).ExecuteAsync().Result;
var credentials = new TokenCredentials(result.AccessToken, result.TokenType);
var kustoManagementClient = new KustoManagementClient(credentials) { SubscriptionId = subscriptionId };
var resourceGroupName = "testrg";
var clusterName = "mykustocluster";
var clusterData = new Cluster(
location: "Central US",
sku: new AzureSku("Standard_E8ads_v5", "Standard", 5),
identity: new Identity(IdentityType.SystemAssigned)
);
await kustoManagementClient.Clusters.CreateOrUpdateAsync(resourceGroupName, clusterName, clusterData);
Выполните следующую команду, чтобы проверить, был ли кластер успешно создан или обновлен с идентификатором.
Если результат содержит ProvisioningState со значением Succeeded, кластер был создан или обновлен и должен иметь следующие свойства:
var principalGuid = clusterData.Identity.PrincipalId;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId и TenantId заменяются идентификаторами GUID. Свойство TenantId идентифицирует тенант Azure AD, которому принадлежит идентификация.
PrincipalId — это уникальный идентификатор новой идентичности кластера. В Azure AD служебный принципал имеет то же имя, которое вы предоставили вашему App Service или экземпляру Azure Functions.
Добавьте удостоверение, назначенное системой, с помощью шаблона Azure Resource Manager
Добавление типа, назначенного системой, указывает Azure создать удостоверение для вашего кластера и управлять им. Любой ресурс типа Microsoft.Kusto/clusters можно создать с идентификатором, добавив следующее свойство в определение ресурса.
<TENANTID> и <PRINCIPALID> заменяются идентификаторами GUID. Свойство TenantId определяет клиент Azure AD, которому принадлежит удостоверение.
PrincipalId — это уникальный идентификатор новой идентичности кластера. В Azure AD основной объект службы имеет такое же имя, как то, которое вы дали вашему App Service или экземпляру Azure Functions.
Удалить системное удостоверение
Удаление удостоверения, назначенного системой, также приведет к его удалению из Azure AD. Назначаемые системой удостоверения также автоматически удаляются из Azure AD при удалении ресурса кластера. Системное удостоверение можно удалить, отключив функцию. Удалите удостоверение, назначаемое системой, с помощью портала Azure, C# или шаблона Resource Manager, как описано ниже.
Выберите параметры >identity на левой панели портала.
На панели Удостоверение, во вкладке >назначенная системой:
Переместите ползунок статуса в выключено.
Выберите Сохранить
Во всплывающем окне выберите Да, чтобы отключить системную идентификацию. Панель удостоверения возвращается к тому же состоянию, что и до добавления удостоверения, назначаемого системой.
Удаление назначаемого системой удостоверения с помощью C#
Выполните следующее, чтобы удалить системно назначенное удостоверение личности.
var clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
Удаление назначаемого системой удостоверения с помощью шаблона Azure Resource Manager
Выполните следующую команду, чтобы удалить системное удостоверение.
{
"identity": {
"type": "None"
}
}
Примечание.
Если в кластерe одновременно назначены системные и пользовательские удостоверения, то после удаления системного удостоверения свойство type станет UserAssigned.
Добавить назначенное пользователем удостоверение
Назначьте кластеру управляемую идентификацию, назначаемую пользователем. Кластер может иметь несколько идентификаторов, назначенных пользователем. Для создания кластера с идентификацией, назначенной пользователем, необходимо установить дополнительное свойство для кластера. Добавьте назначаемую пользователем идентичность с помощью портала Azure, C# или шаблона Resource Manager, как описано ниже.
создание приложения Azure AD и субъекта-службы, которые могут получить доступ к ресурсам. Вы добавляете назначение ролей на уровне подписки и получаете необходимые 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 authClient = ConfidentialClientApplicationBuilder.Create(clientId)
.WithAuthority($"https://login.microsoftonline.com/{tenantId}")
.WithClientSecret(clientSecret)
.Build();
var result = authClient.AcquireTokenForClient(new[] { "https://management.core.windows.net/" }).ExecuteAsync().Result;
var credentials = new TokenCredentials(result.AccessToken, result.TokenType);
var kustoManagementClient = new KustoManagementClient(credentials) { SubscriptionId = subscriptionId };
var resourceGroupName = "testrg";
var clusterName = "mykustocluster";
var userIdentityResourceId = $"/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identityName>";
var clusterData = new Cluster(
location: "Central US",
sku: new AzureSku("Standard_E8ads_v5", "Standard", 5),
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, new IdentityUserAssignedIdentitiesValue() }
}
)
);
await kustoManagementClient.Clusters.CreateOrUpdateAsync(resourceGroupName, clusterName, clusterData);
Выполните следующую команду, чтобы проверить, был ли ваш кластер успешно создан или обновлен с использованием идентификации.
Если результат содержит ProvisioningState со значением Succeeded, кластер был создан или обновлен и должен иметь следующие свойства:
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId;
var clientGuid = userIdentity.ClientId;
PrincipalId — это уникальный идентификатор удостоверения, используемого для администрирования Azure AD.
ClientId — это уникальный идентификатор новой идентичности приложения, который используется для указания, какая идентичность будет применяться во время вызовов среды выполнения.
Назначение пользовательской удостоверяющей личности с использованием шаблона Azure Resource Manager
Любой ресурс типа Microsoft.Kusto/clusters можно создать с удостоверением, назначаемым пользователем, включив следующее свойство в определение ресурса, заменив <RESOURCEID> идентификатором ресурса требуемого удостоверения:
PrincipalId — это уникальный идентификатор удостоверения, используемого для администрирования Azure AD.
ClientId — это уникальный идентификатор новой идентичности приложения, который используется для указания, какое удостоверение использовать во время выполнения вызовов.
Примечание.
Кластер может одновременно иметь как системные, так и пользовательские удостоверения. В этом случае свойство type будет иметь значение SystemAssigned,UserAssigned.
Удалить управляемое удостоверение, назначенное пользователем, из кластера
Удалите пользовательскую назначенную идентичность с помощью портала Azure, C# или шаблона Resource Manager, следуя описанным ниже инструкциям.
Выберите Настройки >Идентификация на левой панели портала.
Выберите вкладку Назначено пользователем.
Найдите удостоверение, созданное ранее, и выберите его. Выберите Удалить.
Во всплывающем окне выберите Да, чтобы удалить назначенное пользователем удостоверение. Панель идентификации возвращается к тому же состоянию, что и до добавления идентификации, назначаемой пользователем.
Удаление идентификации, назначенной пользователем, с помощью C#
Выполните следующую команду, чтобы удалить пользовательское назначенное удостоверение:
var clusterUpdate = new ClusterUpdate(
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, null }
}
)
);
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterUpdate);
Удалите назначенное пользователем удостоверение с помощью шаблона Azure Resource Manager
Выполните следующее, чтобы удалить пользовательскую назначенную идентичность:
Чтобы удалить идентификаторы, присвойте им значение NULL. Все остальные существующие идентичности не будут затронуты.
Чтобы удалить все назначенные пользователем удостоверения, свойство type должно быть None.
Если в кластере одновременно назначены системой и назначаемые пользователем удостоверения, свойство type будет SystemAssigned,UserAssigned с удостоверениями, которые нужно удалить, или SystemAssigned, чтобы удалить все удостоверения, назначенные пользователем.