Condividi tramite


Classificazione dei dati in .NET

La classificazione dei dati consente di classificare (o classificare) i dati in base al livello di riservatezza e protezione. La DataClassification struttura consente di etichettare le informazioni riservate e applicare criteri basati su queste etichette.

In alcune situazioni, potrebbe essere necessario specificare che i dati in modo esplicito non hanno alcuna classificazione dei dati, questo risultato viene ottenuto con DataClassification.None. Analogamente, potrebbe essere necessario specificare che la classificazione dei dati è sconosciuta. In questi casi, usare DataClassification.Unknown .

Installare il pacchetto

Per iniziare, installare il 📦 pacchetto NuGet Microsoft.Extensions.Compliance.Abstractions :

dotnet add package Microsoft.Extensions.Compliance.Abstractions

Oppure, se stai utilizzando il SDK di .NET 10+

dotnet package add Microsoft.Extensions.Compliance.Abstractions

Creare classificazioni personalizzate

Definire classificazioni personalizzate creando static membri per diversi tipi di dati sensibili. In questo modo è possibile etichettare e gestire i dati nell'app in modo coerente. Si consideri la classe di esempio seguente:

using Microsoft.Extensions.Compliance.Classification;

internal static class MyTaxonomyClassifications
{
    internal static string Name => "MyTaxonomy";

    internal static DataClassification PrivateInformation => new(Name, nameof(PrivateInformation));
    internal static DataClassification CreditCardNumber => new(Name, nameof(CreditCardNumber));
    internal static DataClassification SocialSecurityNumber => new(Name, nameof(SocialSecurityNumber));

    internal static DataClassificationSet PrivateAndSocialSet => new(PrivateInformation, SocialSecurityNumber);
}

Se si vuole condividere la tassonomia di classificazione personalizzata con altre app, questa classe e i relativi membri devono essere public invece di internal. Ad esempio, è possibile avere una libreria condivisa contenente classificazioni personalizzate, che è possibile usare in più applicazioni.

DataClassificationSet consente di comporre più classificazioni di dati in un singolo set. In questo modo è possibile classificare i dati con più classificazioni di dati. Inoltre, le API di redaction .NET usano un oggetto DataClassificationSet.

Annotazioni

Più classificazioni di dati che vanno insieme come un DataClassificationSet vengono considerate come una singola classificazione. È possibile considerarlo come un'operazione logica AND . Ad esempio, se è stata configurata la redazione per dati classificati come DataClassificationSet di PrivateInformation e SocialSecurityNumber, non si applicherà ai dati classificati solo come PrivateInformation o solo SocialSecurityNumber.

Creare attributi di classificazione personalizzati

Creare attributi personalizzati in base alle classificazioni personalizzate. Usare questi attributi per contrassegnare i dati con la classificazione corretta. Si consideri la definizione di classe dell'attributo personalizzata seguente:

public sealed class PrivateInformationAttribute : DataClassificationAttribute
{
    public PrivateInformationAttribute()
        : base(MyTaxonomyClassifications.PrivateInformation)
    {
    }
}

Il codice precedente dichiara un attributo di informazioni private, ovvero una sottoclasse del DataClassificationAttribute tipo. Definisce un costruttore senza parametri e passa il DataClassification personalizzato al suo base.

Associare le impostazioni di classificazione dei dati

Per associare le impostazioni di classificazione dei dati, usare il sistema di configurazione .NET. Si supponga, ad esempio, di usare un provider di configurazione JSON, il appsettings.json può essere definito come segue:

{
    "Key": {
        "PhoneNumber": "MyTaxonomy:PrivateInformation",
        "ExampleDictionary": {
            "CreditCard": "MyTaxonomy:CreditCardNumber",
            "SSN": "MyTaxonomy:SocialSecurityNumber"
        }
    }
}

Si consideri ora l'approccio del modello di opzioni seguente, che associa queste impostazioni di configurazione all'oggetto TestOptions :

using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Compliance.Classification;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Options;

public class TestOptions
{
    public DataClassification? PhoneNumber { get; set; }
    public IDictionary<string, DataClassification> ExampleDictionary { get; set; } = new Dictionary<string, DataClassification>();
}

class Program
{
    static void Main(string[] args)
    {
        // Build configuration from an external json file.
        IConfiguration configuration = new ConfigurationBuilder()
            .AddJsonFile("appsettings.json", optional: false, reloadOnChange: true)
            .Build();

        // Setup DI container and bind the configuration section "Key" to TestOptions.
        IServiceCollection services = new ServiceCollection();
        services.Configure<TestOptions>(configuration.GetSection("Key"));

        // Build the service provider.
        IServiceProvider serviceProvider = services.BuildServiceProvider();

        // Get the bound options.
        TestOptions options = serviceProvider.GetRequiredService<IOptions<TestOptions>>().Value;

        // Simple output demonstrating binding results.
        Console.WriteLine("Configuration bound to TestOptions:");
        Console.WriteLine($"PhoneNumber: {options.PhoneNumber}");
        foreach (var item in options.ExampleDictionary)
        {
            Console.WriteLine($"{item.Key}: {item.Value}");
        }
    }
}