Compartilhar via


Classificação de dados no .NET

A classificação de dados ajuda você a categorizar (ou classificar) dados com base em seu nível de confidencialidade e proteção. A DataClassification estrutura permite rotular informações confidenciais e impor políticas com base nesses rótulos.

Em algumas situações, talvez seja necessário especificar que os dados não têm explicitamente nenhuma classificação de dados, isso é obtido com DataClassification.None. Da mesma forma, talvez seja necessário especificar que a classificação de dados é desconhecida— use DataClassification.Unknown nesses casos.

Instalar o pacote

Para começar, instale o 📦 pacote NuGet Microsoft.Extensions.Compliance.Abstractions :

dotnet add package Microsoft.Extensions.Compliance.Abstractions

Ou, se você estiver usando o SDK do .NET 10+:

dotnet package add Microsoft.Extensions.Compliance.Abstractions

Criar classificações personalizadas

Defina classificações personalizadas criando static membros para diferentes tipos de dados confidenciais. Isso oferece uma maneira consistente de rotular e manipular dados em seu aplicativo. Considere a seguinte classe de exemplo:

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 você quiser compartilhar sua taxonomia de classificação personalizada com outros aplicativos, essa classe e seus membros devem estar public em vez de internal. Por exemplo, você pode ter uma biblioteca compartilhada contendo classificações personalizadas, que você pode usar em vários aplicativos.

DataClassificationSet permite que você componha várias classificações de dados em um único conjunto. Isso permite que você classifique seus dados com várias classificações de dados. Além disso, as APIs de redação do .NET usam um DataClassificationSet.

Observação

Várias classificações de dados em conjunto como uma DataClassificationSet são tratadas como uma única classificação. Você pode pensar nisso como uma operação lógica AND . Por exemplo, se você configurou a redação para dados classificados como um DataClassificationSet de PrivateInformation e SocialSecurityNumber, ele não se aplicará a dados classificados como somente PrivateInformation ou apenas SocialSecurityNumber.

Criar atributos de classificação personalizada

Crie atributos personalizados com base em suas classificações personalizadas. Use esses atributos para marcar seus dados com a classificação correta. Considere a seguinte definição de classe de atributo personalizado:

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

O código anterior declara um atributo de informações privadas, que é uma subclasse do DataClassificationAttribute tipo. Ele define um construtor sem parâmetros e passa o objeto personalizado DataClassification para seu base.

Associar configurações de classificação de dados

Para associar as configurações de classificação de dados, use o sistema de configuração do .NET. Por exemplo, supondo que você esteja usando um provedor de configuração JSON, seu appsettings.json pode ser definido da seguinte maneira:

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

Agora considere a seguinte abordagem de padrão de opções, que associa essas configurações ao TestOptions objeto:

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