GitHub Enterprise Cloud with an enterprise accountmptwork (github.com/enterprises/mptwork)
Identity model
Enterprise Managed Users (EMU) — accounts created/controlled via Microsoft Entra (SAML + SCIM)
Companion SOP
Entra ID authentication & SSO — sop-entra-id-authentication-sso-mptwork.md
Goal: stand up GitHub so every developer signs in with their @mptwork.com identity through the company IdP, accounts are provisioned/deprovisioned automatically, and users are fully company-controlled managed accounts rather than personal GitHub.com accounts.
0. Choose deployment, tier, and identity model
Deployment:
Option
Use
GitHub Enterprise Cloud
GitHub-hosted (GitHub.com); this SOP's path. Data-residency regions available via GHE.com
GitHub Enterprise Server
Self-hosted (air-gapped / strict residency)
Tier / pricing: GitHub Enterprise Cloud lists at ~$21/user/month. Add-ons: GitHub Advanced Security (now sold as Secret Protection + Code Security) and Copilot (Business ~$19, Enterprise ~$39, the latter requiring Enterprise Cloud). A 30-day Enterprise Cloud trial is available.
Identity model — the irreversible decision (make it now):
Model
What it means
Enterprise Managed Users (EMU)(recommended for "enterprise users")
GitHub creates and fully controls each account from your IdP via SCIM; usernames are suffixed (e.g., jsmith_mptwork); users cannot use these accounts for personal/public work outside the enterprise; profile name/email are IdP-controlled. True SCIM lifecycle.
Standard enterprise + SAML SSO
Users keep their personal GitHub.com accounts and authenticate via your IdP; SCIM only sends invitations, not full provisioning. Less control.
Critical: EMU must be set up on a new enterprise account from inception — a standard enterprise cannot be converted to EMU later. Choose EMU now if you want company-controlled enterprise users. This SOP uses EMU.
Part 1 — Subscribe and create the EMU enterprise
Engage GitHub Sales (or your Microsoft EA rep — GitHub is Microsoft-owned and pricing can route through an EA) to purchase Enterprise Cloud and request a new EMU enterprise. (Or start the 30-day trial to pilot.)
GitHub provisions the enterprise mptwork and emails you to set up the "setup user" — a special emergency-access account that bypasses SSO (the EMU break-glass). Set its password and store it offline.
Sign in as the setup user, go to the enterprise → Settings, and on the setup user generate a personal access token (classic) to configure SCIM later.
In Entra → Enterprise applications → New application → add the GitHub Enterprise Managed User gallery app. Open Single sign-on → SAML and note the Login/Sign-on URL, Issuer (Identifier), and download the certificate.
As the setup user, go to enterprise → Settings → Authentication security:
Select Require SAML authentication.
Sign on URL = Entra Login URL; Issuer = Entra Identifier; Public certificate = the Entra signing certificate.
Use Test SAML configuration (expect a green tick), then Save.
Save the SAML recovery codes GitHub displays — they're needed to change/disable SAML if SSO breaks.
Part 4 — Configure SCIM provisioning
As the setup user, ensure SCIM is enabled and use the personal access token from Part 1 as the SCIM bearer token (partner-IdP flow uses the gallery app).
In the Entra GitHub Enterprise Managed User app → Provisioning → Automatic:
Configure attribute mappings (userName, name, emails, externalId) and use the Roles attribute to set each user's enterprise role (member / owner / guest collaborator).
Assign users/groups (e.g., Staff-GitHub) to the app and start provisioning. GitHub creates managed accounts named like jsmith_mptwork; unassigning/disabling a user in Entra invalidates sessions and disables the GitHub account.
Use a single partner IdP (Entra) for both SAML and SCIM — GitHub doesn't support mixing IdPs (e.g., Okta + Entra).
Part 5 — Organizations and repositories
Under the enterprise, create organizations by business line, e.g. mptwork-eng, mptwork-data, mptwork-it.
Within each org, create teams (ideally mapped to IdP groups) and repositories.
Set repository visibility appropriately — in EMU, repos are private or internal (no public repos); internal repos are visible across the enterprise.
Part 6 — Roles and access
Scope
Roles
Enterprise
Owner (full admin), Member, Guest collaborator (limited to internal repos — for vendors/contractors)
Organization
Owner, Member; team maintainer
Repository
Read, Triage, Write, Maintain, Admin
Assign enterprise roles via the Roles attribute in the IdP (Part 4).
Drive org/team membership from IdP groups so access follows joiners/movers/leavers automatically.
Keep enterprise Owners to a minimum.
Part 7 — Security baseline
SSO + 2FA are enforced through Entra (managed users authenticate only via SAML).
Repository rulesets / branch protection: require pull-request reviews, status checks, and block direct pushes to main; require Code Owner review on sensitive paths.
Audit log streaming: stream the enterprise audit log to Microsoft Sentinel or your SIEM.
IP allow lists and policy controls at the enterprise level for restricted access.
Part 8 — Actions (CI/CD)
GitHub Actions runs pipelines; Enterprise includes a monthly Actions minutes allowance (Linux 1×, Windows 2×, macOS 10× consumption).
Use GitHub-hosted runners or register self-hosted runners for special hardware/data-locality needs.
Prefer OIDC from Actions to cloud providers (AWS/Azure/GCP) over long-lived secrets; manage Actions policies (allowed actions, required workflows) at the enterprise/org level.
Part 9 — User lifecycle (SCIM)
Event
Mechanism
Joiner
Assign to the Entra GitHub EMU app → SCIM creates name_mptwork, sets role and group/team access
Mover
Change Entra group membership → org/team access follows
Leaver
Disable/unassign in Entra → SCIM disables the managed account and ends sessions; seat reclaimed
Contractor
Provision as a guest collaborator (internal-repo access only)
Reconcile consumed seats vs licensed seats, especially before renewal.
EMU is irreversible — decide before creating the enterprise. Managed users can't change their profile name/email (IdP-controlled) and can't collaborate publicly outside the enterprise.
The setup user is the SSO-bypass break-glass; protect it and the SAML recovery codes.
One partner IdP for both SAML and SCIM (Entra here) — mixing IdPs is unsupported.
SAML certificates expire — track the Entra app's signing-certificate expiry to avoid an SSO outage.
Verify current pricing/steps at github.com/pricing and GitHub Docs — tiers, GHAS packaging, and console layout change periodically.