Aller au contenu
Sécurité medium
🔐 Alerte sécurité — Incident supply chain Trivy : lire mon analyse de l'attaque

KICS : scanner Terraform et Kubernetes avant le déploiement

9 min de lecture

Logo kics

KICS vous permet de scanner vos fichiers Terraform et Kubernetes avant le déploiement pour détecter des erreurs comme un Security Group SSH ouvert à Internet, un conteneur privilégié, ou l’absence de readinessProbe. Dans ce guide, on reste sur un usage simple et reproductible : exécuter l’image Docker officielle, lire les findings, puis corriger les misconfigurations les plus dangereuses.

Les exemples présentés ici ont été validés sur deux labs locaux contenant du code volontairement vulnérable. Le but n’est pas de couvrir toutes les options de KICS, mais de montrer un flux de travail réaliste pour une revue IaC rapide avant la CI/CD.

KICS signifie Keeping Infrastructure as Code Secure. C’est un scanner de misconfigurations pour l’Infrastructure as Code maintenu par Checkmarx. Il analyse des fichiers sources et compare leur contenu à une base de règles de sécurité.

Concrètement, KICS cherche par exemple :

  • des règles réseau trop ouvertes dans Terraform
  • des buckets ou ressources sans garde-fous de base
  • des manifests Kubernetes avec des privilèges excessifs
  • des probes, limites mémoire ou restrictions de sécurité absentes

Utilisez KICS quand vous voulez un retour rapide sur vos fichiers Terraform, Kubernetes, Dockerfile ou autres formats IaC, sans attendre un déploiement réel.

Les cas d’usage les plus utiles sont :

  • revue locale avant commit
  • job CI/CD sur pull request
  • contrôle d’un dossier de manifests ou de modules
  • comparaison rapide entre plusieurs scanners IaC

Installation la plus simple : l’image Docker officielle

Section intitulée « Installation la plus simple : l’image Docker officielle »

Dans ce guide, on utilise uniquement la méthode que j’ai validée : l’image Docker officielle checkmarx/kics:latest.

Fenêtre de terminal
docker run --rm \
-v "$PWD":/path \
checkmarx/kics:latest \
scan -p /path --report-formats json --output-path /path

Cette commande :

  • monte votre dossier courant dans le conteneur
  • scanne le contenu monté
  • écrit un rapport JSON dans le dossier scanné

Vérification : vous devez obtenir un fichier results.json à la fin du scan.

Le premier lab contient un exemple Terraform très simple, mais volontairement vulnérable :

resource "aws_security_group" "bad_sg" {
name = "allow-all-ssh"
ingress {
from_port = 22
to_port = 22
protocol = "tcp"
cidr_blocks = ["0.0.0.0/0"]
}
}
resource "aws_s3_bucket" "bad_bucket" {
bucket = "demo-kics-bucket-example"
}
Fenêtre de terminal
docker run --rm \
-v /home/bob/Projets/lab-kics/terraform-bad:/path \
checkmarx/kics:latest \
scan -p /path --report-formats json --output-path /path

Le scan validé ici a produit :

  • 11 findings au total
  • 2 HIGH
  • 3 MEDIUM
  • 1 LOW
  • 5 INFO

Les findings les plus intéressants sont :

SévéritéFindingCe que KICS a détecté
HIGHSensitive Port Is Exposed To Entire Networkle port 22/TCP est exposé
HIGHUnrestricted Security Group Ingress0.0.0.0/0 est autorisé
MEDIUMSecurity Group With Unrestricted Access To SSHSSH est ouvert publiquement
MEDIUMS3 Bucket Without Versioningle bucket n’a pas de versioning
MEDIUMS3 Bucket Logging Disabledle logging S3 est absent

Ici, KICS ne vous dit pas seulement qu’une ressource est “mauvaise”. Il indique aussi :

  • le type de ressource concerné
  • la ligne du fichier
  • la valeur attendue
  • la valeur observée

Sur ce lab, la priorité est claire : refermer le port 22, supprimer 0.0.0.0/0, puis ajouter les garde-fous du bucket S3.

Le second lab cible un manifest Kubernetes volontairement faible :

apiVersion: apps/v1
kind: Deployment
metadata:
name: insecure-nginx
spec:
replicas: 1
selector:
matchLabels:
app: insecure-nginx
template:
metadata:
labels:
app: insecure-nginx
spec:
containers:
- name: nginx
image: nginx:latest
securityContext:
privileged: true
runAsUser: 0
Fenêtre de terminal
docker run --rm \
-v /home/bob/Projets/lab-kics/k8s-bad:/path \
checkmarx/kics:latest \
scan -p /path --report-formats json --output-path /path

Le scan validé ici a produit :

  • 21 findings au total
  • 2 HIGH
  • 9 MEDIUM
  • 9 LOW
  • 1 INFO

Les findings les plus importants sont :

SévéritéFindingCe que KICS a détecté
HIGHContainer Is Privilegedprivileged: true
HIGHPrivilege Escalation AllowedallowPrivilegeEscalation absent
MEDIUMContainer Running As RootrunAsUser: 0
MEDIUMReadiness Probe Is Not Configuredaucune readinessProbe
MEDIUMMemory Limits Not Definedaucune limite mémoire
MEDIUMMemory Requests Not Definedaucune requête mémoire

On retrouve aussi plusieurs findings LOW sur l’image nginx:latest, l’absence de digest, l’absence de capacités supprimées et le manque de configuration de sécurité complémentaire.

Sur un manifest Kubernetes comme celui du lab, l’ordre de correction le plus rationnel est le suivant :

  1. Supprimer les privilèges dangereux : passez privileged à false et définissez allowPrivilegeEscalation: false.

  2. Sortir du mode root : utilisez runAsNonRoot: true et un UID non privilégié.

  3. Déclarer les ressources : ajoutez resources.requests et resources.limits pour le CPU et la mémoire.

  4. Ajouter une readinessProbe : évitez d’envoyer du trafic vers un conteneur qui n’est pas prêt.

  5. Stabiliser l’image : remplacez :latest par un tag précis, idéalement avec digest.

Exemple de correction minimale :

securityContext:
privileged: false
allowPrivilegeEscalation: false
runAsNonRoot: true
runAsUser: 10001
capabilities:
drop:
- ALL
readinessProbe:
httpGet:
path: /
port: 80
resources:
requests:
cpu: 100m
memory: 128Mi
limits:
cpu: 500m
memory: 256Mi

Une intégration simple consiste à exécuter le même conteneur dans votre pipeline.

name: kics
on:
pull_request:
push:
branches: [main]
jobs:
scan-iac:
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v4
- name: Scan Terraform and Kubernetes
run: |
docker run --rm \
-v "$PWD":/path \
checkmarx/kics:latest \
scan -p /path

Si vous voulez exploiter les résultats dans un autre outil, conservez aussi le rapport JSON avec --report-formats json --output-path /path.

  • Scanner trop large : lancer un scan à la racine d’un gros dépôt produit vite beaucoup de bruit.
  • Confondre LOW et négligeable : plusieurs findings LOW peuvent décrire une mauvaise hygiène persistante.
  • Ignorer le contexte : un finding sur latest n’a pas le même impact qu’un conteneur privilégié.
  • Traiter KICS comme un remédiateur automatique : l’outil signale, mais il faut encore corriger intelligemment.
  • KICS est un scanner IaC utile pour détecter tôt les misconfigurations Terraform et Kubernetes.
  • La méthode la plus simple et validée ici est l’usage de l’image Docker officielle.
  • Sur le lab Terraform, les problèmes dominants étaient l’ouverture SSH et l’absence de garde-fous S3.
  • Sur le lab Kubernetes, les problèmes dominants étaient le mode privilégié, l’exécution en root et l’absence de probe et de ressources.
  • Le bon usage de KICS consiste à l’exécuter avant le déploiement, localement puis dans la CI/CD.

Ce site vous est utile ?

Sachez que moins de 1% des lecteurs soutiennent ce site.

Je maintiens +700 guides gratuits, sans pub ni tracing. Aujourd'hui, ce site ne couvre même pas mes frais d'hébergement, d'électricité, de matériel, de logiciels, mais surtout de cafés.

Un soutien régulier, même symbolique, m'aide à garder ces ressources gratuites et à continuer de produire des guides de qualité. Merci pour votre appui.

Abonnez-vous et suivez mon actualité DevSecOps sur LinkedIn