Управляемое удостоверение из Azure Active Directory позволяет кластеру легко получить доступ к другим ресурсам, защищенным Azure AD, таким как Azure Key Vault. Идентификация осуществляется платформой Azure, и вам не нужно подготавливать или изменять какие-либо секреты. В настоящее время конфигурация управляемого удостоверения поддерживается только для включения управляемых клиентом ключей для кластера.
Для обзора по управляемым удостоверениям смотрите раздел Аутентификация с помощью управляемых удостоверений в кластере Azure Data Explorer.
Кластер Azure Data Explorer может получить два типа удостоверений:
-
назначаемое системой удостоверение: привязано к вашему кластеру и удаляется, если ваш ресурс удален. Кластер может иметь только одну идентичность, назначенную системой.
-
Пользовательский идентификатор: автономный ресурс Azure, который можно связать с вашим кластером. Кластер может иметь несколько пользовательских удостоверений.
В этой статье описывается, как добавлять и удалять управляемые удостоверения, назначаемые системой и пользователем, для кластеров Azure Data Explorer.
Примечание.
Управляемые удостоверения для Azure Data Explorer не будут функционировать как ожидается, если кластер Azure Data Explorer перенесен между подписками или арендаторами. Приложению потребуется получить новое удостоверение, что можно сделать, отключив и снова включив функцию. Политики доступа ресурсов нижнего уровня также должны быть обновлены для использования новой идентичности.
Добавить назначаемую системой идентификацию
Назначьте системное удостоверение, привязанное к вашему кластеру, которое удаляется вместе с ним, если кластер будет удалён. Кластер может иметь только одну идентичность, назначенную системой. Для создания кластера с удостоверением, автоматически назначаемым системой, необходимо установить дополнительное свойство для кластера. Добавьте назначаемое системой удостоверение с помощью портала Azure, C# или шаблона диспетчера ресурсов, как описано ниже.
Добавьте назначенное системой удостоверение с помощью портала Azure
Войдите на портал Azure.
Новый кластер Azure Data Explorer
Создание кластера Azure Data Explorer
На вкладке Безопасность>Системное назначенное удостоверение выберите Включено. Чтобы удалить назначенное системой удостоверение, выберите Выключено.
Выберите Далее: теги > или Просмотр и создание для создания кластера.
Существующий кластер Azure Data Explorer
Откройте существующий кластер Azure Data Explorer.
Выберите Настройки>Идентификация на левой панели портала.
На вкладке Удостоверение панели >системы назначена вкладка:
- Переместите ползунок состояния в On.
- Выберите Сохранить
- Во всплывающем окне выберите Да
Через несколько минут на экране показано:
-
идентификатор объекта — используется для ключей, управляемых клиентом
-
Права доступа — Выберите соответствующие назначения ролей
Добавление системного удостоверения с помощью C#
Предпосылки
Чтобы настроить управляемую идентичность с использованием клиента C# для Azure Data Explorer, выполните следующие действия.
Создание или обновление кластера
Создайте или обновите кластер с помощью свойства 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);
Выполните следующую команду, чтобы проверить, был ли кластер успешно создан или обновлен с идентификатором.
clusterData = await kustoManagementClient.Clusters.GetAsync(resourceGroupName, clusterName);
Если результат содержит 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 Resource Manager можно использовать для автоматизации развертывания ресурсов Azure. Дополнительные сведения о развертывании в обозревателе данных Azure см. в разделе Создание кластера и базы данных Azure Data Explorer с помощью шаблона Azure Resource Manager.
Добавление типа, назначенного системой, указывает Azure создать удостоверение для вашего кластера и управлять им. Любой ресурс типа Microsoft.Kusto/clusters можно создать с идентификатором, добавив следующее свойство в определение ресурса.
{
"identity": {
"type": "SystemAssigned"
}
}
Рассмотрим пример.
{
"apiVersion": "2019-09-07",
"type": "Microsoft.Kusto/clusters",
"name": "[variables('clusterName')]",
"location": "[resourceGroup().location]",
"identity": {
"type": "SystemAssigned"
}
}
Примечание.
Кластер может одновременно иметь как системные, так и пользовательские удостоверения. Свойство type будет SystemAssigned,UserAssigned
При создании кластера он имеет следующие дополнительные свойства:
{
"identity": {
"type": "SystemAssigned",
"tenantId": "<TENANTID>",
"principalId": "<PRINCIPALID>"
}
}
<TENANTID> и <PRINCIPALID> заменяются идентификаторами GUID. Свойство TenantId идентифицирует тенант Azure AD, которому принадлежит идентификация.
PrincipalId — это уникальный идентификатор новой идентичности кластера. В Azure AD служебный принципал имеет то же имя, которое вы предоставили вашему App Service или экземпляру Azure Functions.
Удалить системное удостоверение
Удаление удостоверения, назначенного системой, также приведет к его удалению из Azure AD. Назначаемые системой удостоверения также автоматически удаляются из Azure AD при удалении ресурса кластера. Системное удостоверение можно удалить, отключив функцию. Удалите системно назначенное удостоверение с помощью портала Azure, C#, или шаблона Resource Manager, как подробно описано ниже.
Удаление назначаемого системой удостоверения с помощью портала Azure
Войдите на портал Azure.
Выберите параметры >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
Войдите на портал Azure.
Создайте ресурс управляемой идентичности, назначенной пользователем,.
Откройте существующий кластер Azure Data Explorer.
Выберите Параметры>Идентификация на левой панели портала.
На вкладке , назначенной пользователем, выберите Добавить.
Найдите созданный ранее идентификатор и выберите его. Выберите Добавить.
Добавление идентификатора, назначенного пользователем, с помощью C#
Предпосылки
Чтобы настроить управляемую идентичность с использованием клиента C# для Azure Data Explorer, выполните следующие действия.
Создание или обновление кластера
Создайте или обновите кластер с помощью свойства 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);
Выполните следующую команду, чтобы проверить, был ли кластер успешно создан или обновлен с идентификатором.
clusterData = await kustoManagementClient.Clusters.GetAsync(resourceGroupName, clusterName);
Если результат содержит ProvisioningState со значением Succeeded, кластер был создан или обновлен и должен иметь следующие свойства:
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId;
var clientGuid = userIdentity.ClientId;
PrincipalId — это уникальный идентификатор удостоверения, используемого для администрирования Azure AD.
ClientId — это уникальный идентификатор новой идентичности приложения, который используется для указания, какая идентичность будет применяться во время вызовов среды выполнения.
Назначение пользовательской удостоверяющей личности с использованием шаблона Azure Resource Manager
Шаблон Azure Resource Manager можно использовать для автоматизации развертывания ресурсов Azure. Дополнительные сведения о развертывании в обозревателе данных Azure см. в разделе Создание кластера и базы данных Azure Data Explorer с помощью шаблона Azure Resource Manager.
Любой ресурс типа Microsoft.Kusto/clusters можно создать с удостоверением, назначаемым пользователем, включив следующее свойство в определение ресурса, заменив <RESOURCEID> идентификатором ресурса требуемого удостоверения:
{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<RESOURCEID>": {}
}
}
}
Рассмотрим пример.
{
"apiVersion": "2019-09-07",
"type": "Microsoft.Kusto/clusters",
"name": "[variables('clusterName')]",
"location": "[resourceGroup().location]",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]": {}
}
},
"dependsOn": [
"[resourceId('Microsoft.ManagedIdentity/userAssignedIdentities', variables('identityName'))]"
]
}
При создании кластера он имеет следующие дополнительные свойства:
{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<RESOURCEID>": {
"principalId": "<PRINCIPALID>",
"clientId": "<CLIENTID>"
}
}
}
}
PrincipalId — это уникальный идентификатор удостоверения, используемого для администрирования Azure AD.
ClientId — это уникальный идентификатор новой идентичности приложения, который используется для указания, какая идентичность будет применяться во время вызовов среды выполнения.
Примечание.
Кластер может одновременно иметь идентификаторы, назначаемые системой и пользователем. В этом случае свойство type будет иметь значение SystemAssigned,UserAssigned.
Удалить управляемое удостоверение, назначенное пользователем, из кластера
Удалите пользовательскую назначенную идентичность с помощью портала Azure, C# или шаблона Resource Manager, следуя описанным ниже инструкциям.
Удалите управляемое удостоверение, назначенное пользователем, с помощью портала Azure
Войдите на портал Azure.
Выберите Настройки>Идентичность на левой панели портала.
Выберите вкладку Назначено пользователем.
Найдите созданный ранее идентификатор и выберите его. Выберите Удалить.
Во всплывающем окне выберите Да, чтобы удалить назначенное пользователем удостоверение. Панель идентификации возвращается к тому же состоянию, что и до добавления идентификации, назначаемой пользователем.
Удаление идентификации, назначенной пользователем, с помощью 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
Выполните следующую команду, чтобы удалить пользовательское назначенное удостоверение:
{
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"<RESOURCEID>": null
}
}
}
Примечание.
- Чтобы удалить идентификаторы, присвойте им значение NULL. Все остальные существующие идентичности не будут затронуты.
- Чтобы удалить все назначенные пользователем удостоверения, свойство
type должно быть None.
- Если в кластере одновременно есть системные и назначенные пользователем идентификаторы, то свойство
type будет SystemAssigned,UserAssigned с идентификаторами, которые нужно удалить, или SystemAssigned, чтобы удалить все идентификаторы, назначенные пользователем.
Дальнейшие действия