このページでは、Android 10 で導入されたエンタープライズ向けの新しい API、機能、動作変更の概要について説明します。
会社所有デバイスの仕事用プロファイル
Android 10 では、仕事用プロファイルだけを必要とする会社所有デバイスを対象に、新しいプロビジョニング機能と構成証明機能が導入されています。
仕事用プロファイル向けのプロビジョニング ツールの改善
QR コードまたはゼロタッチを使用して登録した Android 10 以降のデバイスに、仕事用プロファイルをプロビジョニングできます。会社所有デバイスのプロビジョニング中、新しいインテント エクストラにより、Device Policy Controller アプリ(DPC)は仕事用プロファイルまたは完全管理型セットアップを開始できます。 仕事用プロファイルが作成されるか完全管理が確立された後、DPC はポリシー コンプライアンス画面を起動して、初期ポリシーを適用する必要があります。
DPC のマニフェスト ファイルで、アクティビティに
GET_PROVISIONING_MODE
の新しいインテント フィルタを宣言し、BIND_DEVICE_ADMIN
権限を追加して、任意のアプリがアクティビティを開始できないようにします。例:
<activity
android:name=".GetProvisioningModeActivity"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<intent-filter>
<action
android:name="android.app.action.GET_PROVISIONING_MODE" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
プロビジョニング中に、システムはインテント フィルタに関連付けられたアクティビティを起動します。このアクティビティの目的は、管理モード(仕事用プロファイルまたは完全管理型)を指定することです。
デバイスの適切な管理モードを決定する前にプロビジョニング エクストラを取得すると便利です。アクティビティで
getIntent() を呼び出して
以下を取得できます。
また、DPC は、新しい結果インテントを作成して、以下のエクストラを追加することもできます。
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE: 既存のバンドルに追加するか、新しいバンドルを作成します。このバンドルは、DPC がポリシー コンプライアンス画面を起動したときに、インテント エクストラとして送信されます。EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE: 仕事用プロファイルのプロビジョニングの一部として仕事用アカウントを追加する場合にのみ、移行するアカウントを指定します。EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS
デバイス上で管理モードを設定するには、
putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode) を呼び出します。ここで、desiredProvisioningMode は次のいずれかです。
- 仕事用プロファイル:
PROVISIONING_MODE_MANAGED_PROFILE - 完全管理型:
PROVISIONING_MODE_FULLY_MANAGED_DEVICE
setResult(RESULT_OK,
Intent) を使用してプロビジョニング
の詳細をセットアップに送信し、
finish() ですべてのアクティブな画面を閉じることで、仕事用プロファイルまたは完全管理型のプロビジョニングを完了します。
プロビジョニングが完了すると、新しいインテントが利用可能になり、DPC がコンプライアンス画面を起動して初期ポリシー設定を適用できるようになります。仕事用プロファイル デバイスでは、コンプライアンス画面が仕事用プロファイルに表示されます。ユーザーがセットアップ フローから抜けた場合でも、DPC はコンプライアンス画面を必ずユーザーに表示する必要があります。
DPC のマニフェスト ファイルで、アクティビティに
ADMIN_POLICY_COMPLIANCE
の新しいインテント フィルタを宣言し、BIND_DEVICE_ADMIN
権限を追加して、任意のアプリがアクティビティを開始できないようにします。例:
<activity
android:name=".PolicyComplianceActivity"
android:label="@string/app_name"
android:permission="android.permission.BIND_DEVICE_ADMIN">
<intent-filter>
<action android:name="android.app.action.ADMIN_POLICY_COMPLIANCE" />
<category android:name="android.intent.category.DEFAULT"/>
</intent-filter>
</activity>
DPC は、
ACTION_PROFILE_PROVISIONING_COMPLETE
ブロードキャストをリッスンするのではなく、この新しいインテントを使用する必要があります。
インテント フィルタに関連付けられたアクティビティは、
getIntent() を呼び出して
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE を取得できます。
ポリシー コンプライアンスを実行した後、ADMIN_POLICY_COMPLIANCE は setResult(RESULT_OK,
Intent) を返し、
finish() ですべてのアクティブな画面を閉じる必要があります。
完全管理対象デバイスの場合は、ホーム画面に戻ります。仕事用プロファイル デバイスの場合は、ホーム画面に戻る前に、個人アカウントを追加するようユーザーに促すプロンプトが表示されます。
仕事用プロファイルのデバイス ID 構成証明
ゼロタッチ登録を使用してプロビジョニングされた仕事用プロファイルの管理コンポーネントとして設定された DPC は、セキュア ハードウェア構成証明型のデバイス ID(IMEI や製造元のシリアル番号)を取得できます。デバイスは、セキュア ハードウェア(高信頼実行環境(TEE)やセキュア エレメント(SE)など)を内蔵し、デバイス ID 構成証明とゼロタッチ登録をサポートする必要があります。
仕事用プロファイルの管理コンポーネントは、DevicePolicyManager.generateKeyPair() を呼び出し、idAttestationFlags 引数に ID_TYPE_SERIAL、ID_TYPE_IMEI、ID_TYPE_MEID の 1 つ以上を渡すことができます。
デバイス ID の抽出と検証について詳しくは、キー構成証明を使用してハードウェア格納型キーペアを検証するをご覧ください。
仕事用プロファイルの改善
クロスプロファイル カレンダーを表示する機能と、提供元不明のアプリのインストールをデバイス全体でブロックする機能を提供する新しい API が利用可能です。
仕事用プロファイルを使用して提供元不明のアプリをデバイス全体で制限する
Google Play(または他の信頼できるアプリストア)以外の提供元からダウンロードするアプリを、提供元不明のアプリと呼びます。Android 10 では、仕事用プロファイルの管理コンポーネントは、新しいユーザー制限
DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLYを追加することで、デバイス上の任意の場所で、ユーザーやプロファイルが提供元不明のアプリをインストールできないようにすることができます。
ただし、この制限を追加した後でも、デバイスを使用しているユーザーは
adbを使用してアプリをインストールできます。
ユーザーが誤って提供元不明のアプリをインストールするのを防ぐため、このユーザー制限を追加することをおすすめします(Google Play 開発者サービスをインストールする必要はありません)。古いバージョンの Android をサポートする場合は、Google Play 向けの管理対象設定値を 指定してください。
許可対象の入力デバイスを仕事用プロファイルだけに制限する
仕事用プロファイルの管理コンポーネントで DevicePolicyManager.setPermittedInputMethods() を呼び出すと、デバイス全体ではなく仕事用プロファイルの中だけで、ユーザーが許可されていない入力方法を使用することを防止できます。ただし、デバイスの個人用プロファイルにおける入力方法
は、各ユーザーが完全に制御できます。
仕事用プロファイルを通知せずにワイプする
DevicePolicyManager.wipeData() に WIPE_SILENTLY フラグが追加されました。
このフラグが設定されている場合、仕事用プロファイルがワイプされた後、ユーザーに通知されません
wipeData()。
完全管理対象デバイスの新機能
Android 10 では、完全管理対象デバイス向けに新しい機能と API が導入されています。手動でシステム アップデートをインストールできるようになり、QR コードと NFC を使用したプロビジョニングが拡張されて EAP Wi-Fi ネットワークの認証情報を組み込むことが可能になり、DNS over TLS がサポートされるようになりました。
手動によるシステム アップデートのインストール
Android 10 では、完全管理対象デバイスの管理コンポーネントは、システム アップデート ファイルを使用してシステム アップデートをインストールできます。手動システム アップデートにより、IT 管理者は次のことができるようになります。
- 全体にインストールする前に、少数のデバイスでアップデートをテストできます。
- 帯域幅が制限されたネットワークで、ダウンロードの重複を回避できます。
- インストールのタイミングをずらしたり、デバイスが使用されていないときだけにアップデートしたりすることができます。
IT 管理者はまず、延期用システム アップデート ポリシー
を設定して、自動インストールを遅らせます(必要な場合)。次に、デバイスの DPC がinstallSystemUpdate()
デバイスの製造元のシステム アップデート ファイルのパスを指定して呼び出します。デバイスの再起動前に発生したエラーをシステムが報告するために使用できる InstallSystemUpdateCallback
オブジェクトを渡します。問題が発生した場合、システムは onInstallUpdateError()
エラーコードを指定して呼び出します。
デバイスの再起動後、DPC はインストールが成功したことを確認する必要があります
Version API(
Build.FINGERPRINTなど)を使用して。アップデートが失敗した場合は、IT 管理者に報告してください。
EAP Wi-Fi プロビジョニング
Android 10 では、デバイスのプロビジョニングに使用される QR コードと NFC データに、EAP 構成と認証情報(証明書を含む)を挿入できます。ユーザーが QR コードをスキャンするか NFC タグをタップすると、デバイスは EAP を使用して自動的にローカル Wi-Fi ネットワークの認証を受け、プロビジョニング プロセスを開始します。追加の手動入力は一切不要です。
EAP を使用して Wi-Fi を認証するには、
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
値が "EAP" のエクストラを追加します。EAP 認証を指定する場合、以下のプロビジョニング エクストラをインテントに追加できます。
EXTRA_PROVISIONING_WIFI_EAP_METHODEXTRA_PROVISIONING_WIFI_IDENTITYEXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITYEXTRA_PROVISIONING_WIFI_DOMAINEXTRA_PROVISIONING_WIFI_PHASE2_AUTHEXTRA_PROVISIONING_WIFI_USER_CERTIFICATEEXTRA_PROVISIONING_WIFI_CA_CERTIFICATE
プライベート DNS のサポート
組織は、内部ホスト名を含む DNS クエリの漏洩を防ぐために、DNS over TLS (Android デバイスではプライベート DNSと呼びます)を使用できます。デバイスのプライベート DNS の設定は、完全管理対象デバイスの管理コンポーネントで制御できます。プライベート DNS モードを設定するには、以下のメソッドを呼び出します。
setGlobalPrivateDnsModeOpportunistic(): システムがサポート ネームサーバーの検出に成功したとき、デバイスがプライベート DNS を使用できるようにします。setGlobalPrivateDnsModeSpecifiedHost()privateDnsHost引数で RFC7858 をサポートするネームサーバーのホスト名を指定します。
DPC がこれらのメソッドのいずれかを呼び出すと、呼び出しが成功した場合は PRIVATE_DNS_SET_NO_ERROR が返されます。失敗した場合はエラーが返されます。
デバイスに設定されているプライベート DNS モードとホストを取得するには、getGlobalPrivateDnsMode()
と getGlobalPrivateDnsHost() を呼び出します。
DISALLOW_CONFIG_PRIVATE_DNS
ユーザー制限を追加すると、ユーザーによるプライベート DNS 設定の変更を防止できます。
VPN ロックダウン モードの適用除外
VPN ロックダウン モードを使用すると、DPC は VPN を使用していないネットワーク トラフィックをブロックできます。完全管理対象デバイスと仕事用プロファイルの管理コンポーネントは、ロックダウンモードからアプリを除外できます。除外されたアプリはデフォルトで VPN を使用しますが、VPN が利用できない場合は自動的に他のネットワークに接続します。VPN へのアクセスが明示的に拒否されている除外アプリは、他のネットワークのみを使用します。
アプリをロックダウン モードから除外するには、除外されたアプリ パッケージのリストを受け取る新しい
DevicePolicyManagerメソッド
setAlwaysOnVpnPackage()
を呼び出します。DPC
が追加するアプリパッケージは、メソッドが呼び出されたときにデバイスにインストールされている必要があります。アプリをアンインストールして再インストールする場合は、アプリを再度除外する必要があります。ロックダウンモードから以前に除外されたアプリを取得するには、
を呼び出します
getAlwaysOnVpnLockdownWhitelist()。
完全管理対象デバイスと仕事用プロファイルの管理コンポーネントがロックダウン モードのステータスを取得できるように、Android 10 では
isAlwaysOnVpnLockdownEnabled()
メソッドが追加されています。
新しい委任スコープ
Android 10 では、DPC が他のより専門的なアプリに委任できる機能のリストが拡張されています。Android
では、タスクに必要な API メソッドがスコープにグループ化されます。 スコープを委任するには、
setDelegatedScopes()
を呼び出し、次のスコープの 1 つ以上を渡します。
Android 10 では、委任先アプリ用に新しいクラス
DelegatedAdminReceiver
が導入されています。システムは、このブロードキャスト レシーバを使用して、DPC
と同様のコールバックを委任先アプリに送信します。ネットワーク アクティビティ
ロギングや証明書選択を委任されるアプリは、このクラスを実装している必要があります。このコンポーネントを委任先アプリに追加する手順は次のとおりです。
- 委任先アプリに
DelegatedAdminReceiverのサブクラスを追加します。 - アプリ マニフェストで
<receiver>を宣言し、コールバックごとにインテント フィルタ アクションを追加します。例:ACTION_NETWORK_LOGS_AVAILABLEまたはACTION_CHOOSE_PRIVATE_KEY_ALIAS。 BIND_DEVICE_ADMIN権限でブロードキャスト レシーバを保護します。
次のスニペットは、ネットワーク ロギングと証明書選択の両方を処理する単一の委任先アプリのアプリ マニフェストを示しています。
<receiver android:name=".app.DelegatedAdminReceiver"
android:permission="android.permission.BIND_DELEGATED_ADMIN">
<intent-filter>
<action android:name="android.app.admin.action.NETWORK_LOGS_AVAILABLE">
<action android:name="android.app.action.CHOOSE_PRIVATE_KEY_ALIAS">
</intent-filter>
</receiver>
ネットワーク アクティビティ ログ
組織がマルウェアを検出、トラッキングできるようにするため、DPC は、システムによる TCP 接続 と DNS ルックアップのログを記録できます。Android 10 では、 完全管理対象デバイスの管理コンポーネントは、ネットワークロギングを専用アプリに委任できます。
システムがバッチを利用可能にした後にネットワーク ログを取得するには、委任先アプリがまず
をサブクラス化する必要があります
DelegatedAdminReceiver
(前述の説明を参照)。サブクラスで、
onNetworkLogsAvailable()
コールバックをログの取得のガイダンスに沿って実装します。
委任先アプリは、次の
DevicePolicyManagerメソッドを呼び出すことができます(nullをadmin引数に渡します)。
ログが失われないようにするため、別のアプリに委任する場合は、DPC はネットワーク ロギングを有効にしないでください
。委任先アプリの方でネットワーク ロギングを有効にし、
ログを収集してください。DPC がネットワーク ロギングを委任すると、以降の
onNetworkLogsAvailable()
コールバックは受信されません。
委任先アプリからネットワーク アクティビティ ロギングについてレポートする方法については、 デベロッパー ガイドのネットワーク アクティビティ ロギングをご覧ください。
証明書選択
Android 10 では、管理コンポーネントは、 完全管理対象デバイス、仕事用プロファイル、およびセカンダリ ユーザーの 証明書選択を専用アプリに委任できます。
証明書エイリアスを選択するには、委任先アプリがまず
DelegatedAdminReceiver
をサブクラス化する必要があります(前述の説明を参照)。サブクラスで、
onChoosePrivateKeyAlias() コールバックを実装し、優先する
証明書のエイリアスを返します。または、ユーザーに証明書の選択を求める場合は、null を返します。
デバイス管理ポリシーのサポート終了
Android 10 では、アプリと DPC が従来の デバイス
管理ポリシーを適用できなくなりました。お客様とパートナーの皆様には、完全管理対象デバイスまたは仕事用プロファイルに移行することをおすすめします。Android 10 を対象とするデバイス管理コンポーネントによって呼び出されると、次の
ポリシーで SecurityException
がスローされます。
USES_POLICY_DISABLE_CAMERAUSES_POLICY_DISABLE_KEYGUARD_FEATURESUSES_POLICY_EXPIRE_PASSWORDUSES_POLICY_LIMIT_PASSWORD
アプリによっては、ユーザーのデバイス管理のためにデバイス管理コンポーネントを利用している場合があります。たとえば、紛失したデバイスのロックとワイプなどです。これを有効にするため、次のポリシーは引き続き使用できます。
こうした変更について詳しくは、デバイス管理アプリ のサポート終了の記事をご覧ください。
アプリの新機能
Android 10
を対象とするアプリは、機密データの表示または重要な機能の起動を行う前に、デバイスに設定されている画面ロックの複雑さを調べることができます。KeyChain API を呼び出すアプリが動作の改善によるメリットを得られる一方、VPN アプリ向けの新機能も用意されています。
画面ロックの品質チェック
Android 10 以降、画面ロックを必要とする重要な機能を持つアプリは、デバイスまたは仕事用プロファイルの画面ロックの複雑さを調べることができます。より強力な画面ロックが必要なアプリは、ユーザーをシステムの画面ロック設定に誘導して、セキュリティ設定を更新できるようにします。
画面ロックの品質をチェックするには:
- アプリのマニフェストに新しい
REQUEST_PASSWORD_COMPLEXITY権限を追加します。 DevicePolicyManager.getPasswordComplexity(). を呼び出します。複雑さは 4 つのカテゴリに分類されます。
システムの画面ロック設定を起動するには、
ACTION_SET_NEW_PASSWORD
とEXTRA_PASSWORD_COMPLEXITYエクストラを使用します。インテント エクストラで指定された複雑さを満たさないオプションはグレー表示されます。ユーザーは、使用可能な画面ロック
オプションを選択するか、画面を終了できます。
おすすめの方法: システムの画面ロックページを起動する前に、アプリにメッセージを表示します。アプリが再開したら、
DevicePolicyManager.getPasswordComplexity()
を再度呼び出します。より強力な画面ロックが引き続き必要な場合は、ユーザーにセキュリティ設定の更新を繰り返し求めるのではなく、アクセスを制限します。
VPN アプリにおける HTTP プロキシのサポート
Android 10 では、VPN アプリは VPN 接続で HTTP プロキシ
を設定できます。HTTP プロキシを追加するには、VPN アプリが
ProxyInfo インスタンスをホストとポートで構成する必要があります。
その後に
VpnService.Builder.setHttpProxy() を呼び出します。
このプロキシ設定はシステムとさまざまなネットワーク ライブラリが使用しますが、システムがアプリに対し、HTTP
リクエストのプロキシ設定を強制することはありません。
HTTP プロキシを設定する方法を示すサンプルコードについては、 ToyVPN サンプルアプリをご覧ください。
VPN サービスモード
VPN アプリは、常時接続 VPN によってサービスが実行されているかどうかと、ロックダウン モードがアクティブかどうかを検出できます。Android 10 で追加された新しいメソッドを使用すると、ユーザー インターフェースを調整できます。たとえば、常時接続 VPN がサービスのライフサイクルを制御している間、アプリの切断ボタンを無効にできます。
VPN アプリは、サービスに接続してローカル インターフェースを確立した後、次の VpnService
メソッドを呼び出すことができます。
isAlwaysOn(): 常時接続 VPN によってシステムがサービスを開始したかどうかを調べます。isLockdownEnabled(): システムが VPN を使用しない接続をブロックしているかどうかを調べます。
サービスが実行されている間、常時接続ステータスは変わりませんが、ロックダウン モードのステータスは変更される可能性があります。
KeyChain の改善
Android 10 では、
KeyChain API に関するいくつかの改善が導入されています。
アプリが KeyChain.choosePrivateKeyAlias()
を呼び出すと、その発行者と、呼び出しに指定された鍵アルゴリズムに基づいて、Android 10
以降のデバイスはユーザーが選択できる証明書リストをフィルタリングします。
たとえば、TLS サーバーが 証明書リクエスト
メッセージを TLS ハンドシェイクの一部として送信し、ブラウザが
KeyChain.choosePrivateKeyAlias()を呼び出すと、証明書選択プロンプトには発行者のパラメータに一致するオプションだけが表示されます。一致するオプションがない場合や、デバイスに証明書がインストールされていない場合は、選択プロンプトはユーザーに表示されません。
さらに、KeyChain では、鍵または CA 証明書のインポートが可能になる前に、デバイスが画面をロックする必要がなくなりました。