Skip to main content

Authorization

DevsPortal controls who can do what, and where, through role-based access control. You define an AuthzRole (a named set of actions) and create an AuthzRoleBinding (which attaches that role to a subject at a scope, with an optional condition and an allow/deny effect). Both have cluster-scoped variants for platform-wide grants.

API groupopenchoreo.dev/v1alpha1
AudiencePlatform engineer / admin
Scope hierarchyCluster → Namespace → Project → Component (permissions cascade downward)

AuthzRole

A role lists permitted actions in resource:verb form (e.g. component:create, logs:view), with wildcards (component:*, *). A ClusterAuthzRole is the cluster-scoped variant.

KindAuthzRole / ClusterAuthzRole · Scope Namespaced / Cluster
FieldDescription
spec.actions[]The permitted actions (resource:verb, wildcards allowed)
apiVersion: openchoreo.dev/v1alpha1
kind: AuthzRole
metadata:
name: developer
namespace: fedshi
spec:
actions:
- project:view
- component:*
- workload:*
- releasebinding:*
- workflowrun:*
- logs:view
- component:exec

AuthzRoleBinding

A binding ties a subject (matched by an entitlement claim from the login token) to one or more roles, each with its own scope and optional CEL conditions, plus an allow/deny effect. A ClusterAuthzRoleBinding grants cluster-wide.

KindAuthzRoleBinding / ClusterAuthzRoleBinding · Scope Namespaced / Cluster
FieldDescription
spec.entitlement.claim / valueThe token claim/value that identifies the subject (prefer groups)
spec.roleMappings[].roleRefThe role granted (kind, name)
spec.roleMappings[].scopeHow far the grant reaches (namespace, project, component)
spec.roleMappings[].conditions[]Optional CEL conditions (e.g. forbid prod mutations)
spec.effectallow (default) or deny — a single matching deny wins
apiVersion: openchoreo.dev/v1alpha1
kind: AuthzRoleBinding
metadata:
name: checkout-team-developer
namespace: fedshi
spec:
entitlement:
claim: groups
value: checkout-team
roleMappings:
- roleRef:
kind: AuthzRole
name: developer
scope:
project: checkout
conditions:
- actions: [releasebinding:create, releasebinding:update, releasebinding:delete]
expression: 'resource.environment != "fedshi/production"'
effect: allow

Authorization is fail-closed: a binding that can't be evaluated cleanly never widens access.

Create in the portal

Roles and bindings are managed from Settings → Access Control, not the Create… page:

  1. Open Settings from the left nav, then the Access Control tab.
  2. Roles — create a cluster or namespace role; pick a quick-start template (Developer / Viewer / Admin) and select actions with the grouped picker.
  3. Role Bindings — run the wizard: choose the subject (the IdP group claim, e.g. checkout-team), add role-scope mappings, attach optional CEL conditions, pick allow/deny, and review.

The portal Settings page, showing the General / Access Control / Secrets tabs

Full guide: Roles and access.

See also