次の方法で共有


.NET でのデータ分類

データ分類は、その機密性と保護レベルに基づいてデータを分類 (または分類) するのに役立ちます。 DataClassification構造を使用すると、機密情報にラベルを付け、これらのラベルに基づいてポリシーを適用できます。

場合によっては、データにデータ分類がないことを明示的に指定する必要がある場合があります。これは DataClassification.Noneで実現されます。 同様に、データ分類が不明であることを指定する必要がある場合があります。このような場合は DataClassification.Unknown を使用します。

パッケージをインストールする

開始するには、 📦 Microsoft.Extensions.Compliance.Abstractions NuGet パッケージをインストールします。

dotnet add package Microsoft.Extensions.Compliance.Abstractions

または、.NET 10+ SDK を使用している場合:

dotnet package add Microsoft.Extensions.Compliance.Abstractions

カスタム分類を作成する

さまざまな種類の機密データ static メンバーを作成して、カスタム分類を定義します。 これにより、アプリ全体でデータにラベルを付け、処理するための一貫した方法が提供されます。 次のクラス例を考えてみましょう。

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

カスタム分類分類を他のアプリと共有する場合は、このクラスとそのメンバーをpublicではなくinternalする必要があります。 たとえば、複数のアプリケーションで使用できるカスタム分類を含む共有ライブラリを作成できます。

DataClassificationSet では、複数のデータ分類を 1 つのセットに作成できます。 これにより、複数のデータ分類を使用してデータを分類できます。 さらに、.NET の編集 API では、 DataClassificationSetが利用されます。

複数のデータ分類が 1 つの DataClassificationSet としてまとめて、1 つの分類として扱われます。 これは論理 AND 操作と考えることができます。 たとえば、DataClassificationSetPrivateInformationSocialSecurityNumberとして分類されたデータの編集を構成した場合、PrivateInformationとして分類されたデータやSocialSecurityNumberのみに分類されたデータには適用されません。

カスタム分類属性を作成する

カスタム分類に基づいてカスタム属性を作成します。 これらの属性を使用して、適切な分類でデータにタグを付けます。 次のカスタム属性クラス定義について考えてみましょう。

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

上記のコードは、 DataClassificationAttribute 型のサブクラスである、個人情報属性を宣言しています。 パラメーターなしのコンストラクターを定義し、カスタム DataClassification をその baseに渡します。

データ分類の設定をバインドする

データ分類設定をバインドするには、.NET 構成システムを使用します。 たとえば、JSON 構成プロバイダーを使用していると仮定すると、 appsettings.json は次のように定義できます。

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

次に、これらの構成設定を 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}");
        }
    }
}