Kubernetes ha portato flessibilità, ma anche una nuova serie di vettori di attacco. La sicurezza deve essere integrata nella pipeline, dalla creazione dell'immagine all'esecuzione sul cluster.
Principali livelli di sicurezza
- Supply-Chain, scansione delle vulnerabilità nelle immagini Docker].
- Controllo dell'accesso (RBAC), autorizzazioni minime per account di servizio.
- Criteri di rete,
NetworkPolicyper isolare i pod. - Runtime Security, Falco, OPA Gatekeeper per rilevare comportamenti anomali.
- Sicurezza dei dati, segreti crittografati con KMS, crittografia del volume.
Elenco di controllo della sicurezza Kubernetes
- Abilita PodSecurityPolicy o Standard di sicurezza Pod.
- Definire Ruoli e RoleBinding con il principio del privilegio minimo.
- Applicare NetworkPolicy per limitare il traffico all'interno dello spazio dei nomi.
- Scansiona immagini con Trivy o Clair in CI.
- Implementare OPA Gatekeeper per le politiche di convalida.
- Configura Falco per monitorare le chiamate di sistema sospette.
- Ruota regolarmente i Segreti.
- Controlla i registri API Server con criteri di controllo.
Esempio di RBAC limitato
apiVersion: rbac.authorization.k8s.io/v1 kind: Role metadata: namespace: prod name: read-only-role rules: - apiGroups: [""] resources: ["pods", "services", "configmaps"] verbs: ["get", "list", "watch"] --- apiVersion: rbac.authorization.k8s.io/v1 kind: RoleBinding metadata: name: read-only-binding namespace: prod subjects: - kind: ServiceAccount name: app-sa namespace: prod roleRef: kind: Role name: read-only-role apiGroup: rbac.authorization.k8s.io
Politiche di rete semplici
apiVersion: networking.k8s.io/v1 kind: NetworkPolicy metadata: name: deny-all-except-frontend namespace: prod spec: podSelector: {} policyTypes: - Ingress - Egress ingress: - from: - podSelector: matchLabels: app: frontend
Scansione di immagini in CI
## .gitlab-ci.yml stages: - scan - build - deploy scan_image: stage: scan image: aquasec/trivy:latest script: - trivy image --severity HIGH,CRITICAL myapp:latest
Monitoraggio del runtime con Falco
apiVersion: apps/v1 kind: DaemonSet metadata: name: falco namespace: kube-system spec: selector: matchLabels: app: falco template: metadata: labels: app: falco spec: containers: - name: falco image: falcosecurity/falco:latest securityContext: privileged: true volumeMounts: - name: devfs mountPath: /host/dev - name: procfs mountPath: /host/proc - name: sysfs mountPath: /host/sys volumes: hostPath: path: /proc - name: sysfs hostPath: path: /sys
Conclusione
La sicurezza in Kubernetes è un processo continuo. Applicando livelli di difesa, dalla creazione dell'immagine alle policy di runtime, riduci drasticamente la superficie di attacco e aumenti la fiducia negli ambienti di produzione.
Quali pratiche di sicurezza hai già adottato nel tuo cluster? Condividi nei commenti!
Leggi anche
- Zero Trust: implementazione della sicurezza di accesso granulare in ambienti distribuiti
- Autorizzazione e permessi nelle applicazioni: controllo dell'accesso sicuro
- Autorizzazione e permessi - Fondamenti di buone pratiche
- Protezione dalla fuga di dati: Guida alla sicurezza
- Sicurezza delle applicazioni: Guida alla protezione mobile
- HashiCorp Vault: gestione sicura dei segreti nelle applicazioni
