Help us improve
Share bugs, ideas, or general feedback.
From prodsec-skills
Enforces least-privilege RBAC and secure runtime configuration for Kubernetes Operators. Use when building, reviewing, or auditing Operator manifests, ClusterRoles, Roles, OLM bundles, or CRD definitions.
npx claudepluginhub redhatproductsecurity/prodsec-skills --plugin prodsec-skillsHow this skill is triggered — by the user, by Claude, or both
Slash command
/prodsec-skills:operator-securityThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Secure Operator manifests, OLM packaging, CRD governance, and runtime configuration for least-privilege operation.
Evaluates Kubernetes operator quality via checklists for safety, CRDs, webhooks, RBAC, controllers, fast dev loops, tests, and troubleshooting. Use before production or iterations.
Reviews OpenShift Security Context Constraints (SCC) for proper privilege levels. Helps audit pod security, SCC assignments, and container runtime permissions on OpenShift clusters.
Provides expert guidance on Kubernetes, OpenShift, and OLM: debugging resources like pods/deployments, operator development/troubleshooting, manifest/CRD reviews, and cluster investigations.
Share bugs, ideas, or general feedback.
Secure Operator manifests, OLM packaging, CRD governance, and runtime configuration for least-privilege operation.
OperatorGroup to specify the set of namespaces the Operator manages| Rule | Rationale |
|---|---|
| No wildcards -- list every verb and resource explicitly | Wildcards grant permissions to resources that may not exist yet |
No cluster-admin | Grants unrestricted access to the entire cluster |
| No self-escalating RBAC | Roles must not grant the ability to create or modify their own RoleBindings |
No Escalate verb | Allows circumventing RBAC restrictions |
No Bind verb in role definitions | Allows binding to roles with higher privileges |
USER in the Containerfile; never default to or assume uid=0readOnlyRootFilesystem: truerunAsNonRoot: trueautomountServiceAccountToken: false unless the SA token is actually neededno-new-privileges: true in the security contextOperators must be installed via the Operator Lifecycle Manager (OLM). Direct deployment of operator pods bypasses OLM's dependency resolution, upgrade management, and security controls.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
Operators must report a Succeeded installation status. Failed or pending installations indicate packaging or dependency issues.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
Operators must not require Security Context Constraint (SCC) access privileges during installation.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
Only one instance of the same operator CSV should exist per cluster.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
All Custom Resource Definitions must include an OpenAPI v3 schema specification. This enables validation of custom resources at admission time.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
CRDs must have valid versioning with proper served/storage version configuration.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
Operators must use semantic versioning (semver) for their CSV version.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
Each CRD must be owned by only one operator. Multiple operators claiming ownership of the same CRD creates conflict and unpredictable behavior.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
Catalog sources must contain fewer than 1000 bundles. Large catalogs degrade OLM performance and increase memory consumption.
Required for: all profiles (optional, recommended best practice)
Operators with multiple versions in a catalog must have a valid OLM skip range configured to enable proper upgrade paths.
Required for: all profiles (optional, recommended best practice)
Tenant namespaces can only contain operators with SingleNamespaced or MultiNamespaced install modes. Cluster-scoped operators should not be installed in tenant namespaces.
Required for: all profiles (optional, recommended best practice)
Operator pods must not enable hugepages. Hugepage allocation is a node-level resource that should be reserved for application workloads, not operator infrastructure.
Required for: Telco (mandatory), Far-Edge (mandatory), Extended (mandatory), Non-Telco (optional)
cluster-admin is not usedEscalate and Bind verbs are not grantedUSERreadOnlyRootFilesystem: true is setrunAsNonRoot: true is setautomountServiceAccountToken: false unless requiredOperatorGroup is used to scope namespace accessSucceeded installation status| Guidance | Certsuite Test ID | Profiles |
|---|---|---|
| Installed via OLM | operator-install-source | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| Installation succeeded | operator-install-status-succeeded | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| No SCC privileges | operator-install-status-no-privileges | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| No duplicate operators | operator-multiple-same-operators | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| CRD OpenAPI schema | operator-crd-openapi-schema | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| CRD versioning | operator-crd-versioning | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| Semantic versioning | operator-semantic-versioning | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| Single CRD owner | operator-single-crd-owner | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |
| Catalog bundle count | operator-catalogsource-bundle-count | All profiles: optional (recommended) |
| OLM skip range | operator-olm-skip-range | All profiles: optional (recommended) |
| Namespace scoping | operator-single-or-multi-namespaced-allowed-in-tenant-namespaces | All profiles: optional (recommended) |
| No hugepages | operator-pods-no-hugepages | Telco/Far-Edge/Extended: mandatory, Non-Telco: optional |