iOS 用 Intune App SDK - マルチ ID
注:
このガイドは、いくつかの異なるステージに分かれています。 まず、「 ステージ 1: 統合を計画する」を確認します。
ステージ 5: マルチ ID (省略可能)
既定では、SDK はポリシーをアプリ全体に適用します。 マルチ ID は、ID ごとのレベルでポリシーを適用できるようにする MAM 機能です。 これには、他の MAM 機能よりも多くのアプリ参加が必要です。
アプリは、アクティブな ID を変更する予定の場合に、アプリ SDK に通知する必要があります。 SDK は、ID の変更が必要な場合にもアプリに通知します。 現在、サポートされているマネージド ID は 1 つだけです。 ユーザーがデバイスまたはアプリを登録すると、SDK はこの ID を使用し、プライマリ マネージド ID と見なされます。 アプリ内の他のユーザーは、無制限のポリシー設定でアンマネージドとして扱われます。
ID は単に文字列として定義されることに注意してください。 ID では大文字と小文字が区別されません。 ID に対する SDK への要求では、ID が設定されたときに最初に使用された大文字と小文字が返されない場合があります。
ステージの目標
- アプリケーションでマルチ ID サポートが必要かどうかを判断します。
- Intune App SDK が ID を認識する方法について説明します。
- ID 認識のためにアプリケーションをリファクタリングします。
- アプリケーション全体でアクティブな ID と変更される ID を SDK に通知するコードを追加します。
- マネージド ID とアンマネージド ID の両方に対するアプリ保護ポリシーの適用を徹底的にテストします。
ID の概要
ID は、単にアカウントのユーザー名 (たとえば、 user@contoso.com) です。 開発者は、アプリの ID を次のレベルで設定できます。
プロセス ID: プロセス全体の ID を設定し、主に単一 ID アプリケーションに使用されます。 この ID は、すべてのタスク、ファイル、UI に影響します。
UI ID: メイン スレッドの UI タスクに適用されるポリシー (切り取り/コピー/貼り付け、PIN、認証、データ共有など) を決定します。 UI ID は、暗号化やバックアップなどのファイル タスクには影響しません。
スレッド ID: 現在のスレッドに適用されるポリシーに影響します。 この ID は、すべてのタスク、ファイル、UI に影響します。
アプリは、ユーザーが管理されているかどうかに関係なく、ID を適切に設定する責任を負います。
すべてのスレッドは、いつでも UI タスクとファイル タスクの有効な ID を持ちます。 これは、適用する必要があるポリシー (存在する場合) を確認するために使用される ID です。 ID が "ID なし" であるか、ユーザーが管理されていない場合、ポリシーは適用されません。 次の図は、有効な ID がどのように決定されるかを示しています。
スレッド キュー
多くの場合、アプリは非同期タスクと同期タスクをスレッド キューにディスパッチします。 SDK は、グランド セントラル ディスパッチ (GCD) 呼び出しをインターセプトし、現在のスレッド ID をディスパッチされたタスクに関連付けます。 タスクが完了すると、SDK によってスレッド ID がタスクに関連付けられている ID に一時的に変更され、タスクが完了してから、元のスレッド ID が復元されます。
NSOperationQueue
は GCD の上に構築されるため、タスクがNSOperationQueue
に追加されるときに、NSOperations
はスレッドの ID で実行されます。
NSOperations
または GCD を介して直接ディスパッチされた関数は、実行中の現在のスレッド ID を変更することもできます。 この ID は、ディスパッチ スレッドから継承された ID をオーバーライドします。
迅速な場合、SDK が DispatchWorkItem
の ID を伝達する方法の結果、 DispatchWorkItem
に関連付けられている ID は、アイテムをディスパッチするスレッドではなく、アイテムを作成したスレッドの ID です。
ファイル所有者
SDK はローカル ファイル所有者の ID を追跡し、それに応じてポリシーを適用します。 ファイルの所有者は、ファイルが作成されたとき、またはファイルが切り捨てモードで開かれるときに確立されます。 所有者は、タスクを実行しているスレッドの有効なファイル タスク ID に設定されます。
または、アプリは、 IntuneMAMFilePolicyManager
を使用してファイル所有者 ID を明示的に設定できます。 アプリでは、 IntuneMAMFilePolicyManager
を使用してファイルの所有者を取得し、ファイルの内容を表示する前に UI ID を設定できます。
共有データ
アプリが、マネージド ユーザーとアンマネージド ユーザーの両方のデータを含むファイルを作成する場合、アプリはマネージド ユーザーのデータの暗号化を担当します。
IntuneMAMDataProtectionManager
の protect
API と unprotect
API を使用して、データを暗号化できます。
protect
メソッドは、マネージド ユーザーまたはアンマネージド ユーザーである ID を受け入れます。 ユーザーが管理されている場合、データは暗号化されます。 ユーザーがアンマネージドの場合、ID をエンコードしているデータにヘッダーが追加されますが、データは暗号化されません。
protectionInfo
メソッドを使用して、データの所有者を取得できます。
拡張機能を共有する
アプリに共有拡張機能がある場合、共有されているアイテムの所有者は、IntuneMAMDataProtectionManager
の protectionInfoForItemProvider
メソッドを使用して取得できます。 共有アイテムがファイルの場合、SDK はファイル所有者の設定を処理します。 共有アイテムがデータの場合、アプリは、このデータがファイルに永続化されている場合はファイル所有者を設定し、UI にこのデータを表示する前に setUIPolicyAccountId
API を呼び出す責任を負います。
マルチ ID を有効にする
既定では、アプリは単一 ID と見なされます。 SDK は、登録されたユーザーにプロセス ID を設定します。 複数 ID のサポートを有効にするには、アプリの Info.plist ファイルの IntuneMAMSettings ディクショナリに、 MultiIdentity
という名前と YES の値を持つブール値設定を追加します。
注:
マルチ ID が有効になっている場合、プロセス ID、UI ID、およびスレッド ID は nil に設定されます。 アプリは、それらを適切に設定する責任を負います。
ID の切り替え
アプリによって開始される ID スイッチ:
起動時に、マルチ ID アプリは、不明なアンマネージド アカウントで実行されていると見なされます。 条件付き起動 UI は実行されません。ポリシーはアプリに適用されません。 アプリは、ID を変更する必要があるときに SDK に通知する責任を負います。 通常、これは、アプリが特定のユーザー アカウントのデータを表示しようとするたびに発生します。
たとえば、ユーザーがノートブック内のドキュメント、メールボックス、またはタブを開こうとした場合です。 ファイル、メールボックス、またはタブが実際に開かれる前に、アプリで SDK に通知する必要があります。 これは、
IntuneMAMPolicyManager
のsetUIPolicyAccountId
API を使用して行われます。 この API は、ユーザーが管理されているかどうかに関係なく呼び出す必要があります。 ユーザーが管理されている場合、SDK は、脱獄検出、PIN、認証などの条件付き起動チェックを実行します。ID スイッチの結果は、完了ハンドラーを介して非同期的にアプリに返されます。 成功結果コードが返されるまで、アプリはドキュメント、メールボックス、またはタブを開くのを延期する必要があります。 ID スイッチが失敗した場合、アプリはタスクを取り消す必要があります。
マルチ ID アプリでは、ID を設定する方法として
setProcessAccountId
を使用しないようにする必要があります。 UIScenes を使用するアプリでは、setUIPolicyAccountId:forWindow
API を使用して ID を設定する必要があります。アプリでは、
setCurrentThreadIdentity:
とsetCurrentThreadIdentity:forScope:
を使用して、現在のスレッドの ID を設定することもできます。 たとえば、アプリはバックグラウンド スレッドを生成し、ID をマネージド ID に設定してから、マネージド ファイルに対してファイル操作を実行できます。 アプリでsetCurrentThreadAccountId:
を使用する場合は、完了すると元の ID を復元できるように、getCurrentThreadAccountId
も使用する必要があります。 ただし、アプリでsetCurrentThreadAccountId:forScope:
を使用している場合は、古い ID の復元が自動的に行われます。setCurrentThreadAccountId:forScope:
を使用することをお勧めします。swift では、async/await のため、
[IntuneMAMPolicyManager setCurrentThreadAccountId:]
と[IntuneMAMPolicyManager setCurrentThreadAccountId:forScope:]
は使用できません。 代わりに、現在の ID を設定するために迅速にIntuneMAMSwiftContextManager.setAccountId(_, forScope:)
を使用します。 渡される非同期、スロー、非同期スローのクロージャには、この API のバリアントがあります。SDK によって開始される ID スイッチ:
場合によっては、SDK が特定の ID に切り替えるようアプリに要求する必要があります。 マルチ ID アプリでは、この要求を処理するために、
IntuneMAMPolicyDelegate
にidentitySwitchRequiredForAccountId
メソッドを実装する必要があります。このメソッドが呼び出されると、アプリが指定した ID に切り替える要求を処理できる場合は、完了ハンドラーに
IntuneMAMAddIdentityResultSuccess
を渡す必要があります。 ID の切り替えを処理できない場合、アプリは完了ハンドラーにIntuneMAMAddIdentityResultFailed
を渡す必要があります。アプリは、この呼び出しに応答して
setUIPolicyAccountId
を呼び出す必要はありません。 SDK でアプリをアンマネージド ユーザー アカウントに切り替える必要がある場合は、空の文字列がidentitySwitchRequiredForAccountId
呼び出しに渡されます。SDK によって開始される ID の自動登録:
SDK がアクションを実行するためにアプリにユーザーを自動登録する必要がある場合、アプリは
IntuneMAMPolicyDelegate
でaddIdentity:completionHandler:
メソッドを実装する必要があります。 アプリが ID または IntuneMAMAddIdentityResultFailed を追加できる場合は、アプリケーションで完了ハンドラーを呼び出し、IntuneMAMAddIdentityResultSuccess を渡す必要があります。選択的ワイプ:
アプリが選択的にワイプされると、SDK は
IntuneMAMPolicyDelegate
でwipeDataForAccountId
メソッドを呼び出します。 アプリは、指定したユーザーのアカウントとそのアカウントに関連付けられているデータを削除する責任を負います。 SDK は、ユーザーが所有するすべてのファイルを削除でき、アプリがwipeDataForAccountId
呼び出しから FALSE を返した場合に削除されます。このメソッドはバックグラウンド スレッドから呼び出されることに注意してください。 ユーザーのすべてのデータが削除されるまで、アプリは値を返すべきではありません (アプリが FALSE を返す場合はファイルを除きます)。
終了条件
アプリのマルチ ID の統合を検証するためのかなりの時間を計画します。 テストを開始する前に、次の手順を実行します。
- アプリ保護ポリシーを作成してアカウントに割り当てます。 これは、テストマネージド アカウントになります。
- 別のアカウントにアプリ保護ポリシーを作成しますが、割り当てないでください。 これは、テストアンマネージド アカウントになります。 または、アプリで Microsoft Entra アカウント以外の複数のアカウントの種類がサポートされている場合は、アンマネージド テスト アカウントとして既存の AAD 以外のアカウントを使用できます。
- アプリ内でポリシーがどのように適用されるかを確認します。 マルチ ID テストでは、アプリが動作していて、ポリシーが適用されていないタイミングを簡単に区別する必要があります。 スクリーンショットをブロックするアプリ保護ポリシー設定は、ポリシーの適用を迅速にテストする際に有効です。
- アプリが提供する UI のセット全体について考えてみましょう。 アカウント データが表示される画面を列挙します。 アプリでは、一度に 1 つのアカウントのデータしか表示されないか、複数のアカウントに属するデータを同時に表示できますか?
- アプリが作成するファイルのセット全体について考えてみましょう。 これらのファイルのうち、システム レベルのデータではなく、アカウントに属するデータを含むファイルを列挙します。
- これらの各ファイルの暗号化を検証する方法を決定します。
- アプリが他のアプリと対話できる一連の方法全体を検討してください。 すべてのイングレス ポイントとエグレス ポイントを列挙します。 アプリで取り込み可能なデータの種類 どのような意図がブロードキャストされますか? 実装されているコンテンツ プロバイダーは何ですか?
- これらの各データ共有機能を実行する方法を決定します。
- アプリと対話できるマネージド アプリとアンマネージド アプリの両方を備えたテスト デバイスを準備します。
- エンド ユーザーがログインしているすべてのアカウントと対話できるようにする方法を検討します。 そのアカウントのデータが表示される前に、ユーザーがアカウントに手動で切り替える必要がありますか?
アプリの現在の動作を徹底的に評価したら、次の一連のテストを実行してマルチ ID 統合を検証します。 これは包括的なリストではなく、アプリのマルチ ID 実装がバグフリーであることを保証するものではありません。
ログインとログアウトのシナリオの検証
マルチ ID アプリでは、最大 1 つのマネージド アカウントと複数のアンマネージド アカウントがサポートされます。 これらのテストは、ユーザーがログインまたはログアウトしたときに、マルチ ID 統合によって保護が不適切に変更されないようにするのに役立ちます。
これらのテストの場合は、テスト デバイスにアプリをインストールします。テストを開始する前にログインしないでください。
シナリオ | 手順 |
---|---|
最初に管理されたログイン | - 最初にマネージド アカウントでログインし、アカウントのデータが管理されていることを検証します。 - アンマネージド アカウントでログインし、アカウントのデータが管理されていないことを検証します。 |
最初にアンマネージドにログインする | - 最初にアンマネージド アカウントでログインし、アカウントのデータが管理されていないことを検証します。 - マネージド アカウントでログインし、アカウントのデータが管理されていることを検証します。 |
複数のマネージド ログイン | - 最初にマネージド アカウントでログインし、アカウントのデータが管理されていることを検証します。 - 2 つ目のマネージド アカウントでログインし、最初に元のマネージド アカウントを削除せずに、ユーザーがログインをブロックされていることを確認します。 |
管理されたログアウト | - 管理されていないアカウントの両方を使用してアプリにログインします。 - マネージド アカウントからログアウトします。 - マネージド アカウントがアプリから削除され、そのアカウントのデータがすべて削除されていることを確認します。 - アンマネージド アカウントがまだログインしていること、アンマネージド アカウントのデータが削除されていないこと、ポリシーがまだ適用されていないことを確認します。 |
管理対象外のログアウト | - 管理されていないアカウントの両方を使用してアプリにログインします。 - アンマネージド アカウントからログアウトします。 - アンマネージド アカウントがアプリから削除され、そのアカウントのデータがすべて削除されていることを確認します。 - マネージド アカウントがまだログインしていること、管理されていないアカウントのデータが削除されていないこと、ポリシーがまだ適用されていることを確認します。 |
アクティブな ID とアプリのライフサイクルの検証
マルチ ID アプリは、1 つのアカウントのデータを含むビューを表示し、ユーザーが現在の使用中のアカウントを明示的に変更できるようにする場合があります。 また、複数のアカウントのデータを同時に含むビューが表示される場合もあります。 これらのテストは、マルチ ID 統合によって、アプリのライフサイクル全体を通じてすべてのページでアクティブ ID に適切な保護が提供されるようにするのに役立ちます。
これらのテストの場合は、テスト デバイスにアプリをインストールします。テストを開始する前に、マネージド アカウントとアンマネージド アカウントの両方でログインします。
シナリオ | 手順 |
---|---|
単一アカウント ビュー、マネージド | - マネージド アカウントに切り替えます。 - 1 つのアカウントのデータを表示するアプリ内のすべてのページに移動します。 - すべてのページにポリシーが適用されていることを確認します。 |
単一アカウント ビュー、アンマネージド | - アンマネージド アカウントに切り替えます。 - 1 つのアカウントのデータを表示するアプリ内のすべてのページに移動します。 - ポリシーがどのページにも適用されていないことを確認します。 |
複数アカウント ビュー | - 複数のアカウントのデータを同時に表示するアプリ内のすべてのページに移動します。 - すべてのページにポリシーが適用されていることを確認します。 |
管理された一時停止 | - 管理対象データが表示され、ポリシーがアクティブな画面で、デバイスのホーム画面または別のアプリに移動してアプリを一時停止します。 - アプリを再開します。 - ポリシーがまだ適用されていることを確認します。 |
アンマネージド一時停止 | - 管理されていないデータが表示され、ポリシーがアクティブな画面で、デバイスのホーム画面または別のアプリに移動してアプリを一時停止します。 - アプリを再開します。 - ポリシーが適用されていないことを確認します。 |
マネージド キル | - マネージド データが表示され、ポリシーがアクティブな画面で、アプリを強制的に強制終了します。 - アプリを再起動します。 - 管理対象アカウントのデータ (予期される) を使用して画面でアプリが再開された場合でも、ポリシーが適用されていることを確認します。 アンマネージド アカウントのデータを含む画面でアプリが再開される場合は、ポリシーが適用されていないことを確認します。 |
アンマネージド キル | - アンマネージド データが表示され、ポリシーがアクティブな画面で、アプリを強制的に強制終了します。 - アプリを再起動します。 - アンマネージド アカウントのデータ (予期される) を含む画面でアプリが再開された場合、ポリシーが適用されていないことを確認します。 管理対象アカウントのデータを含む画面でアプリが再開された場合は、ポリシーがまだ適用されていることを確認します。 |
アドホック ID スイッチ | - アカウント間の切り替えと、アプリの一時停止/再開/強制解除/再起動を実験します。 - マネージド アカウントのデータが常に保護され、アンマネージド アカウントのデータが保護されていないことを確認します。 |
データ共有シナリオの検証
マルチ ID アプリは、他のアプリとの間でデータを送信したり、他のアプリからデータを受信したりできます。 Intune のアプリ保護ポリシーには、この動作を決定する設定があります。 これらのテストは、マルチ ID 統合がこれらのデータ共有設定を確実に受け入れるようにするのに役立ちます。
これらのテストの場合は、テスト デバイスにアプリをインストールします。テストを開始する前に、マネージド アカウントとアンマネージド アカウントの両方でログインします。 追加:
- マネージド アカウントのポリシーを次のように設定します。
- "組織データを他のアプリに送信する" を "ポリシー管理アプリ" に送信します。
- "他のアプリからデータを受信する" から "ポリシー管理アプリ" に。
- テスト デバイスに他のアプリをインストールします。
- (Microsoft Outlook など) データを送受信できる、アプリと同じポリシーを対象とするマネージド アプリ。
- データを送受信できるアンマネージド アプリ。
- マネージド テスト アカウントを使用して、他のマネージド アプリにログインします。 他のマネージド アプリがマルチ ID の場合でも、マネージド アカウントでのみログインします。
Microsoft Outlook がドキュメントの添付ファイルを Microsoft Office に送信するなど、アプリが他のアプリにデータを送信できる場合:
シナリオ | 手順 |
---|---|
マネージド ID がアンマネージド アプリに送信される | - マネージド アカウントに切り替えます。 - アプリがデータを送信できる場所に移動します。 - アンマネージド アプリへのデータの送信を試みます。 - アンマネージド アプリへのデータの送信をブロックする必要があります。 |
マネージド ID がマネージド アプリに送信される | - マネージド アカウントに切り替えます。 - アプリがデータを送信できる場所に移動します。 - マネージド アカウントがサインインしている他のマネージド アプリにデータを送信しようとします。 - マネージド アプリへのデータの送信を許可する必要があります。 |
マネージド アプリへのアンマネージ ID の送信 | - アンマネージド アカウントに切り替えます。 - アプリがデータを送信できる場所に移動します。 - マネージド アカウントがサインインしている他のマネージド アプリにデータを送信しようとします。 - 他のマネージド アプリへのデータ送信をブロックする必要があります。 |
アンマネージド ID をアンマネージド アプリに送信する | - アンマネージド アカウントに切り替えます。 - アプリがデータを送信できる場所に移動します。 - アンマネージド アプリへのデータの送信を試みます。 - アンマネージド アカウントのデータをアンマネージド アプリに送信することは常に許可する必要があります。 |
アプリは、Microsoft OneDrive からファイルを添付する Microsoft Outlook など、他のアプリからデータをアクティブにインポートする場合があります。 また、Microsoft Office が Microsoft Outlook 添付ファイルからドキュメントを開くなど、他のアプリから受動的にデータを受信する場合もあります。 受信アプリ保護ポリシー設定では、両方のシナリオについて説明します。
アプリが他のアプリからデータをアクティブにインポートできる場合:
シナリオ | 手順 |
---|---|
アンマネージド アプリからのマネージド ID のインポート | - マネージド アカウントに切り替えます。 - アプリが他のアプリからデータをインポートできる場所に移動します。 - アンマネージド アプリからデータをインポートしようとします。 - アンマネージド アプリからのデータのインポートをブロックする必要があります。 |
マネージド アプリからのマネージド ID のインポート | - マネージド アカウントに切り替えます。 - アプリが他のアプリからデータをインポートできる場所に移動します。 - マネージド アカウントがサインインしている他のマネージド アプリからデータをインポートしようとします。 - 他のマネージド アプリからデータをインポートできます。 |
マネージド アプリからのアンマネージド ID のインポート | - アンマネージド アカウントに切り替えます。 - アプリが他のアプリからデータをインポートできる場所に移動します。 - マネージド アカウントがサインインしている他のマネージド アプリからデータをインポートしようとします。 - 他のマネージド アプリからのデータのインポートをブロックする必要があります。 |
アンマネージド アプリからのアンマネージド ID のインポート | - アンマネージド アカウントに切り替えます。 - アプリが他のアプリからデータをインポートできる場所に移動します。 - アンマネージド アプリからデータをインポートしようとします。 - アンマネージド アカウントのアンマネージド アプリからデータをインポートすることは常に許可する必要があります。 |
アプリが他のアプリから受動的にデータを受信できる場合:
シナリオ | 手順 |
---|---|
マネージド ID は、アンマネージド アプリから受け取ります | - マネージド アカウントに切り替えます。 - アンマネージド アプリに切り替えます。 - データを送信できる場所に移動します。 - アンマネージド アプリからアプリにデータを送信しようとします。 - アプリのマネージド アカウントは、アンマネージド アプリからデータを受信できません。 |
マネージド アプリからのマネージド ID の受信 | - マネージド アカウントに切り替えます。 - マネージド アカウントがサインインしている他のマネージド アプリに切り替えます。 - データを送信できる場所に移動します。 - マネージド アプリからアプリにデータを送信しようとします。 - アプリのマネージド アカウントは、他のマネージド アプリからデータを受け取ることを許可する必要があります。 |
マネージド アプリからアンマネージ ID を受け取る | - アンマネージド アカウントに切り替えます。 - マネージド アカウントがサインインしている他のマネージド アプリに切り替えます。 - データを送信できる場所に移動します。 - マネージド アプリからアプリにデータを送信しようとします。 - アプリのアンマネージド アカウントは、マネージド アプリからデータを受信できません。 |
アンマネージド ID は、アンマネージド アプリから受け取ります | - アンマネージド アカウントに切り替えます。 - アンマネージド アプリに切り替えます。 - データを送信できる場所に移動します。 - アンマネージド アプリからアプリにデータを送信しようとします。 - アプリのアンマネージド アカウントは、常にアンマネージド アプリからデータを受け取ることを許可する必要があります。 |
これらのテストでエラーが発生すると、データの送受信を試みたときに、アプリに適切なアクティブ ID が設定されていない可能性があります。 これを調査するには、アクティブな ID が正しく設定されていることを確認するために、送受信の時点で SDK の GET ID API を利用します。
次の手順
上記のすべての 終了条件 を完了すると、アプリはマルチ ID として正常に統合され、ID ごとにアプリ保護ポリシーを適用できます。 以降のセクション「 ステージ 6: App Protection の条件付きアクセスのサポート 」と 「ステージ 7: Web ビュー機能」は、アプリの目的のアプリ保護ポリシーのサポートに応じて、必要な場合と必要ない場合があります。