Règles Kyverno appliquées aux clusters
Kyverno est un moteur de politiques conçu pour Kubernetes.
Ces politiques peuvent valider, muter, générer et nettoyer les ressources Kubernetes, ainsi que vérifier les signatures d'images et les artefacts pour aider à sécuriser la chaîne d'approvisionnement des logiciels.
Dans le cadre de l'offre de services du MIOM, les règles suivantes sont appliquées sur les clusters que nous opérons :
Kyverno Rules | ValidationFailure Action (Dev, preprod) | ValidationFailure Action (Prod) | Information importantes | Severité | Type | description |
---|---|---|---|---|---|---|
add-velero-label | low | Backup | Ajoute une étiquette sur le namespace pour être sauvegardé par Velero | |||
add-netpol-allowsame-ns | low | Multi-Tenancy, NetworkPolicy | Autorise le pod à communiquer dans le même namespace | |||
add-netpol-deny | low | Multi-Tenancy, NetworkPolicy | Refuse toute communication entrante vers les pods dans un namespace | |||
add-netpol-ingress | low | Multi-Tenancy, NetworkPolicy | Autorise la communication entrante depuis le namespace openshift-ingress vers tous les pods dans un nouveau namespace créé | |||
add-netpol-logging | low | Multi-Tenancy, NetworkPolicy | Autorise la communication entrante depuis le namespace openshift-logging vers tous les pods dans un nouveau namespace créé | |||
add-ttl | medium | Best Practices | Ajoute un time to live (TTL) aux JOB dans le cluster, ce qui les conduit à être automatiquement nettoyés après une certaine période de temps | |||
check-labels | AUDIT | ENFORCE | Labels requis : app, env, tier | low | Best Practices | Cette règle garantit que toutes les ressources ont les étiquettes nécessaires appliquées aux pod |
cm-no-credentials | AUDIT | ENFORCE | data non autorisée : password, passwd, secret_key | medium | Pod Security Standards (Baseline) | Empêche le stockage des informations d'identification dans les ConfigMaps, ce qui est une mauvaise pratique d'un point de vue sécurité |
disallow-exec | ENFORCE | ENFORCE | high | Pod Security Standards (Baseline) | Empêche l'utilisation de la commande "exec" sur le namespace openshift-etcd pour des raisons de sécurité | |
disallow-latest | AUDIT | ENFORCE | medium | Pod Security Standards (Baseline) | Les Pods n'utilisent pas la balise 'latest' pour leurs images, encourageant l'utilisation de balises versionnées spécifiques | |
disallow-hostpath | AUDIT | ENFORCE | high | Pod Security Standards (Baseline) | Empêche l'utilisation des volumes hostPath, qui peuvent être un risque de sécurité s'ils ne sont pas correctement contrôlés | |
disallow-selfprovisionning | AUDIT | ENFORCE | high | Pod Security Standards (Baseline) | Empêche la liaison au rôle de self-provisionners pour un contrôle strict de la création de projet OpenShift | |
etcd | ENFORCE | ENFORCE | high | Pod Security Standards (Baseline) | Assure que le chiffrement est activé pour etcd dans les clusters OpenShift | |
limit-size-pvc | AUDIT | ENFORCE | pvc < 1Ti | low | Best Practices | Limite la taille des revendications de volume persistant (PVC) pour éviter l'utilisation excessive des ressources de stockage |
need-containers-ressources | AUDIT | ENFORCE | limits.memory, limits.cpu, request.memory et request.cpu | medium | Best Practices | Assure que les demandes de ressources et les limites sont définies pour tous les Pods, pour assurer une utilisation équitable des ressources |
restrict-image-registry | AUDIT | ENFORCE | registres autorisés : docker.io/, harbor.io/, registry.redhat.io/, quay.io/, bitnami/, ghcr.io/ | medium | Pod Security Standards (Baseline) | Restreint les registres d'images à partir desquels les conteneurs peuvent tirer des images, comme mesure de sécurité pour assurer l'utilisation d'images de confiance uniquement |
restrict-nodeport | AUDIT | ENFORCE | medium | Pod Security Standards (Baseline) | Restreint l'utilisation des services NodePort, qui peuvent exposer des services à l'extérieur du cluster et représenter un risque de sécurité potentiel | |
need-liveness-readiness | AUDIT | ENFORCE | medium | Best Practices | Assure que tous les conteneurs ont l'une des trois sondes (Liveness, Readiness ou Startup), pour s'assurer qu'ils signalent correctement leur statut à Openshift | |
job-history | AUDIT | ENFORCE | low | Best Practices | Cronjob: ajoute les propriétés successfulJobsHistoryLimit: 5 et failedJobsHistoryLimit: 5 |
Explication de la difference entre ENFORCE et AUDIT :
Enforce : Kyverno bloquera l'action (par exemple, la création, la mise à jour ou la suppression d'une ressource) si la politique n'est pas respectée. Cela garantit que toutes les ressources du cluster respectent les politiques mises en place.
Audit: Une action d'Audit ne bloquera pas une action si la politique n'est pas respectée, mais elle enregistrera l'infraction dans les résultats d'audit de Kyverno. C'est utile pour observer les infractions aux politiques sans bloquer les actions, ce qui peut être particulièrement utile dans les environnements de développement ou de test.