diff --git a/articles/custom-os-settings.md b/articles/custom-os-settings.md index ee9fa00852..e7daf2f4b4 100644 --- a/articles/custom-os-settings.md +++ b/articles/custom-os-settings.md @@ -178,6 +178,40 @@ The error message will provide the reason from the Android Management API (AMAPI Note that the "Resend" button is only available for certificates. Fleet pushes certificates via Fleet's Android app. Other configuration profiles don't have the "Resend" button because they are sent via a different mechanism: the host checks in for these profiles periodically similarly to Apple declaration (DDM) profiles, rather than Fleet pushing them. +#### Biometric unlock on personally-owned (BYOD) hosts + +Android applies the biometric values of `keyguardDisabledFeatures` to the work profile lock. By default, the end user has one lock for both the work profile and the host ("Use one lock"). There is no separate work profile lock to restrict, so Android restricts the host's lock instead. The profile below turns off fingerprint and face unlock for the whole host, including the end user's personal apps: + +```json +{ + "keyguardDisabledFeatures": [ + "FACE", + "BIOMETRICS" + ] +} +``` + +To restrict biometric unlock on the work profile only, require a separate work profile lock in the same profile: + +```json +{ + "keyguardDisabledFeatures": [ + "FACE", + "BIOMETRICS" + ], + "passwordPolicies": [ + { + "passwordScope": "SCOPE_PROFILE", + "unifiedLockSettings": "REQUIRE_SEPARATE_WORK_LOCK" + } + ] +} +``` + +Android then asks the end user to set a work profile lock. Until they set it, Android reports `passwordPolicies` with a reason of `USER_ACTION`, and Fleet shows the profile as "Failed" on **Host > OS settings**. The profile moves to "Verified" after the end user sets the lock. + +`unifiedLockSettings` requires Android 9 or later, and Android rejects the policy unless `passwordScope` is `SCOPE_PROFILE`. + ## Broken profiles If one or more labels included in the profile's scope are deleted, the profile will not apply to new hosts that enroll. diff --git a/docs/solutions/android/configuration-profiles/README.md b/docs/solutions/android/configuration-profiles/README.md index 5521adce19..cd95e2361b 100644 --- a/docs/solutions/android/configuration-profiles/README.md +++ b/docs/solutions/android/configuration-profiles/README.md @@ -7,3 +7,16 @@ - Google limits how the complexity requirements function on BYOD devices. For BYOD: - `passwordMinimumLength` set to 8 makes the length requirement for PIN 8, password 6. - `passwordMinimumLength` set to 6 makes the length requirement for PIN 6, password 4. + + +## [Disable face and biometrics unlock](disable-face-and-biometrics-unlock.json) + +- Android applies these values to the work profile lock. On BYOD hosts, the end user has one lock for both the work profile and the host by default. There is no separate work profile lock to restrict, so Android restricts the host's lock instead. This turns off fingerprint and face unlock for the whole host, including the end user's personal apps. +- To restrict biometric unlock on the work profile only, add the settings from [Require separate work profile lock](require-separate-work-profile-lock.json) to this profile. + + +## [Require separate work profile lock](require-separate-work-profile-lock.json) + +- This stops the end user from using one lock for both the work profile and the host. +- Until the end user sets a work profile lock, Android reports `passwordPolicies` with a reason of `USER_ACTION`, and Fleet shows the profile as "Failed" on **Host > OS settings**. The profile moves to "Verified" after the end user sets the lock. +- `unifiedLockSettings` requires Android 9 or later, and Android rejects the policy unless `passwordScope` is `SCOPE_PROFILE`. diff --git a/docs/solutions/android/configuration-profiles/require-separate-work-profile-lock.json b/docs/solutions/android/configuration-profiles/require-separate-work-profile-lock.json new file mode 100644 index 0000000000..7d922b3e0e --- /dev/null +++ b/docs/solutions/android/configuration-profiles/require-separate-work-profile-lock.json @@ -0,0 +1,8 @@ +{ + "passwordPolicies": [ + { + "passwordScope": "SCOPE_PROFILE", + "unifiedLockSettings": "REQUIRE_SEPARATE_WORK_LOCK" + } + ] +}