Sdílet prostřednictvím


Klasifikace dat v .NET

Klasifikace dat pomáhá kategorizovat (nebo klasifikovat) data na základě jejich citlivosti a úrovně ochrany. Struktura DataClassification umožňuje označovat citlivé informace a vynucovat zásady na základě těchto popisků.

V některých situacích může být nutné určit, že data explicitně neobsahují žádnou klasifikaci dat, toho dosáhnete pomocí DataClassification.None. Podobně může být potřeba určit, že klasifikace dat je neznámá – v těchto případech použijte DataClassification.Unknown.

Instalace balíčku

Chcete-li začít, nainstalujte balíček NuGet 📦 Microsoft.Extensions.Compliance.Abstractions.

dotnet add package Microsoft.Extensions.Compliance.Abstractions

Nebo pokud používáte sadu .NET 10+ SDK:

dotnet package add Microsoft.Extensions.Compliance.Abstractions

Vytváření vlastních klasifikací

Definujte vlastní klasifikace vytvořením static členů pro různé typy citlivých dat. To vám dává konzistentní způsob, jak označit a zpracovat data v celé aplikaci. Představte si následující ukázkové třídy:

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);
}

Pokud chcete sdílet vlastní klasifikační taxonomii s jinými aplikacemi, měla by být tato třída a její členové public místo internal. Můžete mít například sdílenou knihovnu obsahující vlastní klasifikace, kterou můžete použít ve více aplikacích.

DataClassificationSet umožňuje vytvořit více klasifikací dat do jedné sady. To vám umožní klasifikovat data pomocí různých kritérií klasifikace. Rozhraní .NET pro začerňování dat navíc využívají DataClassificationSet.

Poznámka:

Více klasifikací dat, které jsou považovány za jednu klasifikaci, když se spojují jako DataClassificationSet, se považují za jednu klasifikaci. Můžete si ji představit jako logickou AND operaci. Pokud jste například nakonfigurovali redakci pro data klasifikovaná jako DataClassificationSet a PrivateInformationSocialSecurityNumber, nebude se vztahovat na data klasifikovaná jako pouze PrivateInformation nebo pouze SocialSecurityNumber.

Vytváření vlastních atributů klasifikace

Vytvořte vlastní atributy na základě vlastních klasifikací. Pomocí těchto atributů označte data správnou klasifikací. Představte si následující definici třídy vlastních atributů:

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

Předchozí kód deklaruje atribut privátních informací, který je podtřídou typu DataClassificationAttribute. Definuje konstruktor bez parametrů a předává vlastní DataClassification na jeho base.

Propojení nastavení klasifikace dat

K vytvoření vazby nastavení klasifikace dat použijte konfigurační systém .NET. Předpokládejme například, že používáte zprostředkovatele konfigurace JSON, můžete appsettings.json definovat takto:

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

Nyní zvažte následující způsob použití možností, který sváže tato nastavení konfigurace s objektem 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}");
        }
    }
}