Questa pagina fornisce una panoramica delle nuove API, funzionalità e modifiche del comportamento aziendali introdotte in Android 10.
Profili di lavoro per dispositivi di proprietà aziendale
Android 10 introduce nuove funzionalità di provisioning e attestazione per i dispositivi di proprietà aziendale che richiedono solo un profilo di lavoro.
Strumenti di provisioning migliorati per i profili di lavoro
Puoi eseguire il provisioning dei profili di lavoro sui dispositivi Android 10 e versioni successive registrati utilizzando il codice QR o la registrazione zero-touch. Durante il provisioning di un dispositivo di proprietà aziendale, un nuovo extra intent consente alle app del controller di policy dei dispositivi (DPC) di avviare la configurazione del profilo di lavoro o completamente gestita. Dopo aver creato un profilo di lavoro o stabilito la gestione completa, i DPC devono avviare le schermate di conformità ai criteri per applicare i criteri iniziali.
Nel file manifest del DPC, dichiara un nuovo filtro per intent per
GET_PROVISIONING_MODE
in un'attività e aggiungi l'autorizzazione BIND_DEVICE_ADMIN
per impedire alle app arbitrarie di avviare l'attività. Ad esempio:
<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>
Durante il provisioning, il sistema avvia l'attività associata al filtro per intent. Lo scopo di questa attività è specificare una modalità di gestione (profilo di lavoro o completamente gestita).
Potrebbe essere utile recuperare gli extra di provisioning prima di determinare la modalità di gestione appropriata per il dispositivo. L'attività può chiamare
getIntent() per recuperare
quanto segue:
I DPC possono anche creare un nuovo intent di risultato e aggiungervi i seguenti extra:
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE: aggiungi al bundle esistente o crea un nuovo bundle. Questo bundle viene inviato come extra intent quando il DPC avvia le schermate di conformità ai criteri.EXTRA_PROVISIONING_ACCOUNT_TO_MIGRATE: specifica un account di cui eseguire la migrazione solo se aggiungi un account di lavoro nell'ambito del provisioning del profilo di lavoro.EXTRA_PROVISIONING_SKIP_EDUCATION_SCREENS
Per impostare la modalità di gestione sul dispositivo, chiama
putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode),
dove desiredProvisioningMode è:
- Profilo di lavoro:
PROVISIONING_MODE_MANAGED_PROFILE - Completamente gestito:
PROVISIONING_MODE_FULLY_MANAGED_DEVICE
Completa il provisioning del profilo di lavoro o completamente gestito inviando i dettagli del provisioning
alla configurazione tramite setResult(RESULT_OK,
Intent)
e chiudi tutte le schermate attive con
finish().
Al termine del provisioning, è disponibile un nuovo intent per i DPC per avviare le schermate di conformità e applicare le impostazioni dei criteri iniziali. Sui dispositivi con profilo di lavoro, le schermate di conformità vengono visualizzate nel profilo di lavoro. Il DPC deve assicurarsi che le schermate di conformità vengano mostrate agli utenti, anche se un utente esce dal flusso di configurazione.
Nel file manifest del DPC, dichiara un nuovo filtro per intent per
ADMIN_POLICY_COMPLIANCE
in un'attività e aggiungi l'BIND_DEVICE_ADMIN
autorizzazione per impedire alle app arbitrarie di avviare l'attività. Ad esempio:
<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>
Il DPC deve utilizzare questo nuovo intent anziché ascoltare la
ACTION_PROFILE_PROVISIONING_COMPLETE
trasmissione.
L'attività associata al filtro per intent può chiamare
getIntent() per recuperare
the
EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE.
Dopo aver eseguito la conformità ai criteri, ADMIN_POLICY_COMPLIANCE deve restituire setResult(RESULT_OK,
Intent) e chiudere tutte le schermate attive con
finish().
I dispositivi completamente gestiti riportano gli utenti alla schermata Home. I dispositivi con profilo di lavoro chiedono agli utenti di aggiungere il proprio account personale prima di riportarli alla schermata Home.
Attestazione dell'ID dispositivo del profilo di lavoro
I DPC impostati come amministratori di un profilo di lavoro di cui è stato eseguito il provisioning utilizzando la registrazione zero-touch possono ottenere ID dispositivo attestati dall'hardware sicuro, come un IMEI o il numero di serie del produttore. Il dispositivo deve includere hardware sicuro (ad esempio un ambiente di esecuzione attendibile (TEE) o un elemento sicuro (SE)) e supportare l'attestazione dell'ID dispositivo e la registrazione zero-touch.
Il componente di amministrazione di un profilo di lavoro può chiamare DevicePolicyManager.generateKeyPair(), passando uno o più di ID_TYPE_SERIAL, ID_TYPE_IMEI o ID_TYPE_MEID per l'argomento idAttestationFlags.
Per scoprire di più sull'estrazione e la convalida degli ID dispositivo, consulta la sezione Verificare le coppie di chiavi con integrazione hardware con l'attestazione di chiavi.
Miglioramenti del profilo di lavoro
Sono disponibili nuove API per supportare la visibilità del calendario a più profili e il blocco a livello di dispositivo delle installazioni di app da Origini sconosciute.
Origini sconosciute a livello di dispositivo del profilo di lavoro
Le app scaricate da origini diverse da Google Play (o da altri app store attendibili) sono chiamate app da origini sconosciute. In Android 10, gli amministratori dei profili di lavoro possono impedire a qualsiasi utente o profilo di installare app da origini sconosciute ovunque sul dispositivo aggiungendo la nuova limitazione utente
DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY.
Tuttavia, dopo aver aggiunto questa limitazione, una persona che utilizza il dispositivo può comunque
installare le app utilizzando adb.
Per impedire agli utenti di installare per errore app da origini sconosciute, ti consigliamo di aggiungere questa limitazione utente perché non richiede l'installazione di Google Play Services. Se vuoi supportare le versioni precedenti di Android, puoi impostare un valore di configurazione gestita per Google Play.
Limitare i dispositivi di input consentiti ai profili di lavoro
Quando gli amministratori dei profili di lavoro chiamano DevicePolicyManager.setPermittedInputMethods(), gli utenti sono limitati solo ai metodi di input consentiti all'interno del profilo di lavoro
anziché dell'intero dispositivo, il che consente agli utenti di avere il pieno controllo sui metodi di input
sul lato personale del dispositivo.
Cancellare i profili di lavoro in modalità silenziosa
È stato aggiunto il WIPE_SILENTLY
flag a DevicePolicyManager.wipeData().
Se il flag è impostato, gli utenti non riceveranno una notifica dopo la cancellazione del profilo di lavoro
utilizzando wipeData().
Nuove funzionalità per i dispositivi completamente gestiti
Android 10 introduce nuove funzionalità e API per i dispositivi completamente gestiti, tra cui gli aggiornamenti di sistema manuali, l'estensione del provisioning tramite codice QR e NFC per includere le credenziali per una rete Wi-Fi EAP e il supporto per DNS su TLS.
Installazione manuale degli aggiornamenti di sistema
In Android 10, gli amministratori dei dispositivi completamente gestiti possono installare gli aggiornamenti di sistema tramite un file di aggiornamento di sistema. Gli aggiornamenti di sistema manuali consentono agli amministratori IT di:
- Testare un aggiornamento su un numero ridotto di dispositivi prima di installarlo su larga scala.
- Evitare download duplicati su reti con larghezza di banda limitata.
- Scaglionare le installazioni o aggiornare i dispositivi solo quando non vengono utilizzati.
Innanzitutto, un amministratore IT imposta un criterio di aggiornamento di sistema posticipato
per ritardare l'installazione automatica (se necessario). Poi, il DPC di un dispositivo chiama installSystemUpdate()
con il percorso di un file di aggiornamento di sistema del produttore del dispositivo. Passa un InstallSystemUpdateCallback
oggetto che il sistema può utilizzare per segnalare gli errori che si verificano prima del riavvio del dispositivo. Se si verifica un problema, il sistema chiama onInstallUpdateError()
con il codice di errore.
Dopo il riavvio del dispositivo, il DPC deve confermare l'installazione riuscita
utilizzando un'API di versione, ad esempio
Build.FINGERPRINT. Se l'aggiornamento non riesce, segnala l'errore a un amministratore IT.
Provisioning Wi-Fi EAP
In Android 10, i codici QR e i dati NFC utilizzati per il provisioning dei dispositivi possono contenere la configurazione e le credenziali EAP, inclusi i certificati. Quando una persona scansiona un codice QR o tocca un tag NFC, il dispositivo esegue automaticamente l'autenticazione a una rete Wi-Fi locale utilizzando EAP e avvia la procedura di provisioning senza ulteriori input manuali.
Per autenticare il Wi-Fi utilizzando EAP, aggiungi un
EXTRA_PROVISIONING_WIFI_SECURITY_TYPE
extra con il valore "EAP". Per specificare l'autenticazione EAP, puoi aggiungere i seguenti extra di provisioning all'intent:
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
Supporto per DNS privato
Le organizzazioni possono utilizzare DNS su TLS (chiamato DNS privato sui dispositivi Android) per evitare la perdita di query DNS, inclusi quelli dei nomi host interni. I componenti di amministrazione dei dispositivi completamente gestiti possono controllare le impostazioni DNS privato del dispositivo. Per impostare la modalità DNS privato, chiama:
setGlobalPrivateDnsModeOpportunistic()per il dispositivo in modo che utilizzi il DNS privato quando il sistema può rilevare un server dei nomi supportato oppuresetGlobalPrivateDnsModeSpecifiedHost()per specificare il nome host di un server dei nomi che supporta RFC7858 nell'argomentoprivateDnsHost.
Quando il DPC chiama uno di questi metodi, il sistema restituisce PRIVATE_DNS_SET_NO_ERROR se
la chiamata è andata a buon fine. In caso contrario, restituisce un errore.
Per recuperare la modalità DNS privato e l'host impostati su un dispositivo, chiama getGlobalPrivateDnsMode()
e getGlobalPrivateDnsHost().
Puoi impedire agli utenti di modificare le impostazioni DNS privato aggiungendo la
DISALLOW_CONFIG_PRIVATE_DNS
limitazione utente.
Esenzione dalla modalità di blocco VPN
La modalità di blocco VPN consente a un DPC di bloccare qualsiasi traffico di rete che non utilizza la VPN. Gli amministratori dei dispositivi completamente gestiti e dei profili di lavoro possono esentare le app dalla modalità di blocco. Le app esentate utilizzano una VPN per impostazione predefinita, ma si connettono automaticamente ad altre reti se la VPN non è disponibile. Le app esentate a cui è stato esplicitamente negato l'accesso alla VPN utilizzeranno solo altre reti.
Per esentare un'app dalla modalità di blocco, chiama il nuovo
DevicePolicyManager metodo
setAlwaysOnVpnPackage()
che accetta un elenco di pacchetti di app esentati. Tutti i pacchetti di app aggiunti dal DPC devono essere installati sul dispositivo quando viene chiamato il metodo. Se un'app viene disinstallata e reinstallata, deve essere esentata di nuovo. Per ottenere le app
esentate in precedenza dalla modalità di blocco, chiama
getAlwaysOnVpnLockdownWhitelist().
Per aiutare gli amministratori dei dispositivi completamente gestiti e dei profili di lavoro a ottenere lo stato della modalità di blocco, Android 10 aggiunge il
isAlwaysOnVpnLockdownEnabled()
metodo.
Nuovi ambiti di delega
Android 10 estende l'elenco delle funzioni che un DPC può delegare ad altre app più specializzate. Android raggruppa i metodi API necessari per un'attività in ambiti. Per delegare un ambito, chiama
setDelegatedScopes()
e passa uno o più dei seguenti ambiti:
DELEGATION_NETWORK_LOGGINGper delegare il logging dell'attività di reteDELEGATION_CERT_SELECTIONper delegare la selezione dei certificati
Android 10 introduce la nuova classe
DelegatedAdminReceiver
per le app delegate. Il sistema utilizza questo broadcast receiver per inviare callback simili a DPC alle app delegate. Le app a cui è stato delegato il logging dell'attività di rete e la selezione dei certificati devono implementare questa classe. Per aggiungere questo componente a un'app delegata:
- Aggiungi una sottoclasse di
DelegatedAdminReceiverall'app delegata. - Dichiara il
<receiver>nel manifest dell'app, aggiungendo un'azione di filtro per intent per ogni callback. Ad esempio,ACTION_NETWORK_LOGS_AVAILABLEoACTION_CHOOSE_PRIVATE_KEY_ALIAS. - Proteggi il broadcast receiver con l'
BIND_DEVICE_ADMINautorizzazione.
Il seguente snippet mostra il manifest dell'app di una singola app delegata che gestisce sia il logging di rete sia la selezione dei certificati:
<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>
Logging dell'attività di rete
Per aiutare le organizzazioni a rilevare e monitorare il malware, i DPC possono registrare le connessioni TCP e le ricerche DNS del sistema. In Android 10, gli amministratori dei dispositivi completamente gestiti possono delegare il logging di rete a un'app specializzata.
Per recuperare i log di rete dopo che il sistema
ha reso disponibile un batch, le app delegate devono prima creare una sottoclasse di
DelegatedAdminReceiver
(descritta in precedenza). Nella sottoclasse, implementa il
onNetworkLogsAvailable()
callback seguendo le indicazioni riportate in Recuperare i log.
Le app delegate possono chiamare i seguenti
DevicePolicyManager metodi
(passando null per l'argomento admin):
Per evitare di perdere i log, i DPC non devono abilitare il logging di rete
se prevedono di delegarlo a un'altra app. L'app delegata deve abilitare e
raccogliere i log di rete. Dopo che un DPC delega il logging di rete, non riceverà
ulteriori onNetworkLogsAvailable()
callback.
Per scoprire come segnalare il logging dell'attività di rete da un'app delegata, consulta la guida per gli sviluppatori Logging dell'attività di rete.
Selezione dei certificati
In Android 10, gli amministratori dei dispositivi completamente gestiti, dei profili di lavoro e degli utenti secondari possono delegare la selezione dei certificati a un'app specializzata.
Per selezionare un alias di certificato, le app delegate devono prima creare una sottoclasse di
DelegatedAdminReceiver
(descritta in precedenza). Nella sottoclasse, implementa il
onChoosePrivateKeyAlias() callback e restituisci un alias per un certificato preferito oppure, per chiedere all'utente di selezionare un certificato, restituisci null.
Ritiro delle policy di amministrazione del dispositivo
Android 10 impedisce alle app e ai DPC di applicare le policy di amministrazione del dispositivo
legacy. Consigliamo a clienti e partner di eseguire la transizione a dispositivi completamente gestiti o profili di lavoro. Le seguenti
policy generano un'SecurityException
quando vengono richiamate da un amministratore del dispositivo che ha come target Android 10:
USES_POLICY_DISABLE_CAMERAUSES_POLICY_DISABLE_KEYGUARD_FEATURESUSES_POLICY_EXPIRE_PASSWORDUSES_POLICY_LIMIT_PASSWORD
Alcune applicazioni utilizzano l'amministrazione del dispositivo per l'amministrazione dei dispositivi consumer. Ad esempio, il blocco e la cancellazione di un dispositivo smarrito. Per abilitare questa funzionalità, le seguenti policy continuano a essere disponibili:
Per ulteriori informazioni su queste modifiche, consulta la sezione Ritiro dell'amministrazione del dispositivo.
Nuove funzionalità per le app
Le app che hanno come target Android 10 possono eseguire query sulla complessità del blocco schermo impostata su un dispositivo prima di visualizzare dati riservati o avviare funzionalità critiche. Le app che chiamano
l'API KeyChain usufruiscono di
miglioramenti del comportamento, mentre sono disponibili anche nuove funzionalità per le app VPN.
Controllo qualità del blocco schermo
A partire da Android 10, le app con funzionalità critiche che richiedono un blocco schermo possono eseguire query sulla complessità del blocco schermo di un dispositivo o di un profilo di lavoro. Le app che richiedono un blocco schermo più sicuro possono indirizzare l'utente alle impostazioni del blocco schermo del sistema, consentendogli di aggiornare le impostazioni di sicurezza.
Per controllare la qualità del blocco schermo:
- Aggiungi la nuova autorizzazione
REQUEST_PASSWORD_COMPLEXITYal manifest dell'app. - Chiama
DevicePolicyManager.getPasswordComplexity(). La complessità è suddivisa in quattro categorie:
Per avviare le impostazioni del blocco schermo del sistema, utilizza
ACTION_SET_NEW_PASSWORD
con l'extra EXTRA_PASSWORD_COMPLEXITY. Le opzioni che non
soddisfano la complessità specificata nell'extra intent sono visualizzate in grigio. Gli utenti possono scegliere tra le opzioni di blocco schermo disponibili o uscire dalla schermata.
Best practice: visualizza un messaggio nell'app prima di avviare la pagina del blocco schermo del sistema. Quando l'app riprende, chiama
DevicePolicyManager.getPasswordComplexity()
di nuovo. Se è ancora necessario un blocco schermo più sicuro, limita l'accesso anziché chiedere ripetutamente agli utenti di aggiornare le impostazioni di sicurezza.
Supporto per proxy HTTP nelle app VPN
In Android 10, le app VPN possono impostare un proxy HTTP
per la connessione VPN. Per aggiungere un proxy HTTP, un'app VPN deve configurare un'
ProxyInfo istanza con un host e una porta,
prima di chiamare
VpnService.Builder.setHttpProxy().
Il sistema e molte librerie di rete utilizzano questa impostazione proxy, ma il sistema non impone alle app di eseguire il proxy delle richieste HTTP.
Per un esempio di codice campione che mostra come impostare un proxy HTTP, consulta l'app di esempio ToyVPN.
Modalità di servizio VPN
Le app VPN possono scoprire se il servizio è in esecuzione a causa della VPN sempre attiva e se la modalità di blocco è attiva. I nuovi metodi aggiunti in Android 10 possono aiutarti a modificare l'interfaccia utente. Ad esempio, potresti disattivare il pulsante di disconnessione quando la VPN sempre attiva controlla il ciclo di vita del servizio.
Le app VPN possono chiamare i seguenti VpnService
metodi dopo la connessione al servizio
e la creazione dell'interfaccia locale:
isAlwaysOn()per scoprire se il sistema ha avviato il servizio a causa della VPN sempre attivaisLockdownEnabled()per scoprire se il sistema sta bloccando le connessioni che non utilizzano la VPN
Lo stato sempre attivo rimane invariato durante l'esecuzione del servizio, ma lo stato della modalità di blocco potrebbe cambiare.
Miglioramenti di Keychain
Android 10 introduce diversi miglioramenti relativi all'
KeyChain API.
Quando un'app chiama KeyChain.choosePrivateKeyAlias(), i dispositivi Android 10 e versioni successive filtrano l'elenco dei certificati tra cui un utente può scegliere in base agli emittenti e agli algoritmi delle chiavi specificati nella chiamata.
Ad esempio, quando un server TLS invia un messaggio di richiesta di certificato
nell'ambito di un handshake TLS e il browser chiama
KeyChain.choosePrivateKeyAlias(), la richiesta di selezione del certificato include solo le opzioni che corrispondono al parametro degli emittenti. Se non sono disponibili opzioni corrispondenti o non sono installati certificati sul dispositivo, la richiesta di selezione non verrà visualizzata all'utente.
Inoltre, KeyChain non richiede più che un dispositivo abbia un blocco schermo prima di poter importare chiavi o certificati CA.