エンタープライズ向け Android の新機能

このページでは、Android Q で導入されたエンタープライズ向けの新しい API、機能、動作変更の概要について説明します。

会社所有デバイスの仕事用プロファイル

Android Q では、仕事用プロファイルだけを必要としている会社所有デバイスを対象に、新しいプロビジョニング機能と構成証明機能が導入されています。

仕事用プロファイル向けのプロビジョニング ツールの改善

QR コードまたはゼロタッチを使用して登録した Android Q 以降のデバイス上で、仕事用プロファイルをプロビジョニングできるようになりました。会社所有デバイスのプロビジョニング中に、新しいインテント エクストラにより、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: 仕事用プロファイルのプロビジョニングの一部として仕事用アカウントを追加する場合にのみ、移行するアカウントを指定します。

デバイスの管理モードを設定するには、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_COMPLIANCEsetResult(RESULT_OK, Intent) を返し、finish() でアクティブな画面をすべて閉じる必要があります。

完全管理対象デバイスの場合は、ホーム画面に戻ります。仕事用プロファイル デバイスの場合は、ホーム画面に戻る前に、個人アカウントを追加するようユーザーに促すプロンプトが表示されます。

仕事用プロファイルのデバイス ID 構成証明

ゼロタッチ登録を使用してプロビジョニングされた仕事用プロファイルの管理アプリとして設定された DPC は、IMEI や製造元のシリアル番号など、セキュア ハードウェア構成証明型のデバイス ID を取得できるようになりました。デバイスは、セキュア ハードウェア(高信頼実行環境(TEE)、セキュア エレメント(SE)など)を内蔵し、デバイス ID 構成証明とゼロタッチ登録をサポートする必要があります。

仕事用プロファイルの管理コンポーネントは、DevicePolicyManager.generateKeyPair() を呼び出して、ID_TYPE_SERIALID_TYPE_IMEIID_TYPE_MEID のうちの 1 つまたは複数を idAttestationFlags 引数で渡すことができます。

デバイス ID の抽出と検証について詳しくは、キーの構成証明を使用してハードウェア格納型キーペアを検証する方法についての記事をご覧ください。

仕事用プロファイルの改善

新しい API が用意され、クロスプロファイル カレンダーを表示したり、提供元不明のアプリをインストールできないようにデバイス全体でブロックしたりできるようになりました。

仕事用プロファイル カレンダーへのアクセス

個人用プロファイルで稼働しているアプリ内で、仕事用プロファイルのカレンダーの予定を表示できます。仕事用プロファイルのカレンダー データのクエリを行うには、以下のコンテンツ プロバイダ URI を使用して Calendar Provider API を呼び出します。

仕事用プロファイル カレンダーを利用できない場合、クエリは null を返します。IT 管理者がアクセスをブロックしている場合や、仕事用プロファイルがオフになっている場合は、仕事用プロファイル カレンダーは利用できません。また、デバイスを使用しているユーザーは、[設定] で、クロスプロファイル カレンダーをオフにすることができます。

個人用プロファイルで稼働しているアプリは、仕事の予定を表示したり、仕事の予定を編集しようとしているユーザーを仕事用プロファイル内の同じ予定に誘導したりすることができます。アプリが個人用プロファイルと仕事用プロファイルの両方にインストールされている場合は、startViewCalendarEventInManagedProfile() を呼び出します。クロスプロファイル カレンダーの予定をサポートするアプリは、ACTION_VIEW_MANAGED_PROFILE_CALENDAR_EVENT アクションを処理する必要があります。以下のインテント エクストラから取得したデータを使用して既存の予定を表示できるように、ユーザー インターフェースを準備してください。

仕事用プロファイル カレンダーに対するアクセス権限を管理する

IT 管理者は、仕事用プロファイルから個人用プロファイルへのカレンダー情報の共有をブロックすることができます。仕事用プロファイル カレンダーへのアクセスを許可するには、仕事用プロファイルの管理コンポーネントで setCrossProfileCalendarPackages() を呼び出す必要があります。

このメソッドが呼び出されない場合や、空のセットを指定して呼び出される場合は、仕事用プロファイル カレンダーを読み取れるアプリがなくなります。仕事用プロファイル カレンダーを読み取るアクセス権をすべてのアプリに付与するには、null を渡します。アプリの特定のセットだけが仕事用プロファイル カレンダーを読み取るようにするには、それらのアプリのパッケージ名を渡します。

以前に設定したアプリ パッケージを取得するには、仕事用プロファイルの管理コンポーネントで getCrossProfileCalendarPackages() を呼び出します。

提供元不明のアプリを仕事用プロファイル内だけでなく、デバイス全体で制限する

Google Play(または他の信頼できるアプリストア)以外の提供元からダウンロードしたアプリは、「提供元不明のアプリ」と呼ばれます。Android Q では、仕事用プロファイルの管理アプリが新しいユーザー制限 DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY を追加することで、どのユーザーやプロファイルも提供元不明のアプリをデバイス上にインストールできないように設定できます。ただし、この制限を追加した後も、デバイスのユーザーが adb を使用してアプリをインストールすることは可能です。

ユーザーが誤って提供元不明のアプリをインストールするのを防ぐため、このユーザー制限を追加することをおすすめします(Google Play 開発者サービスをインストールする必要はありません)。古いバージョンの Android をサポートする場合は、Google Play 向けの管理対象設定値を指定してください。

許可対象の入力デバイスを仕事用プロファイルだけに制限する

仕事用プロファイルの管理アプリが DevicePolicyManager.setPermittedInputMethods() を呼び出すと、デバイス全体ではなく仕事用プロファイル内に限り、ユーザーは許可されている入力方法以外を使用できなくなります。ただし、デバイスの個人用プロファイルでの入力方法は、各ユーザーが完全に制御できます。

仕事用プロファイルを通知せずにワイプする

新しい WIPE_SILENTLY フラグが DevicePolicyManager.wipeData() に追加されました。このフラグが設定されていると、wipeData() を使って仕事用プロファイルがワイプされてもユーザーには通知されません。

完全管理対象デバイスの新機能

Android Q では、完全管理型デバイス向けに新しい機能と API が導入されています。手動でシステム アップデートをインストールできるようになり、QR コードや NFC を使用したプロビジョニングが拡張されて EAP Wi-Fi ネットワークの認証情報を組み込むことが可能になり、DNS over TLS がサポートされるようになりました。

手動によるシステム アップデートのインストール

Android Q では、完全管理型デバイスの管理アプリは、システム アップデート ファイル経由でシステム アップデートをインストールできます。手動システム アップデートにより、IT 管理者は次のことができるようになります。

  • 全体にインストールする前に、少数のデバイスでアップデートをテストできます。
  • 帯域幅が制限されたネットワークで、ダウンロードの重複を回避できます。
  • インストールのタイミングをずらしたり、デバイスが使用されていないときだけにアップデートしたりすることができます。

IT 管理者はまず、延期用システム アップデート ポリシーを設定して、自動インストールを遅らせます(必要な場合)。次に、デバイスの DPC がデバイス メーカーのシステム アップデート ファイルのパスを指定して installSystemUpdate() を呼び出します。デバイスの再起動前に発生したエラーをシステムがレポートする際に使用できる InstallSystemUpdateCallback オブジェクトを渡します。問題が発生した場合、システムはエラーコードを指定して onInstallUpdateError() を呼び出します。

デバイスの再起動後、DPC は Version API(Build.FINGERPRINT など)を使用してインストールの成功を確認する必要があります。更新が失敗していた場合は、IT 管理者に報告します。

EAP Wi-Fi プロビジョニング

Android Q では、デバイスのプロビジョニングに使用する QR コードや NFC データに、EAP の設定や認証情報を含めることができます(証明書を含む)。ユーザーが QR コードをスキャンするか NFC タグをタップすると、デバイスは EAP を使用して自動的にローカル Wi-Fi ネットワークの認証を受け、プロビジョニング プロセスを開始します。追加の手動入力は一切不要です。

EAP を使用して Wi-Fi を認証するには、値 "EAP" を指定して EXTRA_PROVISIONING_WIFI_SECURITY_TYPE エクストラを追加します。EAP 認証を指定する場合、以下のプロビジョニング エクストラをインテントに追加できます。

プライベート DNS のサポート

組織は、内部ホスト名などの DNS クエリの漏洩を防ぐために、DNS over TLS(Android デバイス上では「プライベート DNS」と呼ばれます)を使用できます。デバイスのプライベート DNS の設定は、完全管理対象デバイスの管理コンポーネントで制御できます。プライベート DNS モードを設定するには、以下のメソッドを呼び出します。

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 Q では isAlwaysOnVpnLockdownEnabled() メソッドが追加されています。

新しい委任スコープ

Android Q では、DPC が他の専用アプリに委任できる機能のリストが拡張されています。Android は、タスクに必要な API メソッドをグループ化して「スコープ」としてまとめています。スコープを委任するには、setDelegatedScopes() を呼び出して、以下の 1 つ以上のスコープを渡します。

Android Q では、委任先アプリ向けに新しいクラス DelegatedAdminReceiver が導入されています。システムは、このブロードキャスト レシーバーを使用して、DPC と同様のコールバックを委任先アプリに送信します。ネットワーク アクティビティ ロギングや証明書選択を委任されるアプリは、このクラスを実装している必要があります。このコンポーネントを委任先アプリに追加する手順は次のとおりです。

  1. DelegatedAdminReceiver のサブクラスを委任先アプリに追加します。
  2. アプリのマニフェストで <receiver> を宣言し、各コールバックに対してインテント フィルタ アクションを追加します(ACTION_NETWORK_LOGS_AVAILABLEACTION_CHOOSE_PRIVATE_KEY_ALIAS など)。
  3. 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 Q では、完全管理型デバイスの管理アプリは、ネットワーク ロギングを専用アプリに委任することができます。

システムがバッチを利用可能にした後にネットワーク ログを取得するには、最初に委任先アプリが DelegatedAdminReceiver をサブクラス化する必要があります(上記を参照)。また、サブクラス内で onNetworkLogsAvailable() コールバックを実装します(ログの取得に関するガイダンスを参照)。

委任先アプリは、以下の DevicePolicyManger メソッドを呼び出すことができます(nulladmin 引数に渡します)。

他の専用アプリへの委任を考えている場合は、ログの喪失を防ぐため、DPC ではネットワーク ロギングを有効にしないでください。委任先アプリの方でネットワーク ロギングを有効にし、ログを収集してください。ネットワーク ロギングを委任すると、DPC が onNetworkLogsAvailable() コールバックを受け取れなくなります。

委任先アプリからネットワーク アクティビティ ロギングについてレポートする方法については、デベロッパー ガイドのネットワーク アクティビティ ロギングをご覧ください。

証明書選択

Android Q では、完全管理型デバイスや、仕事用プロファイル、セカンダリ ユーザーの管理アプリは、証明書選択を専用アプリに委任することができます。

証明書エイリアスを選択するには、最初に委任先アプリが DelegatedAdminReceiver をサブクラス化する必要があります(上記を参照)。サブクラス内で、onChoosePrivateKeyAlias() コールバックを実装して優先証明書のエイリアスを返します。または、ユーザーに証明書の選択を促すプロンプトを表示するには、null を返します。

デバイス管理ポリシーのサポート終了

Android Q では、アプリと DPC が以前のデバイス管理ポリシーを適用できなくなります。お客様やパートナーの皆様には、完全管理型デバイスや仕事用プロファイルに移行されることをおすすめします。Android Q をターゲットにするデバイス管理アプリによって以下のポリシーが呼び出されると、SecurityException がスローされます。

アプリによってはデバイス管理を利用して、ユーザーのデバイスを管理する場合があります。たとえば、紛失したデバイスをロックしてワイプする場合などが該当します。これを可能にするため、以下のポリシーが引き続き利用可能です。

こうした変更について詳しくは、デバイス管理アプリのサポート終了の記事をご覧ください。

アプリの新機能

Android Q をターゲットにするアプリは、機密データの表示や重要機能の起動を行う前に、デバイスに対して設定されている画面ロックの複雑さについてクエリを行うことができます。KeyChain API を呼び出すアプリが動作の改善によるメリットを得られる一方、VPN アプリ向けの新機能も用意されています。

画面ロックの品質チェック

Android Q 以降、画面ロックを必要とする重要機能を備えたアプリは、デバイスまたは仕事用プロファイルの画面ロックの複雑さに関してクエリを行うことができます。強力な画面ロックを必要とするアプリの場合、ユーザーをシステムの画面ロック設定に導き、セキュリティ設定を更新してもらうことができます。

画面ロックの品質をチェックするには:

システムの画面ロック設定を起動するには、ACTION_SET_NEW_PASSWORDEXTRA_PASSWORD_COMPLEXITY エクストラを指定して使用します。インテント エクストラで指定されている複雑さに反する設定は、グレー表示されます。ユーザーは、利用可能な画面ロック設定の中から選択するか、画面を終了することができます。

おすすめの方法: システムの画面ロックページを起動する前に、アプリ内でメッセージを表示します。アプリが再開したら、もう一度 DevicePolicyManager.getPasswordComplexity() を呼び出します。強力な画面ロックがまだ必要な場合は、セキュリティ設定を更新するよう繰り返しユーザーに求めるのではなく、アクセスを制限してください。

VPN アプリにおける HTTP プロキシのサポート

Android Q では、VPN アプリが VPN 接続に HTTP プロキシを設定できます。HTTP プロキシを追加する場合、VPN アプリは ProxyInfo インスタンスを設定してホストとポートを指定してから、VpnService.Builder.setHttpProxy() を呼び出す必要があります。システムやさまざまなネットワーク ライブラリがこのプロキシ設定を使用しますが、システムがアプリに対し、HTTP リクエストでプロキシ設定を使用するよう強制することはありません。

HTTP プロキシの設定方法を示すサンプルコードについては、ToyVPN サンプルアプリをご覧ください。

VPN サービスモード

常時接続 VPN によってサービスが実行されているかどうかと、ロックダウン モードがアクティブかどうかを VPN アプリで検出できるようになりました。Android Q に追加された新しいメソッドにより、ユーザー インターフェースを調整できます。たとえば、常時接続 VPN がサービスのライフサイクルを制御している間は、切断ボタンを無効にすることができます。

VPN アプリは、サービスに接続してローカルインターフェースを確立した後、以下の VpnService メソッドを呼び出すことができます。

  • isAlwaysOn(): 常時接続 VPN によってシステムがサービスを開始したかどうかを調べます。
  • isLockdownEnabled(): VPN を使用していない接続をシステムがブロックしているかどうかを調べます。

サービスの実行中は、常時接続のステータスは変化しませんが、ロックダウン モードのステータスは変化する可能性があります。

KeyChain の改善

Android Q では、KeyChain API に関して複数の改善が行われています。

アプリが KeyChain.choosePrivateKeyAlias() を呼び出すと、その発行者と、呼び出しに指定された鍵のアルゴリズムに応じて、デバイス上でユーザーが選択できる証明書リストがフィルタされます。

たとえば、TLS サーバーが TLS ハンドシェイクの一部として証明書のリクエスト メッセージを送信し、ブラウザが KeyChain.choosePrivateKeyAlias() を呼び出すと、証明書の選択を促すプロンプトには発行者のパラメータに一致する選択肢だけが表示されます。一致する選択肢がない場合、またはデバイスにインストールされている証明書がない場合、選択のプロンプトはユーザーに表示されなくなります。

さらに、KeyChain で鍵や CA 証明書を読み込む前に、デバイスの画面をロックする必要がなくなりました。

詳細

アプリに影響を与える可能性がある他の変更点については、Android Q の動作変更に関するページ(Android Q をターゲットとするアプリ向け、すべてのアプリ向け)をご覧ください。