Kubernetes Role-Based Access Control(RBAC)
Controllo degli accessi basato sui ruoli (RBAC)
Kubernetes ha un modulo di autorizzazione chiamato Controllo degli Accessi Basato sui Ruoli (RBAC) che aiuta a impostare le autorizzazioni di utilizzo per il server API.
Il modello di autorizzazione di RBAC è composto da tre parti individuali:
Soggetto (Utente, Gruppo o ServiceAccount) – L'oggetto che riceverà le autorizzazioni.
RoleBinding/ClusterRoleBinding – La connessione tra Ruolo/Ruolo del Cluster e il soggetto.
La differenza tra "Ruoli" e "Ruoli del Cluster" sta solo nel fatto che il ruolo verrà applicato - un "Ruolo" concederà l'accesso a un specifico namespace, mentre un "Ruolo del Cluster" può essere utilizzato in tutti i namespace del cluster. Inoltre, i Ruoli del Cluster possono anche concedere l'accesso a:
Risorse a livello di cluster (come i nodi).
Endpoint non basati su risorse (come /healthz).
Risorse basate su namespace (come i Pod), in tutti i namespace.
A partire da Kubernetes 1.6, le politiche di RBAC sono abilitate per impostazione predefinita. Ma per abilitare RBAC puoi utilizzare qualcosa come:
Modelli
Nel modello di un Ruolo o di un ClusterRole sarà necessario indicare il nome del ruolo, il namespace (nei ruoli) e quindi gli apiGroups, risorse e verbi del ruolo:
Gli apiGroups è un array che contiene i diversi namespace API a cui si applica questa regola. Ad esempio, una definizione di Pod utilizza apiVersion: v1. Può avere valori come rbac.authorization.k8s.io o [*].
Le risorse è un array che definisce a quali risorse si applica questa regola. È possibile trovare tutte le risorse con:
kubectl api-resources --namespaced=true
I verbi è un array che contiene i verbi consentiti. Il verbo in Kubernetes definisce il tipo di azione che è necessario applicare alla risorsa. Ad esempio, il verbo di elenco viene utilizzato per le raccolte mentre "get" viene utilizzato per una singola risorsa.
Verbi delle regole
(Questa informazione è stata presa da i documenti)
Verbo HTTP | Verbo della richiesta |
---|---|
POST | create |
GET, HEAD | get (per risorse individuali), list (per raccolte, inclusi i contenuti completi degli oggetti), watch (per monitorare una risorsa individuale o una raccolta di risorse) |
PUT | update |
PATCH | patch |
DELETE | delete (per risorse individuali), deletecollection (per raccolte) |
Kubernetes controlla talvolta l'autorizzazione per ulteriori autorizzazioni utilizzando verbi specializzati. Ad esempio:
verbo
use
su risorsepodsecuritypolicies
nel gruppo APIpolicy
.verbi
bind
eescalate
su risorseroles
eclusterroles
nel gruppo APIrbac.authorization.k8s.io
.verbo
impersonate
suusers
,groups
eserviceaccounts
nel gruppo API principale euserextras
nel gruppo APIauthentication.k8s.io
.
È possibile trovare tutti i verbi supportati da ogni risorsa eseguendo kubectl api-resources --sort-by name -o wide
Esempi
Ad esempio, puoi utilizzare un ClusterRole per consentire a un utente specifico di eseguire:
RoleBinding e ClusterRoleBinding
Dalla documentazione: Un role binding concede i permessi definiti in un ruolo a un utente o a un insieme di utenti. Contiene una lista di soggetti (utenti, gruppi o account di servizio) e un riferimento al ruolo che viene concesso. Un RoleBinding concede i permessi all'interno di uno specifico namespace, mentre un ClusterRoleBinding concede l'accesso a livello di cluster.
I permessi sono cumulativi, quindi se hai un clusterRole con "list" e "delete" segreti, puoi aggiungerlo con un Role con "get". Quindi fai attenzione e testa sempre i tuoi ruoli e permessi e specifica cosa è CONSENTITO, perché tutto è NEGATO per impostazione predefinita.
Enumerazione RBAC
Abuso di Ruoli/ClusterRoles per l'Elevazione dei Privilegi
pageAbusing Roles/ClusterRoles in KubernetesLast updated