GitLab.com (SaaS) with a top-level group mptwork (gitlab.com/mptwork)
Identity
SAML SSO + SCIM via Microsoft Entra (consistent with the Entra SOP)
Companion SOP
Entra ID authentication & SSO — sop-entra-id-authentication-sso-mptwork.md
Goal: stand up GitLab for MPT Work so that everyone with an @mptwork.com identity signs in through the company IdP, is provisioned/deprovisioned automatically, and is governed as an Enterprise User under the organization's control.
0. Choose deployment and tier
Deployment (chosen at contract signing — it can't be changed mid-term):
Option
Use
GitLab.com (SaaS)
GitLab-hosted; fastest to stand up; this SOP's path
Self-Managed
You install/operate on your own infra (full control, more ops overhead)
GitLab Duo AI credits are bundled into Premium/Ultimate; Duo Pro/Enterprise are separate add-ons. For enterprise users with SSO, automated provisioning, and compliance, choose Premium at minimum, Ultimate where security/compliance scanning and full Enterprise User management matter.
Part 1 — Subscribe and create the organization
Sign in/create an account at https://gitlab.com (an admin identity; you'll federate users later).
Create the top-level group that represents the company: mptwork (gitlab.com/mptwork). This namespace is the anchor for SSO, SCIM, billing, and Enterprise Users.
Purchase seats: Group → Settings → Billing → buy Premium or Ultimate for the seat count (annual). Apply the subscription to the mptwork group.
Add initial Owners of the mptwork group (keep Owners minimal).
Part 2 — Verify the mptwork.com domain
In the mptwork group → Settings → Domain Verification → Add domain → mptwork.com.
Click Verify. A verified domain is the prerequisite for Enterprise Users (Part 5).
Add the TXT record GitLab provides at your DNS host:
Type
Host
Value
TXT
@ (or _gitlab-...)
gitlab-verification=XXXXXXXX (copy exact from GitLab)
Part 3 — Configure SAML SSO (Microsoft Entra)
In the mptwork group → Settings → SAML SSO. GitLab shows the Assertion consumer service URL (callback) and Identifier (entity ID) for this group.
In Entra → Enterprise applications → New application → add the GitLab gallery app. Open Single sign-on → SAML:
Set Identifier and Reply URL (ACS) to the values GitLab provided.
Map the NameID to the user's email/UPN, and add the email claim.
Download the certificate and copy the Login URL.
Back in GitLab SAML SSO, enter the Identity provider SSO URL and the certificate fingerprint/certificate from Entra.
Set member options: Enforce SSO-only authentication for web and Enforce SSO-only membership so mptwork access requires Entra sign-in.
Test the SSO sign-in from a non-admin @mptwork.com account before enforcing.
Part 4 — Automated provisioning with SCIM
In the mptwork group → Settings → SAML SSO → generate the SCIM token and copy the SCIM API endpoint URL.
In the Entra GitLab enterprise app → Provisioning → set mode to Automatic → enter the SCIM endpoint (Tenant URL) and token (Secret Token).
Configure attribute mappings (email, name, externalId) and assign the user/group (e.g., Staff-GitLab) to the app.
Start provisioning. New members are created in mptwork automatically; removing a user from the app (or disabling them in Entra) deprovisions their GitLab access — the backbone of joiner/mover/leaver.
Part 5 — Enterprise Users
With the verified mptwork.com domain and SAML configured, users whose email matches @mptwork.com become Enterprise Users of the mptwork group (paid tier required; Ultimate for full controls — confirm current tier requirement).
As Enterprise Users, the organization controls their account: enforce SSO, manage/disable separate password sign-in, control the account's primary email, and prevent them from removing themselves from organizational governance.
Communicate to staff that their GitLab access is now a company-managed identity tied to @mptwork.com.
Part 6 — Structure: groups, projects, and roles
Subgroups under mptwork model teams/departments (e.g., mptwork/platform, mptwork/web, mptwork/security); projects hold repositories.
Use groups for access (assign teams to subgroups) rather than per-project user adds, so SCIM-driven membership flows cleanly.
Assign roles at the group/project level (inherited downward):
Role
Typical use
Guest
Read issues / limited visibility
Reporter
Read code, triage issues
Developer
Push to non-protected branches, run pipelines
Maintainer
Manage project settings, protected branches
Owner
Manage the group, members, and settings
Part 7 — Access control and security baseline
Enforce 2FA for the group (in addition to IdP MFA) where required.
Protected branches and merge-request approval rules (Premium): require approvals and block direct pushes to main.
Annual billing only for paid tiers; deployment model is fixed for the contract term — choose SaaS vs Self-Managed vs Dedicated deliberately.
SAML SSO + SCIM require Premium+; Enterprise Users require a verified domain on a paid group (Ultimate for full controls) — confirm the current tier requirement.
Watch tier feature movement: GitLab occasionally repositions features (including into the Duo add-ons) between contract cycles — get contractual guarantees that capabilities stay in your tier for the term.
SAML certificates expire — track the Entra app's signing-certificate expiry to avoid an SSO outage.
Verify current steps and pricing at about.gitlab.com/pricing and GitLab docs — tiers, pricing, and console layout change periodically.