Automatiser l’intégration Kubernetes de Snyk Container avec Pulumi
Pas Apicella
9 février 2022
0 minutes de lectureNous avons tous entendu parler de l’infrastructure as code (IaC). Cependant, le code ne désigne pas vraiment ici du code au sens d’un langage de programmation. L’IaC fait généralement référence à la configuration de l’infrastructure à l’aide d’outils comme Terraform, CloudFormation, Kubernetes YAML ou les modèles Azure Resource Manager. Il s’agit en réalité de définir la manière dont l’infrastructure sera créée. Ces configurations n’offrent pas la flexibilité ni la puissance d’un langage de programmation moderne. L’IaC est donc du code, mais pas généralement ce type de code.
Dans cet article, nous allons vous expliquer comment utiliser Pulumi, un nouvel outil open source qui permet aux développeurs d’écrire du code dans plusieurs langages, comme JavaScript, TypeScript, Python et Go, afin de créer tous les éléments nécessaires à la configuration de l’intégration Kubernetes dans Snyk Container.
Présentation de l’intégration Kubernetes de Snyk
Snyk s’intègre à Kubernetes pour vous permettre d’importer et de tester vos workloads en cours d’exécution, et de détecter les vulnérabilités dans les images et les configurations associées qui pourraient compromettre leur sécurité. Une fois ces workloads importés, Snyk continue de les surveiller et détecte les nouveaux problèmes de sécurité à mesure que de nouvelles images sont déployées et que leur configuration évolue.
Qu’est-ce que Pulumi ?
Pulumi est un outil IaC open source qui s’appuie sur les langages de programmation les plus populaires pour simplifier le provisionnement et la gestion des ressources cloud.
Fondée en 2017, Pulumi a profondément transformé la manière dont les équipes DevOps abordent l’infrastructure as code. Au lieu de s’appuyer sur des langages spécifiques à un domaine, Pulumi permet aux organisations d’utiliser de véritables langages de programmation pour provisionner et décommissionner une infrastructure cloud native.
Pulumi prend en charge les langages de programmation suivants :
Python
JavaScript
Go
TypeScript
Langages .NET (C#, F# et VB)
Installer l’intégration Kubernetes de Snyk avec Pulumi
Passons à la partie pratique ! Nous allons vous guider pas à pas dans la configuration de Pulumi et le lancement de nos automatisations. Voici les étapes à suivre :
Prérequis
Pour utiliser l’intégration Kubernetes, vous devez disposer d’un compte Snyk Business ou Enterprise. Si vous n’en avez pas, vous pouvez souscrire un essai gratuit de 14 jours de Business.
Nous allons effectuer le déploiement sur Google Cloud ; vous aurez donc besoin d’un compte. Si vous n’en avez pas, inscrivez-vous gratuitement ici. Dans les deux cas, suivez les instructions ici pour connecter Pulumi à votre compte Google Cloud.
Cet exemple suppose que la CLI
gcloudest accessible depuis votre chemin d’accès. Elle est installée avec le Google Cloud SDK.Assurez-vous de disposer de Python 3, d’un compte Pulumi et de la CLI Pulumi.
Notez que Pulumi nécessite que Python 3 soit la version par défaut dans votre environnement. Si Python 2 et Python 3 sont tous deux installés, vous devrez peut-être créer un alias. Pour le vérifier, exécutez la commande suivante et assurez-vous d’utiliser la dernière version 3.x :
Étape 1 : configurer un ID d’intégration Kubernetes dans l’application Snyk
Connectez-vous à Snyk et sélectionnez l’organisation dans laquelle vous souhaitez configurer automatiquement l’intégration Kubernetes. Il peut s’agir d’une organisation vide ou d’une organisation existante contenant des projets. Pour cet exemple, vérifiez que l’intégration Kubernetes n’est pas déjà configurée dans l’organisation choisie.
Cliquez ensuite sur Intégrations > Kubernetes > Connecter. Si vous n’avez pas de compte Snyk Business ou Enterprise, vous ne pourrez pas effectuer cette étape.
Notez bien l’ID d’intégration : nous en aurons besoin dans un instant.

Et voilà ! Vous pouvez maintenant configurer notre démonstration de l’intégration Kubernetes de Snyk à l’aide de l’infrastructure as code de Pulumi. Pulumi va effectuer les opérations suivantes :
Créer un cluster GKE
Déployer le contrôleur Snyk dans le cluster0
Configurer l’intégration Kubernetes de Snyk pour importer automatiquement les workloads K8s dans Snyk
Déployer un exemple de workload dans l’espace de noms
apples, conformément à notre fichier de règles Rego
Étape 2 : cloner le dépôt d’exemple
Clonez le dépôt GitHub de démonstration ci-dessous :
Après avoir cloné ce dépôt, accédez-y avec cd, puis exécutez les commandes suivantes…
Étape 3 : vous authentifier auprès de Google Cloud
Authentifiez-vous auprès de Google Cloud à l’aide de l’authentification locale pour déployer cette démonstration. Il existe d’autres façons de configurer Pulumi avec Google Cloud, mais c’est la plus simple pour cet exemple :
Étape 4 : créer une nouvelle stack Pulumi
Créez une nouvelle stack, qui constitue une cible de déploiement isolée pour cet exemple. Utilisez dev comme nom d’exemple :
Étape 5 : définir les variables de configuration Pulumi requises
Souvent, les différentes stacks d’un même projet nécessitent des valeurs différentes. Vous souhaiterez par exemple peut-être utiliser une taille différente pour votre instance Google Cloud Compute, ou un nombre de serveurs différent pour votre cluster Kubernetes entre les stacks de développement et de production.
Les paires clé-valeur de chaque stack sont stockées dans le fichier de paramètres de stack de votre projet, automatiquement nommé Pulumi.<stack-name>.yaml. En général, vous pouvez ignorer ce fichier, mais vous pouvez aussi l’intégrer au contrôle de version avec le code source de votre projet.
Ajoutez les variables de configuration suivantes à notre stack, comme indiqué ci-dessous :
Par défaut, votre cluster comporte 3 nœuds de type n1-standard-1. Cette valeur est configurable. Pour choisir 5 nœuds de type n1-standard-2, vous pouvez exécuter les commandes suivantes :
Enfin, nous devons configurer les paramètres requis pour l’intégration Kubernetes de Snyk, qui permettent de l’ajouter automatiquement à notre cluster. Nous avons besoin de l’ID de l’intégration Kubernetes et de l’ID de notre organisation Snyk. Dans cet exemple, ils sont identiques :
Les stacks peuvent ainsi être configurées de manière pratique. Vous pouvez même modifier ces paramètres après le provisionnement.
Une fois cette étape terminée, vous disposerez d’un fichier Pulumi.dev.yaml contenant les éléments suivants :
Étape 6 : tout déployer avec pulumi up
La commande pulumi up provisionne toutes les ressources Google Cloud nécessaires à l’intégration Kubernetes avec Snyk, notamment votre cluster GKE et le chart Helm du contrôleur Snyk. Elle déploie ensuite un déploiement Kubernetes exécutant une application Spring Boot :
Une prévisualisation s’affichera. Après confirmation, le provisionnement de la démonstration de l’intégration Kubernetes de Snyk commencera :
Au bout d’environ cinq minutes, votre cluster sera prêt. Le contrôleur Snyk sera installé et un exemple de workload sera automatiquement importé dans votre organisation Snyk :
Voici quelques captures d’écran qui vous permettront de vérifier que tout a été créé comme prévu.
Le cluster GKE créé sur Google Cloud :

L’intégration Kubernetes de Snyk configurée automatiquement :

L’exemple de workload importé automatiquement depuis l’espace de noms apples :


Explorer la configuration
Examinons de plus près le fichier Python __main__.py et voyons comment l’intégration Kubernetes de Snyk a été installée et configurée.
Le fichier de règles Rego utilisé par le contrôleur Snyk est actuellement codé en dur pour n’importer que les workloads de l’espace de noms apples, à condition qu’ils ne soient pas de type CronJob ou Service. Vous pouvez modifier ce paramètre dans __main__.py et utiliser un fichier externe au lieu de coder les règles en dur dans le code Python :
Voici le code Python qui installe le contrôleur Snyk à l’aide de son chart Helm. Notez que nous avons indiqué le dépôt dans lequel récupérer le chart Helm, fourni l’ID de l’organisation Snyk ainsi que le fichier de règles personnalisé présenté précédemment. Ces éléments sont tous nécessaires pour installer le contrôleur Snyk dans le cluster GKE et l’intégrer à Snyk.
Le code Python a également déployé une application d’exemple Spring Boot dans notre espace de noms apples. C’est cette application qui a été importée automatiquement dans l’application Snyk par le contrôleur Snyk. Voici le code Python utilisé pour ce déploiement :
Étape 7 : récupérer la configuration Kubernetes
Vous pouvez utiliser cette configuration dans votre fichier ~/.kube/config, ou l’enregistrer localement et l’indiquer dans la variable d’environnement KUBECONFIG. Bien entendu, toutes vos commandes Google Cloud habituelles fonctionneront également.
Par exemple :
Le contrôleur Snyk installé dans l’espace de noms snyk-monitor, ainsi que la ConfigMap et le secret désormais gérés par Pulumi, affichés à l’aide de quelques commandes kubectl :
Étape 8 : détruire toute la configuration
Une fois que vous avez terminé, vous pouvez détruire toutes les ressources ainsi que la stack :
En résumé, vous avez appris comment utiliser Pulumi pour installer et configurer l’intégration Kubernetes de Snyk. Cette intégration vous permet d’importer et de tester vos workloads en cours d’exécution, et de détecter les vulnérabilités dans les images et les configurations associées qui pourraient compromettre leur sécurité.
Ressources complémentaires
Maintenant que vous savez à quel point il est facile de configurer l’intégration Kubernetes de Snyk avec Pulumi et le langage de programmation Python, voici quelques liens utiles pour vous lancer dans la sécurisation de vos conteneurs.
Documentation : présentation de l’intégration Kubernetes
Documentation : importation/suppression automatique des projets de workloads Kubernetes
Apprenez Rego avec l’excellent cours de tutoriel de Styra
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.
