Sécurisez votre application, d’Argo CD à Kubernetes
JJ Ng
Pas Apicella
12 octobre 2022
0 minutes de lectureGitOps est un cadre très répandu pour gérer et sécuriser le pipeline de développement des applications. Pour beaucoup de ceux qui se sont lancés dans une démarche GitOps, une question revient souvent : « Comment sécuriser mon pipeline quand tout est automatisé ? »
Le cadre GitOps repose sur un principe : toutes les validations de code et modifications s’effectuent dans Git, ce qui déclenche ensuite un pipeline automatisé qui compile et déploie les applications sur Kubernetes. Comme les équipes de développement et de sécurité interviennent peu dans le pipeline, il est essentiel d’imposer des exigences de sécurité afin que les applications déployées présentent le moins de vulnérabilités possible.
Cet article explique comment Snyk peut assurer la sécurité des applications dans un environnement GitOps, en se concentrant sur Argo CD, un outil très répandu. Dans ce scénario, Snyk analyse l’IaC pour vérifier que l’application à déployer est sécurisée avant son déploiement, et interrompt la compilation si ce n’est pas le cas. Snyk peut également surveiller automatiquement les applications déployées dans différents espaces de noms Kubernetes.
Qu’est-ce qu’Argo CD ?
Argo CD est un outil de livraison continue (CD) déclaratif et natif de Kubernetes. Il suit un dépôt et détecte les modifications, ou « dérives ». Il applique ensuite les changements nécessaires à la configuration du cluster Kubernetes.
Configurer Argo CD pour fonctionner avec Snyk
Cette démonstration vous montre comment démarrer votre processus GitOps avec Argo CD, en utilisant Snyk pour sécuriser l’application et surveiller les charges de travail Kubernetes. Voici les étapes à suivre :
Prérequis
Vous devez disposer d’un compte Snyk avec un forfait Business ou Enterprise pour exécuter des tests Snyk sur Argo CD et importer automatiquement des charges de travail Kubernetes dans Snyk. Si vous n’avez pas de compte Snyk, vous pouvez essayer gratuitement notre forfait Business.
Une instance Argo CD opérationnelle dans votre cluster Kubernetes. Pour en savoir plus sur la configuration, consultez la documentation Argo CD.
Un cluster Kubernetes opérationnel (par exemple, EKS, AKS, GKE, Red Hat OpenShift ou toute autre distribution prise en charge).
Étape 1 : Clonez votre dépôt Git
Cette démonstration utilise une application de sondage Flask dont le code source est hébergé sur https://github.com/jiajunngjj/flask-polling-app. Clonez le dépôt dans votre propre environnement.
git clone https://github.com/jiajunngjj/flask-polling-app.git
Étape 2 : Configurez Argo CD
Ajoutez votre cluster Kubernetes à Argo CD :
argocd cluster add CONTEXTNAME
Dans cette démonstration, Argo CD se trouve dans ce cluster Kubernetes. Il s’y connecte donc automatiquement à l’aide du nom d’hôte interne K8s (kubernetes.default.svc) :

Ensuite, vérifiez que le dépôt mentionné précédemment est également ajouté à Argo CD :

Une fois le dépôt ajouté, vous devriez voir quelque chose de similaire :

Étape 3 : Déployez l’application avec Argo CD
Créez un espace de noms Kubernetes pour y déployer l’application. Dans cet exemple, nous créons l’espace de noms argocd-demo pour exécuter flask-polling-app :
kubectl create ns argocd-demo
Utilisez la ligne de commande Argo CD pour créer l’application (ou faites-le depuis l’interface Argo CD après avoir ajouté le dépôt) :
argocd app create snyk-demo \ --repo https://github.com/jiajunngjj/flask-polling-app.git \ --path argocd \ --dest-server https://kubernetes.default.svc \ --dest-namespace argocd-demo
Voici le détail de la commande :
repo — Dépôt de gestion du code source (SCM)
path — Répertoire contenant le manifeste Kubernetes
dest-server — Cluster Kubernetes
dest-namespace — Espace de noms Kubernetes où déployer l’application
Une fois l’application créée dans Argo CD, son état apparaît comme OutOfSync dans l’interface :


Exécutez ensuite la commande Argo CD sync pour déployer l’application :
argocd app sync snyk-demo
L’application devrait alors apparaître dans l’interface Argo CD :

Vous devriez également voir que le déploiement de l’application a commencé dans l’espace de noms Kubernetes argocd-demo :
Étape 4 : Créez un objet Secret Kubernetes pour votre jeton Snyk
Une fois l’application ajoutée à Argo CD, vous pouvez intégrer le test Snyk IaC au pipeline Argo CD. Récupérez votre jeton Snyk dans l’application Snyk, puis créez un objet Secret dans l’espace de noms argocd-demo :
Étape 5 : Créez un hook de ressource PreSync Argo CD
Créez un fichier nommé snyk-scan.yaml dans le même répertoire que les fichiers YAML de déploiement (argocd) et ajoutez-y le contenu suivant :
Modifiez le fichier polling-app.yaml pour déclencher la détection de dérive de configuration (dans cet exemple, le nombre de réplicas passe à « 1 ») :
Exécutez les commandes Git pour envoyer le fichier vers le dépôt :
Étape 6 : Attendez qu’Argo CD détecte la dérive de configuration
Lorsqu’Argo CD détecte la dérive de configuration, il lance la synchronisation pour atteindre le nouvel état souhaité. Vous pouvez voir l’analyse Snyk IaC se déclencher avant le déploiement de l’application :

Vous pouvez également voir le pod snyk-iac-scan en cours d’exécution :
Enfin, l’interface Argo CD affiche une tâche snyk-iac-scan :

Étape 7 : Intégrez Kubernetes
Snyk s’intègre à Kubernetes pour vous permettre d’importer et de tester vos charges de travail en cours d’exécution, afin de détecter les vulnérabilités dans les images associées et les configurations susceptibles de réduire leur sécurité. Une fois importées, Snyk surveille en continu ces charges de travail et détecte les problèmes de sécurité, qu’il hiérarchise, à mesure que de nouvelles images sont déployées et que la configuration des charges de travail évolue.
L’un des avantages est que vous n’avez pas besoin de modifier vos fichiers YAML de déploiement : tout se fait automatiquement avec Snyk Controller, si vous activez l’importation automatique (comme expliqué dans la documentation Snyk). Snyk prend en charge les charges de travail suivantes :
Déploiements
ReplicaSets
DaemonSets
StatefulSets
Tâches
Tâches planifiées (CronJobs)
ReplicationControllers
Pods
D’autres articles du blog Snyk expliquent comment installer plusieurs clusters Kubernetes Snyk dans un seul cluster et comment utiliser Pulumi pour automatiser l’intégration de Snyk à Kubernetes.
Une fois votre application déployée par Argo CD, l’intégration Kubernetes de Snyk importe automatiquement l’analyse de cette charge de travail dans la plateforme, sans aucune intervention manuelle :


En résumé
Cette démonstration utilise le hook de ressource d’Argo CD pour déclencher une analyse Snyk IaC à chaque détection d’une modification de configuration. Ainsi, il est possible d’imposer des exigences de sécurité dans un workflow GitOps : Snyk détecte les vulnérabilités et interrompt le workflow dès qu’une vulnérabilité dépasse le seuil de gravité défini. Le code vulnérable n’atteint ainsi jamais l’environnement de production.
Pour en savoir plus
Maintenant que vous savez configurer un test Snyk IaC avec Argo CD et surveiller les charges de travail sur Kubernetes, consultez ces ressources pour découvrir comment renforcer davantage la sécurité du cycle de vie du développement logiciel :
Sécurisez votre infrastructure dès la source
Snyk automatise la sécurité et la conformité de l’IaC dans vos workflows, et détecte les ressources dont la configuration a dérivé ou qui sont manquantes.
