Skip to content

Roles

The roles serve as a blueprint for the intended usage scenario of Solar. These definitions are not rigid constraints; users can adapt, combine, or customize permissions in the boundaries set by Solar.

Description

Role Primary Goal Cardinality Uses Solar API?
App Catalog Maintainer Maintain applications catalog (OCM components). Many yes
K8s Cluster Provider Ensure baseline compliance and tooling across a fleet of clusters. Singleton yes
K8s Cluster User Deploy their specific business applications on their clusters. Many yes
Solar Operator Ensure system health and maintain global config. (Solar) Singleton yes
Source Registry Operator Ensure system health and maintain global config. (Source Registry) Many no
Deploy Registry Operator Ensure system health and maintain global config. (Deploy Registry) Many no
App Provider Provide deployable apps. Many no

Permissions

Resource Type Namespace App Catalog Maintainer K8s Cluster Provider K8s Cluster User
Component App Catalog Maintainer CRUD R R
Component K8s Cluster Provider - CRUD -
Component K8s Cluster User - - CRUD
ComponentVersion App Catalog Maintainer CRUD R R
ComponentVersion K8s Cluster Provider - CRUD -
ComponentVersion K8s Cluster User - - CRUD
Target App Catalog Maintainer - - -
Target K8s Cluster Provider - - -
Target K8s Cluster User - CRUD RU
Release App Catalog Maintainer - - -
Release K8s Cluster Provider - CRUD -
Release K8s Cluster User - - CRUD
Profile App Catalog Maintainer - - -
Profile K8s Cluster Provider - CRUD -
Profile K8s Cluster User - - CRUD
ReleaseBinding App Catalog Maintainer - - -
ReleaseBinding K8s Cluster Provider - CRUD -
ReleaseBinding K8s Cluster User - - CRUD
Registry App Catalog Maintainer - - -
Registry K8s Cluster Provider - CRUD -
Registry K8s Cluster User - - CRUD
RegistryBinding App Catalog Maintainer - - -
RegistryBinding K8s Cluster Provider - CRUD -
RegistryBinding K8s Cluster User - - CRUD

Cross-Namespace Dependencies

  • Releases in the namespace of a K8s cluster provider or K8s cluster user can reference ComponentVersions in the namespace of an app catalog maintainer.
  • ReleaseBindings in the namespace of a K8s cluster provider can reference a Target in the namespace of a K8s cluster user.
  • RegistryBindings in the namespace of a K8s cluster provider can reference a Target in the namespace of a K8s cluster user.
  • Targets in the namespace of a K8s cluster user can reference a Registry in the namespace of a K8s cluster provider.
  • Profiles in the namespace of a K8s cluster provider must be able to match Targets in the namespace of a K8s cluster user.

The diagram shows an example of Solar resources and its dependencies. It doesn't cover all variations.

Solar Resources and Roles

Manifests

Below are the ClusterRole, RoleBinding, and ReferenceGrant manifests that establish the permissions and cross-namespace requirements previously described. Note: k8s-cluster-provider.yaml needs to be applied before k8s-cluster-user.yaml.

App Catalog Maintainer

# CRUD permissions for Components, ComponentVersions, and ReferenceGrants
# in the App Catalog Maintainer's own namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: solar:app-catalog-maintainer
rules:
- apiGroups:
  - solar.opendefense.cloud
  resources:
  - components
  - componentversions
  - referencegrants
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
---
# Bind the ClusterRole to the App Catalog Maintainer's namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: solar:app-catalog-maintainer
  namespace: app-catalog-maintainer
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: solar:app-catalog-maintainer
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: app-catalog-maintainer
---
# Allow Releases in the K8s Cluster Provider and K8s Cluster User namespaces to
# reference ComponentVersions in the App Catalog Maintainer's namespace.
apiVersion: solar.opendefense.cloud/v1alpha1
kind: ReferenceGrant
metadata:
  name: allow-release-cv-access
  namespace: app-catalog-maintainer
spec:
  from:
  - group: solar.opendefense.cloud
    kind: Release
    namespace: k8s-cluster-provider
  - group: solar.opendefense.cloud
    kind: Release
    namespace: k8s-cluster-user
  to:
  - group: solar.opendefense.cloud
    kind: ComponentVersion

K8s Cluster Provider

# CRUD permissions for all K8s Cluster Provider resources in their own namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: solar:k8s-cluster-provider
rules:
- apiGroups:
  - solar.opendefense.cloud
  resources:
  - components
  - componentversions
  - profiles
  - registries
  - registrybindings
  - releasebindings
  - releases
  - referencegrants
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
---
# Bind the ClusterRole to the K8s Cluster Provider's namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: solar:k8s-cluster-provider
  namespace: k8s-cluster-provider
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: solar:k8s-cluster-provider
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: k8s-cluster-provider
---
# Read access to Components and ComponentVersions in App Catalog Maintainer namespaces.
# Also used by the K8s Cluster User role (see k8s-cluster-user.yaml).
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: solar:acm-reader
rules:
- apiGroups:
  - solar.opendefense.cloud
  resources:
  - components
  - componentversions
  verbs:
  - get
  - list
  - watch
---
# Bind the read access to the App Catalog Maintainer's namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: solar:k8s-cluster-provider-acm-reader
  namespace: app-catalog-maintainer
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: solar:acm-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: k8s-cluster-provider
---
# CRUD access to Targets in K8s Cluster User namespaces.
# The K8s Cluster Provider manages the Target lifecycle on behalf of cluster users.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: solar:k8s-cluster-provider-target-manager
rules:
- apiGroups:
  - solar.opendefense.cloud
  resources:
  - targets
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
---
# Bind the Target management access to the K8s Cluster User's namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: solar:k8s-cluster-provider-target-manager
  namespace: k8s-cluster-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: solar:k8s-cluster-provider-target-manager
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: k8s-cluster-provider
---
# Allow Targets in the K8s Cluster User namespace to reference Registries in this namespace.
apiVersion: solar.opendefense.cloud/v1alpha1
kind: ReferenceGrant
metadata:
  name: allow-target-registry-access
  namespace: k8s-cluster-provider
spec:
  from:
  - group: solar.opendefense.cloud
    kind: Target
    namespace: k8s-cluster-user
  to:
  - group: solar.opendefense.cloud
    kind: Registry

K8s Cluster User

# CRUD permissions for all K8s Cluster User resources in their own namespace.
# Targets are read/update only — the K8s Cluster Provider manages their lifecycle.
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: solar:k8s-cluster-user
rules:
- apiGroups:
  - solar.opendefense.cloud
  resources:
  - components
  - componentversions
  - profiles
  - registries
  - registrybindings
  - releasebindings
  - releases
  - referencegrants
  verbs:
  - create
  - delete
  - get
  - list
  - patch
  - update
  - watch
- apiGroups:
  - solar.opendefense.cloud
  resources:
  - targets
  verbs:
  - get
  - list
  - patch
  - update
  - watch
---
# Bind the ClusterRole to the K8s Cluster User's namespace.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: solar:k8s-cluster-user
  namespace: k8s-cluster-user
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: solar:k8s-cluster-user
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: k8s-cluster-user
---
# Read access to Components and ComponentVersions in App Catalog Maintainer namespaces.
# Requires ClusterRole solar:acm-reader defined in k8s-cluster-provider.yaml.
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: solar:k8s-cluster-user-acm-reader
  namespace: app-catalog-maintainer
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: solar:acm-reader
subjects:
- apiGroup: rbac.authorization.k8s.io
  kind: User
  name: k8s-cluster-user
---
# Allow ReleaseBindings, RegistryBindings, and Profiles in the K8s Cluster Provider
# namespace to reference Targets in this namespace.
apiVersion: solar.opendefense.cloud/v1alpha1
kind: ReferenceGrant
metadata:
  name: allow-provider-target-access
  namespace: k8s-cluster-user
spec:
  from:
  - group: solar.opendefense.cloud
    kind: ReleaseBinding
    namespace: k8s-cluster-provider
  - group: solar.opendefense.cloud
    kind: RegistryBinding
    namespace: k8s-cluster-provider
  - group: solar.opendefense.cloud
    kind: Profile
    namespace: k8s-cluster-provider
  to:
  - group: solar.opendefense.cloud
    kind: Target