Microsoft Purview Information Protection SDK のアクセス チェック

コンプライアンス ポータルで定義されている情報権利管理権限の施行は、アプリケーション開発者の責任です。 SDK は、これらのアクセス チェックを簡素化する API と列挙子のセットを提供します。

以下の例と表は、アクセス チェックが必要なシナリオ、チェックする権利のリスト、チェックの実行方法を示しています。

権利リストと成果

使用権と説明の完全なリストについては、「Azure Information Protection の使用権を構成する」を参照してください。 この記事では、特定の権利が存在する場合と存在しない場合の、権利の執行および有効な機能におけるアプリケーション開発者の責任を定義します。

重要

権利を確認、強制するのはアプリケーション開発者の責任です。 チェックを実行しないと、データが失われる可能性があります。

シナリオ

アプリケーションがアクセス チェックをどこでどのように実行するかは、構築しているアプリケーションの種類によって異なります。 フルファイル出力を処理し、ユーザー インターフェイスを持たないアプリケーションは、EXTRACT または OWNER 権限を最も頻繁に使用します。 ユーザー インターフェイスを備えたアプリケーションでは、最も詳細なコントロールが必要となり、ユーザー コントロールへのアクセスやアプリケーション内のエクスポート パスがブロックされます。 コード例については、「アクセス チェックの実行」セクションを参照してください。

ユーザーインターフェイスのないアプリケーション

ユーザー インターフェイスのないアプリケーションは、多くの場合、サービスベースまたはコマンドライン インターフェイス (CLI) です。 アプリケーションが Purview Information Protection によって保護されたファイルを処理する場合、適切な権限を持たないユーザーがサービスまたは CLI を使用して保護されていない形式でファイルをエクスポートできないようにしなければなりません

これらのアプリケーションは、OWNERまたは EXTRACT 権限が存在することを検証する必要があります。 OWNERを持つユーザーは、あらゆる操作を実行できます。 EXTRACTを持つユーザーは、保護をサポートしていない形式であっても、保護を直接削除したり、新しい形式で保存したりできます。

ユーザーインターフェイスのあるアプリケーション

ユーザー インターフェイスを備えたファイル SDK アプリケーションは、ユーザーが実行を許可されていない操作へのアクセスを制限する制御を実装する必要があります。 このようなアプリケーションの一例は、Azure Information Protection Viewer です。 ビューアはファイルを一時的に復号化し、アプリケーション ウィンドウにコンテンツを表示します。 ドキュメントを表示する前に詳細なアクセス チェックを実行し、アクセス チェックの結果に基づいてユーザー インターフェイス要素を無効にします。

アクセス チェックを実行するワークフローの一部は次のようになります。

  • ユーザーはOWNER権限を持っていますか? 「はい」の場合、すべてのコントロールを有効にし、他の権限の処理を停止します。
  • ユーザーはPRINT権限を持っていますか? 「はい」の場合は、印刷コントロールを有効にします。 それ以外の場合は、印刷コントロールを無効にします。
  • ユーザーはEXPORt権限を持っていますか? 「はい」の場合、エクスポート コントロールと UI 要素を有効にします。 それ以外の場合は、これらのエレメントを無効にします。
  • ユーザーはEXTRACT権限を持っていますか? 「はい」の場合、コピーとスクリーンショットを有効にします。 それ以外の場合は、これらの機能を無効にします。
  • ユーザーはEDIT権限を持っていますか? 「はい」の場合、現在のアイテムの編集と保存を有効にします。 そうでない場合は、項目を読み取り専用にします。

これらのチェックは、VIEW権限を除く、権限リストと結果テーブル内のすべての権限に対して実行する必要があります。 この権限がなければファイルにアクセスできません。

アクセスチェックの実行

アクセス チェックを実行するパターンは、C++、NET、および Java のファイルおよび保護 SDK 全体で類似しています。

これらのコード サンプルは、SDK を初期化する手順を実行し、エンジンとハンドラーをインスタンス化していることを前提としています。

NET を使用したファイル SDK でのアクセス チェックの実行

このコード スニップは、FileHandler が作成され、有効なファイルを指していることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if(handler.Protection != null)
{                
    // Validate that user has rights to remove protection from the file.                    
    if(handler.Protection.AccessCheck(Rights.Extract))
    {
        // If user has Extract right, remove protection and commit the change. Otherwise, throw exception. 
        handler.RemoveProtection();
        bool result = handler.CommitAsync(outputPath).GetAwaiter().GetResult();     
        return result;   
    }
    else
    {
        throw new Microsoft.InformationProtection.Exceptions.AccessDeniedException("User lacks EXPORT right.");
    }
}

NET を使用したプロテクションSDK でのアクセス チェックの実行

このコード スニップは、ProtectionHandler が使用のために作成されていることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if(protectionHandler != null)
{                
    // Validate that user has rights to remove protection from the file.                    
    if(protectionHandler.AccessCheck(Rights.Print))
    {
        // If the user has the print right, enable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(true);
    }
    else
    {
        // If the user does not have the print right, disable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(false);
    }
}

C++を使用したファイル SDK でのアクセス チェックの実行

このコード スニップは、FileHandler が作成され、有効なファイルを指していることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if (fileHandler->GetProtection() != nullptr)
{
    if (fileHandler->GetProtection()->AccessCheck(mip::rights::Extract()))
    {
        auto commitPromise = std::make_shared<std::promise<bool>>();
        auto commitFuture = commitPromise->get_future();
        fileHandler->RemoveProtection();
        fileHandler->CommitAsync(outputFile, commitPromise);
        result = commitFuture.get();
    }
    else
    {
        throw std::runtime_error("User doesn't have EXTRACT right.");
    }
}

C++を使用したプロテクションSDK でのアクセス チェックの実行

このコード スニップは、ProtectionHandler が使用のために作成されていることを前提としています。

// Validate that the file referred to by the FileHandler is protected.
if (protectionHandler != nullptr)
{
    if (protectionHandler->AccessCheck(mip::rights::Print()))
    {
        // If the user has the print right, enable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(true);
    }
    else
    {
        // If the user does not have the print right, disable the control.
        // SetPrintControlEnabled() is an example and not a MIP SDK function.  
        SetPrintControlEnabled(false);
    }
}

次のステップ

アクセス チェックを適切に実行し、それらのチェックに関連付けられた権限を強制する方法については理解できたので、ファイル ハンドラーの概念に進み、ファイルから保護を削除する方法について詳しく学習してください。