Microsoft Information Protection SDK - ユーザー定義のアクセス許可

Microsoft Information Protection SDK では、テンプレート ベースとユーザー定義の 2 種類のラベル駆動型アクセス許可がサポートされています。

  • テンプレート ベースのアクセス許可: これらの権限は、セキュリティ/コンプライアンス センターのラベル管理者によって定義されます。 これらのラベルは一元的に管理され、構成の変更は、ファイルのコピーを既に持っているユーザーに影響します。 たとえば、管理者が承認されたユーザーの一覧からユーザーを削除した場合、次回ライセンスを取得しようとしたときに、そのユーザーは保護されたデータにアクセスできなくなります。

  • ユーザー定義のアクセス許可: これらの権限は、エンド ユーザーまたはアプリケーションによる ラベル付けの時点で 定義されます。 アクセス許可は、ユーザーとロールまたはユーザーと権限のマッピングのコレクションの形式で MIP SDK に渡されます。 これらの権限は、保護されたドキュメントの発行ライセンスに書き込まれます。テンプレート ベースのアクセス許可とは異なり、ドキュメントに直接アクセスして変更しないと、共有後に一元的に管理または変更することはできません。

ユーザー、権限、ロール

ラベル付け時に権限がユーザーによって定義されることが予想されるため、アプリケーションでは、ユーザーまたはサービスがユーザーが持つ電子メール アドレスと権限またはロールに対する入力を許可するインターフェイスを提供する必要があります。 この構成は、ドキュメントへのアクセス レベルを持つ必要があるユーザーを具体的に定義する UserRoles または UserRights オブジェクトのコレクションを渡すことによって実現されます。

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "bob@contoso.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

その結果、Alice と Bob の両方が保護されたファイルに対して VIEW と EDIT を持っていることを指定する List<UserRights> コレクションが作成されます。 のアクセス許可セットを持つユーザーをさらに追加するには、プロセスを繰り返して 2 つ目のUserRights オブジェクトを作成し、新しいユーザーとアクセス許可を渡してから、userRightsList.Add(userRights2)を呼び出してList<UserRights> コレクションに追加します。

このパターンは UserRoles にも当てはまります。 権限ロール に置き換え、 List<UserRoles> コレクションを作成するだけで実装できます。

ドメインの保護

ドメインにユーザー定義のアクセス許可を適用するには、既知のメール プレフィックスとターゲット ドメインをメール アドレスとして使用する必要があります。 そのアドレスは次のようになります: AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@contoso.com

アプリケーションでは、ユーザーはドメイン ( contoso.comfabrikam.com など) を指定できる必要があります。 アプリケーションが保護記述子を作成するときは、ドメイン サフィックスの先頭に Allスタッフ-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ を付加する必要があります。

次のサンプルでは、ユーザーが alice@contoso.com とすべての Fabrikam.com を有効な受信者として指定していることを前提としています。

// Create a List<string> of the first set of permissions. 
List<string> users = new List<string>()
{
    "alice@contoso.com",
    "AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@fabrikam.com"
};

// Create a List<string> of the Rights the above users should have. 
List<string> rights = new List<string>()
{
    Rights.View,
    Rights.Edit                
};

// Create a UserRights object containing the defined users and rights.
UserRights userRights = new UserRights(users, rights);

// Add them to a new List<UserRights>
List<UserRights> userRightsList = new List<UserRights>()
{
    userRights
};

保護を適用する

設定保護を実現するには、List<UserRights>またはList<UserRoles> オブジェクトからProtectionDescriptorを作成し、それをFileHandler.SetProtection()に渡します。 最後に、変更をファイルにコミットして、新しいファイルを書き込みます。

ファイルに保護を適用するタイミング

MIP SDK を使用してFileHandler.SetLabel()を介してラベルを設定すると、必要なものはすべて揃っており、保護を適用するためにアクションを実行できます。 ラベルがユーザー定義アクセス許可 (UDP) 用に構成されている場合、アプリケーションはラベルが UDP ラベルであることを事前に知る方法がありません。 MIP SDK は、 Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException型の例外をスローすることによって、この情報を表示します。 FileHandler コードでは、この例外をキャッチし、ユーザーまたはサービス インターフェイスをトリガーしてカスタム アクセス許可を定義する必要があります。 完了すると、保護を設定できるようになります。 次の例はエンド ツー エンド パターンを示していますが、 List<UserRights> オブジェクトをビルドする関数が既に実装されていることを前提としています。

try
{
    // Attempt to set the label. If it's a UDP label, this will throw. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());
}

catch (Microsoft.InformationProtection.Exceptions.AdhocProtectionRequiredException)
{
    // Assumes you've create a function that returns the List<UserRights> as previously detailed. 
    List<UserRights> userRightsList = GetUserRights();

    // Create a ProtectionDescriptor using the set of UserRights.
    ProtectionDescriptor protectionDescriptor = new ProtectionDescriptor(userRightsList);
    
    // Apply protection to the file using the new ProtectionDescriptor. 
    handler.SetProtection(protectionDescriptor, new ProtectionSettings());

    // Set the label. This will now succeed as protection has been defined. 
    handler.SetLabel(engine.GetLabelById(options.LabelId), labelingOptions, new ProtectionSettings());

    // Commit the change. 
    var result = Task.Run(async () => await handler.CommitAsync("myFileOutput.xlsx")).Result;
}

カスタム保護

このプロセスを使用して、保護を設定し、 SetLabel() の手順をスキップすることによって、保護のみを設定することもできます。 アプリケーションでラベルを適用する必要がない場合は、例外ハンドラーは必要なく、 ProtectionDescriptor ->SetProtection() ->CommitAsync() パターンに従って保護を設定できます。

次のステップ