演習 - クラウドネイティブ アプリケーションで機密データを分類する
この演習では、サンプル eShopLite アプリケーションで機密データの型を分類します。
アプリは開発中であり、現在は 2 つのデータ クラス (Product と Order) があります。 注文プロセスを構築しており、あなたはデータ型を分類するコードを追加するように求められています。
この演習では、次の方法を確認します。
- 現在のアプリとそのデータ型を調べる。
- データ型を分類するコードを追加する。
- アプリを実行してテストする。
開発環境を開く
演習をホストする GitHub codespace を使うか、Visual Studio Code でローカルで演習を完了するかを選択できます。
codespace を使用するには、こちらの codespace 作成リンクを使用して、事前構成済みの GitHub codespace を作成します。
GitHub による codespace の作成と構成には数分かかります。 このプロセスが完了すると、演習用のコード ファイルが表示されます。 このモジュールの残りの部分で使われるコードは、/dotnet-compliance ディレクトリにあります。
Visual Studio Code を使うには、https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative リポジトリをご自分の GitHub アカウントにフォークしてください。 その後、以下を実行します。
- Docker が動作していることを確認します。 新しい Visual Studio Code ウィンドウで、Ctrl+Shift+P キーを押してコマンド パレットを開きます。
- [開発コンテナー: コンテナー ボリューム内のリポジトリのクローン] を検索して選択します。
- フォークしたリポジトリを選んでください。 Visual Studio Code により、ローカルで開発コンテナーが作成されます。
eShopLite アプリをテストする
Visual Studio Code ウィンドウの下部にある [ターミナル] タブを選びます。
演習フォルダーに移動します。
cd dotnet-compliance/eShopLite
アプリ コンテナーをビルドしてください。
dotnet publish /p:PublishProfile=DefaultContainer
Docker を使用してアプリを実行してください。
cd .. docker compose up
[ポート] タブを選び、[フロント エンド (32000)] ポートの [ブラウザーで開く] 地球儀アイコンを選びます。
[製品] リンクを選びます。 アプリに製品の一覧が表示されます。
[ターミナル] タブを選び、Ctrl+C キーを押してアプリを停止します。
分類と属性を作成する
このタスクでは、2 つの新しい分類を作成するコードを追加します。 次に、Product と Order のデータ型に適切な属性の注釈を付けます。
[ターミナル] タブで eShopLite/DataEntities フォルダーに移動します。
cd eShopLite/DataEntities/
コンプライアンス パッケージを追加します。
dotnet add package Microsoft.Extensions.Compliance.Redaction
[エクスプローラー] ペインの DataEntities フォルダーを右クリックし、[新しいファイル] を選びます。
ファイル名に「Compliance.cs」と入力します。
エディターで、次のコードを入力します。
using Microsoft.Extensions.Compliance.Classification; using Microsoft.Extensions.Compliance.Redaction; public static class DataClassifications { // End User Identifiable Information public static DataClassification EUIIDataClassification {get;} = new DataClassification("EUIIDataTaxonomy", "EUIIData"); // End User Pseudonymous Information public static DataClassification EUPDataClassification {get;} = new DataClassification("EUPDataTaxonomy", "EUPData"); } public class EUIIDataAttribute : DataClassificationAttribute { public EUIIDataAttribute() : base(DataClassifications.EUIIDataClassification) { } } public class EUPDataAttribute : DataClassificationAttribute { public EUPDataAttribute() : base(DataClassifications.EUPDataClassification) { } }
上記のコードにより、EUII と EUPI という 2 つの分類が作成されます。 また、EUIIDataAttribute と EUPDataAttribute という 2 つの属性も作成されます。 これらの属性は、データ型に注釈を付けるために使われます。
データ型を分類する
これらの分類と属性を使って、eShopLite アプリのデータ型を分類します。
[エクスプローラー] ペインで DataEntities フォルダーを展開し、Product.cs ファイルを選びます。
このクラスには特定の顧客の機密データはありませんが、製品 ID プロパティがログ内の顧客に接続されている場合、アプリによって仮名データが漏えいする可能性があります。
ProductId プロパティに EUPData 属性を追加します。
[EUPData] [Key] [JsonPropertyName("id")] public int Id { get; set; }
上記のコードを使って、秘匿化エンジンに Id プロパティが仮名データであることを伝えます。
[エクスプローラー] ペインで DataEntities フォルダーを展開し、Order.cs ファイルを選びます。
Order クラスには機密データが含まれています。 CustomerName と CustomerAddress のプロパティは、エンド ユーザーを特定できる情報です。 Id プロパティは、エンド ユーザーの仮名情報です。
CustomerName と CustomerAddress のプロパティに EUIIData 属性を追加します。
[EUIIData] [JsonPropertyName("customerName")] public string? CustomerName { get; set; } [EUIIData] [JsonPropertyName("customerAddress")] public string? CustomerAddress { get; set; }
上記のコードを使って、CustomerName と CustomerAddress のプロパティがエンド ユーザーを特定できる情報であることを秘匿化エンジンに伝えます。
Id プロパティに EUPData 属性を追加します。
[Key] [EUPData] [JsonPropertyName("id")] public int Id { get; set; }
上記のコードを使って、秘匿化エンジンに Id プロパティがエンド ユーザーの仮名情報であることを伝えます。
eShopLite アプリに対する変更をテストする
下部の [TERMINAL] ペインで、dotnet-compliance/eShopLite フォルダーに移動してください。
cd ..
アプリ コンテナーを更新してください。
dotnet publish /p:PublishProfile=DefaultContainer
dotnet-compliance フォルダーに移動し、Docker でアプリを起動してください。
cd .. docker compose up
ブラウザーのタブを閉じた場合は、[ポート] タブを選び、[フロント エンド (32000)] ポートの [ブラウザーで開く] アイコンを選びます。
eShopLite アプリは変更されないことに注意してください。
いくつかの商品をバスケットに追加してから、[Buy Basket] (バスケットの内容を購入) を選びます。
[TERMINAL] ウィンドウで Ctrl+C キーを押してアプリを停止してください。
次の演習では、編集されたログを追加します。