Blank white background with no objects or features visible.

EMEA, hallo! TrueFoundry breidt zijn aanwezigheid uit in Europa, het Midden-Oosten en Afrika. Lees meer. →

Kubernetes RBAC uitgelegd: Roles, Bindings en de laag erboven

DoorAshish Dubey

Bijgewerkt: November 10, 2026

Gepubliceerd: November 9, 2026

⚡ TL;DR
  • Kubernetes RBAC bestaat uit vier typen objecten: Role en ClusterRole bepalen wat er gedaan mag worden, RoleBinding en ClusterRoleBinding bepalen wie het mag doen.
  • Scope is de kern van het hele model. Een Role is gekoppeld aan een namespace; een ClusterRole niet. Een RoleBinding beperkt permissies tot de eigen namespace, zelfs wanneer deze verwijst naar een ClusterRole – dit is hoe u één ClusterRole veilig kunt hergebruiken over meerdere teams.
  • RBAC is louter additief zonder deny-regels, dus de effectieve toegang is de vereniging van elke overeenkomende binding. kubectl auth can-i is effectiever dan het lezen van YAML.
  • Subjects zijn User, Group en ServiceAccount. Alleen ServiceAccounts zijn echte Kubernetes-objecten; users en groups zijn afkomstig van het systeem dat het verzoek authenticeert.
  • Cluster-RBAC beheert Kubernetes-objecten, niet wie een model mag deployen, een MCP-tool mag aanroepen of een platform-secret mag lezen. Dat is een afzonderlijke platform-RBAC-laag, die onafhankelijk wordt geconfigureerd.

Wat Kubernetes RBAC daadwerkelijk is

Kubernetes RBAC is de autorisatiemodus die bepaalt of een geauthenticeerd verzoek aan de API-server wordt toegestaan. Het wordt geleverd in de rbac.authorization.k8s.io/v1 API-groep en is ingeschakeld op vrijwel elk beheerd cluster.

Authenticatie en autorisatie zijn afzonderlijke stappen. De API-server stelt eerst vast wie u bent – via een clientcertificaat, OIDC-token, ServiceAccount-token of cloud IAM-identiteit – en vraagt vervolgens aan RBAC of die identiteit deze verb mag uitvoeren op deze resource. RBAC bepaalt nooit de identiteit, alleen de permissie.

Een RBAC-regel controleert een beperkte set verzoekvelden:

Veld Betekenis Voorbeeld
apiGroup De API-groep. Core-groep is een lege string "" "", apps, batch
resource Meervoudige resourcenaam, optioneel een subresource pods, pods/log, deployments
verb De operatie get, list, watch, create, update, patch, delete, deletecollection
namespace Welke namespace, voor resources met een namespace team-alpha
resourceNames Optionele specifieke objectnamen ["my-config"]

Twee eigenschappen zijn belangrijker dan welk syntaxisdetail ook.

RBAC is additief. Er is geen deny. Als een binding u een permissie verleent, heeft u deze. De enige manier om deze te intrekken is door elke binding die deze verleent te verwijderen. Vandaar het bekende ticket: "Ik heb hun admin-rol ingetrokken, maar ze kunnen nog steeds pods verwijderen."

RBAC is default-deny. Een verb die door niemand is verleend, wordt geweigerd. Het praktische risico is dus bijna nooit een ontbrekende regel – het is een regel die veel breder is dan de bedoeling was.

Kubernetes Role vs ClusterRole

Een Role is een object met een namespace. Het verleent permissies op resources met een namespace, en uitsluitend binnen de namespace waarin het zich bevindt.

Een ClusterRole is niet gebonden aan een namespace. Het bestaat één keer voor het hele cluster en maakt drie dingen mogelijk die een Role niet kan:

  1. Cluster-scoped resources – nodes, persistentvolumes, namespaces, customresourcedefinitions en de RBAC-objecten zelf.
  2. Non-resource URLs zoals /healthz en /metrics.
  3. Resources met een namespace in elke namespace tegelijk – maar alleen wanneer deze gebonden zijn met een ClusterRoleBinding. Bindt u dezelfde ClusterRole met een RoleBinding, dan beperkt de werking zich tot één namespace.

De vraag k8s Role vs ClusterRole wordt meestal gesteld alsof het om rechten of macht gaat. Het gaat echter om scope en hergebruik:

Role ClusterRole
Object-scope Één namespace Clusterbreed
Rechten op cluster-scoped resources Nee Ja
Rechten op non-resource URLs Nee Ja
Herbruikbaar over namespaces Nee – één exemplaar per namespace Ja – eenmalig definiëren, per namespace binden
Koppelbaar door Uitsluitend RoleBinding RoleBinding of ClusterRoleBinding

Er zijn vier standaard ClusterRoles die u moet kennen voordat u uw eigen definieert: view (meeste resources met een namespace lezen, expliciet exclusief Secrets), edit (meeste lezen/schrijven, inclusief Secrets), admin (edit plus het maken van Roles en RoleBindings in de namespace), en cluster-admin (* op *, overal).

view, edit en admin zijn geaggregeerde ClusterRoles: de controller vult hun regels aan vanuit elke ClusterRole met een label dat overeenkomt met hun aggregationRule. Dat is de ondersteunde manier om deze uit te breiden voor uw eigen CRDs.

RoleBinding vs ClusterRoleBinding

Een Role of ClusterRole op zichzelf verleent niets. Een binding koppelt deze aan subjects.

Een RoleBinding is gebonden aan een namespace en verleent de roleRef aan de subjects binnen de eigen namespace.

Het meest nuttige om te weten over RoleBinding in Kubernetes is dat de roleRef kan verwijzen naar een ClusterRole, waarbij de permissies beperkt blijven tot de namespace van de RoleBinding. Definieer de functionaliteit één keer; verleen deze per namespace:

Een ClusterRoleBinding heft die grens op en verleent een ClusterRole overal – elke namespace, plus alle cluster-scoped resources in de rol.

apiVersion: rbac.authorization.k8s.io/v1kind: ClusterRoleBindingmetadata: name: platform-node-viewerssubjects: - kind: Group name: platform-sre apiGroup: rbac.authorization.k8s.ioroleRef: kind: ClusterRole name: node-viewer apiGroup: rbac.authorization.k8s.io

Drie regels die vaak voor verrassingen zorgen:

  • Een ClusterRoleBinding kan niet verwijzen naar een Role. Alleen naar een ClusterRole.
  • De Role van een RoleBinding moet zich in dezelfde namespace bevinden als de binding. Verwijzingen naar een Role in een andere namespace bestaan niet.
  • roleRef is onveranderlijk (immutable). Om een binding naar een andere rol te laten verwijzen, moet u deze verwijderen en opnieuw aanmaken.

Subjects: User, Group, Service Account

RBAC kent exact drie typen subjects, en het verschil zit in hun herkomst.

Subject Een Kubernetes-object? Bron
User Nee De authenticator – certificaat CN, OIDC username-claim, cloud IAM-mapping
Group Nee De authenticator – certificaat O-velden, OIDC groups-claim, IAM group-mapping
ServiceAccount Ja, gekoppeld aan namespace Aangemaakt in het cluster; genaamd system:serviceaccount::

Er is geen User-resource – u kunt geen kubectl create user uitvoeren. Kubernetes vergelijkt de gebruikersnaam en groepslijst die de authenticator doorgeeft als platte tekst met de bindings. Een typfout in een subject-naam verleent dus stilzwijgend niets, zonder een foutmelding bij het toepassen.

ServiceAccounts vormen de identiteit die uw workloads gebruiken. Een pod die er geen specificeert, draait onder het default-account van zijn namespace. Dit account heeft geen permissies, maar het token wordt wel gekoppeld en geauthenticeerd – stel automountServiceAccountToken: false in op plekken waar een pod de API-server nooit aanroept.

Kubernetes genereert ook groepen die u nooit zomaar moet koppelen: system:authenticated (elke geauthenticeerde identiteit), system:serviceaccounts (allemaal, clusterbreed) en system:masters, dat door een standaardbinding rechtstreeks naar cluster-admin wordt gemapped.

Kubernetes RBAC best practices

De officiële richtlijnen zijn kort, en gaan vrijwel allemaal over scope.

Geef de voorkeur aan Roles met een namespace. Gebruik in eerste instantie een Role en RoleBinding. Gebruik pas een ClusterRole als de resource echt cluster-scoped is of als u één herbruikbare definitie wilt – en koppel deze ook dan met een RoleBinding, tenzij het subject daadwerkelijk toegang tot elke namespace nodig heeft.

Deel geen cluster-admin uit. Dit betreft * op *, inclusief de RBAC-objecten zelf, waardoor een houder zichzelf permanent alle rechten kan verlenen. Bewaar dit uitsluitend voor noodgevallen (break-glass).

Vermijd wildcards. resources: ["*"] dekt stilzwijgend ook CRDs af die maanden later worden geïnstalleerd, en verbs: ["*"] bevat ook deletecollection. Specificeer de acties expliciet.

Koppel groepen, geen individuele gebruikers. Een binding per persoon veroorzaakt problemen bij uitdiensttredingsprocessen. Map uw IdP-groepen naar het cluster en koppel die, zodat teamwijzigingen geen YAML-aanpassingen vereisen.

Beschouw list op Secrets als lees-toegang tot Secrets. list retourneert volledige objecten, dus het is even krachtig als get. Het lezen van Secrets legt bovendien de ServiceAccount-inloggegevens van die namespace bloot.

Ken de escalatie-verbs. create op pods stelt de gebruiker in staat om een pod uit te voeren als een willekeurig ServiceAccount in de namespace en de bijbehorende permissies over te nemen. escalate en bind heffen de beveiliging op die voorkomt dat u permissies verleent die u zelf niet bezit. impersonate maakt het mogelijk om te handelen als een andere identiteit.

Auditeer met de CLI, niet via de YAML. Omdat toegekende rechten additief zijn en uit verschillende bindings voortkomen, heeft alleen de API-server het juiste overzicht:

kubectl auth can-i delete pods --namespace team-alpha
kubectl auth can-i --list --namespace team-alpha
kubectl auth can-i list secrets \
  --as=system:serviceaccount:team-alpha:reporting -n team-alpha

--as vereist impersonation-permissie, waarover beheerders doorgaans beschikken. Pas RBAC-manifesten toe met kubectl auth reconcile, wat regels en subjects samenvoegt in plaats van ze te vervangen.

Waar teams de fout in gaan

Grijpen naar ClusterRoleBinding wanneer een RoleBinding zou volstaan. De meest voorkomende fout in de praktijk. Iemand heeft view-rechten nodig in de eigen namespace, de ClusterRole bestaat al, en een ClusterRoleBinding is één regel korter – maar verleent ook leesrechten over elke namespace, inclusief overal waar Secrets staan.

Aannemen dat namespaces meer isoleren dan ze daadwerkelijk doen. Een namespace is het bereik voor RBAC en niets meer – het is geen netwerk-, node- of resource-grens. "Ze hebben alleen toegang tot hun namespace" is een bewering over de API-server, niet over het cluster.

Koppelen aan system:authenticated voor het gemak. Het lijkt op "iedereen in het team". Het betekent echter elke identiteit die kan authenticeren, inclusief elk ServiceAccount in elke namespace.

Veronderstellen dat cluster-RBAC de platformlaag op het cluster dekt. Een data scientist zonder enige Kubernetes-permissies kan nog steeds een service deployen, een model aanroepen of een secret lezen, omdat die acties via een platform-API verlopen die buiten de scope van cluster-RBAC valt.

De laag nodig die cluster-RBAC niet dekt?
Start met TrueFoundry en verleen een rol op één workspace in plaats van de gehele tenant.

De tweede laag: platform-RBAC

Kubernetes RBAC beantwoordt één specifieke vraag: wie mag deze verb uitvoeren op dit Kubernetes-object? Het heeft geen betrekking op een tweede vraag die even belangrijk is op een AI-platform: wie mag dit model deployen, dit provider-account gebruiken, deze MCP-tool aanroepen of deze secret-groep lezen? Dat zijn geen Kubernetes-objecten. Ze bevinden zich in een control plane, bereikbaar via een platform-API, en er is geen Role of RoleBinding die hierop toeziet.

TrueFoundry is Kubernetes-native – de compute plane bestaat uit een of meer van uw eigen EKS-, GKE-, AKS-, OpenShift- of on-premise-clusters, die uitgaand zijn verbonden met de control plane via een lichtgewicht tfy-agent. Beide lagen zijn tegelijkertijd aanwezig, dus het is van belang om precies te weten wat het verschil is.

De twee modellen delen dezelfde terminologie, en dat is geen toeval. In de key concepts van TrueFoundry is een Cluster een echt Kubernetes-cluster en een Workspace een Kubernetes-namespace. Wijst u iemand de rol van Workspace Member toe, dan beperkt u de toegang tot hetzelfde object als een RoleBinding zou doen.

Wat u niet doet, is het schrijven van een RoleBinding. Platformrollen en cluster-RBAC-objecten worden onafhankelijk van elkaar geconfigureerd op verschillende locaties. De documentatie beschrijft geen mechanisme dat de een genereert, synchroniseert of omzet naar de ander. Twee lagen met één gedeelde grens. De documentatie hanteert dezelfde scheidingslijn voor auditing: platform-auditlogs dekken platformactiviteit en vervangen expliciet geen auditlogs op infrastructuurniveau van Kubernetes of uw cloudprovider.

Hoe de platformlaag is opgebouwd

Het model is subject + resource + role = role binding, wat vertrouwd zal voorkomen. Een subject is een gebruiker, team, virtueel account of agent; een resource is een cluster, workspace, repository, secret-groep, provider-account of MCP-server. Het toewijzen van rechten begint bij de resource – open het menu met de drie puntjes en kies Access Control:

Three-dot menu on a model provider account with the Access Control option selected
Menu met drie puntjes op een model provider-account met de optie Access Control geselecteerd

Selecteer vervolgens subjects en een rol. Het venster toont de acties die elke rol bevat:

Grant Access drawer showing the subject selector alongside the Manager and User roles for a provider account
Menu met drie puntjes op een model provider-account met de optie Access Control geselecteerd

De beschikbare rollen hangen af van het resourcetype: Cluster Admin / Member / Viewer op een cluster, Workspace Admin / Member / Viewer op een workspace, Manager / User / Approver op een MCP-server. Onderliggend zijn de permissies opgebouwd als sleutels in de vorm resource:Action – cluster:ReadCluster, workspace:ManageWorkspace, secret-group:ReadData. Dezelfde regelstructuur als Kubernetes, maar voor andere objecten:

Custom role form showing platform permissions grouped by resource type
Formulier voor aangepaste rol met platformpermissies gegroepeerd per resourcetype

Tenant-brede rollen zijn het platform-equivalent van een ClusterRoleBinding en dragen dezelfde waarschuwing. Admin en Read-Only Member kunnen niet worden bewerkt. Member, de bewerkbare basisrol die elke gebruiker krijgt, is bewust beperkt – cluster:ReadCluster, user:ListUsers, agent:CreateAgent en nog enkele – zonder toegang tot individuele workspaces, modellen of MCP-servers.

Default Roles list showing the Member role available to edit beside the uneditable built-ins
Lijst met standaardrollen met de bewerkbare Member-rol naast de niet-bewerkbare ingebouwde rollen

Teamrollen komen overeen met een RoleBinding gekoppeld aan eigenaarschap: Team Member bevat virtual-account:ReadVirtualAccount, beperkt tot Virtual Accounts die eigendom zijn van teams waar de gebruiker deel van uitmaakt.

Edit Role drawer for Team Member showing the team-scoped Virtual Account permissions
Rol bewerken-venster voor Team Member met de team-scoped Virtual Account-permissies

De best practice om groepen te koppelen in plaats van individuele gebruikers geldt ook hier. Een IdP-claimwaarde wordt gekoppeld aan een TrueFoundry-team, zodat dezelfde directorygroep die uw clusterbindings aanstuurt ook het platformlidmaatschap regelt:

Team form showing the identity provider FQN and claim value mapping fields
Teamformulier met de identity provider FQN en claimwaarde-mappingvelden

Een uitgewerkt voorbeeld in beide lagen

Een realistisch scenario: stel het ML-team in staat te deployen naar hun eigen namespace en een MCP-server op te zetten, zonder iemand cluster-admin of tenant-admin te maken.

In Kubernetes. De namespace is ml-prod. Koppel edit aan die specifieke namespace via een RoleBinding waarvan het subject de door de IdP ondersteunde groep is:

Controleer dit, en controleer de reikwijdte ook in negatieve zin:

Let op: edit bevat Secrets in die namespace. Als het team deze niet mag lezen, koppel dan een beperktere, aangepaste ClusterRole.

In het platform. Niets van het bovenstaande geeft iemand het recht om een MCP-server aan te maken, omdat MCP-servers geen Kubernetes-objecten zijn. De neiging kan ontstaan om Admin-rechten te verlenen. Maak in plaats daarvan een aangepaste rol aan via Access > Custom Roles met exact de permissie mcp-server:CreateMcpServer:

Custom role form with the Create MCP Server permission selected
Formulier voor aangepaste rol met de permissie Create MCP Server geselecteerd

Wijs deze vervolgens toe via Access > Users of Access > Teams.

Assigning the custom MCP server creation role to a user
Toewijzen van de aangepaste rol voor het aanmaken van MCP-servers aan een gebruiker

De werking is identiek aan die van Kubernetes. Create MCP Server staat het aanmaken van een nieuwe server toe en verleent geen rechten op bestaande servers – precies zoals create op een Kubernetes-resource geen rechten verleent op reeds bestaande objecten. De eigenaar verleent zichzelf vervolgens MCP Server Manager vanaf de Access Control-pagina van die specifieke server, waarna MCP access control bepaalt welke tools de agent mag aanroepen.

Nog een vergelijking: permissies van aangepaste rollen gelden voor alle resources van het geselecteerde type, net zoals een ClusterRoleBinding geldt voor alle namespaces. Gebruik voor één specifieke resource de Access Control-pagina van die resource. Hetzelfde geldt bij het uitbreiden van de basisrol – het toevoegen van gateway-controls:ListGatewayControls aan Member kent dit toe aan elke gebruiker:

Member role form with the List Gateway Controls permission selected
Member-rolformulier met de permissie List Gateway Controls geselecteerd
Klaar om beide lagen naast elkaar te zien?
Verbind een cluster, maak een workspace aan en ken één afgebakende rol toe.

Aandachtspunten in de praktijk

De agent van het platform zelf is een praktijkvoorbeeld van Role vs ClusterRole. tfy-agent heeft een ClusterRole en ClusterRoleBinding nodig om informers uit te voeren, omdat Kubernetes-informers geen subset van namespaces kunnen monitoren – het werkt dus read-only en filtert aan de clientzijde. tfy-agent-proxy, die daadwerkelijk schrijfoperaties uitvoert, kan wel worden ingeperkt: config.allowedNamespaces schakelt dit om naar RoleBindings per namespace, en tfyAgentProxy.clusterRole.strictMode: true beperkt het tot een minimale set permissies. Dat is de algemene regel in het klein.

Toekenningen worden op beide lagen gecombineerd; het intrekken van de ene verwijdert de andere niet. In Kubernetes is de effectieve toegang de vereniging van elke overeenkomende binding. In TrueFoundry kan een subject rechtstreeks toegang hebben en deze overerven van een team. Controleer elke bron voordat u concludeert dat een intrekking is mislukt.

Het bewerken van een standaard platform-teamrol wijzigt deze voor elk team. Team Member en Team Manager worden bewerkt onder Access > Default Roles, en de wijziging is globaal. Het toevoegen van virtual-account:ManageVirtualAccount zodat één team tokens kan ophalen, verleent dit recht aan elk team. Kubernetes kent hetzelfde risico in een andere vorm: het bewerken van een gedeelde ClusterRole wijzigt deze voor elke binding die ernaar verwijst.

Gerelateerde artikelen

Conclusie

De meeste Kubernetes RBAC-problemen zijn scope-problemen, geen syntaxis-problemen. Twee typen objecten beschrijven permissies en twee typen delen ze uit; de kunst is om de specifieke variant te kiezen wanneer de brede eenvoudiger in te voeren is. Gebruik primair een Role met een namespace, een ClusterRole gekoppeld via een RoleBinding wanneer hergebruik nodig is, en een ClusterRoleBinding uitsluitend wanneer een subject daadwerkelijk toegang tot het gehele cluster vereist. Koppel groepen, vermijd wildcards en controleer met kubectl auth can-i.

Wat snel over het hoofd wordt gezien, is dat dit alles slechts één specifieke vraag beantwoordt. Alles wat uw teams doen via een platform-API – het deployen van een model, het aanroepen van een MCP-tool, het lezen van een secret-groep – is onzichtbaar voor cluster-RBAC en vereist een eigen autorisatiemodel.

Op TrueFoundry zijn dit twee lagen over dezelfde infrastructuur: ze delen een grens omdat een workspace een namespace is, maar worden onafhankelijk geconfigureerd omdat ze verschillende objecten beheren. Een platform engineer heeft beide nodig. De valkuil is veronderstellen dat een van beide de lading van de ander dekt.

Afbakenen van uw eerste workspace op TrueFoundry

Probeer het nu.

Eén gateway voor al je modellen, MCP-servers en agents. Geen creditcard nodig.

Start gratis
Inhoudsopgave

Eén gateway voor elk LLM, elke agent en elke MCP-server

Boek een gesprek van 30 minuten met onze AI-expert

Demo aanvragen

De snelste manier om je AI te bouwen, beheren en schalen

Demo boeken
Samenvatten met
ChatGPT logo by OpenAI
Perplexity AI logo
Blurry red snowflake on white background, symmetrical frosty design with soft edges and abstract shape.

Ontdek meer

Geen items gevonden.
TrueFoundry offers scalable alternatives for Vercel AI Gateway limitations
November 10, 2026
|
5 min leestijd

Vercel AI Review 2026: Wij hebben het getest, zodat jij dat niet hoeft te doen

Geen items gevonden.
November 10, 2026
|
5 min leestijd

Vendor lock-in voorkomen met de AI Gateway van TrueFoundry

Geen items gevonden.
November 10, 2026
|
5 min leestijd

TrueFoundry en de MCP-gatewayrevolutie: inzichten uit het Gartner-rapport van 2025

Geen items gevonden.
November 10, 2026
|
5 min leestijd

Gids voor MCP-authenticatie in Claude Code 2026

Geen items gevonden.
Geen items gevonden.

Recente blogs

Black left pointing arrow symbol on white background, directional indicator.
Black left pointing arrow symbol on white background, directional indicator.

Veelgestelde vragen

What is Kubernetes RBAC and how does it work?

It is the authorization mode that decides whether an authenticated identity may perform a verb on a resource through the API server. You write permissions into a Role (namespaced) or ClusterRole (cluster-wide), then attach them to subjects with a RoleBinding (that namespace only) or a ClusterRoleBinding (cluster-wide). Rules are additive with no deny, and anything not granted is refused.

What is the difference between a Role and a ClusterRole in Kubernetes?

A Role is namespaced and can only grant on namespaced resources inside its own namespace. A ClusterRole is cluster-scoped and can additionally grant on cluster-scoped resources such as nodes and persistent volumes, and on non-resource URLs like /healthz. The practical difference is reuse: a ClusterRole is defined once and can be bound into any single namespace with a RoleBinding.

Can a RoleBinding reference a ClusterRole?

Yes, and it is the recommended pattern. Permissions stay limited to the RoleBinding’s namespace, so you define a capability once and grant it team by team. The reverse is not allowed: a ClusterRoleBinding can never reference a Role.

Can I deploy TrueFoundry in my own VPC or on-prem?

Yes. TrueFoundry runs in your VPC, on-prem, air-gapped, or hybrid, so prompts and responses never leave your domain even as you route across many providers.

Ondersteunt TrueFoundry MCP en AI-agents in het algemeen?

Ja. Het omvat een MCP Gateway, een Agent Gateway, en een MCP & Agents Register met toegangscontrole op toolniveau. Agents op LangGraph, CrewAI, AutoGen, of een aangepast framework kunnen allemaal centraal worden gereguleerd.

Integreert het met mijn bestaande observability-stack?

Ja. De gateway is OpenTelemetry-compliant en sluit aan op Grafana, Datadog, Prometheus, of uw gewenste stack. Het traceert elk verzoek van prompt tot tool- en modeluitvoering, zodat u uniforme logging krijgt zonder wat u al draait te hoeven vervangen.

Volg een korte producttour
Start producttour
Product Tour