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

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

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

  • ユーザー定義のアクセス許可: エンド ユーザーまたはアプリケーションは、 ラベル付け時にこれらの権限を定義します。 ユーザーからロールへの対応付け、またはユーザーから権限への対応付けのコレクションとして、アクセス許可を MIP SDK に渡します。 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.com や fabrikam.com など) を指定できる必要があります。 アプリケーションが保護記述子を作成すると、 Allスタッフ-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ の前にドメイン サフィックスが付加されます。

この既知のグループは、 組織内のすべての認証済みユーザーに権限を付与する方法でもあります。 AllStaff-7184AB3F-CCD1-46F3-8233-3E09E9CF0E66@ グループには、指定したMicrosoft Entra テナント内のすべてのユーザーが含まれているため、Active Directory Rights Management Services (AD RMS) の ANYONE グループに最も近いグループです。 スコープは常に 1 つのテナントです。すべての場所に認証されたユーザーに権限を付与するクロステナント ID がないため、含める組織ごとに個別の AllStaff-...@domain エントリを追加します。 詳細については、「Azure Information Protection の使用権限を構成する」を参照してください。

次の例では、ユーザーは 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() パターンに従います。

次のステップ