<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>RBAC on TechBlog about OpenShift/Ansible/Satellite and much more</title><link>https://blog.stderr.at/tags/rbac/</link><description>TechBlog about OpenShift/Ansible/Satellite and much more</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><copyright>Toni Schmidbauer &amp; Thomas Jungbauer</copyright><lastBuildDate>Wed, 10 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.stderr.at/tags/rbac/index.xml" rel="self" type="application/rss+xml"/><item><title>RBAC Overview — an OpenShift Console plugin</title><link>https://blog.stderr.at/openshift-platform/security/rbac/2026-06-10-rbac-overview-console-plugin/</link><pubDate>Wed, 10 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.stderr.at/openshift-platform/security/rbac/2026-06-10-rbac-overview-console-plugin/</guid><description>&lt;div class="paragraph"&gt;
&lt;p&gt;Answering the question &lt;strong&gt;&amp;#34;who can do what on this cluster?&amp;#34;&lt;/strong&gt; usually means juggling oc commands, YAML dumps, and several console pages. RoleBindings live in namespaces, ClusterRoleBindings are cluster-scoped, OpenShift adds Users and Groups on top of Kubernetes subjects, and SecurityContextConstraints have their own authorisation model. For a quick audit before a change window, that is a lot of clicking and I always struggled to find a quick and reliable way to get and overview. For example, I always wanted to see immediately which users have cluster-admin rights or which service accounts are on the privileged SCC.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The &lt;strong&gt;RBAC Overview&lt;/strong&gt; is a dynamic &lt;strong&gt;OpenShift Console plugin&lt;/strong&gt; that pulls these views into one place. This article walks through what it does, how to install or test it, and how I use the tabs in practice. This open source plugin is available on &lt;a href="https://github.com/tjungbauer/openshift-console-rbac-overview" target="_blank" rel="noopener"&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_why_another_rbac_view"&gt;Why another RBAC view?&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The console already lists RoleBindings, ClusterRoleBindings, Users, and Groups. That is sufficient when you know exactly which resource you need. It is less helpful when you start from a question:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Who has cluster-admin outside the usual system groups?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;What can user alice do in the namespace openshift-gitops?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Which groups may get pods in the namespace default?&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Which service accounts are on the privileged SCC?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The RBAC Overview plugins tries to fix these questions. Each tab uses the Kubernetes and OpenShift authorization APIs (&lt;code&gt;SelfSubjectReview&lt;/code&gt;, &lt;code&gt;ResourceAccessReview&lt;/code&gt;, &lt;code&gt;SubjectAccessReview&lt;/code&gt;, and list permissions) rather than re-implementing policy evaluation in the browser.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_what_you_get"&gt;What you get&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Navigation: The plugin hooks into the &lt;strong&gt;Administrator perspective → User Management → RBAC Overview&lt;/strong&gt; (entry appears above &lt;strong&gt;Users&lt;/strong&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;As direct URL you can use: &lt;code&gt;&amp;lt;cluster-url&amp;gt;/rbac-overview&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The following tabs are available:&lt;/p&gt;
&lt;/div&gt;
&lt;table class="tableblock frame-all grid-all stretch"&gt;
&lt;colgroup&gt;
&lt;col style="width: 25%;"/&gt;
&lt;col style="width: 75%;"/&gt;
&lt;/colgroup&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th class="tableblock halign-left valign-top"&gt;Tab&lt;/th&gt;
&lt;th class="tableblock halign-left valign-top"&gt;Question it answers&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;strong&gt;Who can&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Who may perform a certain action or whether one subject is allowed to do certain actions. It basically mirrors the &lt;code&gt;oc adm policy who-can&lt;/code&gt; command and presents the results in a more user-friendly way.
The tab also includes a &lt;strong&gt;Show my access&lt;/strong&gt; button for the logged-in user, which shows what the logged in user can do on the cluster.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;strong&gt;Cluster admins&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Cluster-wide and namespace-scoped bindings to sensitive roles (&lt;code&gt;cluster-admin&lt;/code&gt;, &lt;code&gt;admin&lt;/code&gt;, or roles you configure). This helps to see which users have elevated rights and which namespaces are affected.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;strong&gt;Namespace access&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;All bindings that affect one namespace — local RoleBindings and applicable ClusterRoleBindings.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;strong&gt;Subjects&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Pick a user, group, or service account and inspect its bindings. This helps to inspect a certain subject and see which roles are bound to it.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;strong&gt;Role access&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;Pick a ClusterRole and list every ClusterRoleBinding and RoleBinding that references it — the inverse of the Subjects tab when you start from a role name instead of a user or group.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;&lt;strong&gt;SCC access&lt;/strong&gt;&lt;/p&gt;&lt;/td&gt;
&lt;td class="tableblock halign-left valign-top"&gt;&lt;p class="tableblock"&gt;All SCCs with key fields, direct &lt;code&gt;users&lt;/code&gt; / &lt;code&gt;groups&lt;/code&gt; / &lt;code&gt;serviceAccounts&lt;/code&gt; on each SCC, and RBAC grants to &lt;code&gt;use securitycontextconstraints&lt;/code&gt;. This helps to see which users, groups, and service accounts are on which SCCs and which RBAC grants are in place.&lt;/p&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_architecture_in_brief"&gt;Architecture in brief&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The plugin follows the usual dynamic plugin pattern:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="olist arabic"&gt;
&lt;ol class="arabic"&gt;
&lt;li&gt;
&lt;p&gt;Webpack builds static assets (&lt;code&gt;plugin-manifest.json&lt;/code&gt;, JavaScript bundles, locales).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;A container image serves those files over &lt;strong&gt;HTTPS on port 9443&lt;/strong&gt; (required by the &lt;code&gt;ConsolePlugin&lt;/code&gt; API).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Helm installs Deployment, Service, ConsolePlugin, ConfigMap (&lt;code&gt;plugin-config.json&lt;/code&gt;), and optionally a Job that enables the plugin on the console. (Plugins must be enabled by the console operator.)&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The runtime image uses &lt;a href="https://hummingbird-project.io/" target="_blank" rel="noopener"&gt;Project Hummingbird&lt;/a&gt; (&lt;code&gt;registry.access.redhat.com/hi/nginx&lt;/code&gt;). I tried this as they are expected to be super-small distroless images, with the goal to have zero CVEs …​ and the size of the image is really only 19MB.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The nginx that is used in this image is serving &lt;code&gt;dist/&lt;/code&gt; with a serving certificate injected by OpenShift. There is no application logic in the container beyond static files.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Configuration for &lt;strong&gt;sensitive roles&lt;/strong&gt; on the Cluster admins tab is delivered via &lt;code&gt;plugin-config.json&lt;/code&gt; (Helm values → ConfigMap).
Default entries include &lt;code&gt;cluster-admin&lt;/code&gt; and &lt;code&gt;admin&lt;/code&gt;; you can add names or label ClusterRoles with &lt;code&gt;rbac-overview.io/elevated: &amp;#34;true&amp;#34;&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_prerequisites"&gt;Prerequisites&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;OpenShift Container Platform or OKD &lt;strong&gt;4.10+&lt;/strong&gt; (dynamic console plugins)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For cluster install: Helm 3, &lt;code&gt;oc&lt;/code&gt;, Podman or Docker, and permission to push your image registry&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;For local development: Node.js 22+, npm, and &lt;code&gt;oc login&lt;/code&gt; with a &lt;strong&gt;bearer token&lt;/strong&gt; (not certificate-only kubeconfig)&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The plugin is tested against recent 4.20+ consoles. Match the console SDK generation to your cluster (the repository currently targets &lt;code&gt;@openshift-console/dynamic-plugin-sdk@4.21-latest&lt;/code&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_install_on_a_cluster"&gt;Install on a cluster&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_install_with_helm"&gt;Install with Helm&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Log in to the cluster, then install the chart. The published and public plugin image is &lt;code&gt;quay.io/tjungbau/openshift-console-rbac-overview:1.0.5&lt;/code&gt; (chart version &lt;strong&gt;1.0.5&lt;/strong&gt;).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;From the &lt;a href="https://github.com/tjungbauer/openshift-console-rbac-overview" target="_blank" rel="noopener"&gt;repository&lt;/a&gt;:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlightjs highlight"&gt;&lt;code class="language-bash hljs" data-lang="bash"&gt;oc login https://&amp;lt;api-url&amp;gt;:6443 -u &amp;lt;user&amp;gt; -p &amp;#39;&amp;lt;password&amp;gt;&amp;#39;
git clone https://github.com/tjungbauer/openshift-console-rbac-overview.git
cd openshift-console-rbac-overview
helm upgrade --install rbac-overview ./chart/rbac-overview \
--namespace rbac-overview \
--create-namespace \
--set namespace.create=false \
--set image.tag=1.0.5 \
--set image.pullPolicy=Always \
--wait&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Or add the published Helm repository (no clone required):&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlightjs highlight"&gt;&lt;code class="language-bash hljs" data-lang="bash"&gt;helm repo add rbac-overview https://tjungbauer.github.io/openshift-console-rbac-overview
helm repo update
helm upgrade --install rbac-overview rbac-overview/rbac-overview \
--namespace rbac-overview \
--create-namespace \
--set namespace.create=false \
--set image.tag=1.0.5 \
--wait&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The chart defaults to &lt;code&gt;quay.io/tjungbau/openshift-console-rbac-overview&lt;/code&gt;; set &lt;code&gt;image.tag&lt;/code&gt; only when you need a specific release.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonitionblock warning"&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class="icon"&gt;
&lt;i class="fa icon-warning" title="Warning"&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class="content"&gt;
Do not combine &lt;code&gt;helm --create-namespace&lt;/code&gt; with &lt;code&gt;--set namespace.create=true&lt;/code&gt;. Helm 4 reports an ownership error on the Namespace object. Use &lt;code&gt;--create-namespace&lt;/code&gt; and &lt;code&gt;namespace.create=false&lt;/code&gt; as shown above. I will clean this up in the future.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_build_your_own_image"&gt;Build your own image&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;If you prefer to create your own image, for example in an air-gapped environment, you are free to do so. The runtime image is a thin nginx layer on top of webpack output — there is no &lt;code&gt;npm&lt;/code&gt; step inside the container. This helps keep the image small and avoids unnecessary dependencies.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;From the repository root:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlightjs highlight"&gt;&lt;code class="language-bash hljs" data-lang="bash"&gt;npm install
npm run build # writes dist/ (plugin-manifest.json, bundles, locales)
podman build --platform=linux/amd64 \ &lt;i class="conum" data-value="1"&gt;&lt;/i&gt;&lt;b&gt;(1)&lt;/b&gt;
-t &amp;lt;your-registry-repository&amp;gt;/:&amp;lt;tag&amp;gt; .
podman login &amp;lt;your-registry-repository&amp;gt; # if your repository is private
podman push &amp;lt;your-registry-repository&amp;gt;/:&amp;lt;tag&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="colist arabic"&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;i class="conum" data-value="1"&gt;&lt;/i&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Use your own registry, repository and version tag.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Then point Helm at your image:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlightjs highlight"&gt;&lt;code class="language-bash hljs" data-lang="bash"&gt;helm upgrade --install rbac-overview ./chart/rbac-overview \
--namespace rbac-overview \
--create-namespace \
--set namespace.create=false \
--set image.repository=&amp;lt;your-registry-repository&amp;gt; \ &lt;i class="conum" data-value="1"&gt;&lt;/i&gt;&lt;b&gt;(1)&lt;/b&gt;
--set image.tag=&amp;lt;tag&amp;gt; \ &lt;i class="conum" data-value="2"&gt;&lt;/i&gt;&lt;b&gt;(2)&lt;/b&gt;
--set image.pullPolicy=Always \
--wait&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="colist arabic"&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;&lt;i class="conum" data-value="1"&gt;&lt;/i&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Use your own registry and repository.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;i class="conum" data-value="2"&gt;&lt;/i&gt;&lt;b&gt;2&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;Use your own version tag.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The repository also ships &lt;code&gt;scripts/build-install.sh&lt;/code&gt;, which runs &lt;code&gt;npm run build&lt;/code&gt;, builds and pushes the image, installs the chart, and runs verification checks in one pass:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlightjs highlight"&gt;&lt;code class="language-bash hljs" data-lang="bash"&gt;chmod +x scripts/build-install.sh
QUAY_USER=&amp;lt;your-quay-user&amp;gt; ./scripts/build-install.sh&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Override &lt;code&gt;VERSION&lt;/code&gt; or &lt;code&gt;PLATFORM&lt;/code&gt; when the tag should differ from &lt;code&gt;package.json&lt;/code&gt; or when you build on Apple Silicon for a &lt;code&gt;linux/amd64&lt;/code&gt; cluster.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonitionblock note"&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class="icon"&gt;
&lt;i class="fa icon-note" title="Note"&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class="content"&gt;
The script was created due to my own lazyness and it has quay.io hardcoded.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;After install, confirm the plugin is enabled:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlightjs highlight"&gt;&lt;code class="language-bash hljs" data-lang="bash"&gt;oc get console.operator cluster -o jsonpath=&amp;#39;{.spec.plugins}{&amp;#34;\n&amp;#34;}&amp;#39;
oc -n rbac-overview get deploy,consoleplugin&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Open the console, switch to &lt;strong&gt;Administrator&lt;/strong&gt;, and reload &lt;strong&gt;User Management → RBAC Overview&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_local_development"&gt;Local development&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;If you like to test the plugin locally first, you can do so by running the following commands - no image build required:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="listingblock"&gt;
&lt;div class="content"&gt;
&lt;pre class="highlightjs highlight"&gt;&lt;code class="language-bash hljs" data-lang="bash"&gt;# terminal 1
npm install
npm run start
# terminal 2
oc login ... # must provide a token: oc whoami --show-token
npm run start-console # console on http://localhost:9000&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Open &lt;a href="http://localhost:9000/rbac-overview" target="_blank" rel="noopener"&gt;http://localhost:9000/rbac-overview&lt;/a&gt;. The console loads the plugin from &lt;code&gt;localhost:9001&lt;/code&gt; while API calls use your &lt;code&gt;oc&lt;/code&gt; session.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonitionblock note"&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class="icon"&gt;
&lt;i class="fa icon-note" title="Note"&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class="content"&gt;
On Apple Silicon, set &lt;code&gt;CONSOLE_IMAGE_PLATFORM=linux/amd64&lt;/code&gt; before &lt;code&gt;npm run start-console&lt;/code&gt;.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;hr/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_using_the_plugin"&gt;Using the plugin&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_who_can"&gt;Who can&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The default tab mirrors &lt;code&gt;oc adm policy who-can&lt;/code&gt; for namespaced and cluster-scoped resources.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;&lt;strong&gt;Query mode&lt;/strong&gt; offers:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Who can&lt;/strong&gt; — list subjects allowed to perform the action&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Can subject&lt;/strong&gt; — check one user, group, or service account&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Set &lt;strong&gt;Scope&lt;/strong&gt;, &lt;strong&gt;Verb&lt;/strong&gt;, &lt;strong&gt;Resource&lt;/strong&gt;, optional &lt;strong&gt;API group&lt;/strong&gt;, &lt;strong&gt;Subresource&lt;/strong&gt;, &lt;strong&gt;Resource name&lt;/strong&gt;, and for namespaced queries a real &lt;strong&gt;Namespace&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="imageblock"&gt;
&lt;div class="content"&gt;
&lt;img src="https://blog.stderr.at/openshift-platform/security/RBAC/images/rbac-overview-who-can-results.png?width=900px" alt="Who can results for get pods in default"/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The button &lt;strong&gt;Show my access&lt;/strong&gt; lists groups, visible namespaces, and role bindings for the logged-in user. This becomes handy when someone asks &lt;strong&gt;what can I actually see on this cluster?&lt;/strong&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;div class="imageblock"&gt;
&lt;div class="content"&gt;
&lt;img src="https://blog.stderr.at/openshift-platform/security/RBAC/images/rbac-overview-my-access.png?width=900px" alt="Show my access panel"/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;From &lt;strong&gt;My access&lt;/strong&gt; you can jump to &lt;strong&gt;Can subject&lt;/strong&gt; with your user pre-filled, or open the &lt;strong&gt;Subjects&lt;/strong&gt; tab on yourself.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_cluster_admins"&gt;Cluster admins&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;This tab highlights bindings to roles you treat as &lt;strong&gt;elevated&lt;/strong&gt; (configured in plugin-config.json or via the rbac-overview.io/elevated label on ClusterRoles).&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Sub tabs:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cluster-wide admins&lt;/strong&gt; — ClusterRoleBindings to sensitive ClusterRoles.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Namespace elevated&lt;/strong&gt; — RoleBindings in any namespace that reference sensitive roles.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="imageblock"&gt;
&lt;div class="content"&gt;
&lt;img src="https://blog.stderr.at/openshift-platform/security/RBAC/images/rbac-overview-cluster-admins.png?width=900px" alt="Cluster-wide sensitive bindings"/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Use &lt;strong&gt;View rules&lt;/strong&gt; on a row to expand policy rules below the table.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_namespace_access"&gt;Namespace access&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Select a namespace, then browse:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;In namespace&lt;/strong&gt; — RoleBindings defined in that namespace.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Cluster-wide&lt;/strong&gt; — ClusterRoleBindings whose ClusterRoles apply there.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="imageblock"&gt;
&lt;div class="content"&gt;
&lt;img src="https://blog.stderr.at/openshift-platform/security/RBAC/images/rbac-overview-namespace-access.png?width=900px" alt="Namespace access for openshift-gitops"/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The default filter shows &lt;strong&gt;User&lt;/strong&gt; and &lt;strong&gt;Group&lt;/strong&gt; subjects; add &lt;strong&gt;ServiceAccount&lt;/strong&gt; when you care about workload identities.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_subjects"&gt;Subjects&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;If you are interested to query a specific subject (user, group etc.) you can use this tab. The list merges:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;subjects found in RoleBindings and ClusterRoleBindings across the cluster, and&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Users, Groups, and ServiceAccounts returned by the OpenShift user API (where your account may list them).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="imageblock"&gt;
&lt;div class="content"&gt;
&lt;img src="https://blog.stderr.at/openshift-platform/security/RBAC/images/rbac-overview-subjects.png?width=900px" alt="Subjects tab with user and group filter"/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Select an entry to see binding details on the right, open linked resources, or continue in &lt;strong&gt;Who can → Can subject&lt;/strong&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="admonitionblock note"&gt;
&lt;table&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td class="icon"&gt;
&lt;i class="fa icon-note" title="Note"&gt;&lt;/i&gt;
&lt;/td&gt;
&lt;td class="content"&gt;
The error message that appears in the screenshot for the selected user is due to the fact that there are no bindings for this user. This is normal and expected.
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_role_access"&gt;Role access&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The &lt;strong&gt;Subjects&lt;/strong&gt; tab answers &lt;strong&gt;who has what bound to them?&lt;/strong&gt; &lt;strong&gt;Role access&lt;/strong&gt; flips the question: &lt;strong&gt;who is bound to this ClusterRole?&lt;/strong&gt; That is useful when you audit a built-in or custom ClusterRole (&lt;code&gt;view&lt;/code&gt;, &lt;code&gt;edit&lt;/code&gt;, &lt;code&gt;cluster-admin&lt;/code&gt;, or a role you ship with an operator) and need every ClusterRoleBinding and RoleBinding that references it in one table.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;Pick a &lt;strong&gt;ClusterRole&lt;/strong&gt; from the dropdown. The table lists matching bindings with scope, namespace (for namespaced RoleBindings), role kind, subjects, and &lt;strong&gt;View rules&lt;/strong&gt; to expand the ClusterRole policy inline.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="imageblock"&gt;
&lt;div class="content"&gt;
&lt;img src="https://blog.stderr.at/openshift-platform/security/RBAC/images/rbac-overview-role-access.png?width=900px" alt="Role access for ClusterRole cluster-admin"/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The screenshot shows &lt;code&gt;cluster-admin&lt;/code&gt; with 30 bindings — a mix of human users, the &lt;code&gt;cluster-admins&lt;/code&gt; group, and OpenShift system groups such as &lt;code&gt;system:openshift:operator:kube-apiserver-operator&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect2"&gt;
&lt;h3 id="_scc_access"&gt;SCC access&lt;/h3&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;To get a quick overview about SCC and who is on which SCC was always tricky.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;OpenShift SCCs authorise subjects in two ways:&lt;/p&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;direct fields on the SCC object&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;RBAC to &lt;code&gt;use securitycontextconstraints&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;This tab shows every SCC and their configuration.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="imageblock"&gt;
&lt;div class="content"&gt;
&lt;img src="https://blog.stderr.at/openshift-platform/security/RBAC/images/rbac-overview-scc-access.png?width=900px" alt="All security context constraints"/&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;All SCCs&lt;/strong&gt; — every SCC you can list, with priority, privileged/host settings, run-as-user and SELinux strategy, volumes, and direct subject count.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Direct authorizations&lt;/strong&gt; — users, groups, and service accounts listed on each SCC.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;RBAC use grants&lt;/strong&gt; — ClusterRoleBindings that grant &lt;code&gt;use&lt;/code&gt; on SCC resources.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;This tab does not replace a full SCC compliance review, but it saves time when you are tracing why a pod was allowed a privileged context.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_limitations"&gt;Limitations&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Who can&lt;/strong&gt; requires the same elevated create permissions as &lt;code&gt;oc adm policy who-can&lt;/code&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Large clusters: tables paginate, but initial binding scans can take a moment on first tab open.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_summary"&gt;Summary&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;RBAC Overview does not replace &lt;code&gt;oc&lt;/code&gt; or your GitOps RBAC manifests. It gives operators and auditors a single console entry point for the questions that come up every week — who is admin, what does this namespace grant, what is bound to this service account, who can touch this verb/resource, and which identities sit on sensitive SCCs.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;The plugin was created with the help of AI (I always want to be open about that), especially the initial layout, some styling elements like dropdowns and buttons and the README …​ which I never want to write.&lt;/p&gt;
&lt;/div&gt;
&lt;div class="paragraph"&gt;
&lt;p&gt;If you try it, feedback and issues are welcome on the &lt;a href="https://github.com/tjungbauer/openshift-console-rbac-overview" target="_blank" rel="noopener"&gt;repository&lt;/a&gt;.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div class="sect1"&gt;
&lt;h2 id="_references"&gt;References&lt;/h2&gt;
&lt;div class="sectionbody"&gt;
&lt;div class="ulist"&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/tjungbauer/openshift-console-rbac-overview" target="_blank" rel="noopener"&gt;openshift-console-rbac-overview on GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://quay.io/repository/tjungbau/openshift-console-rbac-overview?tab=tags" target="_blank" rel="noopener"&gt;openshift-console-rbac-overview on Quay&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://github.com/openshift/console/tree/main/frontend/packages/console-dynamic-plugin-sdk" target="_blank" rel="noopener"&gt;OpenShift Console dynamic plugin SDK&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://docs.openshift.com/container-platform/latest/web_console/dynamic-plugins-overview.html" target="_blank" rel="noopener"&gt;OpenShift dynamic plugins documentation&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://hummingbird-project.io/" target="_blank" rel="noopener"&gt;Project Hummingbird&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description></item></channel></rss>