LA SÉCURITÉ (kube) À TOUS LES ÉTAGES
Adrien MONTIGNEAUX, François BERTHAULT, Hervé FONTBONNE
Qui suis-je ? / Qui sommes-nous ?
Adrien MONTIGNEAUX
Les filles et les garçons de la Tech
● Consultant Cloud et DevOps
Qui suis-je ?
François Berthault
Les filles et les garçons de la Tech
capitaine devops
★ Dev&Ops
★ Architecte
★ Coach DevOps
★ kubernetes et observabilité
@fanfansama
Qui suis-je ? / Qui sommes-nous ?
Hervé FONTBONNE
Co-fondateur Les filles et les garçons de la Tech
● Consultant Cloud et DevOps
● Formateur
RBAC - Roles Based Access Control
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: pod-reader
namespace: ns-demo
rules:
- verbs: ["get","watch","list"]
apiGroups: [""]
resources: ["pods"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: read-pods
namespace: ns-demo
subjects:
- kind: User
name: alice
apiGroup: rbac.authorization.k8s.io
roleRef:
kind: Role
apiGroup: rbac.authorization.k8s.io
name: pod-reader
Alice a le droit de lister les conteneurs dans le namespace ns-demo, mais pas de les supprimer ni les créer
API - Authentification Tierce
Pas de gestion de (vrais) utilisateurs.
Les applications et les démons utilisent des ServiceAccounts.
Utilisation d’une solution IAM avec une authentification tierce de type OIDC + RBAC
Pod Security Admission - PSA (2/2)
https://kubernetes.io/docs/concepts/security/pod-security-standards/
enforce rejet de la ressource
audit log de violation + événement
warn événement
privileged namespace délibérément ouverte et entièrement illimitée.
baseline namespace faciliter l'adoption des “workloads” tout en empêchant les escalades de privilèges connues.
restricted namespace appliquer les meilleures pratiques actuelles de renforcement des pods, au détriment d'une certaine compatibilité.
apiVersion: v1
kind: Namespace
metadata:
name: test-ns
labels:
pod-security.kubernetes.io/enforce: baseline
Prévention : SecurityContext
Permet de restreindre le contexte d’exécution des Pods et des containers.
securityContext:
readOnlyRootFilesystem: true
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 1000
runAsGroup: 3000
fsGroup: 2000
capabilities:
drop:
- CAP_SYS_ADMIN
Détection - Falco
- rule: Detect bash in a container
desc: You shouldn't have a shell run in a container
condition: container.id != host and proc.name = bash
output: Bash ran inside a container (user=%user.name command=%proc.cmdline %container.info)
priority: INFO
Réduire l'empreinte de vos images
Supprimer les packages inutiles à l'exécution (curl, nmap, …)
Faire du multi-stage
Restreindre : User Non Root
RUN groupadd -g 999 appgroup &&
useradd -r -u 999 -g appgroup appuser
USER appuser
“Un processus dans un container n’est pas différent d’un autre processus Linux de l’hôte”