Skip to content

RBAC

Fine-grained role-based access control for applications

Cased CD Enterprise provides a UI for managing ArgoCD’s role-based access control (RBAC) system.

ArgoCD RBAC controls:

  • Who can perform actions (users, groups)
  • What actions they can perform (get, create, update, delete, sync)
  • On which resources (applications, clusters, repositories, projects)

Navigate to SettingsRBAC in Cased CD to see:

  • All defined roles and their permissions
  • Which users and groups are assigned to each role
  • Permission matrix showing access levels

ArgoCD uses a Casbin-based policy format:

# Permission: p, subject, resource, action, object, effect
p, role:developer, applications, get, */*, allow
# Group assignment: g, user/group, role
g, alice, role:developer
ResourceDescription
applicationsArgoCD applications
clustersKubernetes clusters
repositoriesGit repositories
projectsArgoCD projects
accountsArgoCD accounts
certificatesTLS certificates
gpgkeysGPG signing keys
logsApplication logs
execPod exec access
ActionDescription
getView/read access
createCreate new resources
updateModify existing resources
deleteRemove resources
syncSync applications
overrideOverride sync settings
actionRun resource actions
*All actions

Objects use the format project/application:

  • */ — All projects, all applications
  • default/* — All applications in default project
  • production/frontend — Specific application
  • */frontend-* — Pattern matching

Full access to everything:

p, role:admin, *, *, */*, allow
g, admin-team, role:admin

Can view and sync applications:

p, role:developer, applications, get, */*, allow
p, role:developer, applications, sync, */*, allow
p, role:developer, logs, get, */*, allow
g, dev-team, role:developer

Read-only access:

p, role:viewer, applications, get, */*, allow
p, role:viewer, clusters, get, *, allow
p, role:viewer, repositories, get, *, allow
p, role:viewer, projects, get, *, allow
g, stakeholders, role:viewer

Access limited to specific project:

p, role:frontend-dev, applications, get, frontend/*, allow
p, role:frontend-dev, applications, sync, frontend/*, allow
p, role:frontend-dev, logs, get, frontend/*, allow
g, frontend-team, role:frontend-dev
Terminal window
kubectl patch configmap argocd-rbac-cm -n argocd --type merge -p '
data:
policy.csv: |
p, role:developer, applications, get, */*, allow
p, role:developer, applications, sync, */*, allow
g, developers, role:developer
policy.default: role:readonly
'

The policy.default setting determines permissions for authenticated users without explicit roles:

# Read-only access for everyone
policy.default: role:readonly
# No access by default (most restrictive)
policy.default: ""

By default, ArgoCD checks the groups claim from OIDC tokens. Configure additional scopes:

# argocd-rbac-cm
data:
scopes: "[groups, email]"

Use the ArgoCD CLI to test permissions:

Terminal window
# Can user sync applications?
argocd account can-i sync applications '*' --as alice
# Can group deploy to production?
argocd account can-i sync applications 'production/*' --as-group developers
  1. Check user’s group membership in IdP
  2. Verify RBAC policy syntax
  3. Check ArgoCD server logs for policy evaluation
Terminal window
kubectl logs -n argocd deployment/argocd-server | grep -i rbac

ArgoCD caches RBAC policies. Restart the server to force reload:

Terminal window
kubectl rollout restart deployment argocd-server -n argocd