SDK da Proteção de Informações da Microsoft - Conceitos de mecanismo do SDK de arquivos

O mip::FileEngine no SDK de Ficheiros MIP fornece uma interface para todas as operações efetuadas em nome de uma identidade especificada. Adicione um motor para cada utilizador que iniciar sessão na aplicação. O motor realiza todas as operações no contexto dessa identidade.

O FileEngine tem duas responsabilidades principais: listar rótulos para um utilizador autenticado e criar manipuladores de ficheiros para realizar operações sobre ficheiros em nome do utilizador.

  • mip::FileEngine
  • ListSensitivityLabels(): Obtém a lista de rótulos para o mecanismo carregado.
  • CreateFileHandler(): Cria um mip::FileHandler para um arquivo ou fluxo específico.

Adicionar um motor de ficheiros

Como abordado em Profile e objetos motor, um motor pode ter dois estados - CREATED ou LOADED. Se não for um desses dois estados, não existe. Para criar e carregar um estado, faça uma única chamada para FileProfile::LoadAsync. Se o motor já existir no estado em cache, é LOADED. Se não existe, é CREATED e LOADED. CREATED implica que a aplicação tem toda a informação do serviço necessária para carregar o motor. LOADED implica que todas as estruturas de dados necessárias para usar o motor existem na memória.

Criar definições do motor de ficheiros

Semelhante a um perfil, o mecanismo também requer um objeto de configurações, mip::FileEngine::Settings. Este objeto armazena o identificador único do motor, a mip::AuthDelegate implementação, dados personalizáveis do cliente para depuração ou telemetria e, opcionalmente, a localização.

Aqui criamos um FileEngine::Settings objeto chamado engineSettings usando a identidade do usuário do aplicativo.

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.

Ao criar engineSettings desta forma, defina também explicitamente um engineId único:

engineSettings.SetEngineId(engineId);

Usar o nome de utilizador ou email ajuda a garantir que o mesmo motor carrega sempre que o utilizador utiliza o serviço ou aplicação.

Também é válido fornecer um ID de mecanismo personalizado:

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.

Como melhor prática, utiliza-se um primeiro parâmetro, id, que liga o motor ao utilizador associado. Um endereço de email, UPN ou Microsoft Entra object GUID ajuda a garantir que o ID é único e pode ser carregado a partir do estado local sem necessidade de ligar para o serviço.

Adicionar o motor de ficheiros

Para adicionar o motor, regresse ao padrão promise/future utilizado para carregar o perfil. Em vez de criar a promessa para mip::FileProfile, crie-a usando 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();

O código adiciona o motor do utilizador autenticado ao perfil.

Listar etiquetas de confidencialidade

Usando o motor adicional, pode listar todas as etiquetas de sensibilidade disponíveis para o utilizador autenticado chamando engine->ListSensitivityLabels().

ListSensitivityLabels() obtém a lista de etiquetas e atributos desses rótulos para um utilizador específico do serviço. O resultado é armazenado em um vetor de std::shared_ptr<mip::Label>.

Para mais informações, consulte a mip::Labelreferência da classe.

ListarRótulosDeSensibilidade()

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

Ou, simplificado:

auto labels = engine->ListSensitivityLabels();

Imprimir os nomes mostra que a aplicação conseguiu retirar a política do serviço e obteve as etiquetas. Para aplicar a etiqueta, precisa do identificador da etiqueta. O código seguinte itera por todas as etiquetas e mostra o name e o id para cada etiqueta pai e filho.

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

Pode utilizar a coleção de mip::Label devolvida por GetSensitivityLabels() para apresentar todas as etiquetas disponíveis para o utilizador e, em seguida, quando estas forem selecionadas, utilizar o ID para aplicar etiquetas a um ficheiro.

Passos seguintes

Agora que o perfil está carregado, o motor é adicionado e as etiquetas estão disponíveis, pode adicionar um handler para começar a ler, escrever ou remover etiquetas dos ficheiros. Para mais informações, consulte Manipuladores de ficheiros no SDK MIP.