Investigate implementation methods for providing GitLab team members access to Duo on their personal namespace
## Context
Duo for GitLab team members' personal namespace has been proposed in https://gitlab.com/gitlab-com/people-group/total-rewards/-/issues/1860 and is supported by e-group members.
## Requirements
1. Ultimate subscription (1 seat)
2. Duo Enterprise add-on (1 seat)
3. Group owned by team member's personal account that subscription is applied to
## Possible options
Note: As Duo Pro is an add-on just like Duo Enterprise, it would work the same way.
| Option | Details | Status |
| ------ | ------- | ------ |
| Duo Enterprise self-serve | Currently no way to provision unpaid subscription. Fulfillment is working on providing internal team members with production subscriptions which we should be able to reuse. | Blocked by https://gitlab.com/groups/gitlab-org/-/epics/18815 (targeted for end of Q3) |
| Duo Enterprise | Can be done through .com API, similar to provisioning Ultimate. Downsides are no expiry and less tracking, but that's true of Ultimate process too. | Possible through API and admin account |
| Duo Enterprise Trial | Can be self-served, but limited to trial period (30 days) | Not a long term solution |
| Duo Core | Premium + Ultimate customers get Duo Core as part of the plan. | Available when turned on |
| Shared namespace with Duo Enterprise | Single group with a manually create subscription. However, IT would still need to manage seat provisioning. <br> Privacy/Security concerns: difficult to ensure true data isolation for team members, which is a major concern when it's for personal projects. | Not recommended |
Automated creation of group is blocked by https://gitlab.com/gitlab-org/gitlab/-/issues/560840 . However, it's not necessarily a blocker to this issue if we have team members self-serve group creation.
## Recommended implementation plan
1. Provide a method (existing Google Form, Lumos, or something else) for team members to submit their personal account username.
- Note: The existing Google Form only allows a single submission, so if reusing the form, one option would be to
2. Automation process:
1. Use an admin account to impersonate the user and create a group with a standard naming, such as `<username>_ultimate_group`.
2. While *not* impersonating the user, upgrade the group to Ultimate using https://docs.gitlab.com/development/internal_api/gitlab_subscriptions/#update-a-subscription (check the existing Ultimate automation to verify the endpoint)
3. Add 1 seat Duo Enterprise using https://docs.gitlab.com/development/internal_api/gitlab_subscriptions/#create-multiple-subscription-add-on-purchases-internal
4. See https://gitlab.com/gitlab-com/Product/-/issues/14203#note_2765057689 for more details/links
3. Ensure that deprovisioning of Ultimate/Duo for the group is in place as part of offboarding.
4. Optionally, have Fulfillment engineers review the script (for reference https://gitlab.com/groups/gitlab-org/-/epics/18023#note_2769932186 ).
5. Update handbook with process: https://handbook.gitlab.com/handbook/total-rewards/incentives/#gitlab-ultimate-with-duo-enterprise
6. Announce in Slack `#whats-happening-at-gitlab` and cross-post in other relevant places.
Note: In the short-term, there may be other options as outlined in [https://gitlab.com/groups/gitlab-org/-/epics/18023#note_2769932186](https://gitlab.com/groups/gitlab-org/-/epics/18023#note_2772625665)
issue