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> コレクションを作成するだけで簡単に実装できます。

ドメインの保護

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

アプリケーションでは、ユーザーは、contoso.com または fabrikam.com のようなドメインを指定できます。 アプリケーションが保護記述子を作成する際は、AllStaff-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() に渡すことによって実現できます。 最後に、ファイルに対する変更をコミットして、新しいファイルを書き込みます。

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

FileHandler.SetLabel() を使用してラベルを設定するとき、MIP SDK には操作を実行して保護を適用するために必要なすべてのものがあります。 ユーザー定義のアクセス許可 (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() のパターンに従って保護を設定できます。

次のステップ