Microsoft Information Protection SDK - ファイル SDK エンジンの概念

MIP ファイル SDK の mip::FileEngine では、指定した ID の代わりに実行されるすべての操作へのインターフェイスを提供します。 アプリケーションにサインインする各ユーザーに 1 つのエンジンが追加され、エンジンが実行するすべての操作が、その ID のコンテキストで事項されます。

FileEngine には、認証済みユーザーのラベルを一覧することと、ユーザーの代わりに、ファイル操作を実行するファイル ハンドラーを作成するという 2 つの主要な責任があります。

  • mip::FileEngine
  • ListSensitivityLabels(): 読み込まれたエンジンのラベルの一覧を取得します。
  • CreateFileHandler(): 固有のファイルまたはストリームに対して mip::FileHandler を作成します。

ファイル エンジンを追加する

Profile と Engine オブジェクトで説明した通り、エンジンには、CREATED または LOADED の 2 つの状態があります。 これら 2 つの状態のいずれかでない状態はあり得ません。 両方の状態を作成してロードすために必要な作業は、FileProfile::LoadAsync を 1 度呼び出すことです。 エンジンがすでにキャッシュ状態の場合は、LOADED になります。 存在しない場合は、CREATEDLOADED になります。 CREATED は、アプリケーションには、エンジンをロードするために必要なサービスからのすべての情報を保持していることを示します。 LOADED は、エンジンを利用するために必要なすべてのデータ構造がメモリ内に作成されていることを示します。

ファイル エンジン設定の作成

プロファイルと同様に、エンジンにも設定オブジェクトである mip::FileEngine::Settings が必要です。 このオブジェクトには、一意のエンジン ID、mip::AuthDelegate の実装、デバッグやテレメトリで使用できるカスタマイズ可能なクライアント データ、および必要に応じてロケールが格納されます。

ここでは、アプリケーション ユーザーの ID を使用して、engineSettings という名前の FileEngine::Settings オブジェクトを作成します。

FileEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.
  authDelegateImpl,         // auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

この方法で engineSettings を作成する場合は、次のようにして一意の engineId も明示的に設定することが重要です。

engineSettings.SetEngineId(engineId);

ユーザー名または電子メールを使用すると、ユーザーがサービスまたはアプリケーションを使用するたびに同じエンジンが読み込まれるようにすることができます。

また、カスタム エンジン ID を指定することもできます。

FileEngine::Settings engineSettings(
  "myEngineId",     // string
  authDelegateImpl, // auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

ベスト プラクティスとして、最初のパラメーターである id は、エンジンと関連するユーザーに簡単に接続できるものである必要があります。 Email アドレス、UPN、AAD オブジェクト GUID など、ID が一意であり、サービスを呼び出さずにローカル状態から読み込むことができることを確認します。

ファイル エンジンを追加する

エンジンを追加するには、プロファイルの読み込みに使用される promise/future パターンに戻ります。 mip::FileProfile に promise を作成するのではなく、mip::FileEngine を使用して作成します。

  //auto profile will be std::shared_ptr<mip::FileProfile>
  auto profile = profileFuture.get();

  // Instantiate the AuthDelegate implementation.
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);

  //Create the FileEngine::Settings object
  FileEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  //Create a promise for std::shared_ptr<mip::FileEngine>
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::FileEngine>>>();

  //Instantiate the future from the promise
  auto engineFuture = enginePromise->get_future();

  //Add the engine using AddEngineAsync, passing in the engine settings and the promise
  profile->AddEngineAsync(engineSettings, enginePromise);

  //get the future value and store in std::shared_ptr<mip::FileEngine>
  auto engine = engineFuture.get();

上記のコードの最終的な結果は、認証済みユーザーのエンジンがプロファイルに追加されることです。

機密ラベルの一覧表示

追加されたエンジンを使用して、engine->ListSensitivityLabels() を呼び出すことで、認証されたユーザーが使用できるすべての機密ラベルをすべて一覧表示できるようになりました。

ListSensitivityLabels() は、ラベルの一覧とサービスから特定のユーザー用ラベルの属性をフェッチします。 結果は、std::shared_ptr<mip::Label> ベクトルに格納されます。

詳細については、mip::Labelの「こちら」を参照してください。

ListSensitivityLabels()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

または Simplified:

auto labels = engine->ListSensitivityLabels();

名前の印刷は、サービスからポリシーを正常にプルし、ラベルを取得できたことを示す簡単な方法です。 ラベルを適用するには、ラベル識別子が必要です。 次のコードは、すべてのラベルを反復処理し、親ラベルと子ラベルごとに nameid を表示します。

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

GetSensitivityLabels() が返した mip::Label のコレクションは、ユーザーが使用できるすべてのラベルを表示し、選択された場合に、ID を使用して、ファイルにラベルを適用するために使用します。

次のステップ

プロファイルのロード、エンジンの追加そして、ラベルの作成をしたので、ファイルのラベルの読み取り、書き込み、または削除を開始するハンドラーを追加できます。 「MIP SDK のファイル ハンドラー」を参照してください。