Kubernetes RBAC
Hur roller och tilldelningar skrivs in i varje klusters Kubernetes RBAC, och varför en version kan behöva en klusteradministratör en gång.
Åtkomstkontrollen tillämpas på två vägar. Anrop till plattformens API avgörs av RBAC-tjänsten. Anrop direkt till ett klusters Kubernetes API-server avgörs av Kubernetes egen RBAC, som plattformen skriver utifrån samma roller och tilldelningar — så att en person eller tjänsteprincipal som loggar in på API-servern med sin plattformsidentitet får rättigheter som motsvarar dess roller.
Vad en roll blir
Varje åtgärd i plattformens katalog kan bära Kubernetes-regler; kernel/k8sChannel/read bär till
exempel get, list och watch på plattformens egna resurser. En rolls rättigheter i Kubernetes
är reglerna för de åtgärder i kontrollplanet som den ger, minus reglerna för dess NotActions;
dataåtgärder skrivs inte in i Kubernetes. Inbyggda roller kan lägga till egna regler ovanpå:
Owner, Contributor, Reader och de tre plattformsrollerna har regler för poddar, deployments,
tjänster, jobb och liknande grundresurser.
- Inbyggda roller blir ClusterRoles, som plattformen skriver.
- Anpassade roller blir namnrymdsbundna Roles, bara i de namnrymder där de är tilldelade.
Se upp
En del av de här reglerna ger mer i Kubernetes än rollen ger i portalen:
- Ett skal i varje podd som bindningen omfattar (
pods/exec): Owner, Contributor, Platform Owner, Platform Contributor, Apps Operator och Blueprints Operator. Apps Operator och Blueprints Operator har den eftersom deras filbläddring och terminaler når podden den vägen.- Hemlighetsvärden (
secrets), som Kubernetes lämnar ut till alla som får göragetpå en Secret. Platform Owner och Platform Contributor får läsa och ändra varje Secret i varje namnrymd, även plattformens egen ochkube-system. Varje roll vars åtgärder omfattarkernel/k8sChannel/readSecretMetadata— direkt eller genom ett jokertecken som*/*ellerkernel/*— får göraget,listochwatchpå Secrets i de namnrymder där den är bunden; Owner och Contributor är sådana roller.Räkna med att en tilldelning av de här rollerna på roten, en boundary eller en resursgrupp innefattar de rättigheterna.
Vad en tilldelning blir
| Tilldelningens område | Bindning i Kubernetes |
|---|---|
/ |
En ClusterRoleBinding — rollen gäller i varje namnrymd i varje kluster |
| En boundary | En RoleBinding i var och en av boundaryns namnrymder |
| En resursgrupp | En RoleBinding i resursgruppens namnrymd |
| En resurs | Ingen — resursområdet finns bara i plattformens API |
Ett aktivt just-in-time-beviljande skrivs som en tilldelning och tas bort när det löper ut eller
återkallas. Anpassade roller binds aldrig på /: en bindning på roten gäller i varje namnrymd,
även plattformens egen och kube-system, så den är förbehållen de inbyggda rollerna.
Användare och tjänsteprincipaler syns i Kubernetes som användaren oidc: följt av deras
principal-ID, och grupper som en Kubernetes-grupp namngiven med gruppens ID. Prefixet är
modulinställningen Rbac__Reconciler__OidcUsernamePrefix och måste stämma med API-serverns
användarnamnsprefix. Installationsprogrammet skriver det en API-server behöver för att ta emot
plattformsinloggningar i ConfigMap-objektet stackship-kubeapi-oidc; att föra över det till
kontrollplanets noder är upp till dig:
kubectl -n stackship-system get configmap stackship-kubeapi-oidc -o yamlNekandetilldelningar
Kubernetes RBAC kan inte neka. En nekandetilldelning kan därför bara utelämna en rolls bindning från ett kluster, och det gör den bara när allt detta gäller:
- nekandet namnger den principal som bindningen gäller. Grupper expanderas inte: ett nekande för en användare låter de bindningar som användaren har genom en grupp vara kvar;
- nekandet gäller på bindningens område;
- nekandet omfattar varje åtgärd och varje dataåtgärd som rollen ger. En rolls jokertecken
omfattas bara av samma eller ett bredare, så Owners
*/*kräver*/*både bland nekandets åtgärder och bland dess dataåtgärder.
Allt mindre tillämpas av plattformens API men inte av Kubernetes: principalen behåller rollens rättigheter i Kubernetes. Aktiva just-in-time-beviljanden skrivs in i Kubernetes oavsett vilka nekanden som gäller för dem.
Se upp
Ett nekande som skapas i portalen har bara åtgärder i kontrollplanet, så det tar aldrig bort bindningen för en roll som har dataåtgärder — bland dem Owner, Contributor, Reader, Platform Owner, Platform Contributor, Apps Operator och Blueprints Operator. Den som nekas allt i portalen har ändå de rollernas fulla rättigheter i Kubernetes, även skalen och läsningen av Secrets ovan. För att ta bort dem i Kubernetes tar du bort rolltilldelningen — eller skapar nekandet via API:et eller CLI:t med dataåtgärder som också omfattar rollens, och namnger den principal som varje bindning gäller.
Behörighetstaket
Plattformen skriver de här objekten som en egen identitet, ServiceAccount-kontot
stackship-iam-projector i stackship-system, bundet till en ClusterRole med samma namn —
dess tak: varje regel som katalogen kan uttrycka. Kubernetes låter bara en identitet skriva en
roll med regler som den själv har, så taket är det mesta plattformen någonsin kan ge, och
plattformen kan inte själv vidga sitt tak.
När en version lägger till regler för en resurs som taket ännu inte omfattar måste en klusteradministratör vidga det en gång:
- Öppna Livscykelhantering och fliken Efter uppgradering. Ett kluster med statusen Kräver en klusteradministratör visar vilka regler som saknas och vilka kommandon som ska köras.
- Kör kommandona en gång med en kubeconfig som har cluster-admin.
- Välj Tillämpa på alla kluster igen. Det körs med dina egna uppgifter och registreras på ditt konto; det är säkert att tillämpa igen.
Visa manifestet laddar ner hela uppsättningen objekt som ett kluster behöver, för granskning
eller för att tillämpa för hand på ett nytt kluster. För att läsa det behövs rbac/projector/read
och för att tillämpa det rbac/projector/apply, båda på roten.