Skip to main content
Version: Next

Authorization in OpenChoreo

OpenChoreo provides a Kubernetes-native, hierarchical Role-Based Access Control (RBAC) system that controls who can perform what actions on which resources. The authorization system is built on four Custom Resource Definitions (CRDs) that define roles, permissions, and bindings β€” all managed declaratively alongside your workloads.

note

Authorization can be disabled for development and testing environments. When disabled, a passthrough implementation allows all requests without any policy evaluation.

Core Concepts​

Subject​

A subject represents the identity making a request. Subjects are identified by entitlements β€” claim-value pairs extracted from the caller's JWT/OIDC token. For example:

  • groups:platformEngineer β€” user belongs to the "platformEngineer" group
  • sub:user-abc-123 β€” user's unique identifier
  • email:alice@acme.com β€” user's email address

A single user can have multiple entitlements (e.g., belonging to several groups), and each entitlement is evaluated independently during authorization.

Action​

An action represents an operation that can be performed on a resource. Actions follow the format resource:verb. For example:

  • component:create β€” create a new component
  • project:view β€” view a project
  • componenttype:create β€” create a new component type

Actions also support wildcards:

  • component:* β€” all operations on components
  • * β€” all operations on all resources

Resource Hierarchy​

Resources in OpenChoreo form a hierarchy that determines the scope of permissions:

Cluster (everything)
└── Namespace
└── Project
└── Component

Permissions can be scoped to any level in this hierarchy:

ScopeExampleMeaning
Cluster-wide"*"Permissions apply to all namespaces, projects, and components across the entire cluster
Namespacens/acmePermissions are only exercisable within the acme namespace. Resources in other namespaces are unaffected
Projectns/acme/project/crmPermissions are restricted to the crm project inside the acme namespace. Other projects within the same namespace are unaffected
Componentns/acme/project/crm/component/backendPermissions apply only to the backend component within the crm project. Other components in the same project are unaffected

A key design property: permissions granted at a parent level automatically cascade to all children. For example, granting component:view at the namespace level allows viewing components in every project within that namespace. However, a permission scoped to a specific project does not grant access to resources in other projects β€” the boundary is strictly defined by the scope.

Authorization CRDs​

OpenChoreo uses four CRDs to manage authorization. Roles define what actions are permitted, and role bindings connect subjects to those roles with a specific scope and effect.

CRDScopePurpose
AuthzClusterRoleClusterDefine a set of allowed actions, available across all namespaces
AuthzRoleNamespaceDefine actions scoped to a single namespace
AuthzClusterRoleBindingClusterBind an entitlement to a cluster role for all resources
AuthzRoleBindingNamespaceBind an entitlement to a role within a specific namespace

For detailed field descriptions and YAML examples, see Authorization CRDs.

Available Actions​

The following actions are defined in the system:

ResourceActions
Namespacenamespace:view
Projectproject:view, project:create, project:delete
Componentcomponent:view, component:create, component:update, component:deploy, component:delete
Component Releasecomponentrelease:view, componentrelease:create
Release Bindingreleasebinding:view, releasebinding:update
Component Typecomponenttype:view, componenttype:create
Workflowworkflow:view, componentworkflow:view, componentworkflow:create, componentworkflowrun:view
Traittrait:view, trait:create
Environmentenvironment:view, environment:create
Data Planedataplane:view, dataplane:create
Build Planebuildplane:view
Observabilityobservabilityplane:view, logs:view, metrics:view, traces:view, alerts:view
Secretssecretreference:create, secretreference:view, secretreference:delete
Workloadworkload:view, workload:create
Rolesrole:view, role:create, role:update, role:delete, action:view
Role Mappingsrolemapping:view, rolemapping:create, rolemapping:update, rolemapping:delete
Deployment Pipelinedeploymentpipeline:view
RCA Reportrcareport:view, rcareport:update, rcareport:delete