Se pueden conceder dos tipos de identidades al clúster de Azure Data Explorer:
Identidad asignada por el sistema: está asociada al clúster y se elimina si se elimina el recurso. Un clúster solo puede tener una identidad asignada por el sistema.
Identidad asignada por el usuario: es un recurso de Azure independiente que se puede asignar al clúster. Un clúster puede tener varias identidades asignadas por el usuario.
En este artículo se muestra cómo agregar y eliminar identidades administradas asignadas por el sistema y asignadas por el usuario para los clústeres de Azure Data Explorer.
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 deberá obtener una nueva identidad, para lo cual puede deshabilitar y volver a habilitar la característica. Las directivas de acceso y los recursos de nivel inferior también deberán actualizarse para utilizar la nueva identidad.
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#
Prerrequisitos
Para configurar una identidad administrada mediante el cliente de C# de Azure Data Explorer:
Cree una aplicación de Azure AD y una entidad de servicio con acceso a los recursos. La asignación de roles se agrega en el ámbito de la suscripción y se obtienen los objetos Directory (tenant) ID, Application ID y Client Secretnecesarios.
Creación o actualización del clúster
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 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);
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;
var tenantGuid = clusterData.Identity.TenantId;
PrincipalId y TenantId se reemplazan por GUID. La propiedad TenantId identifica el inquilino de Azure AD al que pertenece la identidad.
PrincipalId es un identificador único para la nueva identidad del clúster. En Azure AD, 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 propiedad TenantId identifica el inquilino de Azure AD al que pertenece la identidad.
PrincipalId es un identificador único para la nueva identidad del clúster. En Azure AD, 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 Azure AD. Las identidades asignadas por el sistema también se eliminan automáticamente de Azure AD cuando se elimina el recurso del 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 clusterPatch = new ClusterUpdate(identity: new Identity(IdentityType.None));
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, 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 una aplicación de Azure AD y una entidad de servicio con acceso a los recursos. La asignación de roles se agrega en el ámbito de la suscripción y se obtienen los objetos Directory (tenant) ID, Application ID y Client Secretnecesarios.
Creación o actualización del clúster
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 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);
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;
var clientGuid = userIdentity.ClientId;
PrincipalId es un identificador único de la identidad que se usa para la administración de Azure AD.
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:
PrincipalId es un identificador único de la identidad que se usa para la administración de Azure AD.
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 clusterUpdate = new ClusterUpdate(
identity: new Identity(
IdentityType.UserAssigned,
userAssignedIdentities: new Dictionary<string, IdentityUserAssignedIdentitiesValue>(1)
{
{ userIdentityResourceId, null }
}
)
);
await kustoManagementClient.Clusters.UpdateAsync(resourceGroupName, clusterName, 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.