Кластеру Azure Data Explorer могут быть предоставлены два типа удостоверений.
Назначаемое системой удостоверение: привязан к вашему кластеру и удаляется при удалении вашего ресурса. У кластера может быть только одно удостоверение, назначенное системой.
Назначаемое пользователем удостоверение: автономный ресурс Azure, который можно назначить вашему кластеру. Кластер может иметь несколько идентификаторов, назначаемых пользователем.
В этой статье показано, как добавлять и удалять назначенные системой и пользователем управляемые удостоверения для кластеров Azure Data Explorer.
Примечание
Управляемые удостоверения для Azure Data Explorer не будут вести себя должным образом, если кластер Azure Data Explorer переносится между подписками или клиентами. Приложению потребуется получить новое удостоверение, что можно сделать, отключив и снова включив эту функцию. Для использования нового удостоверения также необходимо будет обновить политики доступа к ресурсам нижестоящего уровня.
Добавление назначаемого системой удостоверения
Назначьте назначенное системой удостоверение, которое привязано к вашему кластеру и удаляется при удалении вашего кластера. У кластера может быть только одно удостоверение, назначенное системой. Для создания кластера с идентификатором, назначенным системой, необходимо установить дополнительное свойство в кластере. Добавьте назначенное системой удостоверение с помощью портала 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 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 субъект-служба имеет то же имя, которое вы присвоили экземпляру Службы приложений или Функций Azure.
Добавление назначенного системой удостоверения с помощью шаблона Azure Resource Manager
Добавление назначенного системой типа указывает Azure создать удостоверение для вашего кластера и управлять им. Любой ресурс типа Microsoft.Kusto/clusters можно создать с помощью удостоверения, добавив следующее свойство в определение ресурса:
<TENANTID> и <PRINCIPALID> заменяются идентификаторами GUID. Свойство TenantId определяет клиент Azure AD, которому принадлежит удостоверение.
PrincipalId — это уникальный идентификатор новой идентичности кластера. В Azure AD субъект-служба имеет то же имя, которое вы присвоили экземпляру Службы приложений или Функций Azure.
Удаление удостоверения, назначаемого системой
Если удалить назначаемое системой удостоверение, то оно также удаляется и из Azure AD. Идентификаторы, назначенные системой, также автоматически удаляются из Azure AD при удалении ресурса кластера. Назначенное системой удостоверение можно удалить, отключив эту функцию. Удалите назначенного системой удостоверение с помощью портала Azure, C# или шаблона Resource Manager, как описано ниже.
На левой панели портала выберите Настройки>Идентификатор.
На панели Удостоверение откройте вкладку >Назначено системой:
Переместите ползунок Состояния в положение Вкл.
Нажмите кнопку Сохранить.
Во всплывающем окне выберите Да, чтобы отключить идентификатор, назначенный системой. Панель Идентификатор вернется в то же состояние, что и до добавления идентификатора, назначенного системой.
Удаление назначенного системой идентификатора с помощью C#
Выполните следующее, чтобы удалить идентификатор, назначенный системой.
var clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, clusterPatch);
Удаление назначенного системой удостоверения с помощью шаблона Azure Resource Manager
Выполните следующее, чтобы удалить идентификатор, назначенный системой.
{
"identity": {
"type": "None"
}
}
Примечание
Если в кластере одновременно были назначены как системой, так и пользователем удостоверения, после удаления назначенного системой идентификатора свойство 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 для удаления всех идентификаторов, назначенных пользователем.