На этой странице представлен обзор новых корпоративных API, функций и изменений в поведении, появившихся в Android 10.
Рабочие профили для устройств, принадлежащих компании.
В Android 10 появились новые функции подготовки и аттестации для корпоративных устройств, для которых требуется только рабочий профиль.
Усовершенствованные инструменты управления рабочими профилями.
На устройствах Android 10 и более поздних версий, зарегистрированных с помощью QR-кода или Zero Touch , можно создавать рабочие профили. Во время настройки корпоративной учетной записи на устройстве появляется новый дополнительный параметр Intent, позволяющий приложениям-контроллерам политик устройств (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: Добавить к существующему пакету или создать новый. Этот пакет отправляется в качестве дополнительного параметра Intent при запуске экранов проверки соответствия политикам в вашем 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() .
После завершения инициализации становится доступен новый Intent, позволяющий 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 должен использовать этот новый Intent вместо прослушивания широковещательного сообщения ACTION_PROFILE_PROVISIONING_COMPLETE .
Действие, связанное с фильтром намерений, может вызвать getIntent() для получения объекта EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE . После выполнения проверки соответствия политике, ADMIN_POLICY_COMPLIANCE должен вернуть setResult(RESULT_OK, Intent) и закрыть все активные экраны с помощью finish() .
На устройствах с полным управлением пользователи возвращаются на главный экран. На устройствах с рабочим профилем пользователям предлагается добавить свою личную учетную запись, прежде чем они вернутся на главный экран.
Подтверждение идентификатора устройства в рабочем профиле
DPC, назначенные администраторами рабочего профиля, созданного с использованием автоматической регистрации, могут получать идентификаторы устройств, подтвержденные с помощью защищенного оборудования, такие как IMEI или серийный номер производителя. Устройство должно включать защищенное оборудование (например, доверенную среду выполнения (TEE) или защищенный элемент (SE)) и поддерживать подтверждение идентификатора устройства и автоматическую регистрацию.
Административный компонент рабочего профиля может вызвать метод DevicePolicyManager.generateKeyPair() , передав в качестве аргумента idAttestationFlags один или несколько параметров: ID_TYPE_SERIAL , ID_TYPE_IMEI или ID_TYPE_MEID .
Чтобы узнать больше об извлечении и проверке идентификаторов устройств, см. раздел «Проверка пар ключей, поддерживаемых оборудованием, с помощью аттестации ключей» .
Улучшения профиля работы
Доступны новые API для поддержки отображения календаря в разных профилях и блокировки установки приложений из неизвестных источников на всем устройстве.
Профиль работы, неизвестные источники в масштабах всего устройства
Приложения, загруженные из источников, отличных от Google Play (или других доверенных магазинов приложений), называются приложениями из неизвестных источников. В Android 10 администраторы рабочих профилей могут запретить любому пользователю или профилю устанавливать приложения из неизвестных источников на устройстве, добавив новое ограничение для пользователей: DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY . Однако после добавления этого ограничения пользователь устройства по-прежнему сможет устанавливать приложения с помощью adb .
Чтобы предотвратить случайную установку приложений из неизвестных источников, мы рекомендуем добавить это ограничение для пользователей, поскольку оно не требует установки сервисов Google Play. Если вы хотите поддерживать более старые версии Android, вы можете установить значение управляемой конфигурации для Google Play .
Ограничьте количество разрешенных устройств ввода рабочими профилями.
Когда администраторы рабочих профилей вызывают DevicePolicyManager.setPermittedInputMethods() , пользователи ограничиваются только разрешенными методами ввода в рамках своего рабочего профиля, а не на всем устройстве, что дает им полный контроль над методами ввода на персональной стороне устройства.
Незаметно удалить рабочие профили
Добавлен флаг WIPE_SILENTLY в DevicePolicyManager.wipeData() . Если этот флаг установлен, пользователи не будут получать уведомления после удаления их рабочего профиля с помощью wipeData() .
Новые функции для полностью управляемых устройств.
Android 10 представляет новые функции и API для полностью управляемых устройств, включая ручные обновления системы, расширение возможностей настройки с помощью QR-кодов и NFC для включения учетных данных для сети Wi-Fi EAP, а также поддержку DNS через TLS.
Установка обновления системы вручную
В Android 10 администраторы полностью управляемых устройств могут устанавливать системные обновления через файл обновления системы. Ручные системные обновления позволяют ИТ-администраторам выполнять следующие действия:
- Перед массовой установкой протестируйте обновление на небольшом количестве устройств.
- Избегайте повторных загрузок в сетях с ограниченной пропускной способностью.
- Устанавливайте устройства поэтапно или обновляйте их только тогда, когда они не используются.
Сначала ИТ-администратор устанавливает политику отложенного обновления системы , чтобы отложить автоматическую установку (если требуется). Затем DPC устройства вызывает installSystemUpdate() с указанием пути к файлу обновления системы от производителя устройства. Передайте объект InstallSystemUpdateCallback , который система может использовать для сообщения об ошибках, возникающих до перезагрузки устройства. Если что-то пойдет не так, система вызывает onInstallUpdateError() с кодом ошибки.
После перезагрузки устройства вашему DPC необходимо подтвердить успешную установку, используя API версий, например Build.FINGERPRINT . Если обновление не удастся, сообщите об этом администратору ИТ-отдела.
Настройка Wi-Fi EAP
В Android 10 QR-коды и данные NFC, используемые для инициализации устройства, могут содержать конфигурацию и учетные данные EAP, включая сертификаты. Когда пользователь сканирует QR-код или прикладывает NFC-метку, устройство автоматически аутентифицируется в локальной сети Wi-Fi с помощью EAP и запускает процесс инициализации без какого-либо дополнительного ручного вмешательства.
Для аутентификации Wi-Fi с использованием EAP добавьте дополнительный параметр EXTRA_PROVISIONING_WIFI_SECURITY_TYPE со значением "EAP" . Чтобы указать аутентификацию EAP, вы можете добавить следующие дополнительные параметры в свой Intent:
-
EXTRA_PROVISIONING_WIFI_EAP_METHOD -
EXTRA_PROVISIONING_WIFI_IDENTITY -
EXTRA_PROVISIONING_WIFI_ANONYMOUS_IDENTITY -
EXTRA_PROVISIONING_WIFI_DOMAIN -
EXTRA_PROVISIONING_WIFI_PHASE2_AUTH -
EXTRA_PROVISIONING_WIFI_USER_CERTIFICATE -
EXTRA_PROVISIONING_WIFI_CA_CERTIFICATE
Поддержка частных DNS
Организации могут использовать DNS через TLS (на устройствах Android это называется Private DNS ), чтобы избежать утечки DNS-запросов, включая запросы внутренних имен хостов. Административные компоненты полностью управляемых устройств могут управлять настройками Private DNS устройства. Чтобы установить режим Private DNS, вызовите:
- Используйте
setGlobalPrivateDnsModeOpportunistic(), чтобы устройство использовало частный DNS, когда система сможет обнаружить поддерживающий сервер имен, или -
setGlobalPrivateDnsModeSpecifiedHost()позволяет указать имя хоста сервера имен, поддерживающего RFC7858, в аргументеprivateDnsHost.
Когда ваш DPC вызывает любой из этих методов, система возвращает PRIVATE_DNS_SET_NO_ERROR если вызов был успешным. В противном случае она возвращает ошибку.
Чтобы получить режим и хост частной DNS-системы, установленные на устройстве, вызовите функции getGlobalPrivateDnsMode() и getGlobalPrivateDnsHost() . Вы можете запретить пользователям изменять настройки частной DNS-системы, добавив ограничение для пользователей DISALLOW_CONFIG_PRIVATE_DNS .
Исключение из режима блокировки VPN
Режим блокировки VPN позволяет DPC блокировать любой сетевой трафик , не использующий VPN. Администраторы полностью управляемых устройств и рабочих профилей могут исключить приложения из режима блокировки. Исключенные приложения по умолчанию используют VPN, но автоматически подключаются к другим сетям, если VPN недоступен. Исключенные приложения, которым также явно запрещен доступ к VPN, будут использовать только другие сети.
Чтобы исключить приложение из режима блокировки, вызовите новый метод DevicePolicyManager setAlwaysOnVpnPackage() , который принимает список исключенных пакетов приложений. Все пакеты приложений, добавленные DPC, должны быть установлены на устройстве на момент вызова метода. Если приложение удалено и переустановлено, его необходимо снова исключить. Чтобы получить список приложений, ранее исключенных из режима блокировки, вызовите метод getAlwaysOnVpnLockdownWhitelist() .
Чтобы помочь администраторам полностью управляемых устройств и рабочих профилей получать информацию о режиме блокировки, в Android 10 добавлен метод isAlwaysOnVpnLockdownEnabled() .
Новые области делегирования
Android 10 расширяет список функций, которые DPC может делегировать другим, более специализированным приложениям. Android группирует методы API, необходимые для выполнения задачи, в области видимости (scopes ). Чтобы делегировать область видимости, вызовите метод setDelegatedScopes() и передайте одну или несколько из следующих областей видимости:
-
DELEGATION_NETWORK_LOGGINGделегирование функции ведения журнала сетевой активности. -
DELEGATION_CERT_SELECTIONдля делегирования выбора сертификата
В Android 10 представлен новый класс DelegatedAdminReceiver для приложений-делегатов. Система использует этот широковещательный приемник для отправки обратных вызовов, аналогичных DPC, приложениям-делегатам. Приложениям, которым делегирована функция регистрации сетевой активности и выбора сертификатов, следует реализовать этот класс. Чтобы добавить этот компонент в приложение-делегат, выполните следующие шаги:
- Добавьте подкласс
DelegatedAdminReceiverв приложение делегата. - Объявите
<receiver>в манифесте приложения, добавив действие intent-filter для каждого обратного вызова. Например,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. Мы рекомендуем клиентам и партнерам перейти на полностью управляемые устройства или рабочие профили. Следующие политики вызывают исключение SecurityException при вызове администратором устройства, ориентированным на Android 10:
-
USES_POLICY_DISABLE_CAMERA -
USES_POLICY_DISABLE_KEYGUARD_FEATURES -
USES_POLICY_EXPIRE_PASSWORD -
USES_POLICY_LIMIT_PASSWORD
Некоторые приложения используют права администратора устройства для управления потребителем. Например, для блокировки и удаления данных с потерянного устройства. Для этого по-прежнему доступны следующие политики:
Для получения более подробной информации об этих изменениях ознакомьтесь с разделом «Устаревание функции администрирования устройств» .
Новые функции для приложений
Приложения, ориентированные на Android 10, могут запрашивать сложность блокировки экрана, установленную на устройстве, перед отображением конфиденциальных данных или запуском важных функций. Приложения, использующие API KeyChain , получают преимущества от улучшенного поведения, а также новые функции доступны для VPN-приложений.
Проверка качества блокировки экрана
Начиная с Android 10, приложения с критически важными функциями, требующими блокировки экрана, могут запрашивать уровень сложности блокировки экрана устройства или рабочего профиля. Приложения, которым требуется более надежная блокировка экрана, могут перенаправлять пользователя в системные настройки блокировки экрана, позволяя ему обновить параметры безопасности.
Чтобы проверить качество блокировки экрана:
- Добавьте новое разрешение
REQUEST_PASSWORD_COMPLEXITYв манифест вашего приложения. - Вызовите
DevicePolicyManager.getPasswordComplexity(). Сложность делится на четыре категории:
Для запуска настроек блокировки экрана используйте ACTION_SET_NEW_PASSWORD с дополнительным параметром EXTRA_PASSWORD_COMPLEXITY — параметры, не соответствующие сложности, указанной в параметре, будут недоступны (отображаться серым цветом). Пользователи могут выбрать один из доступных вариантов блокировки экрана или выйти из окна.
Рекомендация: перед запуском страницы блокировки экрана отобразите сообщение в приложении. После возобновления работы приложения снова вызовите DevicePolicyManager.getPasswordComplexity() . Если требуется более надежная блокировка экрана, ограничьте доступ, а не предлагайте пользователям повторно обновлять настройки безопасности.
Поддержка HTTP-прокси в VPN-приложениях
В Android 10 VPN-приложения могут устанавливать HTTP-прокси для своего VPN-соединения. Чтобы добавить HTTP-прокси, VPN-приложение должно настроить экземпляр ProxyInfo с указанием хоста и порта, прежде чем вызывать VpnService.Builder.setHttpProxy() . Система и многие сетевые библиотеки используют эту настройку прокси, но система не заставляет приложения проксировать HTTP-запросы.
Пример кода, демонстрирующий настройку HTTP-прокси, можно найти в демонстрационном приложении ToyVPN .
режимы работы VPN-сервиса
Приложения VPN могут определить, работает ли служба благодаря постоянно включенному VPN и активен ли режим блокировки . Новые методы, добавленные в Android 10, могут помочь вам настроить пользовательский интерфейс. Например, вы можете отключить кнопку отключения, когда постоянно включенный VPN контролирует жизненный цикл вашей службы.
После подключения к службе и установления локального интерфейса VPN-приложения могут вызывать следующие методы VpnService :
-
isAlwaysOn(), чтобы узнать, запустила ли система службу из-за постоянно включенного VPN. -
isLockdownEnabled()чтобы узнать, блокирует ли система соединения, не использующие VPN.
Статус "постоянно включено" остается неизменным, пока работает ваша служба, но статус режима блокировки может измениться.
Улучшения брелока
В Android 10 представлен ряд улучшений, связанных с API KeyChain .
Когда приложение вызывает KeyChain.choosePrivateKeyAlias() , устройства на базе Android 10 и более поздних версий фильтруют список сертификатов, из которых пользователь может выбирать, на основе издателей и алгоритмов ключей, указанных в вызове.
Например, когда TLS-сервер отправляет сообщение с запросом сертификата в рамках рукопожатия TLS, и браузер вызывает KeyChain.choosePrivateKeyAlias() , в окне выбора сертификата отображаются только варианты, соответствующие параметру issuers. Если подходящих вариантов нет или на устройстве не установлены сертификаты, окно выбора не будет отображаться пользователю.
Кроме того, KeyChain больше не требует наличия блокировки экрана на устройстве для импорта ключей или сертификатов центра сертификации.