Intune App SDK for Android - アプリ参加機能
Microsoft Intune App SDK for Android を使用すると、Intuneアプリ保護ポリシー (APP または MAM ポリシーとも呼ばれます) をネイティブの Java/Kotlin Android アプリに組み込むことができます。 Intuneマネージド アプリケーションは、Intune App SDK と統合されたアプリケーションです。 Intune管理者は、アプリをアクティブに管理する場合に、Intuneマネージド アプリにアプリ保護ポリシー Intune簡単にデプロイできます。
注:
このガイドは、いくつかの異なるステージに分かれています。 まず、「統合の 計画」を確認します。
ステージ 7: アプリ参加機能
ステージ Goals
- Intune App SDK によって提供されるさまざまなアプリ参加機能について説明します。
- アプリとユーザーに関連するアプリ参加機能を統合します。
- これらの機能の統合をテストします。
"アプリ参加機能" とは
この SDK 統合プロセスは、開発者が記述する必要があるアプリ固有のコードの量を最小限に抑えようとします。 SDK 統合の前の段階を正常に完了することで、アプリは、ファイルの暗号化、コピー/貼り付けの制限、スクリーンショットのブロック、データ転送の制限など、アプリ保護ポリシー設定の大部分を適用できるようになりました。
ただし、アプリ固有のコードを適切に適用する必要がある設定がいくつかあります。これらは、アプリ参加機能と呼ばれます。 通常、SDK には、アプリケーションのコードやエンド ユーザーシナリオに関する十分なコンテキストがないため、これらの設定を自動的に適用するため、開発者は SDK API を適切に呼び出します。
アプリ参加機能は必ずしも省略可能ではありません。 アプリの既存の機能によっては、これらの機能が必要になる場合があります。 詳細については、「 SDK 統合に関する重要な決定事項 」を参照してください。
このガイドの前の段階では、いくつかのアプリ参加機能について既に説明しています。
- 「ステージ 5: マルチ ID」で説明されているマルチ ID。
- 「ステージ 6: App Configuration」で説明されているアプリ構成。
このガイドの残りの部分では、アプリ参加機能の残りのセットについて説明します。
- ローカルストレージまたはクラウドストレージからファイルを保存/開くポリシーを適用します。
- 通知のコンテンツを制限するポリシーを適用します。
- バックアップ データを保護するポリシーを適用します。
- 画面キャプチャを制限するポリシーを適用します (アプリにカスタム画面キャプチャ コードがある場合)。
- App Protection CA をサポートします。
- SDK からの通知に登録します。
- カスタム アプリケーションのテーマを適用します。
- Intuneからの信頼された証明書を使用して、オンプレミス エンドポイントへの信頼のチェーンを確保します。
アプリ参加機能の基本
AppPolicy インターフェイスには、特定のアクションが許可されているかどうかをアプリに通知する多くのメソッドが含まれています。
ほとんどのアプリ参加機能には次が含まれます。
- アクションが許可されているかどうかをチェックするアプリのコード内の適切な場所を特定する。
-
AppPolicy
メソッドを呼び出して、現在構成されているポリシーに基づいてアクションが許可されているかどうかをチェックします。 - 結果に応じて、アクションの完了を許可するか、アクションがブロックされたときにアプリの動作を変更します。
AppPolicy
インスタンスを取得するには、getPolicy(final Context context)
やgetPolicyForIdentityOID(final String oid)
などの MAMPolicyManager メソッドのいずれかを使用します。
AppPolicy の情報メソッド
AppPolicy
のすべてのメソッドがアプリ参加機能に関連付けられているわけではありません。
一部のメソッドは情報に基づくものであり、ポリシーが SDK によって自動的に適用されている場合でも、ポリシーが現在構成されているアプリ データを提供します。
これらのメソッドは、特定のポリシーが構成されたときにカスタム ユーザー エクスペリエンスを表示する機会をアプリに提供するために存在します。
例: スクリーンショットがブロックされているかどうかを判断する
アプリにスクリーンショットを取得できるコントロールがある場合は、アプリ保護ポリシーでスクリーンショットがブロックされているかどうかをそのコントロールを無効または非表示にすることができます。
アプリは、MAMPolicyManager.getPolicy(currentActivity).getIsScreenCaptureAllowed()
を呼び出すことによってこれをチェックできます。
アプリとデバイスまたはクラウドストレージの場所間のデータ転送を制限するためのポリシー
多くのアプリでは、エンド ユーザーがローカル ファイル ストレージまたはクラウド ストレージ サービスにデータを保存したり、ローカル ファイル ストレージ サービスからデータを開いたりすることができます。 Intune App SDK を使用すると、IT 管理者は、アプリがデータを保存してデータを開く場所を制限することで、データのイングレスやデータ漏洩から保護できます。
注:
アプリで個人またはクラウドの場所への直接の保存が許可されている場合、またはデータをアプリに直接開くことを許可する場合は、IT 管理者がこの保存/開きをブロックできるようにするには、このIntune App SDK アプリ参加機能を実装する必要があります。
デバイスまたはクラウド ストレージへの保存
getIsSaveToLocationAllowedForOID
API を使用すると、構成されたポリシーに基づいて、特定の ID に対して特定の場所への保存が許可されているかどうかをアプリで認識できます。
MAMPolicyManager.getPolicy(currentActivity).getIsSaveToLocationAllowedForOID(
SaveLocation service, String oid);
アプリがgetIsSaveToLocationAllowedForOID
チェックを実装する必要があるかどうかを判断するには、次の表を確認して、アプリがデータエグレスをサポートしているかどうかを判断します。
service パラメーター: 列挙値SaveLocation |
使用例 | 関連付けられている OID |
---|---|---|
ONEDRIVE_FOR_BUSINESS |
アプリは OneDrive にデータを保存しています。 | クラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの OID。 このようなアカウントが存在しない場合、または OID が不明な場合は、 null を使用します。 |
SHAREPOINT |
アプリは Sharepoint にデータを保存しています。 | クラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの OID。 このようなアカウントが存在しない場合、または OID が不明な場合は、 null を使用します。 |
BOX |
このアプリは Box にデータを保存しています。 | クラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの OID。 このようなアカウントが存在しない場合、または OID が不明な場合は、 null を使用します。 |
LOCAL |
アプリは、アプリのプライベート ストレージ ではない デバイス上の外部ストレージの場所にデータを保存しています。 | 外部ストレージはクラウド サービスとは見なされないため、常に null oid パラメーターで使用する必要があります。 |
PHOTO_LIBRARY |
アプリは、Androidのローカル写真ストレージにデータを保存しています。 | Android ローカル写真ストレージはクラウド サービスとは見なされないため、常に null oid パラメーターで使用する必要があります。 |
ACCOUNT_DOCUMENT |
アプリは、アプリ内のアカウントに関連付けられている場所にデータを保存しており、上記で指定した特定のクラウドの場所の 1 つではありません。 *この場所は、マルチ ID アプリ内のアカウント間でデータを渡すことができるかどうかを判断するために使用する必要があります。 | Microsoft Entra認証に使用されるアカウントの OID。 このようなアカウントが存在しない場合、または OID が不明な場合は、 null を使用します。 |
OTHER |
アプリは、上記で指定されていない場所にデータを保存しており、 ACCOUNT_DOCUMENT の条件を満たしていません。 |
oid はこの場所に対して評価されないため、null する必要があります。 |
アプリの操作に必要なプライベート アプリ ストレージに配置されたファイル、または表示のために一時的にダウンロードされたファイルは常に許可されます。をチェック getIsSaveToLocationAllowedForOID
する必要はありません。
のチェック SaveLocation.LOCAL
を行う
- プライベート アプリ ストレージの外部に保存されたファイル。
- アプリ操作に必要ないプライベート アプリ ストレージにダウンロードされたファイル (たとえば、ユーザーが意図的にデバイスにダウンロードすることを選択した場合など)。
注:
保存ポリシーを確認する場合、 oid
は、保存先のクラウド サービス に 関連付けられているアカウントの OID である必要があります (必ずしも 、保存するドキュメントを所有するアカウントと同じとは限りません)。
ローカルまたはクラウドのストレージの場所からデータを開く
getIsOpenFromLocationAllowedForOID
API を使用すると、構成されたポリシーに基づいて、特定の場所からのオープンが特定の ID に対して許可されているかどうかをアプリで認識できます。
MAMPolicyManager.getPolicy(currentActivity).getIsOpenFromLocationAllowedForOID(
OpenLocation location, String oid);
アプリがgetIsOpenFromLocationAllowedForOID
チェックを実装する必要があるかどうかを判断するには、次の表を確認して、アプリがデータイングレスをサポートしているかどうかを判断します。
location パラメーター: 列挙値OpenLocation |
使用例 | 関連付けられている OID |
---|---|---|
ONEDRIVE_FOR_BUSINESS |
アプリが OneDrive からデータを開いています。 | クラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの OID。 このようなアカウントが存在しない場合、または OID が不明な場合は、 null を使用します。 |
SHAREPOINT |
アプリが Sharepoint からデータを開いています。 | クラウド サービス認証とMicrosoft Entra認証の両方に使用されるアカウントの OID。 このようなアカウントが存在しない場合、または OID が不明な場合は、 null を使用します。 |
CAMERA |
アプリがカメラからデータを開いています。 | デバイス カメラがクラウド サービスではないので、 null 値。 |
LOCAL |
アプリは、アプリのプライベート ストレージ ではない デバイス上の外部ストレージの場所からデータを開いています。 | 外部ストレージはクラウド サービスの場所ではありませんが、所有権を示しているため、 oid パラメーターが必要です。 ローカル ストレージからファイルを開くとき、ファイル所有者は常に考慮する必要があります。ファイル所有者の名前付き保存ポリシーでは、他の ID によるファイルの開き方が許可される場合と許可されない場合があるためです。 - ID タグ付きファイルの場合は、 oid は、ファイル所有者の ID である必要があります。 - ID タグのないファイルの場合は、 oid を null する必要があります。 |
PHOTO_LIBRARY |
アプリは、Android 写真のローカル ストレージからデータを開いています。 | Android ローカル写真ストレージはクラウド サービスとは見なされないため、常に null oid パラメーターで使用する必要があります。 |
ACCOUNT_DOCUMENT |
アプリは、アプリ内のアカウントに関連付けられている場所からデータを開き、上記で指定した特定のクラウドの場所の 1 つではありません。 *この場所は、マルチ ID アプリ内のアカウント間でデータを渡すことができるかどうかを判断するために使用する必要があります。 | Microsoft Entra認証に使用されるアカウントの OID。 このようなアカウントが存在しない場合、または OID が不明な場合は、 null を使用します。 |
OTHER |
アプリは、上記で指定されていない場所からデータを開き、 ACCOUNT_DOCUMENT の条件を満たしていません。 |
oid はこの場所に対して評価されないため、null する必要があります。 |
注:
開いているポリシーを確認する場合、 oid
は 、開いている ファイルまたはクラウド サービスに関連付けられているアカウントの OID である必要があります (ドキュメントを開いているアカウントと必ずしも同じではありません )。
ヒント
便宜上、SDK は、ローカル ストレージ内のファイルのFile
パラメーターを受け取るメソッド AppPolicy.isOpenFromLocalStorageAllowed
を提供します。
ポリシーの適用に関する用語は、File
からのファイル所有者のoid
の解析を処理する点を除き、AppPolicy.getIsOpenFromLocationAllowedForOID(OpenLocation.LOCAL, oid)
の呼び出しと機能的に同じです。
[ブロックされた共有] ダイアログ
SDK には、MAM ポリシーによってデータ転送アクションがブロックされたことをユーザーに通知するダイアログが用意されています。
getIsSaveToLocationAllowedForOID
またはgetIsOpenFromLocationAllowedForOID
API 呼び出しの結果、保存/開くアクションがブロックされるたびに、ダイアログをユーザーに表示する必要があります。
ダイアログには汎用メッセージが表示され、無視されると呼び出し元の Activity
に戻ります。
ダイアログを表示するには、次のコードを追加します。
MAMUIHelper.showSharingBlockedDialog(currentActivity)
ファイル共有を許可する
パブリック ストレージの場所への保存が許可されていない場合でも、アプリはユーザーが ファイルをアプリプライベート ストレージ にダウンロードし、システム選択ツールで開くことによってファイルを表示できるようにする必要があります。
通知内のコンテンツを制限するためのポリシー
シングル ID アプリの場合、Intune App SDK の既定の動作では、App Protection Policy によって通知が制限されている場合、すべての通知がブロックされます。
SDK の既定の動作は制限されています。 SDK では、通知から管理されたコンテンツのみを削除することを目的とした "組織データのブロック" 値を自動的に適用することはできません。 マルチ ID アプリの場合、SDK では、マネージド コンテンツを含む通知を特定できません。
アプリに通知が表示され、マルチ ID または "組織データのブロック" 値を適用する場合は、通知を表示する前に、通知に関連付けられているアカウントの通知制限ポリシーをチェックする必要があります。
ポリシーが適用されているかどうかを判断するには、次の呼び出しを行います。
NotificationRestriction notificationRestriction =
MAMPolicyManager.getPolicyForIdentityOID(notificationIdentityOid).getNotificationRestriction();
返される NotificationRestriction
列挙型には、次の値があります。
NotificationRestriction Enum |
予想されるアプリの動作 |
---|---|
BLOCKED |
アプリは、このポリシーに関連付けられているアカウントの通知を表示 してはなりません 。 シングル ID アプリの場合、Intune App SDK はすべての通知を自動的にブロックし、追加のコードは必要ありません。 |
BLOCK_ORG_DATA |
アプリには、organization データを含まない変更された通知が表示される必要があります。 |
UNRESTRICTED |
アプリはすべての通知を表示する必要があります。 |
アプリが getNotificationRestriction
を適切に呼び出さない場合、MAM SDK は 、シングル ID アプリに対してのみ通知を自動的に制限するように最善の努力をします。
この場合、 BLOCK_ORG_DATA
は BLOCKED
と同じように扱われ、通知はまったく表示されません。
きめ細かい制御を行う場合は、getNotificationRestriction
の値をチェックし、アプリ通知を適切に変更します。
バックアップ データを保護するためのポリシー
Intune App SDK では、Android の組み込みのバックアップと復元機能へのデータアップロードをブロックできます。 Android でのバックアップと復元の詳細については、「 Android API ガイド 」と「Android S/ 12 で導入された変更: バックアップと復元への変更」を参照してください。
アプリの自動バックアップ
Android M 以降、Android では、アプリのターゲット API に関係なく、Google Drive for Apps への 自動完全バックアップ の提供が開始されました。
Intuneでは、データ保護を確実に適用するための特定のIntune統合ガイダンスを使用して、XML でカスタム ルールを定義する機能など、Android から利用できるすべての自動バックアップ機能を利用できます。
アプリのマニフェストでのバックアップ動作の構成
既定では、バックアップの有効化と無効化に関するページで説明されているように、android:allowBackup
は true に設定されています。
アプリで完全バックアップと復元機能が必要ない場合は、 android:allowBackup
を false に設定 します。
この場合、これ以上のアクションは必要なく、"企業" データはアプリ内に残ります。
アプリで完全バックアップと復元機能が必要な場合は、 android:allowBackup
を true に設定し、次の追加手順を実行します。
アプリで独自のカスタム
BackupAgent
を使用しない場合は、既定の MAMBackupAgent を使用して、ポリシーに準拠Intune自動完全バックアップを許可します。 アプリ マニフェストに次を配置します。<application ... android:fullBackupOnly="true" android:backupAgent="com.microsoft.intune.mam.client.app.backup.MAMDefaultBackupAgent" ...> </application>
[省略可能]オプションのカスタム
BackupAgent
を実装した場合は、MAMBackupAgent または MAMBackupAgentHelper を必ず使用する必要があります。 次のセクションを参照してください。 手順 1 で説明したIntuneの MAMDefaultBackupAgent の使用に切り替えることを検討してください。これにより、Android M 以降で簡単にバックアップできます。アプリで受け取るフル バックアップの種類 (フィルターなし、フィルター処理、またはなし) を決定する場合は、属性
android:fullBackupContent
を true、false、またはアプリ内の XML リソースに設定する必要があります。次に、
android:fullBackupContent
の値をcom.microsoft.intune.mam.FullBackupContent
メタデータ タグにコピーし、API 31 で追加された新しい XML 構成形式をサポートするアプリの値をcom.microsoft.intune.mam.DataExtractionRules
メタデータ タグにコピーする必要があります。例 1: アプリで完全バックアップを除外せずに作成する場合は、属性とメタデータ タグを true に設定する必要があります。
<application ... android:fullBackupContent="true" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="true" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="true" />
例 2: アプリでカスタム
BackupAgent
を使用し、ポリシーに準拠Intune完全な自動バックアップをオプトアウトする場合は、属性とメタデータ タグを false に設定する必要があります。<application ... android:fullBackupContent="false" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:value="false" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:value="false" />
例 3: XML ファイルで定義されているカスタム 規則に従ってアプリに完全バックアップを作成する場合は、属性とメタデータ タグを同じ XML リソースに設定します。
<application ... android:fullBackupContent="@xml/my_full_backup_content_scheme" android:dataExtractionRules="@xml/my_data_extraction_rules_scheme" ...> </application> ... <meta-data android:name="com.microsoft.intune.mam.FullBackupContent" android:resource="@xml/my_full_backup_content_scheme" /> <meta-data android:name="com.microsoft.intune.mam.DataExtractionRules" android:resource="@xml/my_data_extraction_rules_scheme" />
キー/値のバックアップ
[キー/値のバックアップ] オプションは、すべての API 8 以降で使用でき、アプリ データを Android Backup Service にアップロードします。 アプリあたりのデータ量は 5 MB に制限されています。 キー/値バックアップを使用する場合は、 BackupAgentHelper または BackupAgent を使用する必要があります。
BackupAgentHelper
BackupAgentHelper は、ネイティブ Android 機能と MAM 統合 Intune BackupAgentHelper の両方で BackupAgent よりも簡単に実装できます。これにより、開発者はファイル全体と共有設定を FileBackupHelper
と SharedPreferencesBackupHelper
(それぞれ) に登録できます。これにより、作成時に BackupAgentHelper に追加されます。
MAM で BackupAgentHelper を使用するには、次Intune手順に従います。
BackupAgentHelper
でマルチ ID バックアップを利用するには、Android ガイドに従って BackupAgentHelper を拡張します。クラスで、BackupAgentHelper、FileBackupHelper、SharedPreferencesBackupHelper と同等の MAM を拡張します。
Android クラス | MAM に相当する |
---|---|
BackupAgentHelper | MAMBackupAgentHelper |
FileBackupHelper | MAMFileBackupHelper |
SharedPreferencesBackupHelper | MAMSharedPreferencesBackupHelper |
これらのガイドラインに従うと、マルチ ID のバックアップと復元が成功します。
BackupAgent
BackupAgent を使用すると、バックアップされるデータをより明確にすることができます。 開発者は実装に対してかなり責任を負うため、Intuneからの適切なデータ保護を確保するためにさらに多くの手順が必要です。 ほとんどの作業が開発者にプッシュされるため、統合Intune少し複雑になります。
MAM を統合する:
Key/Value Backup の Android ガイドと特に BackupAgent の拡張を慎重に読み、BackupAgent の実装が Android ガイドラインに従っていることを確認してください。
クラスで MAMBackupAgent を拡張します。
マルチ ID バックアップ:
バックアップを開始する前に、バックアップする予定のファイルまたはデータ バッファーが実際に IT 管理者によってマルチ ID シナリオでバックアップされることを許可されていることをチェックします。 MAMFileProtectionManager と MAMDataProtectionManager の
isBackupAllowed
を使用して、これを判断します。 ファイルまたはデータ バッファーのバックアップが許可されていない場合は、バックアップに含めてはいけません。バックアップ中のある時点で、手順 1 でチェックインしたファイルの ID をバックアップする場合は、データを抽出する予定のファイルで
backupMAMFileIdentity(BackupDataOutput data, File … files)
を呼び出す必要があります。 これにより、新しいバックアップ エンティティが自動的に作成され、BackupDataOutput
に書き込まれます。 これらのエンティティは、復元時に自動的に使用されます。
複数 ID の復元: データ バックアップ ガイドでは、アプリケーションのデータを復元するための一般的なアルゴリズムを指定し、「 BackupAgent の拡張 」セクションのコード サンプルを提供します。 マルチ ID の復元を正常に行うには、このコード サンプルで提供されている一般的な構造に従い、次に特に注意する必要があります。
バックアップ エンティティを通過するには、
while(data.readNextHeader())
* ループを使用する必要があります。data.getKey()
がonBackup
で記述したキーと一致しない場合は、data.skipEntityData()
を呼び出す必要があります。 この手順を実行しないと、復元が成功しない可能性があります。自動的に書き込むエンティティが失われるので、
while(data.readNextHeader())
* コンストラクトでバックアップ エンティティを使用しているときには、戻らないようにします。
- ここで
data
は、復元時にアプリに渡される MAMBackupDataInput のローカル変数名です。
カスタム画面キャプチャの制限
Android の Window
レベルのFLAG_SECURE
制限をバイパスするカスタム画面キャプチャ機能がアプリに含まれている場合は、その機能へのフル アクセスを許可する前に、画面キャプチャ ポリシーをチェックする必要があります。
たとえば、アプリでカスタム レンダリング エンジンを使用して現在のビューを PNG ファイルにレンダリングする場合は、最初にチェック AppPolicy.getIsScreenCaptureAllowed()
する必要があります。
注:
アプリにカスタムまたはサード パーティの画面キャプチャ機能が含まれていない場合は、画面キャプチャを制限するアクションを実行する必要はありません。
画面キャプチャ ポリシーは、すべての MAM 統合アプリに対して Window
レベルで自動的に適用されます。
OS または別のアプリがアプリ内の Window
をキャプチャしようとすると、必要に応じてブロックされます。
たとえば、ユーザーが Android の組み込みのスクリーンショットや画面記録機能を介してアプリの画面をキャプチャしようとすると、アプリからの参加なしにキャプチャが自動的に制限されます。
App Protection CA のサポート
App Protection CA (条件付きアクセス) は、アプリベースの CA とも呼ばれ、アプリケーションがアプリ保護ポリシーによって管理されるまで、リソースへのアクセスIntune制限します。 Microsoft Entra IDは、CA で保護されたリソースにアクセスするためのトークンを付与する前に、アプリの登録と管理をアプリに要求することでこれを適用します。
注:
App Protection CA のサポートには、バージョン 1.0.0 以上の MSAL ライブラリが必要です。
MSAL に準拠していない処理
アカウントのトークンを取得する場合、MSAL ライブラリは、アプリ保護ポリシー管理に準拠していないかどうかを示す MsalIntuneAppProtectionPolicyRequiredException
を返すかスローすることがあります。
コンプライアンスの修復に使用するために、例外から追加のパラメーターを抽出できます ( 「MAMComplianceManager」を参照してください)。
修復が成功すると、アプリは MSAL を介してトークンの取得を再試行できます。
MAMComplianceManager
MAMComplianceManager インターフェイスは、ポリシーが必要なエラーが MSAL から受信されたときに使用されます。
アプリを準拠状態にするために呼び出す必要がある [remediateCompliance] メソッドが含まれています。
MAMComplianceManager
への参照は次のように取得できます。
MAMComplianceManager mgr = MAMComponents.get(MAMComplianceManager.class);
// make use of mgr
返される MAMComplianceManager
インスタンスは、 null
されないことが保証されます。
package com.microsoft.intune.mam.policy;
public interface MAMComplianceManager {
void remediateCompliance(String upn, String aadId, String tenantId, String authority, boolean showUX);
}
remediateCompliance()
メソッドが呼び出され、要求されたトークンを付与するためのMicrosoft Entra IDの条件を満たすためにアプリを管理下に置こうとします。
最初の 4 つのパラメーターは、MSAL AuthenticationCallback.onError()
メソッドで受け取った例外から抽出できます (以下のコード サンプルを参照)。
最後のパラメーターはブール値であり、コンプライアンスの試行中に UX を表示するかどうかを制御します。
remediateCompliance
では、この操作中にアプリがカスタマイズされた UX を表示する必要がないように、単純なブロック進行状況ダイアログが表示されます。
このダイアログは、コンプライアンス修復の進行中にのみ表示されます。最終的な結果は表示されません。
アプリは、コンプライアンス修復の試行の成功または失敗を処理するために、 COMPLIANCE_STATUS
通知の受信者を登録できます。
詳細については、「 コンプライアンスの状態通知 」を参照してください。
remediateCompliance()
は、コンプライアンスの確立の一環として MAM 登録を開始する可能性があります。
登録通知の通知レシーバーが登録されている場合、アプリは登録通知を受け取ることがあります。
アプリの登録済み MAMServiceAuthenticationCallback
には、登録のトークンを取得するために acquireToken()
メソッドが呼び出されます。
acquireToken()
は、アプリが独自のトークンを取得する前に呼び出されるため、トークンの取得が成功した後にアプリが実行するブックキーピングまたはアカウント作成タスクがまだ実行されていない可能性があります。
この場合、コールバックはトークンを取得できる必要があります。
acquireToken()
からトークンを返できない場合、コンプライアンス修復の試行は失敗します。
要求されたリソースの有効なトークンを使用して後で updateToken
を呼び出した場合、コンプライアンスの修復は、指定されたトークンを使用して直ちに再試行されます。
注:
ユーザーは既にブローカーをインストールし、MsalIntuneAppProtectionPolicyRequiredException
例外を受け取る前にデバイスを登録するように誘導されているため、acquireToken()
でサイレント トークンの取得は引き続き可能です。
これにより、ブローカーはキャッシュに有効な更新トークンを持ち、要求されたトークンのサイレント取得を成功させることができます。
AuthenticationCallback.onError()
メソッドでポリシーが必要なエラーを受け取り、MAMComplianceManager を呼び出してエラーを処理するサンプルを次に示します。
public void onError(@Nullable MsalException exc) {
if (exc instanceof MsalIntuneAppProtectionPolicyRequiredException) {
final MsalIntuneAppProtectionPolicyRequiredException policyRequiredException =
(MsalIntuneAppProtectionPolicyRequiredException) ex;
final String upn = policyRequiredException.getAccountUpn();
final String aadId = policyRequiredException.getAccountUserId();
final String tenantId = policyRequiredException.getTenantId();
final String authority = policyRequiredException.getAuthorityURL();
MAMComplianceManager complianceManager = MAMComponents.get(MAMComplianceManager.class);
complianceManager.remediateCompliance(upn, aadId, tenantId, authority, showUX);
}
}
コンプライアンスの状態通知
アプリが COMPLIANCE_STATUS
の種類の通知に登録すると、コンプライアンス修復試行の最終的な状態をアプリに通知するために MAMComplianceNotification
が送信されます。
登録の詳細については、「 SDK からの通知の 登録」を参照してください。
public interface MAMComplianceNotification extends MAMUserNotification {
MAMCAComplianceStatus getComplianceStatus();
String getComplianceErrorTitle();
String getComplianceErrorMessage();
}
getComplianceStatus()
メソッドは、[MAMCAComplianceStatus] 列挙型の値としてコンプライアンス修復試行の結果を返します。
状態コード | 説明 |
---|---|
UNKNOWN |
状態が不明です。 これは、予期しないエラーの理由を示している可能性があります。 追加情報は、ポータル サイトログにあります。 |
COMPLIANT |
コンプライアンスの修復が成功し、アプリがポリシーに準拠するようになりました。 MSAL トークンの取得を再試行する必要があります。 |
NOT_COMPLIANT |
コンプライアンスを修復できませんでした。 アプリは準拠していないため、エラー条件が修正されるまで MSAL トークンの取得を再試行しないでください。 追加のエラー情報は MAMComplianceNotification と共に送信されます。 |
SERVICE_FAILURE |
Intune サービスからコンプライアンス データを取得しようとしたときにエラーが発生しました。 追加情報は、ポータル サイトログにあります。 |
NETWORK_FAILURE |
Intune サービスへの接続中にエラーが発生しました。 ネットワーク接続が復元されたら、アプリでトークンの取得をもう一度試す必要があります。 |
CLIENT_ERROR |
クライアントに関連する何らかの理由で、コンプライアンスの修復が失敗しました。 たとえば、トークンや間違ったユーザーなどです。 追加のエラー情報は MAMComplianceNotification と共に送信されます。 |
PENDING |
時間制限を超えたときに、状態応答がまだサービスから受信されていないため、コンプライアンスの修復が失敗しました。 アプリは、後でトークンの取得をもう一度試す必要があります。 |
COMPANY_PORTAL_REQUIRED |
コンプライアンスの修復を成功させるには、デバイスにポータル サイトをインストールする必要があります。 ポータル サイトが既にデバイスにインストールされている場合は、アプリを再起動する必要があります。 この場合、ユーザーにアプリの再起動を求めるダイアログが表示されます。 |
コンプライアンスの状態が MAMCAComplianceStatus.COMPLIANT
されている場合、アプリは元のトークンの取得 (独自のリソース) を再開する必要があります。
コンプライアンス修復の試行が失敗した場合、 getComplianceErrorTitle()
メソッドと getComplianceErrorMessage()
メソッドは、選択した場合にアプリがエンド ユーザーに表示できるローカライズされた文字列を返します。
ほとんどのエラー ケースはアプリによって修復されないため、一般的なケースでは、アカウントの作成またはログインに失敗し、ユーザーが後でやり直すことを許可することをお勧めします。
エラーが永続的な場合、ポータル サイト ログが原因の特定に役立つ場合があります。 エンド ユーザーはログを送信できます。 詳細については、「 アップロードと電子メール ログ」を参照してください。
MAMNotificationReceiver インターフェイスを実装するために匿名クラスを使用してレシーバーを登録する例を次に示します。
final MAMNotificationReceiverRegistry notificationRegistry = MAMComponents.get(MAMNotificationReceiverRegistry.class);
// create a receiver
final MAMNotificationReceiver receiver = new MAMNotificationReceiver() {
public boolean onReceive(MAMNotification notification) {
if (notification.getType() == MAMNotificationType.COMPLIANCE_STATUS) {
MAMComplianceNotification complianceNotification = (MAMComplianceNotification) notification;
// take appropriate action based on complianceNotification.getComplianceStatus()
// unregister this receiver if no longer needed
notificationRegistry.unregisterReceiver(this, MAMNotificationType.COMPLIANCE_STATUS);
}
return true;
}
};
// register the receiver
notificationRegistry.registerReceiver(receiver, MAMNotificationType.COMPLIANCE_STATUS);
注:
通知が見逃される可能性がある競合状態を回避するには、 remediateCompliance()
を呼び出す前に通知レシーバーを登録する必要があります。
App Protection CA のサポートの宣言
アプリがアプリ CA の修復を処理する準備ができたら、アプリがアプリ CA の準備ができていることを Microsoft ID に伝えることができます。 MSAL アプリケーションでこれを行うには、"protapp" のクライアント機能を使用してパブリック クライアントを構築します
{
"client_id" : "[YOUR_CLIENT_ID]",
"authorization_user_agent" : "DEFAULT",
"redirect_uri" : "[YOUR_REDIRECT_URI]",
"multiple_clouds_supported":true,
"broker_redirect_uri_registered": true,
"account_mode": "MULTIPLE",
"client_capabilities": "protapp",
"authorities" : [
{
"type": "AAD",
"audience": {
"type": "AzureADandPersonalMicrosoftAccount"
}
}
]
}
上記を完了したら、以下の App Protection CA の検証 に進みます。
実装に関する注意事項
注:
アプリの MAMServiceAuthenticationCallback.acquireToken()
メソッドは、forceRefresh
フラグをacquireTokenSilentAsync()
に false を渡す必要があります。
AcquireTokenSilentParameters acquireTokenSilentParameters =
builder.withScopes(Arrays.asList(scopes))
.forceRefresh(false)
.build();
acquireTokenSilentAsync(acquireTokenSilentParameters);
注:
修復の試行中にカスタム ブロック UX を表示する場合は、showUX パラメーターに false を 渡して remediateCompliance()
する必要があります。
remediateCompliance()
を呼び出す前に、まず UX を表示し、通知リスナーを登録する必要があります。
これにより、 remediateCompliance()
が非常に迅速に失敗した場合に通知が見逃される可能性がある競合状態が回避されます。
たとえば、Activity サブクラスの onCreate()
メソッドまたは onMAMCreate()
メソッドは、通知リスナーを登録してから remediateCompliance()
を呼び出すのに最適な場所です。
remediateCompliance()
のパラメーターは、意図の追加として UX に渡すことができます。
コンプライアンス状態通知を受信すると、結果を表示するか、単にアクティビティを完了できます。
注:
remediateCompliance()
はアカウントを登録し、登録を試みます。 メイントークンが取得されると、registerAccountForMAM()
を呼び出す必要はありませんが、そうしても害はありません。
一方、アプリがトークンの取得に失敗し、ユーザー アカウントを削除する場合は、 unregisterAccountForMAM()
を呼び出してアカウントを削除し、バックグラウンド登録の再試行を防ぐ必要があります。
SDK からの通知に登録する
Intune App SDK ガイドでは、次のような SDK からの通知にアプリを登録する必要がある場合があるいくつかのシナリオについて既に説明しています。
-
WRONG_USER
を処理するマルチ ID アプリ (「マネージド ID とアンマネージド ID」を参照) -
MANAGEMENT_REMOVED
を処理するマルチ ID アプリ (「データ バッファー保護」を参照)。 -
WIPE_USER_DATA
またはWIPE_USER_AUXILIARY_DATA
を処理するマルチ ID アプリ (「選択的ワイプ」を参照)。 - アプリ構成処理を実装するアプリ
REFRESH_APP_CONFIG
( 「SDK からのアプリ構成の取得」を参照)。
このセクションでは、SDK が送信できるあらゆる種類の通知、アプリケーションでリッスンするタイミングと理由、および通知レシーバーを実装する方法について説明します。
通知の種類
すべての SDK 通知は、1 つの関数を持つ MAMNotification インターフェイスを実装 getType()
、 MAMNotificationType 列挙型を返します。
ほとんどの通知は MAMUserNotificationsであり、1 つの ID に固有の情報を提供します。 ID の OID は、 getUserOid()
関数を使用して取得でき、ID の UPN は getUserIdentity()
経由で取得できます。
MAMEnrollmentNotification と MAMComplianceNotification は、さらに MAMUserNotification
を拡張します。この結果には、ユーザー/デバイスを MAM サービスに登録しようとした結果と、App Protection CA のコンプライアンスを修復しようとした結果がそれぞれ含まれます。
通知の種類 | 通知クラス | 通知の理由 | 適用対象 | 処理のヒント | スレッド情報 |
---|---|---|---|---|---|
COMPLIANCE_STATUS |
MAMComplianceNotification |
コンプライアンス修復の試行の結果を返します。 | App Protection CA を実装するアプリでは、これを処理する必要があります。 | - | 非決定的 |
MAM_ENROLLMENT_RESULT |
MAMEnrollmentNotification |
登録試行の結果を返します。 | すべてのアプリでこれを受け取ります。 | - | 非決定的 |
MANAGEMENT_REMOVED |
MAMUserNotification |
アプリが管理されようとしています。 |
MAMDataProtectionManager を利用するアプリはこれを処理する必要があります。 |
以下 のMANAGEMENT_REMOVED を参照してください。 | UI スレッドでは使用しない |
REFRESH_APP_CONFIG |
MAMUserNotification |
アプリの構成値が変更されている可能性があります。 | アプリ構成を実装し、アプリ構成データをキャッシュするアプリでは、これを処理する必要があります。 | アプリは、キャッシュされたアプリ構成データを無効にして更新する必要があります。 | 非決定的 |
REFRESH_POLICY |
MAMUserNotification |
ポリシーアプリ保護変更されている可能性があります。 | アプリ保護ポリシーをキャッシュするアプリでは、これを処理する必要があります。 | アプリは、キャッシュされたアプリ保護ポリシー データを無効にして更新する必要があります。 | 非決定的 |
WIPE_USER_DATA |
MAMUserNotification |
ワイプが発生しようとしています(*)。 |
MAMDataProtectionManager を利用するアプリでは、このまたはWIPE_USER_AUXILIARY_DATA を処理する必要があります。 |
「選択的ワイプ」を参照してください。 | UI スレッドでは使用しない |
WIPE_USER_AUXILIARY_DATA |
MAMUserNotification |
ワイプが発生しようとしています(*)。 | これを受け取るのはマルチ ID アプリのみです。 MAMDataProtectionManager を利用するアプリでは、このまたはWIPE_USER_DATA を処理する必要があります。 |
「選択的ワイプ」を参照してください。 | UI スレッドでは使用しない |
WIPE_COMPLETED |
MAMUserNotification |
ワイプが完了しました。 | 常に省略可能。 |
WIPE_USER_DATA またはWIPE_USER_AUXILIARY_DATA 後に配信されます。 *アプリがハンドラーから WIPE_USER_DATA または WIPE_USER_AUXILIARY_DATA のエラーを報告した場合、この通知は送信されません。 |
UI スレッドでは使用しない |
(*)ワイプは、次のようなさまざまな理由で発生する可能性があります。
- unregisterAccountForMAM というアプリ。
- IT 管理者がリモート ワイプを開始しました。
- 管理必要な条件付きアクセス ポリシーが満たされませんでした。
警告
アプリは、 WIPE_USER_DATA
通知と WIPE_USER_AUXILIARY_DATA
通知の両方に登録しないでください。
MANAGEMENT_REMOVED
MANAGEMENT_REMOVED
通知は、以前にポリシーで管理されたアカウントが管理されようとしていることをアプリに通知します。
アカウントが管理されなくなると、アプリは、そのアカウントの暗号化されたファイルを読み取ったり、 MAMDataProtectionManager
で暗号化されたアカウントのデータを読み取ったり、暗号化されたクリップボードと対話したり、マネージド アプリ エコシステムに参加したりできなくなります。
これには、ユーザー データのワイプやユーザーのサインアウトは必要ありません (ワイプが必要な場合は、 WIPE_USER_DATA
通知が送信されます)。
多くのアプリではこの通知を処理する必要がない場合がありますが、 MAMDataProtectionManager
を使用するアプリはこれを処理する必要があります。
詳細については、「 データ バッファー保護 」を参照してください。
SDK がアプリの MANAGEMENT_REMOVED
レシーバーを呼び出すと、次のようになります。
SDK は、アプリに属する以前に暗号化されたファイル (ただし、保護されていないデータ バッファー) を既に暗号化解除しています。 アプリに直接属していない sdcard 上のパブリックな場所にあるファイル (ドキュメントやダウンロード フォルダーなど) は暗号化解除されません。
レシーバー メソッドによって作成された新しいファイルまたは保護されたデータ バッファー (またはレシーバーの起動後に実行されているその他のコード) は暗号化されません。
アプリは引き続き暗号化キーにアクセスできるため、データ バッファーの暗号化解除などの操作は成功します。
アプリのレシーバーが戻ると、暗号化キーにアクセスできなくなります。
MAMNotificationReceiver の実装
SDK からの通知に登録するには、アプリで MAMNotificationReceiver を作成し、MAMNotificationReceiverRegistry に登録 する必要があります。
受信側を登録するには、 registerReceiver
をレシーバーに呼び出し、 Application.onCreate
メソッドで目的の通知の種類を呼び出します。
@Override
public void onCreate() {
super.onCreate();
MAMComponents.get(MAMNotificationReceiverRegistry.class)
.registerReceiver(
new ToastNotificationReceiver(),
MAMNotificationType.WIPE_USER_DATA);
}
アプリの MAMNotificationReceiver 実装には、 onReceive(MAMNotification notification)
メソッドを含める必要があります。
このメソッドは、受信した通知ごとに個別に呼び出され、 boolean
を返す必要があります。
通常、アプリケーションで通知に応答できない限り、このメソッドは常に true
を返す必要があります。
他の種類の Android レシーバーと同様に、アプリケーションには通知を処理する柔軟性があります。
- 個別の通知の種類に対して 個別の MAMNotificationReceiver 実装を作成できます (以下で説明します)。 この場合は、各実装と各通知の種類を個別に登録してください。
- 複数の異なる通知の種類に応答するためのロジックを含む 1 つの MAMNotificationReceiver 実装を使用できます。 この場合、応答できる通知の種類ごとに登録する必要があります。
- それぞれ同じ通知の種類に応答する複数の MAMNotificationReceiver 実装を作成できます。 この場合、両方とも同じ通知の種類に登録する必要があります。
ヒント
コールバックが UI スレッドで実行されていないため、 MAMNotificationReceiver.onReceive
でブロックしても安全です。
カスタム テーマ
カスタム テーマは、Intune App SDK に提供できます。このカスタム テーマは、すべての SDK 画面とダイアログに適用されます。 テーマが指定されていない場合は、既定の SDK テーマが使用されます。
カスタム テーマの提供
テーマを指定するには、 Application.onMAMCreate
メソッドに次のコード行を追加する必要があります。
MAMThemeManager.setAppTheme(R.style.AppTheme);
上記の例では、 R.style.AppTheme
を SDK に適用するスタイル テーマに置き換える必要があります。
信頼されたルート証明書の管理
アプリケーションで、内部 Web サイトとアプリケーションへの安全なアクセスを提供するためにオンプレミスまたはプライベート証明機関によって発行された SSL/TLS 証明書が必要な場合、Intune App SDK では、API クラス MAMTrustedRootCertsManager と MAMCertTrustWebViewClient を使用した証明書信頼管理のサポートが追加されました。
注:
MAMCertTrustWebViewClient では 、Android 10 以降がサポートされています。
信頼されたルート証明書管理では、次のサポートが提供されます。
- SSLContext
- SSLSocketFactory
- TrustManager
- WebView
要件
- 信頼されたルート証明書管理には、Microsoft Tunnel for Mobile Application Management ライセンスが必要です。 詳細については、「 Microsoft Tunnel with Mobile Application Management」を参照してください。
- Intune App Configuration ポリシーを構成して、信頼されたルート証明書を基幹業務アプリと Android 上の Edge に配信します。 「Microsoft Tunnel VPN を、Microsoft Intuneに登録していない Android デバイスで使用する」を参照してください。
注:
信頼されたルート証明書管理は、Microsoft Tunnel VPN Gatewayとは別に使用できますが、使用するには Microsoft MAM Tunnel のライセンスを付与する必要があります。
Intuneからの信頼されたルート証明書を使用してトラスト アンカーを確立する
信頼されたルート証明書管理を使用すると、アプリは、デバイスからの証明書と組み合わせてIntuneからの信頼されたルート証明書を使用できます。
デバイスの信頼されたルート証明書ストアに、オンプレミス リソースへのセキュリティで保護された接続を確立するために必要な信頼されたルート証明書が含まれていない場合、API クラス MAMTrustedRootCertsManager と MAMCertTrustWebViewClient は、フォールバック オプションとしてApp Configuration ポリシーを介して配信されるIntune信頼されたルート証明書を使用します。 これにより、アプリはデバイス証明書とIntune証明書の両方を使用して、セキュリティで保護された接続と信頼できるソースとの通信を確認できます。
ネットワーク セキュリティ設定を強化するために、アプリはネットワーク セキュリティ構成 XML ファイルを使用できます。 信頼されたルート証明書管理は、アプリのネットワーク セキュリティ構成 XML に次のいずれかの機能があるかどうかを確認することで、この追加のセキュリティを尊重します。
- 自己署名証明書などの追加の CA を含むカスタム信頼アンカー。
- 信頼された CA を制限するためのドメイン固有の規則。
- 特定のドメインの証明書のピン セット。
注:
Android ネットワーク セキュリティの構成の詳細については、「ネットワーク セキュリティの構成」を参照してください。
信頼が確認されているドメインに該当する場合、信頼されたルート証明書管理は、このドメインのカスタム信頼チェックをスキップし、プラットフォームの既定の信頼マネージャーのみがチェックを実行できるようにします。
MAMTrustedRootCertsManager クラス
このクラスには、次の API が用意されています。
-
createSSLContextForOID(String oid, String protocol)
: 指定した ID と指定した SSL/TLS プロトコルに対して信頼されたルート証明書を使用するSSLContext
オブジェクトを作成します。 このクラスから返されたSSLContext
オブジェクトは、デバイスと MAM サービスから結合された信頼されたルート証明書を使用するX509TrustManager
オブジェクトで既に正しく初期化されています。 -
createSSLSocketFactoryForOID(String oid, String protocol)
: 指定した ID と指定した SSL/TLS プロトコルに対して信頼されたルート証明書を使用するSSLSocketFactory
オブジェクトを作成します。 返されたSSLSocketFactory
オブジェクトは、このクラスの同じSSLContext
オブジェクトから参照されます。 -
createX509TrustManagersForOID(String oid)
: デバイスからの信頼されたルート証明書と、指定した ID の MAM サービスを組み合わせて使用するX509TrustManager
オブジェクトの配列を作成します。
注:
oid
パラメーターは、アプリケーションを実行している特定のユーザーのMicrosoft Entra ユーザー ID (OID) であることが予想されます。 ユーザー識別子が事前に不明な場合は、null の値を渡すことができます。MAM は、これらの API が呼び出されたスレッドまたはプロセスから正しい ID を検出しようとします。 MAM が ID を検出するには、プロセスまたはスレッドで ID を正しく設定する必要があります。 プロセスまたはスレッドでアクティブ ID を設定する方法の詳細については、「ステージ 5: マルチ ID」を参照してください。
注:
protocol
パラメーターが指定されていない場合は、プラットフォームでサポートされている最も高い SSL/TLS プロトコルが使用されます。
このクラスの使用例を次に示します。
HttpsUrlConnection の使用例
// Create an SSL socket factory using supplying the optional parameters identity and protocol
SSLSocketFactory sslSocketFactory = MAMTrustedRootCertsManager.createSSLSocketFactoryForOID(oid, "TLSv1.3");
// Create a URL object for the desired endpoint
URL url = new URL("https://example.com");
// Open a connection using the URL object
HttpsURLConnection httpsURLConnection = (HttpsURLConnection) url.openConnection();
// Set the SSL socket factory for the connection
httpsURLConnection.setSSLSocketFactory(sslSocketFactory);
// Perform any other configuration or operations on the connection as needed
...
OkHttpClient の使用例
// Get the TrustManager instances for an identity from the SDK
TrustManager[] trustManagers = MAMTrustedRootCertsManager.createX509TrustManagersForOID(oid);
// Get SSLContext from the platform
SSLContext sslContext = SSLContext.getInstance("TLSv1.3");
// Initialize the SSLContext with the trust managers from the Intune App SDK
sslContext.init(null, trustManagers, null);
// Create an OkHttpClient.Builder object
OkHttpClient.Builder builder = new OkHttpClient.Builder();
// Set the SSLSocketFactory and the trust managers from the SDK
builder.sslSocketFactory(sslContext.socketFactory, trustManagers[0] as X509TrustManager).build();
// Build an OkHttpClient object from the builder
OkHttpClient okHttpClient = builder.build();
// Create a Request object for the desired endpoint
Request request = new Request.Builder().url("https://example.com").build();
// Execute the request using the OkHttpClient object and get a Response object
Response response = okHttpClient.newCall(request).execute();
// Perform any other operations on the response as needed
...
MAMCertTrustWebViewClient クラス
このクラスは、WebView
の SSL エラー android.net.http.SslError.SSL_UNTRUSTED
を処理する方法を提供する Android クラス android.webkit.WebViewClient
のカスタム実装を提供します。 このエラーの処理では、クラスは、Intuneで構成され、MAM サービスから受信した信頼されたルート証明書を使用して、WebView
で SSL エラーを生成したターゲット URL からホストの信頼性をチェックします。 カスタム実装で SSL エラーが処理されない場合は、スーパークラスから継承された既定の動作が呼び出されます。 このクラスを使用する場合は、そのクラスのインスタンスを作成し、 WebView.setWebViewClient(WebViewClient)
を呼び出して WebView
インスタンスに登録する必要があります。
このクラスの使用例を次に示します。
WebView の使用例
// Get the MAM implementation of WebViewClient from the Intune App SDK
MAMCertTrustWebViewClient mamCertTrustWebViewClient = new MAMCertTrustWebViewClient();
// Set the MAM WebViewClient from the SDK as the current handler on the instance of WebView
webView.setWebViewClient(mamCertTrustWebViewClient);
// Perform any other operations on WebView
...
終了条件
テストを容易にするために、 ポリシーを変更して迅速にテスト する方法に関するページを参照してください。
制限への保存と制限からのオープンの検証
アプリとデバイスまたはクラウドストレージの場所間のデータ転送を制限するためのポリシーを実装していない場合はスキップします。
アプリがクラウド サービスまたはローカル データにデータを保存し、クラウド サービスまたはローカル データからデータを開くことができるすべてのシナリオで、自分を参照します。
わかりやすくするために、これらのテストでは、アプリ内の 1 つの場所から OneDrive for Business へのデータの保存と開き方のサポートのみがアプリに含まれているものとします。 ただし、すべての組み合わせを検証する必要があります。アプリでデータの保存が許可されているすべての場所に対してサポートされているすべての保存場所と、アプリでデータを開く場所に対してサポートされているすべての開いている場所を検証する必要があります。
これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。 追加:
- マネージド アカウントのポリシーを次のように設定します。
- "組織データを他のアプリに送信する" を "ポリシー管理アプリ" に送信します。
- "他のアプリからデータを受信する" から "ポリシー管理アプリ" に。
シナリオ | 前提 条件 | 手順 |
---|---|---|
に保存、完全に許可 | "組織データのコピーを保存する" ポリシーが "許可" に設定されている | - アプリがOneDrive for Businessにデータを保存できる場所に移動します。 - ドキュメントをOneDrive for Businessに保存し、アプリにログインしたのと同じマネージド アカウントに保存します。 - 保存が許可されていることを確認します。 |
に保存し、除外する | - "組織データのコピーを保存する" ポリシーが "ブロック" に設定されている - "選択したサービスへのコピーの保存をユーザーに許可する" ポリシーが "OneDrive for Business" のみに設定されている |
- アプリがOneDrive for Businessにデータを保存できる場所に移動します。 - ドキュメントをOneDrive for Businessに保存し、アプリにログインしたのと同じマネージド アカウントに保存します。 - 保存が許可されていることを確認します。 - アプリで許可されている場合は、ファイルを別のクラウド ストレージの場所に保存し、ブロックされていることを確認します。 |
に保存し、ブロックする | "組織データのコピーを保存する" ポリシーが "ブロック" に設定されている | - アプリがOneDrive for Businessにデータを保存できる場所に移動します。 - ドキュメントをOneDrive for Businessに保存し、アプリにログインしたのと同じマネージド アカウントに保存します。 - 保存がブロックされていることを確認します。 - アプリで許可されている場合は、ファイルを別のクラウド ストレージの場所に保存し、ブロックされていることを確認します。 |
から開き、完全に許可 | "組織ドキュメントにデータを開く" ポリシーが "許可" に設定されている | - アプリがOneDrive for Businessからデータを開くことができる場所に移動します。 - アプリのストレージにログインしたのと同じマネージド アカウントから、OneDrive for Businessからドキュメントを開こうとします。 - オープンが許可されていることを確認します。 |
から開く、除外する | - "組織ドキュメントにデータを開く" ポリシーが "ブロック" に設定されている - "ユーザーが選択したサービスからデータを開くことを許可する" ポリシーが "OneDrive for Business" のみに設定されている |
- アプリがOneDrive for Businessからデータを開くことができる場所に移動します。 - アプリのストレージにログインしたのと同じマネージド アカウントから、OneDrive for Businessからドキュメントを開こうとします。 - オープンが許可されていることを確認します。 - アプリで許可されている場合は、別のクラウド ストレージの場所から別のファイルを開き、ブロックされていることを確認します。 |
から開く、ブロックする | "組織ドキュメントにデータを開く" ポリシーが "ブロック" に設定されている | - アプリがOneDrive for Businessからデータを開くことができる場所に移動します。 - アプリのストレージにログインしたのと同じマネージド アカウントから、OneDrive for Businessからドキュメントを開こうとします。 - 開いているがブロックされていることを確認します。 - アプリで許可されている場合は、別のクラウド ストレージの場所から別のファイルを開き、ブロックされていることを確認します。 |
通知の制限の検証
通知内のコンテンツを制限するためのポリシーを実装していない場合はスキップします。
App Protection Policy に関する限り、アプリケーションで次の 3 種類の通知が発生する可能性があります。
- アカウント データを含まない通知。
- マネージド アカウントに属するデータを含む通知。
- アンマネージド アカウントに属するデータを含む通知。
アプリケーションが単一 ID の場合、唯一のアカウントが管理されていない場合は保護が適用されないので、最初の 2 つだけが関連します。
通知の制限は、異なるポリシー値が構成された 3 種類の通知をすべてトリガーすることで検証できます。
これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。 アプリがマルチ ID の場合は、アンマネージド アカウントを使用してアプリにもログインします。
シナリオ | 前提 条件 | 手順 |
---|---|---|
完全なコンテンツがブロックされました | "組織データ通知" ポリシーが "ブロック" に設定されている | - アカウント データなしで通知を起動するようにアプリをトリガーします。 - この通知にコンテンツが表示されないようにします。 - アプリをトリガーして、マネージド アカウントのデータを使用して通知を起動します。 - この通知にコンテンツが表示されないようにします。 - アプリをトリガーして、アンマネージド アカウントのデータで通知を起動します。 - この通知にコンテンツが表示されないようにします。 |
部分的なコンテンツのブロック | "組織データ通知" ポリシーが "組織データのブロック" に設定されている | - アカウント データなしで通知を起動するようにアプリをトリガーします。 - この通知に完全なコンテンツが表示されていることを確認します。 - アプリをトリガーして、マネージド アカウントのデータを使用して通知を起動します。 - この通知によってマネージド アカウントのコンテンツが編集されていることを確認します。 - アプリをトリガーして、アンマネージド アカウントのデータで通知を起動します。 - この通知に完全なコンテンツが表示されていることを確認します。 |
コンテンツがブロックされていない | "組織データ通知" ポリシーが "許可" に設定されている |
データのバックアップと復元の検証
バックアップ データを保護するためのポリシーを実装していない場合はスキップします。
アプリがバックアップ用に構成したコンテンツ (ファイルやキーと値のペア) について理解し直してください。 予期されるコンテンツ のみが 復元の一部であることを検証する必要があります。 復元に余分なコンテンツが含まれると、データ リークが発生する可能性があります。
これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。 アプリがマルチ ID の場合は、アンマネージド アカウントを使用してアプリにもログインします。
バックアップをテストするには、Android の公式の指示に従ってください。 これらの手順は、自動バックアップとキー/値のバックアップでは異なるため、密接に従ってください。
ポリシーに対するカスタム画面キャプチャの検証
カスタム画面キャプチャの制限を実装していない場合はスキップします。
アプリケーションに Android の Window
レベルの FLAG_SECURE
をバイパスする機能がある場合は、この機能がアプリ保護ポリシーの画面キャプチャ制限によってブロックされていることを検証します。
これらのテストでは、アプリとIntune ポータル サイトをインストールし、テストを開始する前にマネージド アカウントでログインします。
シナリオ | 前提 条件 | 手順 |
---|---|---|
スクリーン キャプチャがブロックされました | "スクリーン キャプチャと Google アシスタント" ポリシーが "ブロック" に設定されている | - カスタム FLAG_SECURE コードを利用するアプリ内の場所に移動します。 - その機能の利用を試みます。 - 機能がブロックされていることを確認します。 |
許可された画面キャプチャ | "スクリーン キャプチャと Google アシスタント" ポリシーが "許可" に設定されている | - カスタム FLAG_SECURE コードを利用するアプリ内の場所に移動します。 - その機能の利用を試みます。 - 機能が許可されていることを確認します。 |
App Protection CA の検証
サポート アプリ保護 CA を実装していない場合はスキップします。
アプリ保護ポリシーを作成してアプリとテスト アカウントに割り当てる一般的な検証手順に加えて、アプリ保護条件付きアクセス ポリシーを作成してテスト アカウントに割り当てる必要もあります。 詳細については、「Intuneを使用してアプリベースの条件付きアクセス ポリシーを設定する」を参照してください。
テスト手順:
- このテストを開始する前に、Microsoft Authenticator をアンインストールしてIntune ポータル サイトします。
- アプリをインストールします。
- アプリ保護ポリシーとアプリ ベースの CA ポリシーの両方を対象とするテスト アカウントでアプリにログインします。
- アプリでポータル サイトのインストールを求めるメッセージが表示されていることを確認します。
- もう一度ログインします。
- デバイスの登録を求めるメッセージが表示されていることを確認します。 プロンプトに従います。 ここで登録を求めるメッセージが表示されない場合は、テスト デバイスが他の SDK 対応アプリ、ポータル サイト、Authenticator を最初にアンインストールしたことを確認します。 それでもプロンプトが表示されない場合は、上記の実装手順を見直してください。
- 登録後にすべてのアプリ データにアクセスできることを確認します。
通知レシーバーの検証
SDK からの通知の登録を実装していない場合はスキップします。
検証手順は、アプリが登録した通知の種類によって異なります。 すべての種類の通知に対してログ記録を追加して、受信者が適切に呼び出されていることを確認します。
MAM_ENROLLMENT_RESULT
は、アプリ保護ポリシーを対象とするアカウントを使用してアプリケーションに最初にログインするだけでトリガーできます。
REFRESH_APP_CONFIG
REFRESH_POLICY
は、テスト アカウントを対象とするそれぞれのApp Configuration ポリシーとアプリ保護ポリシーを更新し、SDK が更新されたポリシーを受け取るのを待機することでトリガーできます。
ヒント
このプロセスを高速化するには、「 ポリシーの変更による迅速なテスト 」を参照してください。
MANAGEMENT_REMOVED
、WIPE_USER_DATA
、WIPE_USER_AUXILIARY_DATA
、WIPE_COMPLETED
通知はすべて、Microsoft Intuneから選択的ワイプを発行することによってトリガーできます。
カスタム テーマの検証
カスタム テーマを実装していない場合はスキップします。
カスタム テーマのサポートは、SDK のダイアログで色を調べることで検証できます。 チェックする最も簡単なダイアログは、MAM PIN 画面です。
前提 条件:
- マネージド アカウントのポリシーを次のように設定します。
- "アクセスの PIN" を "必須" に設定します。
- アプリとIntune ポータル サイトをインストールします。
テスト手順:
- アプリケーションを起動し、テスト アカウントでログインします。
- MAM PIN 画面が表示され、SDK に指定したカスタム テーマに基づいてテーマが設定されていることを確認します。
次の手順
このガイドに従い、上記のすべての終了条件を完了した場合、アプリは Intune App SDK と完全に統合され、アプリ保護ポリシーを適用できるようになりました。 前のアプリ参加セクション (ステージ 5: マルチ ID とステージ 6: App Configuration) のいずれかをスキップし、アプリでこれらの機能をサポートする必要があるかどうかわからない場合は、SDK 統合の主要な決定事項に関するページを参照してください。
アプリ保護は、アプリのコア シナリオになりました。 アプリの開発を続ける場合は、このガイドと 付録 を引き続き参照してください。