Stitchflow
OpenShift logo

OpenShift User Management Guide

Manual workflow

How to add, remove, and manage users with operational caveats that matter in production.

UpdatedMar 11, 2026

Summary and recommendation

OpenShift user management can be run manually, but complexity usually increases with role models, licensing gates, and offboarding dependencies. This guide gives the exact mechanics and where automation has the biggest impact.

OpenShift does not provision users through a UI form or SCIM feed. Instead, user objects are created automatically the first time someone authenticates through a configured identity provider - HTPasswd, LDAP, OIDC, GitHub, or several others.

Until that first login occurs, the user does not exist as an object in the cluster, which means role bindings assigned before first login must be created manually via CLI.

Access is governed by Kubernetes RBAC extended with OpenShift-specific cluster and project roles. Every app and workload lives inside a project namespace, and the role a user holds at the cluster scope is entirely separate from what they can do inside a specific project.

This two-layer model - cluster roles and local/project roles - is the source of most day-to-day permission confusion.

Quick facts

Admin console pathAdministrator perspective → User Management (for cluster-level users and roles); also accessible via Administration → Cluster Settings for OAuth/IDP configuration
Admin console URLOfficial docs
SCIM availableNo
SCIM tier requiredEnterprise
SSO prerequisiteNo

User types and roles

Role Permissions Cannot do Plan required Seat cost Watch out for
cluster-admin Full read/write access to all resources across all namespaces and the cluster itself. Can manage nodes, storage, networking, RBAC, and all workloads. Nothing is restricted; this is the highest privilege role. All self-managed and managed (ROSA, ARO) tiers No per-seat cost; licensing is compute-based (core-pairs or vCPU-hours) The bootstrap 'kubeadmin' virtual user exists only until an identity provider is configured; Red Hat recommends removing it after setting up a proper cluster-admin account.
cluster-reader Read-only access to most cluster-level resources. Cannot modify any resources. Cannot create, update, or delete any cluster resources. All tiers No per-seat cost Does not grant read access to secrets by default.
admin (local/project) Full control over all resources within a specific project/namespace, including the ability to manage role bindings within that project. Cannot manage cluster-level resources or other projects. Cannot modify resource quotas set at the cluster level. All tiers No per-seat cost Project admin can grant roles up to but not exceeding their own permissions within the project.
edit (local/project) Can create, update, and delete most resources within a project (deployments, pods, services, configmaps). Cannot manage role bindings. Cannot view or modify RBAC role bindings within the project. Cannot manage resource quotas or limit ranges. All tiers No per-seat cost Users with 'edit' cannot grant access to others within the project.
view (local/project) Read-only access to most resources within a project. Cannot view secrets. Cannot create, update, or delete any resources. All tiers No per-seat cost Secrets are explicitly excluded from view-role access.
basic-user Can get basic information about projects and users. Default role assigned to authenticated users. Cannot access project resources without an explicit project role binding. All tiers No per-seat cost A user who authenticates successfully but has no project role bindings can log in but cannot do anything meaningful until granted a project role.

Permission model

  • Model type: role-based
  • Description: OpenShift uses Kubernetes RBAC extended with OpenShift-specific cluster roles and local (project-scoped) roles. Permissions are granted by binding a role to a user, group, or service account at either the cluster scope or namespace/project scope. OpenShift ships with a set of default cluster roles (cluster-admin, cluster-reader, admin, edit, view, basic-user, self-provisioner, etc.) and supports creation of fully custom roles with fine-grained API group/resource/verb combinations.
  • Custom roles: Yes
  • Custom roles plan: Available on all tiers (self-managed, ROSA, ARO); no additional plan required
  • Granularity: API group + resource type + resource name + verb (get, list, watch, create, update, patch, delete, deletecollection). Roles can be scoped to cluster-wide or individual namespace/project.

How to add users

  1. Configure an identity provider (IDP) via Administration → Cluster Settings → Configuration → OAuth in the web console, or by editing the OAuth cluster object via CLI (oc edit oauth cluster). Supported IDPs include HTPasswd, LDAP, GitHub, GitLab, Google, OpenID Connect, Keystone, Request Header, and Basic Authentication.
  2. For HTPasswd IDP: create an htpasswd file with 'htpasswd -c -B -b /tmp/htpasswd ', create a secret from the file ('oc create secret generic htpass-secret --from-file=htpasswd=/tmp/htpasswd -n openshift-config'), and reference the secret in the OAuth CR.
  3. User objects are created automatically in OpenShift the first time a user authenticates via the configured IDP - there is no pre-provisioning step required for IDP-backed users.
  4. To grant cluster-level access after first login: 'oc adm policy add-cluster-role-to-user '
  5. To grant project-level access: 'oc adm policy add-role-to-user -n '
  6. Alternatively, in the web console: navigate to User Management → Users, select the user, and use the Role Bindings tab to add role bindings.

Required fields: Username (as defined in the identity provider), Identity provider configuration (at least one IDP must be configured on the cluster), Role or role binding (required to grant any meaningful access)

Watch out for:

  • User objects do not exist in OpenShift until the user logs in for the first time via an IDP - you cannot pre-create a user object and assign roles before their first login unless you create the User object manually via CLI ('oc create user ').
  • HTPasswd IDP requires updating the secret and restarting the OAuth server for changes to take effect; there is no live user-add UI for HTPasswd.
  • Multiple IDPs can be configured simultaneously, but usernames must be unique across all IDPs or identity mapping conflicts will occur.
  • The 'kubeadmin' virtual user is not a real User object and cannot be managed via normal RBAC tooling.
  • On ROSA (Red Hat OpenShift Service on AWS), the cluster-admin role cannot be self-assigned; it must be granted via the ROSA CLI ('rosa grant user cluster-admin --user= --cluster=') or the ROSA web console.
Bulk option Availability Notes
CSV import No Not documented
Domain whitelisting No Automatic domain-based user add
IdP provisioning Yes LDAP group sync is available on all self-managed tiers. OIDC/SAML via Red Hat SSO (Keycloak) is available on all tiers. No native SCIM support on any tier.

How to remove or deactivate users

  • Can delete users: Yes
  • Delete/deactivate behavior: OpenShift supports both deletion of the User object and deletion of the associated Identity object. Deleting the User object ('oc delete user ') removes the user's cluster access and role bindings but does not prevent re-creation if the user authenticates again via the IDP. To fully prevent re-authentication, the Identity object must also be deleted ('oc delete identity :') AND the user must be removed from the upstream identity provider (e.g., removed from LDAP, HTPasswd file, or OIDC provider). There is no 'deactivate/suspend' state - access is binary (User+Identity objects exist, or they don't).
  1. Identify the user's identity object: 'oc get identity | grep '
  2. Delete the User object: 'oc delete user '
  3. Delete the Identity object: 'oc delete identity :'
  4. Remove the user from the upstream identity provider (LDAP directory, HTPasswd file, OIDC provider, etc.) to prevent re-authentication and re-creation of User/Identity objects.
  5. For HTPasswd IDP: update the htpasswd file to remove the user entry, then update the secret: 'oc create secret generic htpass-secret --from-file=htpasswd=/tmp/htpasswd -n openshift-config --dry-run=client -o yaml | oc replace -f -'
  6. Optionally revoke any OAuth tokens: 'oc delete oauthaccesstokens --field-selector=userName='
Data impact Behavior
Owned records Kubernetes/OpenShift resources (deployments, pods, configmaps, secrets, PVCs, etc.) created by the user are not deleted when the user is removed. Resources persist in their respective namespaces and are owned by the namespace, not the user.
Shared content Role bindings referencing the deleted user become orphaned references but do not cause errors; they simply no longer grant access to anyone. Projects/namespaces the user owned or administered continue to exist.
Integrations Service account tokens and OAuth access tokens issued to the user are invalidated when the User object is deleted. Any CI/CD pipelines or external integrations using personal OAuth tokens will break.
License freed OpenShift licensing is compute-based (core-pairs or vCPU-hours), not per-seat. Removing a user does not reduce licensing costs.

Watch out for:

  • Deleting the User object alone is insufficient to block re-access - the Identity object must also be deleted, and the user must be removed from the upstream IDP, otherwise they will re-authenticate and a new User object will be auto-created.
  • There is no 'disable' or 'suspend' state for users in OpenShift; the only way to block access is full deletion of User + Identity objects plus IDP-level removal.
  • On ROSA, cluster-admin and dedicated-admin role grants must be revoked via the ROSA CLI or console before or alongside user deletion.
  • Orphaned role bindings referencing deleted users are not automatically cleaned up and may accumulate over time.

License and seat management

Seat type Includes Cost
Self-managed OpenShift Container Platform - Core-pair subscription 2 physical cores (or 4 vCPUs) per core-pair. Includes OpenShift platform software, Red Hat Enterprise Linux CoreOS for control plane, and Red Hat support. Subscription pricing varies by support tier (Standard/Premium) and term. Public pricing not listed; requires Red Hat sales quote. AWS Marketplace hourly: approximately $0.076/hr per 4 vCPU (3-year committed).
ROSA (Red Hat OpenShift Service on AWS) - vCPU-hour Managed control plane, automated upgrades, Red Hat SRE support. Billed per 4 vCPU-hour of worker node capacity. Approximately $0.171/hr per 4 vCPU (on-demand) plus $0.25/hr per cluster fee for Hosted Control Plane (HCP) model. Committed-use discounts available.
Azure Red Hat OpenShift (ARO) - VM-hour Managed OpenShift on Azure. Billed as Azure Linux VM pricing plus OpenShift license surcharge per VM. Varies by Azure VM SKU. OpenShift license component is included in the VM offer pricing on Azure Marketplace.
  • Where to check usage: For self-managed: Red Hat Subscription Management (RHSM) at https://access.redhat.com/management or Red Hat Hybrid Cloud Console at https://console.redhat.com. For ROSA: AWS Cost Explorer or ROSA console at https://console.redhat.com/openshift. Cluster-level user counts visible via 'oc get users' (CLI) or User Management → Users in the web console.
  • How to identify unused seats: No built-in 'last login' reporting in the OpenShift web console. Administrators can query OAuth access token last-use timestamps via 'oc get oauthaccesstokens' and check '.spec.expiresIn' and creation timestamps. Users who have never logged in will have no OAuth tokens. Third-party audit log analysis (e.g., via OpenShift audit logs in /var/log/oauth-server/) is required for detailed last-login reporting.
  • Billing notes: OpenShift licensing is entirely compute-based, not per-user or per-seat. Adding or removing users has no direct impact on subscription costs. Costs are driven by the number of cores/vCPUs running OpenShift worker and infrastructure nodes. For ROSA and ARO, costs accrue per running node-hour regardless of user count.

The cost of manual management

OpenShift licensing is compute-based, not per-user. Adding or removing users has no direct effect on subscription costs; what drives spend is the number of cores or vCPU-hours running on worker and infrastructure nodes.

That said, the operational cost of manual user management is real. There is no built-in last-login report in the web console. Identifying inactive users requires parsing raw OAuth token metadata via CLI (oc get oauthaccesstokens) or analyzing audit logs from /var/log/oauth-server/.

Neither path is fast at scale.

Removing a user is a multi-step process: delete the User object, delete the Identity object, remove the account from the upstream identity provider, and optionally revoke active OAuth tokens. Missing any step results in the user being silently re-created on their next login attempt.

What IT admins are saying

Administrators consistently flag the multi-step offboarding process as the sharpest operational pain point. Deleting only the User object leaves the Identity object intact, and the user will re-authenticate and re-appear in the cluster without any error or warning.

The absence of native SCIM is a recurring complaint for teams managing every app through a centralized identity platform.

LDAP group sync (oc adm groups sync) is the recommended bulk provisioning path, but it requires scheduling an external cron job and does not create User objects - only Group objects - until users actually log in.

RBAC complexity is also frequently cited. The boundary between cluster-scoped and namespace-scoped role bindings, combined with the large set of default roles, creates uncertainty about which role is appropriate for a given use case.

On ROSA specifically, the inability to self-assign cluster-admin and the requirement to use the ROSA CLI for privilege grants surprises teams migrating from self-managed clusters.

Common complaints:

  • Administrators report that deleting a user requires multiple steps (User object + Identity object + IDP-level removal) and that missing any step results in the user being silently re-created on next login.
  • No native SCIM support means automated user lifecycle management requires custom LDAP sync jobs or external tooling, which is operationally complex compared to SaaS platforms with built-in SCIM.
  • There is no built-in last-login or user activity reporting in the web console; admins must parse raw audit logs or OAuth token metadata to identify inactive users.
  • The HTPasswd identity provider is considered unsuitable for production use at scale because adding or removing a single user requires updating a file secret and triggering an OAuth server reload.
  • RBAC complexity is frequently cited as a barrier: the distinction between cluster-scoped and namespace-scoped role bindings, combined with the large number of default roles, creates confusion about which role to assign for a given use case.
  • On ROSA, the inability to self-assign cluster-admin and the requirement to use the ROSA CLI for privilege grants is reported as an unexpected workflow difference from self-managed OpenShift.

The decision

Manual administration is workable for small, stable clusters where identity provider configuration is already in place and user turnover is low. The web console covers role binding management adequately for day-to-day project-level access changes.

It becomes operationally fragile at scale. No native SCIM means every app that needs automated provisioning requires a custom LDAP sync job or direct API integration. No last-login visibility means identifying stale accounts requires CLI scripting or third-party audit log tooling.

Teams running OpenShift alongside a broader SaaS portfolio will find the manual offboarding gap - where a deleted User object does not block re-authentication - to be the highest-risk failure mode. Any access governance process that relies on the web console alone will miss this.

Bottom line

OpenShift's user management model is purpose-built for infrastructure teams comfortable with CLI tooling and RBAC configuration, not for IT administrators expecting a SaaS-style user lifecycle UI.

The lack of native SCIM, the absence of last-login reporting in the console, and the multi-object deletion requirement for offboarding all create meaningful operational overhead.

Teams that need reliable, auditable user lifecycle management across every app in their stack will need to layer external tooling - LDAP sync jobs, audit log pipelines, or API-driven automation - on top of what OpenShift provides natively.

Automate OpenShift workflows without one-off scripts

Stitchflow builds and maintains end-to-end IT automation across your SaaS stack, including apps without APIs. Built for exactly how your company works, with human approvals where they matter.

Every app coverage, including apps without APIs
60+ app integrations plus browser automation for apps without APIs
IT graph reconciliation across apps and your IdP
Less than a week to launch, maintained as APIs and admin consoles change
SOC 2 Type II. ~2 hours of your team's time

UpdatedMar 11, 2026

* Details sourced from official product documentation and admin references.

Keep exploring

Related apps

Abnormal Security logo

Abnormal Security

API Only
AutomationAPI only
Last updatedMar 2026

Abnormal Security is an enterprise email security platform focused on detecting and investigating threats such as phishing, account takeover (ATO), and vendor email compromise. It does not support SCIM provisioning, which means every app in your stack

ActiveCampaign logo

ActiveCampaign

API Only
AutomationAPI only
Last updatedFeb 2026

ActiveCampaign uses a group-based permission model: every user belongs to exactly one group, and all feature-area access (Contacts, Campaigns, Automations, Deals, Reports, Templates) is configured at the group level, not per individual. The default Adm

ADP logo

ADP

API Only
AutomationAPI only
Last updatedFeb 2026

ADP Workforce Now is a mid-market to enterprise HCM platform that serves as the HR source of record for employee data — payroll, benefits, time, and talent. User access is governed by a hybrid permission model: predefined security roles (Security Maste