Compartir a través de


Clasificación de datos en .NET

La clasificación de datos le ayuda a clasificar (o clasificar) datos en función de su nivel de confidencialidad y protección. La DataClassification estructura le permite etiquetar información confidencial y aplicar directivas basadas en estas etiquetas.

En algunas situaciones, es posible que tenga que especificar que los datos explícitamente no tienen ninguna clasificación de datos, esto se logra con DataClassification.None. Del mismo modo, es posible que tenga que especificar que la clasificación de datos es desconocida; use DataClassification.Unknown en estos casos.

Instalación del paquete

Para empezar, instale el 📦 paquete NuGet Microsoft.Extensions.Compliance.Abstractions :

dotnet add package Microsoft.Extensions.Compliance.Abstractions

O bien, si usa el SDK de .NET 10+:

dotnet package add Microsoft.Extensions.Compliance.Abstractions

Crear clasificaciones personalizadas

Defina clasificaciones personalizadas mediante la creación static de miembros para distintos tipos de datos confidenciales. Esto le ofrece una manera coherente de etiquetar y controlar los datos en toda la aplicación. Considere la siguiente clase de ejemplo:

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

Si desea compartir la taxonomía de clasificación personalizada con otras aplicaciones, esta clase y sus miembros deben ser public en lugar de internal. Por ejemplo, puede tener una biblioteca compartida que contenga clasificaciones personalizadas, que puede usar en varias aplicaciones.

DataClassificationSet permite crear varias clasificaciones de datos en un único conjunto. Esto le permite clasificar los datos con varias clasificaciones de datos. Además, las API de redacción de .NET usan un DataClassificationSet.

Nota:

Varias clasificaciones de datos que se unen como DataClassificationSet se tratan como una única clasificación. Puede considerarlo como una operación lógica AND . Por ejemplo, si configuró la redacción para los datos clasificados como DataClassificationSet de PrivateInformation y SocialSecurityNumber, no se aplicará a los datos clasificados como solo PrivateInformation o solo SocialSecurityNumber.

Creación de atributos de clasificación personalizados

Cree atributos personalizados en función de las clasificaciones personalizadas. Use estos atributos para etiquetar los datos con la clasificación correcta. Tenga en cuenta la siguiente definición de clase de atributo personalizado:

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

El código anterior declara un atributo de información privada, que es una subclase del DataClassificationAttribute tipo . Define un constructor sin parámetros y pasa el personalizado DataClassification a su base.

Configuración de clasificación del enlace de datos

Para enlazar la configuración de clasificación de datos, use el sistema de configuración de .NET. Por ejemplo, suponiendo que estás usando un proveedor de configuración JSON, elappsettings.json se podría definir así:

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

Ahora tenga en cuenta el siguiente enfoque de patrón de opciones, que enlaza estas opciones de configuración al 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}");
        }
    }
}