Expurger les données sensibles dans une application native du cloud

Effectué

La rédaction au sein des applications est le plus souvent effectuée sur les messages de journalisation et de télémétrie. Il peut également être utilisé dans d'autres scénarios, comme l'expurgation des dimensions dans les métriques ou des données d'en-tête dans les logiciels intermédiaires.

Le cadre de journalisation .NET offre un moyen simple d'expurger les données dans les messages de journalisation. Le package Microsoft.Extensions.Compliance.Abstractions améliore la journalisation en y incluant une classe Redactor qui expurge les données.

Qu’est-ce que la rédaction ?

La rédaction est le processus qui consiste à supprimer les informations sensibles d'un message. Par exemple, vous pouvez vouloir supprimer le nom d'un utilisateur d'un message de journal. Vous pouvez aussi vouloir supprimer l'adresse IP d'un utilisateur dans un événement de télémétrie.

L’expurgation la plus simple consiste à effacer la valeur et à retourner une chaîne vide pour une variable. Ce comportement se produit par défaut, car le ErasingRedactor est l’expurgateur de secours par défaut. Microsoft inclut une classe HMACSHA256Redactor qui peut être utilisée pour refaire des données à l’aide d’une fonction de hachage. L’expurgation HMAC est pratique si vous voulez expurger des données, mais néanmoins garder la possibilité de corréler des messages de journal avec plusieurs autres indications figurant dans les journaux. La dernière option consiste à fournir votre propre fonction de rédaction, ce qui est utile si vous souhaitez rédiger des données à l'aide d'un algorithme personnalisé.

Par exemple, vous voulez faire apparaître plus clairement qu’une valeur est expurgée en la remplaçant par *****.

Comment refaire des données dans une application native cloud

L'application cloud native de votre entreprise peut écrire des journaux et créer des données télémétriques dans plusieurs projets. Par exemple, il peut écrire des journaux à partir du service de base de données, de l'application web ou de toute autre API qu'il utilise. En fonction du type de journalisation, vous devrez ajouter le service de rédaction à chacun d'entre eux.

Quatre étapes sont nécessaires pour activer la rédaction dans votre application :

  1. Ajouter le package NuGet Microsoft.Extensions.Compliance.Redaction à chaque projet.
  2. Ajouter le service de rédaction au conteneur d’injection de dépendances.
  3. Choisir l’implémentation de la réaction à utiliser pour chaque type de données classifiées.
  4. Activer la rédaction dans l’infrastructure de journalisation.

Ajouter le service de rédaction au conteneur d’injection de dépendances

L'exemple suivant concerne une application Blazor WebAssembly. Le processus est similaire pour d'autres types d'applications, mais le code est légèrement différent en fonction de la configuration du conteneur d'injection de dépendances.

Dans le fichier program.cs,ajoutez les dépendances suivantes :

using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Compliance.Redaction;

Les paquets ci-dessus vous permettent d'ajouter le service de rédaction au conteneur d'injection de dépendances avec ce code :

builder.Services.AddRedaction();

Choisir l’implémentation de la réaction à utiliser pour chaque type de données classifiées

La méthode AddRedactor peut inclure un paramètre RedactorOptions. Ce paramètre vous permet de spécifier l'implémentation de la rédaction à utiliser pour chaque taxonomie de données.

Par exemple, le code suivant spécifie que le HMACSHA256Redactor doit être utilisé pour les données EUII.

builder.Services.AddRedaction(configure =>
{
    // Configure to use the HMAC redactor
    configure.SetHmacRedactor(configureHmac =>
    {
        // This key should be fetched from keyvault or some other secure store.
        configureHmac.Key = "thisisadummykeythatshouldbereplacedwithakeyfromakeystore";
        // Some discriminator to differentiate between different deployments of a service.
        configureHmac.KeyId = 1;

    }, new DataClassificationSet(DataClassifications.EUIIDataClassification));
});

Remarque

L'algorithme de rédaction HMAC est expérimental et vous devez donc désactiver l'avertissement du compilateur si vous l'utilisez. Entourer le code ci-dessus avec #pragma warning disable EXTEXP0002 et #pragma warning restore EXTEXP0002 vous permettrait de compiler votre projet.

Vous pouvez ajouter plusieurs implémentations de rédaction au paramètre RedactorOptions. Par exemple, le code suivant ajoute un rédacteur personnalisé pour les données EUPI.

builder.Services.AddRedaction(configure =>
{
    // Configure to use the HMAC redactor for EUII data
    configure.SetHmacRedactor(configureHmac =>
    {
        // This key should be fetched from keyvault or some other secure store.
        configureHmac.Key = "thisisadummykeythatshouldbereplacedwithakeyfromakeystore";
        // Some discriminator to differentiate between different deployments of a service.
        configureHmac.KeyId = 1;

    }, new DataClassificationSet(DataClassifications.EUIIDataClassification));

    // Configure a custom redactor for EUPI data
    configure.SetRedactor<EShopCustomRedactor>(new DataClassificationSet(DataClassifications.EUPIDataClassification));
});

Activer la rédaction dans l’infrastructure de journalisation

L’étape suivante consiste à activer la rédaction dans l’infrastructure de journalisation. Pour ce faire, définissez la propriété .EnableRedaction sur votre générateur de journalisation des applications. Pour l’exemple d’application, le code est le suivant :

builder.Services.AddLogging(logging => 
{
    logging.EnableRedaction();
    logging.AddJsonConsole(); //Enable structure logs on the console to view the redacted data.
});

Avec le code ci-dessus en place, vous pouvez créer un nouvel enregistreur qui utilise le service de rédaction. Implémentez un nouvel enregistreur d’événements LogOrders où que vous souhaitiez écrire des informations de commande dans les journaux.

public static partial class Log
{
    [LoggerMessage(1, LogLevel.Information, "Write the Order data formatted as JSON: {order}")]
    public static partial void LogOrders(this ILogger logger, [LogProperties] Order order);
}

Créer une implémentation personnalisée de la rédaction

Microsoft vous permet de créer une implémentation personnalisée de la rédaction. Vous utiliserez une rédaction personnalisée lorsque vous voudrez expurger des données à l'aide de votre propre algorithme. Implémentons un rédacteur personnalisé qui remplace les données sensibles par *****.

Les rédacteurs personnalisés doivent implémenter la classe Redactor. La classe a besoin de deux méthodes implémentées :

public class EShopCustomRedactor : Redactor
{
    private const string Stars = "*****";

    public override int GetRedactedLength(ReadOnlySpan<char> input) => Stars.Length;

    public override int Redact(ReadOnlySpan<char> source, Span<char> destination)
    {
        Stars.CopyTo(destination);
        return Stars.Length;
    }
}

Dans notre exemple d’architecture eShopLite, vous pouvez ajouter cette classe au projet DataEntities, dans Compliance.cs sous le code de classification des données.