Configuración de identidades administradas para el clúster de Azure Data Explorer
Artículo
Una identidad administrada de Microsoft Entra ID permite al clúster acceder a otros recursos protegidos de Microsoft Entra, como Azure Key Vault. La plataforma Azure administra la identidad y no es necesario que lleve a cabo el aprovisionamiento ni la rotación de los secretos.
En este artículo se muestra cómo agregar y quitar identidades administradas en el clúster. Para más información sobre las identidades administradas, consulte Introducción a las identidades administradas.
Nota:
Las identidades administradas de Azure Data Explorer no se comportarán según lo previsto si el clúster de Azure Data Explorer se migra entre suscripciones o inquilinos. La aplicación tendrá que obtener una nueva identidad, que se puede hacer quitando una identidad asignada por el sistema y agregando una identidad asignada por el sistema. Las directivas de acceso y los recursos de nivel inferior también deberán actualizarse para utilizar la nueva identidad.
Para ver ejemplos de código basados en versiones anteriores del SDK, consulte el artículo archivado.
Tipos de identidades administradas
Se pueden conceder dos tipos de identidades al clúster de Azure Data Explorer:
Identidad asignada por el sistema: vinculada al clúster y eliminada si se elimina el recurso. Un clúster solo puede tener una identidad asignada por el sistema.
Identidad asignada por el usuario: un recurso de Azure independiente que puede asignarse al clúster. Un clúster puede tener varias identidades asignadas por el usuario.
Adición de una identidad asignada por el sistema
Asigne una identidad asignada por el sistema que esté asociada al clúster y que se eliminará si se elimina el clúster. Un clúster solo puede tener una identidad asignada por el sistema. Para crear un clúster con una identidad asignada por el sistema se requiere la configuración de una propiedad adicional en el clúster. Agregue la identidad asignada por el sistema mediante Azure Portal, C# o una plantilla de Resource Manager, tal y como se detalla a continuación.
En la pestaña Seguridad > >Identidad asignada por el sistema, seleccione Activado. Para quitar la identidad asignada por el sistema, seleccione Desactivado.
Seleccione Siguiente: Etiquetas > o Revisar y crear para crear el clúster.
Clúster de Azure Data Explorer existente
Abra un clúster de Azure Data Explorer existente.
Seleccione Configuración>Identidad en el panel izquierdo del portal.
En el panel Identidad pestaña >Asignado por el sistema:
Mueva el control deslizante Estado a Activado.
Seleccione Guardar.
En la ventana emergente, seleccione Sí.
Después de unos minutos, la pantalla muestra:
Id. de objeto: se usa para las claves administradas por el cliente
Permisos: seleccionar las asignaciones de roles correspondientes
Adición de una identidad asignada por el sistema mediante C#
Requisitos previos
Para configurar una identidad administrada mediante el cliente de C# de Azure Data Explorer:
Cree o actualice el clúster mediante la propiedad 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);
Ejecute el siguiente comando para comprobar si el clúster se creó o actualizó correctamente con una identidad:
Si el resultado contiene ProvisioningState con el valor Succeeded, el clúster se creó o actualizó y debe tener las siguientes propiedades:
var principalGuid = clusterData.Identity.PrincipalId.GetValueOrDefault();
var tenantGuid = clusterData.Identity.TenantId.GetValueOrDefault();
PrincipalId y TenantId se reemplazan por GUID. La TenantId propiedad identifica el inquilino de Microsoft Entra al que pertenece la identidad. PrincipalId es un identificador único para la nueva identidad del clúster. En Microsoft Entra ID, la entidad de servicio tiene el mismo nombre que asignó a la instancia de App Service o Azure Functions.
Adición de identidad asignada por el sistema mediante una plantilla de Azure Resource Manager
Al agregar el tipo asignado por el sistema se indica a Azure que debe crear y administrar la identidad del clúster. Se puede crear cualquier recurso de tipo Microsoft.Kusto/clusters con una identidad mediante la inclusión de la siguiente propiedad en la definición de recursos:
Un clúster puede tener identidades asignadas por el sistema y asignadas por el usuario al mismo tiempo. La propiedad type tendría el valor SystemAssigned,UserAssigned.
Cuando se crea el clúster, tiene las siguientes propiedades adicionales:
<TENANTID> y <PRINCIPALID> se reemplazan por GUID. La TenantId propiedad identifica el inquilino de Microsoft Entra al que pertenece la identidad. PrincipalId es un identificador único para la nueva identidad del clúster. En Microsoft Entra ID, la entidad de servicio tiene el mismo nombre que asignó a la instancia de App Service o Azure Functions.
Eliminación de una identidad asignada por el sistema
Al quitar una identidad asignada por el sistema, también se eliminará de Microsoft Entra ID. Las identidades asignadas por el sistema también se quitan automáticamente del identificador de Microsoft Entra cuando se elimina el recurso de clúster. Para quitar una identidad asignada por el sistema se puede deshabilitar la característica. Elimine la identidad asignada por el sistema mediante Azure Portal, C# o una plantilla de Resource Manager, tal y como se detalla a continuación.
Seleccione Configuración>Identidad en el panel izquierdo del portal.
En el panel Identidad pestaña >Asignado por el sistema:
Mueva el control deslizante Estado a Desactivado.
Seleccione Guardar.
En la ventana emergente, seleccione Sí para deshabilitar la identidad asignada por el sistema. El panel Identidad se revierte a la misma condición que antes de la adición de la identidad asignada por el sistema.
Eliminación de una identidad asignada por el sistema mediante C#
Ejecute el comando siguiente para quitar la identidad asignada por el sistema:
var cluster = (await clusters.GetAsync(clusterName)).Value;
var clusterPatch = new KustoClusterPatch(clusterData.Location)
{
Identity = new ManagedServiceIdentity(ManagedServiceIdentityType.None)
};
await cluster.UpdateAsync(WaitUntil.Completed, clusterPatch);
Eliminación de una identidad asignada por el sistema mediante una plantilla de Azure Resource Manager
Ejecute el comando siguiente para quitar la identidad asignada por el sistema:
{
"identity": {
"type": "None"
}
}
Nota:
Si el clúster tenía identidades asignadas por el sistema y asignadas por el usuario al mismo tiempo, después de la eliminación de la identidad asignada por el sistema, la propiedad type tendrá el valor UserAssigned.
Adición de una identidad asignada por el usuario
Asigne una identidad administrada asignada por el usuario al clúster. Un clúster puede tener más de una identidad asignada por el usuario. Para crear un clúster con una identidad asignada por el usuario se requiere la configuración de una propiedad adicional en el clúster. Agregue la identidad asignada por el usuario mediante Azure Portal, C# o una plantilla de Resource Manager, tal y como se detalla a continuación.
Cree o actualice el clúster mediante la propiedad 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);
Ejecute el siguiente comando para comprobar si el clúster se creó o actualizó correctamente con una identidad:
Si el resultado contiene ProvisioningState con el valor Succeeded, el clúster se creó o actualizó y debe tener las siguientes propiedades:
var userIdentity = clusterData.Identity.UserAssignedIdentities[userIdentityResourceId];
var principalGuid = userIdentity.PrincipalId.GetValueOrDefault();
var clientGuid = userIdentity.ClientId.GetValueOrDefault();
La PrincipalId es un identificador único para la identidad que se utiliza para la administración de Microsoft Entra. ClientId es un identificador único de la nueva identidad de la aplicación que se usa para especificar qué identidad utilizar durante las llamadas en tiempo de ejecución.
Adición de una identidad asignada por el usuario mediante una plantilla de Azure Resource Manager
Se puede crear cualquier recurso de tipo Microsoft.Kusto/clusters con una identidad asignada por el usuario; para ello, incluya la siguiente propiedad en la definición del recurso y reemplace <RESOURCEID> por el identificador de recurso de la identidad deseada:
La PrincipalId es un identificador único para la identidad que se utiliza para la administración de Microsoft Entra. ClientId es un identificador único de la nueva identidad de la aplicación que se usa para especificar qué identidad utilizar durante las llamadas en tiempo de ejecución.
Nota:
Un clúster puede tener identidades asignadas por el sistema y asignadas por el usuario al mismo tiempo. En este caso, la propiedad type sería SystemAssigned,UserAssigned.
Eliminación de una identidad administrada asignada por el usuario de un clúster
Elimine la identidad asignada por el usuario mediante Azure Portal, C# o una plantilla de Resource Manager, tal y como se detalla a continuación.
Seleccione Configuración>Identidad en el panel izquierdo del portal.
Seleccione la pestaña Usuario asignado.
Busque la identidad que creó anteriormente y selecciónela. Seleccione Quitar.
En la ventana emergente, seleccione Sí para eliminar la identidad asignada por el usuario. El panel Identidad se revierte a la misma condición que antes de la adición de la identidad asignada por el usuario.
Eliminación de una identidad asignada por el usuario con C#
Ejecute el código siguiente para eliminar la identidad asignada por el usuario:
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);
Eliminación de una identidad asignada por el usuario mediante una plantilla de Azure Resource Manager
Ejecute el código siguiente para eliminar la identidad asignada por el usuario:
Para eliminar identidades, establezca sus valores en NULL. Todas las demás identidades existentes no se verán afectadas.
Para eliminar todas las identidades asignadas por el usuario, el valor de la propiedad type sería None.
Si el clúster tenía identidades asignadas por el sistema y asignadas por el usuario al mismo tiempo, la propiedad type sería SystemAssigned,UserAssigned con las identidades que se van a eliminar o SystemAssigned para eliminar todas las identidades asignadas por el usuario.