Nouveautés pour les entreprises sur Android 10

Cette page présente les nouvelles API d'entreprise, les nouvelles fonctionnalités et les modifications de comportement introduites dans Android 10.

Profils professionnels pour les appareils détenus par l'entreprise

Android 10 introduit de nouvelles fonctionnalités de provisionnement et d'attestation pour les appareils détenus par l'entreprise qui ne nécessitent qu'un profil professionnel.

Amélioration des outils de provisionnement pour les profils professionnels

Vous pouvez provisionner des profils professionnels sur les appareils enregistrés sous Android 10 ou version ultérieure à l'aide du code QR ou de l'option Sans contact. Lors du provisionnement d'un appareil détenu par l'entreprise, un nouvel intent supplémentaire permet aux applications de contrôle des règles relatives aux appareils (DPC) de lancer le profil professionnel ou la configuration entièrement gérée. Une fois qu'un profil professionnel est créé ou qu'une gestion complète est établie, les DPC doivent lancer des écrans de conformité aux règles pour appliquer toute règle initiale.

Dans le fichier manifeste de votre DPC, déclarez un nouveau filtre d'intent pour GET_PROVISIONING_MODE dans une activité et ajoutez l'autorisation BIND_DEVICE_ADMIN pour empêcher des applications arbitraires de démarrer l'activité. Par exemple :

<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>

Lors du provisionnement, le système lance l'activité associée au filtre d'intent. L'objectif de cette activité est de spécifier un mode de gestion (profil professionnel ou entièrement géré).

Il peut être utile de récupérer les extras de provisionnement avant de déterminer le mode de gestion approprié pour l'appareil. L'activité peut appeler getIntent() pour récupérer les éléments suivants:

Les DPC peuvent également créer un intent de résultat et y ajouter les extras suivants:

Pour définir le mode de gestion sur l'appareil, appelez putExtra(DevicePolicyManager.EXTRA_PROVISIONING_MODE,desiredProvisioningMode), où desiredProvisioningMode est:

  • Profil professionnel: PROVISIONING_MODE_MANAGED_PROFILE
  • Entièrement géré: PROVISIONING_MODE_FULLY_MANAGED_DEVICE

Finalisez le profil professionnel ou le provisionnement entièrement géré en renvoyant les détails de provisionnement à la configuration via setResult(RESULT_OK, Intent) et fermez tous les écrans actifs avec finish().

Une fois le provisionnement terminé, un nouvel intent est disponible pour que les DPC puissent lancer leurs écrans de conformité et appliquer les paramètres de règle initiaux. Sur les appareils dotés d'un profil professionnel, les écrans de conformité s'affichent dans le profil professionnel. Votre DPC doit s'assurer que ses écrans de conformité sont présentés aux utilisateurs, même si ceux-ci échappent au flux de configuration.

Dans le fichier manifeste de votre DPC, déclarez un nouveau filtre d'intent pour ADMIN_POLICY_COMPLIANCE dans une activité et ajoutez l'autorisation BIND_DEVICE_ADMIN pour empêcher des applications arbitraires de démarrer l'activité. Par exemple :

<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>

Votre DPC doit utiliser ce nouvel intent au lieu d'écouter la diffusion ACTION_PROFILE_PROVISIONING_COMPLETE.

L'activité associée au filtre d'intent peut appeler getIntent() pour récupérer EXTRA_PROVISIONING_ADMIN_EXTRAS_BUNDLE. Une fois que vous vous êtes assuré de respecter les règles, ADMIN_POLICY_COMPLIANCE doit renvoyer setResult(RESULT_OK, Intent) et fermer tous les écrans actifs avec finish().

Les appareils entièrement gérés renvoient les utilisateurs à l'écran d'accueil. Les appareils dotés d'un profil professionnel invitent les utilisateurs à ajouter leur compte personnel avant de les renvoyer à l'écran d'accueil.

Attestation de l'ID de l'appareil du profil professionnel

Les DPC définis en tant qu'administrateur d'un profil professionnel provisionné à l'aide de l'enregistrement sans contact peuvent obtenir des ID d'appareil certifiés sécurisés par le matériel, tels qu'un code IMEI ou le numéro de série du fabricant. L'appareil doit inclure du matériel sécurisé (par exemple, un environnement d'exécution sécurisé (TEE) ou un composant sécurisé (SE)), et être compatible avec l'attestation d'ID d'appareil et l'enregistrement sans contact.

Le composant d'administration d'un profil professionnel peut appeler DevicePolicyManager.generateKeyPair(), en transmettant un ou plusieurs éléments ID_TYPE_SERIAL, ID_TYPE_IMEI ou ID_TYPE_MEID pour l'argument idAttestationFlags.

Pour en savoir plus sur l'extraction et la validation des ID d'appareil, consultez Vérifier des paires de clés intégrées au matériel avec l'attestation de clé.

Améliorations apportées au profil professionnel

De nouvelles API sont disponibles pour prendre en charge la visibilité des agendas dans tous les profils et le blocage au niveau de l'appareil des installations d'applications provenant de sources inconnues.

Profil professionnel, sources inconnues au niveau de l'appareil

Les applications téléchargées à partir de sources autres que Google Play (ou d'autres plates-formes de téléchargement d'applications de confiance) sont appelées "applications provenant de sources inconnues". Dans Android 10, les administrateurs de profils professionnels peuvent empêcher tout utilisateur ou profil d'installer des applications provenant de sources inconnues n'importe où sur l'appareil en ajoutant la nouvelle restriction utilisateur DISALLOW_INSTALL_UNKNOWN_SOURCES_GLOBALLY. Toutefois, après l'ajout de cette restriction, une personne utilisant l'appareil peut toujours installer des applications à l'aide d'adb.

Pour empêcher les utilisateurs d'installer par erreur des applications provenant de sources inconnues, nous vous recommandons d'ajouter cette restriction utilisateur, car elle ne nécessite pas l'installation des services Google Play. Si vous souhaitez prendre en charge d'anciennes versions d'Android, vous pouvez définir une valeur de configuration gérée pour Google Play.

Limiter les périphériques d'entrée autorisés aux profils professionnels

Lorsque les administrateurs de profils professionnels appellent DevicePolicyManager.setPermittedInputMethods(), les utilisateurs ne peuvent utiliser que les modes de saisie autorisés dans leur profil professionnel et non dans l'ensemble de l'appareil, ce qui leur donne un contrôle total sur les modes de saisie du côté personnel de leur appareil.

Effacer de façon silencieuse les profils professionnels

Ajout de l'option WIPE_SILENTLY à DevicePolicyManager.wipeData(). Si l'indicateur est défini, les utilisateurs ne seront pas avertis après l'effacement de leur profil professionnel via wipeData().

Nouvelles fonctionnalités pour les appareils entièrement gérés

Android 10 introduit de nouvelles fonctionnalités et API pour les appareils entièrement gérés, y compris des mises à jour système manuelles, l'extension du provisionnement de code QR et NFC pour inclure les identifiants d'un réseau Wi-Fi EAP, et la compatibilité avec le DNS sur TLS.

Installation manuelle de la mise à jour du système

Dans Android 10, les administrateurs d'appareils entièrement gérés peuvent installer les mises à jour du système via un fichier de mise à jour système. Les mises à jour manuelles du système permettent aux administrateurs informatiques d'effectuer les opérations suivantes:

  • Testez une mise à jour sur un petit nombre d'appareils avant de les installer à grande échelle.
  • Évitez les téléchargements en double sur les réseaux à bande passante limitée.
  • Échelonnez les installations ou mettez à jour les appareils uniquement lorsqu'ils ne sont pas utilisés.

Tout d'abord, un administrateur informatique définit une règle de mise à jour du système différée pour retarder l'installation automatique (si nécessaire). Le DPC d'un appareil appelle ensuite installSystemUpdate() avec le chemin d'accès au fichier de mise à jour système du fabricant de l'appareil. Transmettez un objet InstallSystemUpdateCallback que le système peut utiliser pour signaler les erreurs qui se produisent avant le redémarrage de l'appareil. En cas de problème, le système appelle onInstallUpdateError() avec le code d'erreur.

Une fois l'appareil redémarré, l'outil DPC doit confirmer que l'installation a réussi à l'aide d'une API de version, telle que Build.FINGERPRINT. Si la mise à jour échoue, signalez l'échec à un administrateur informatique.

Provisionnement du Wi-Fi EAP

Dans Android 10, les codes QR et les données NFC utilisés pour le provisionnement des appareils peuvent contenir la configuration et les identifiants EAP, y compris des certificats. Lorsqu'une personne scanne un code QR ou appuie sur un tag NFC, l'appareil s'authentifie automatiquement auprès d'un réseau Wi-Fi local à l'aide du protocole EAP et lance le processus de provisionnement sans saisie manuelle supplémentaire.

Pour authentifier le Wi-Fi à l'aide du protocole EAP, ajoutez un extra EXTRA_PROVISIONING_WIFI_SECURITY_TYPE avec la valeur "EAP". Pour spécifier l'authentification EAP, vous pouvez ajouter les extras de provisionnement suivants à votre intent:

Prise en charge du DNS privé

Les organisations peuvent utiliser le DNS sur TLS (appelé DNS privé sur les appareils Android) pour éviter les fuites de requêtes DNS, y compris celles des noms d'hôte internes. Les composants d'administration des appareils entièrement gérés peuvent contrôler les paramètres DNS privés de l'appareil. Pour définir le mode DNS privé, appelez la commande suivante:

Lorsque votre DPC appelle l'une de ces méthodes, le système renvoie PRIVATE_DNS_SET_NO_ERROR si l'appel a abouti. Sinon, elle renvoie une erreur.

Pour récupérer le mode DNS privé et l'hôte définis sur un appareil, appelez getGlobalPrivateDnsMode() et getGlobalPrivateDnsHost(). Vous pouvez empêcher les utilisateurs de modifier les paramètres DNS privés en ajoutant la restriction utilisateur DISALLOW_CONFIG_PRIVATE_DNS.

Exemption du mode de blocage du VPN

Le mode de blocage VPN permet à un DPC de bloquer tout trafic réseau qui n'utilise pas le VPN. Les administrateurs d'appareils entièrement gérés et de profils professionnels peuvent exclure des applications du mode de blocage. Les applications exemptées utilisent un VPN par défaut, mais se connectent automatiquement à d'autres réseaux si le VPN n'est pas disponible. Les applications exemptées qui refusent explicitement l'accès au VPN n'utilisent que d'autres réseaux.

Pour exclure une application du mode de blocage, appelez la nouvelle méthode DevicePolicyManager setAlwaysOnVpnPackage() qui accepte une liste de packages d'application exemptés. Tous les packages d'applications ajoutés par le DPC doivent être installés sur l'appareil lorsque la méthode est appelée. Si une application est désinstallée et réinstallée, elle doit à nouveau être exemptée. Pour obtenir les applications précédemment exemptées du mode de blocage, appelez getAlwaysOnVpnLockdownWhitelist().

Pour aider les administrateurs d'appareils entièrement gérés et de profils professionnels à obtenir l'état du mode de blocage, Android 10 ajoute la méthode isAlwaysOnVpnLockdownEnabled().

Nouveaux champs d'application de délégation

Android 10 étend la liste des fonctions qu'un DPC peut déléguer à d'autres applications plus spécialisées. Android regroupe les méthodes API nécessaires à une tâche dans des champs d'application. Pour déléguer un champ d'application, appelez setDelegatedScopes() et transmettez un ou plusieurs des champs d'application suivants:

Android 10 introduit la nouvelle classe DelegatedAdminReceiver pour les applications déléguées. Le système utilise ce broadcast receiver pour envoyer des rappels de type DPC aux applications déléguées. Les applications auxquelles la journalisation de l'activité réseau et la sélection de certificats ont été déléguées doivent implémenter cette classe. Pour ajouter ce composant à une application déléguée, procédez comme suit:

  1. Ajoutez une sous-classe de DelegatedAdminReceiver à l'application déléguée.
  2. Déclarez <receiver> dans le fichier manifeste de l'application, en ajoutant une action de filtre d'intent pour chaque rappel. Par exemple, ACTION_NETWORK_LOGS_AVAILABLE ou ACTION_CHOOSE_PRIVATE_KEY_ALIAS.
  3. Protégez le broadcast receiver avec l'autorisation BIND_DEVICE_ADMIN.

L'extrait de code suivant montre le fichier manifeste d'une application déléguée qui gère à la fois la journalisation réseau et la sélection des certificats:

<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>

Consignation de l'activité réseau

Pour aider les organisations à détecter et à suivre les logiciels malveillants, les DPC peuvent enregistrer les connexions TCP et les résolutions DNS effectuées par le système. Dans Android 10, les administrateurs d'appareils entièrement gérés peuvent déléguer la journalisation réseau à une application spécialisée.

Pour récupérer les journaux réseau une fois que le système a rendu un lot disponible, les applications déléguées doivent d'abord sous-classer DelegatedAdminReceiver (décrit précédemment). Dans votre sous-classe, implémentez le rappel onNetworkLogsAvailable() en suivant les instructions de la section Récupérer les journaux.

Les applications déléguées peuvent appeler les méthodes DevicePolicyManager suivantes (en transmettant null pour l'argument admin):

Pour éviter de perdre des journaux, les DPC ne doivent pas activer la journalisation réseau s'ils prévoient de déléguer à une autre application. L'application déléguée doit activer et collecter les journaux réseau. Une fois qu'un DPC a délégué la journalisation réseau, il ne reçoit plus de rappels onNetworkLogsAvailable().

Pour savoir comment enregistrer la journalisation de l'activité réseau à partir d'une application déléguée, consultez la section Journalisation de l'activité réseau du guide du développeur.

Sélection du certificat

Dans Android 10, les administrateurs d'appareils entièrement gérés, de profils professionnels et d'utilisateurs secondaires peuvent déléguer la sélection des certificats à une application spécialisée.

Pour sélectionner un alias de certificat, les applications déléguées doivent d'abord sous-classer DelegatedAdminReceiver (décrit précédemment). Dans votre sous-classe, implémentez le rappel onChoosePrivateKeyAlias() et renvoyez un alias pour un certificat préféré, ou renvoyez null pour inviter l'utilisateur à sélectionner un certificat.

Abandon des règles d'administration des appareils

Android 10 empêche les applications et les DPC d'appliquer les anciennes règles d'administrateur d'appareil. Nous recommandons aux clients et aux partenaires de passer à des appareils ou à des profils professionnels entièrement gérés. Les règles suivantes génèrent une exception SecurityException lorsqu'elles sont appelées par un administrateur d'appareil ciblant Android 10:

Certaines applications utilisent l'administration des appareils pour les appareils grand public. (par exemple, verrouiller et effacer un appareil égaré). Pour ce faire, les règles suivantes restent disponibles:

Pour en savoir plus sur ces modifications, consultez Abandon de l'administration des appareils.

Nouvelles fonctionnalités pour les applications

Les applications ciblant Android 10 peuvent interroger la complexité du verrouillage de l'écran définie sur un appareil avant d'afficher des données confidentielles ou de lancer des fonctionnalités critiques. Les applications qui appellent l'API KeyChain bénéficient d'améliorations de comportement, tandis que de nouvelles fonctionnalités sont également disponibles pour les applications de VPN.

Contrôle qualité du verrouillage de l'écran

À partir d'Android 10, les applications dont les fonctionnalités critiques nécessitent un verrouillage de l'écran peuvent interroger la complexité du verrouillage de l'écran d'un appareil ou d'un profil professionnel. Les applications nécessitant un verrouillage d'écran plus puissant peuvent rediriger l'utilisateur vers les paramètres de verrouillage de l'écran du système, ce qui lui permet de mettre à jour ses paramètres de sécurité.

Pour vérifier la qualité du verrouillage de l'écran:

Pour lancer les paramètres de verrouillage de l'écran du système, utilisez ACTION_SET_NEW_PASSWORD avec un EXTRA_PASSWORD_COMPLEXITY supplémentaire. Les options qui ne respectent pas la complexité spécifiée dans l'élément supplémentaire de l'intent sont grisées. Les utilisateurs peuvent choisir parmi les options de verrouillage d'écran disponibles ou quitter l'écran.

Bonne pratique:Affichez un message dans votre application avant de lancer la page de verrouillage de l'écran système. Lorsque votre application reprend, appelez à nouveau DevicePolicyManager.getPasswordComplexity(). Si un verrouillage d'écran plus robuste est toujours nécessaire, limitez l'accès plutôt que d'inviter les utilisateurs à mettre à jour leurs paramètres de sécurité.

Compatibilité du proxy HTTP dans les applications de VPN

Dans Android 10, les applications VPN peuvent définir un proxy HTTP pour leur connexion VPN. Pour ajouter un proxy HTTP, une application VPN doit configurer une instance ProxyInfo avec un hôte et un port, avant d'appeler VpnService.Builder.setHttpProxy(). Le système et de nombreuses bibliothèques réseau utilisent ce paramètre de proxy, mais le système ne force pas les applications à relayer les requêtes HTTP par proxy.

Pour obtenir un exemple de code expliquant comment définir un proxy HTTP, consultez l'exemple d'application ToyVPN.

Modes de service VPN

Les applications VPN peuvent déterminer si le service est en cours d'exécution en raison du Vpn toujours activé et si le mode de blocage est actif. Les nouvelles méthodes ajoutées dans Android 10 peuvent vous aider à ajuster votre interface utilisateur. Par exemple, vous pouvez désactiver votre bouton de déconnexion lorsque le VPN permanent contrôle le cycle de vie de votre service.

Les applications VPN peuvent appeler les méthodes VpnService suivantes après se connecter au service et établir l'interface locale:

  • isAlwaysOn() pour savoir si le système a démarré le service en raison d'un VPN permanent
  • isLockdownEnabled() pour savoir si le système bloque les connexions qui n'utilisent pas le VPN

L'état "Toujours activé" reste le même pendant l'exécution de votre service, mais l'état du mode verrouillage peut changer.

Améliorations du trousseau

Android 10 introduit plusieurs améliorations liées à l'API KeyChain.

Lorsqu'une application appelle KeyChain.choosePrivateKeyAlias(), les appareils Android 10 et versions ultérieures filtrent la liste des certificats qu'un utilisateur peut choisir en fonction des émetteurs et des algorithmes de clé spécifiés dans l'appel.

Par exemple, lorsqu'un serveur TLS envoie un message de demande de certificat dans le cadre d'un handshake TLS et que le navigateur appelle KeyChain.choosePrivateKeyAlias(), l'invite de sélection de certificat n'inclut que les options correspondant au paramètre de l'émetteur. Si aucune option de correspondance n'est disponible ou si aucun certificat n'est installé sur l'appareil, l'invite de sélection ne s'affiche pas.

De plus, KeyChain n'exige plus de verrouillage de l'écran d'un appareil pour que des clés ou des certificats CA puissent être importés.