Bagikan melalui


Klasifikasi data di .NET

Klasifikasi data membantu Anda mengategorikan (atau mengklasifikasikan) data berdasarkan tingkat sensitivitas dan perlindungannya. Struktur ini DataClassification memungkinkan Anda memberi label informasi sensitif dan menerapkan kebijakan berdasarkan label ini.

Dalam beberapa situasi, Anda mungkin perlu menentukan bahwa data secara eksplisit tidak memiliki klasifikasi data, ini dicapai dengan DataClassification.None. Demikian pula, Anda mungkin perlu menentukan bahwa klasifikasi data tidak diketahui—gunakan DataClassification.Unknown dalam kasus ini.

Memasang paket

Untuk memulai, instal 📦 paket NuGet Microsoft.Extensions.Compliance.Abstractions :

dotnet add package Microsoft.Extensions.Compliance.Abstractions

Atau, jika Anda menggunakan .NET 10+ SDK:

dotnet package add Microsoft.Extensions.Compliance.Abstractions

Membuat klasifikasi kustom

Tentukan klasifikasi kustom dengan membuat static anggota untuk berbagai jenis data sensitif. Ini memberi Anda cara yang konsisten untuk memberi label dan menangani data di seluruh aplikasi Anda. Pertimbangkan kelas contoh berikut:

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

Jika Anda ingin berbagi taksonomi klasifikasi kustom Anda dengan aplikasi lain, kelas ini dan anggotanya harus public bukan internal. Misalnya, Anda dapat memiliki pustaka bersama yang berisi klasifikasi kustom, yang dapat Anda gunakan di beberapa aplikasi.

DataClassificationSet memungkinkan Anda menyusun beberapa klasifikasi data ke dalam satu set. Ini memungkinkan Anda mengklasifikasikan data Anda dengan beberapa klasifikasi data. Selain itu, API redaksi .NET menggunakan DataClassificationSet.

Nota

Beberapa klasifikasi data berjalan bersama sebagai DataClassificationSet diperlakukan sebagai klasifikasi tunggal. Anda dapat menganggapnya sebagai operasi logis AND . Misalnya, jika Anda mengonfigurasi redaksi untuk data yang diklasifikasikan sebagai DataClassificationSet dari PrivateInformation dan SocialSecurityNumber, itu tidak akan berlaku untuk data yang hanya diklasifikasikan sebagai PrivateInformation atau hanya SocialSecurityNumber.

Membuat atribut klasifikasi kustom

Buat atribut kustom berdasarkan klasifikasi kustom Anda. Gunakan atribut ini untuk menandai data Anda dengan klasifikasi yang tepat. Pertimbangkan definisi kelas atribut kustom berikut:

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

Kode sebelumnya mendeklarasikan atribut informasi privat, yang merupakan subkelas dari jenis tersebut DataClassificationAttribute . Ini mendefinisikan konstruktor tanpa parameter dan meneruskan kustom DataClassification ke base.

Mengikat pengaturan klasifikasi data

Untuk mengikat pengaturan klasifikasi data Anda, gunakan sistem konfigurasi .NET. Misalnya, dengan asumsi Anda menggunakan penyedia konfigurasi JSON, appsettings.json Anda dapat didefinisikan sebagai berikut:

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

Sekarang pertimbangkan pendekatan pola opsi berikut, yang mengikat pengaturan konfigurasi ini ke TestOptions dalam objek:

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