Authorization deployment runbook¶
Internal — how ESZ issues and rotates the credentials behind the platform's authorization. The partner-facing view of the same mechanisms (the four auth hops) is Authentication.
- Apply auth and integrations migrations before starting resource services.
- For Entra-managed access, record the groups' immutable object IDs, set
MICROSOFT_GROUP_PERMISSIONS, and verify every configured bundle exists. - For locally managed access, create an
AccessGroupin the auth admin, select a permission bundle, and assign users. Entra and local access are merged at the user's next login. - Create one OAuth client per machine caller, including logging and e-mail ingress senders. Grant only the required scopes and set the shortest practical token lifetime.
- Deliver each client secret through the deployment secret store. Callers
exchange it at
POST /auth/oauth/token; never place it in a repository or image. - A fixed-header caller that cannot perform an OAuth exchange may receive a
long-lived Bearer token from the OAuth client's Issue direct token action
in the auth admin. The equivalent CLI is
issue_client_token <client-id> --scope <scope> --ttl-days <days>. Configure the caller to send it directly asAuthorization: Bearer <token>; it must not call the OAuth token endpoint. Record itsjti, owner and expiry. It cannot be individually revoked, so this is an exception requiring an explicit rotation plan. INTEGRATIONS_EMAIL_TOKENis a compatibility credential for the nginx mail ingress only. Every request carrying it is attributed to the singleINTEGRATIONS_EMAIL_CLIENT_NAMEsender policy, so per-submitter attribution and per-submitter sender allowlists ended with the SMTP relay. This holds while the ingress has effectively one external submitter; onboard additional submitters as OAuth clients with their own sender policies instead. Prefer an OAuth client and remove the static token when the ingress can exchange credentials itself.- For signing-key rotation, publish the new key with a new
OIDC_KEY_IDand keep the previous public key andOIDC_PREVIOUS_KEY_IDconfigured until every short- and long-lived token signed by it has expired. - Remove the previous key only after the latest recorded token expiry.