-
Notifications
You must be signed in to change notification settings - Fork 820
Closed
Copy link
Labels
#g-security-complianceSecurity & Compliance product groupSecurity & Compliance product group:productProduct Design department (shows up on 🦢 Drafting board)Product Design department (shows up on 🦢 Drafting board)customer-pingalistoryA user story defining an entire featureA user story defining an entire feature~assisting g-mdmThis is a #g-mdm issue that another product group is assistingThis is a #g-mdm issue that another product group is assisting~customer promiseA feature request, or user story for a request, that Fleet has contractually agreed to deliverA feature request, or user story for a request, that Fleet has contractually agreed to deliver
Milestone
Description
Note: This story has expanded beyond its initial scope and is now primarily comprised of leftover work from previous Android stories. It can be split into multiple stories if needed.
Goal
| User story |
|---|
| As an IT admin, |
| I want to deploy certificates from my certificate authority (CA) to Android hosts via UI/API and confirm that they're deployed by visiting the Host details page |
| so that I can connect my end users to the corporate Wi-Fi or VPN. |
Roadmap item
📄 Deploy certificates for Wi-Fi and VPN on personal mobile devices (iOS/iPadOS, Android) and company-owned Windows, & Linux computers
Original requests
Resources
None.
Changes
Product
- UI changes: Figma link
- CLI (fleetctl) usage changes: No changes.
- YAML changes: No changes.
- REST API changes: [API] Deploy certificates on Android hosts via UI/API #36625
- Add
certificatesarray underhost.mdm.os_settings. It should includeoperation_type - Example:
-
"mdm": { "os_settings": { "certificates": [ { "name": "wifi-certificate", "status": "verified", "operation_type": "install", "detail": "" }, { "name": "vpn-certificate", "status": "pending", "operation_type": "remove", "detail": "<error from Fleet Android agent>" } ] } }
- Add
- Fleet's agent (fleetd) changes: No changes.
- GitOps mode UI changes: See Figma link above.
- GitOps generation changes:
- Make sure to export
controls.android_settings.certificatesas part of thegitops generatecommand
- Make sure to export
- Activity changes: [Activity changes] Deploy certificates on Android hosts via UI/API #35199
- Permissions changes: Already covered by "Edit/view OS settings" rows in permissions.
- Changes to paid features or tiers: Fleet Premium (adding certificate authority is required, which isa premium feature).
- My device and fleetdm.com/better changes: No changes.
- Usage statistics: No changes.
- Other reference documentation changes: No changes.
- First draft of test plan added
- Once shipped, the requester has been notified
- Once shipped, dogfooding issue has been filed. Dogfood: Deploy/delete certificates on Android hosts via UI/API #41143
Engineering
- Test plan is finalized
- Contributor API changes: Android app to communicate delete status
- Feature guide changes: #36699
- Document that in order to install certificates, if the host is enrolled prior to 4.78, it must be re-enrolled
- Database schema migrations: Yes
- This is a premium only feature: Yes
ℹ️ Please read this issue carefully and understand it. Pay special attention to UI wireframes, especially "dev notes".
QA
Risk assessment
- Requires load testing: No (because we don't have the infrastructure)
- Risk level: Low (customer requires support for 1000 devices initially)
Test plan
Make sure to go through the list and consider all events that might be related to this story, so we catch edge cases earlier.
UPDATE: Since Dogfood has 4.79 RC, please do part of the QA on Dogfood. At the very least, try the happy path flow.
UI
- Make sure a new page for certificates is available in Fleet Premium at
/controls/os-settings/certificates, and in Fleet Free, we show "Premium" message. - Verify that the user can add a certificate by filling out the form in the Add certificate modal.
- Verify that the user sees a validation error on the name input field if using unsupported characters or name is too long.
- Verify that the user sees a validation error if provides name that is used by existing certificate on the same team.
- Verify that the user can't create a certificate if all fields aren't present.
- Make sure that once the certificate is added, the user can see the certificate name, CA name, and the uploaded at timestamp on
/controls/os-settings/certificatespage.- This should be tested a few times on a fully loaded loadtest instance because it uses replica DB. Dev note: @jacobshandling Are we using the old read after write pattern here? We know it fails if the replication lag is large. Should we try to not actively use this pattern going forward?
- Verify that when the user adds a certificate, the number of pending hosts in the summary section above the certificate list is increased by the number of hosts in that team. It should be increased right after the upload.
- Verify that once the certificate is added to the team, on the host details page (OS settings modal), the certificate is listed with the name that the user provided and
pendingstatus. - Verify that when the certificate is actually installed on the Android host, the status is verified.
- Verify that a certificate template can't be saved if we use a non-existing Fleet variable (e.g.,
$FLEET_VAR_BOZO) - Verify that the status on the host details page is
failedif the user provides an IdP variable that is not available for that host. - Make sure that the user can delete a certificate on the
/controls/os-settings/certificatespage, and that the user sees a confirmation modal. - Verify that when the user deletes a certificate, the number of pending hosts in the summary section above the certificate list is increased by the number of hosts in that team. It should be increased right after the upload.
- Verify that once the certificate is deleted from the team, on the host details page (OS settings modal), the certificate is listed with the name that the user provided and
pendingstatus. (Removing enforcement) - Verify that the certificate is actually deleted on the host when it's deleted in Fleet UI/API.
- Verify that if certificate is uninstalled, it's removed from the list.
- Verify that activities are generated when the user adds or deletes the certificate.
- Make sure that the Certificates page under Settings > Integrations is renamed to "Certificate authorities"
API
- Verify that the user can add a certificate via
POST /api/v1/fleet/certificates - Verify that the user can list added certificates via
GET /api/v1/fleet/certificates - Verify that the user can get a certificate's details via
GET /api/v1/fleet/certificates/:id - Verify that the user can delete a certificate via
DELETE /api/v1/fleet/certificates/:id - Verify that when a user is adding a certificate via
POST /api/v1/fleet/certificates, Fleet validates the name and returns an error if the user specifies non-supported characters, or a too-long name, or a duplicate name. - Verify that
operation_typeandstatusare returned in each certificate object underhost.mdm.certificates(GET /host/:idendpoint).
Scenarios
- Add cert to a host; delete cert from host
- Add cert to a host; delete cert template; cert should be deleted from host
- Add cert to a host; delete CA; cert should remain on host
- Move host from a team with cert(s) to a team with none
- Move host from a team without cert(s) to a team with some
- Move host from a team with certs(s) to a team with cert(s)
- Have the certs on one team have the same names as the certs on the other team
GitOps
- Certs deleted via GitOps also get deleted on Android host
Testing notes
Confirmation
- Engineer: Added comment to user story confirming successful completion of test plan.
- QA: Added comment to user story confirming successful completion of test plan.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
#g-security-complianceSecurity & Compliance product groupSecurity & Compliance product group:productProduct Design department (shows up on 🦢 Drafting board)Product Design department (shows up on 🦢 Drafting board)customer-pingalistoryA user story defining an entire featureA user story defining an entire feature~assisting g-mdmThis is a #g-mdm issue that another product group is assistingThis is a #g-mdm issue that another product group is assisting~customer promiseA feature request, or user story for a request, that Fleet has contractually agreed to deliverA feature request, or user story for a request, that Fleet has contractually agreed to deliver
Type
Projects
Status
Done
Status
Done