Introduction et concepts clés - Sskiizens/DevSecOps Wiki

Welcome to the DevSecOps wiki!

Intro

Le but de cette page est d'expliquer l'application liée à ce repository. Il y aura à la fois des explications sur l'application et son fonctionnement, les technologies utilisées, l'installation et la mise en route de l'application, mais également sur le DevOps/DevSecOps, ses origines, son rapport avec l'application, et ce qu'il permet de faire en terme de software engineering. N'hésitez pas à consulter d'autres sources pour en apprendre d'avantage sur le DevOps, chacun à sa propre idée de cette discipline et mentalité, et chacune a des choses à apporter. J'ai utilisé diverses sources pour composé ce wiki, vous retrouverez sans doutes des similitudes avec d'autres sites professionnels.

Le DevOps/DevSecOps

Le DevOps

Le DevOps est un concept hérité des méthodes agiles, aujourd'hui bien connues dans le monde de l'entreprise notamment grâce à scrum, une méthode de management qui s'est répandue dans le monde entier et qui a permit de démocratiser 'l'agilité' dans les entreprises. En effet le DevOps reprend les concepts de management hérités de l'agile manifesto comme la flexibilité dans les décisions prises pour un projet, le partage des responsabilités, etc... (pour plus de détail voir l'agile manifesto). Mais ce fameux DevOps à poussé le concept à l'extrême. A l'origine une simple contraction de Développeurs et Opérationnels pour montre la fin du cloisonement de ces deux spécialités clés du développement logiciel, il a ensuite vu sa définition devenir un vrai phénomène de mode, qui regroupe aujourd'hui les définitions d'origines mais qui fait également référence à des technologies (conteneurs, pipeline CI/CD...) et des méthodes de travail (pair-programming, amélioration continue...).

Notions clés DevOps utilisées pour l'application

L'Infrastructure as code (IaC) est un ensemble de mécanismes permettant de gérer, par des scripts, une infrastructure virtuelle.

Initialement dédié aux machines virtuelles (également nommées « Instances »), l'évolution des offres dans le domaine de la virtualisation a rendu possible la gestion d'une infrastructure à part entière, de l'instance au réseau, incluant entre autres la gestion du service DNS, du « Load-Balancing », des sous-réseaux et des groupes de sécurité.

Souvent plébiscité dans le cadre du cloud computing, l'Infrastructure as code offre aux développeurs la possibilité d'automatiser leurs déploiements de manière à éviter les tâches manuelles ou encore de devoir écrire d'eux-mêmes les appels aux interfaces de programmation. Cette technologie constitue une réponse aux besoins des entreprises en termes de mise à l'échelle des applications axée sur l'automatisation et la simplification de l'infrastructure de projets informatiques. De manière générale, l'Infrastructure as code s'inscrit dans la mouvance plus générale du DevOps qui a pour objectif d'unifier le développement logiciel et l'administration système.

Les microservices sont une technique de développement logiciel — une variante du style architectural de l'architecture orientée services (SOA) — qui structure une application comme un ensemble de services faiblement couplés. Les microservices indépendants communiquent les uns avec les autres en utilisant des API indépendantes du langage de programmation.

Des API REST sont souvent employées pour relier chaque microservice aux autres. Un avantage avancé est que lors d'un besoin critique de mise à jour d'une ressource, seul le microservice contenant cette ressource sera mis à jour, l'ensemble de l'application restant compatible avec la modification, contrairement à la totalité de l'application dans une architecture classique, par exemple une architecture trois tiers. Cependant, le coût de mise en place, en raison des compétences requises, est parfois plus élevé.

Une API est un ensemble de définitions et de protocoles qui facilite la création et l'intégration de logiciels d'applications. API est un acronyme anglais qui signifie « Application Programming Interface », que l'on traduit par interface de programmation d'application.

Les API permettent à votre produit ou service de communiquer avec d'autres produits et services sans connaître les détails de leur mise en œuvre. Elles simplifient le développement d'applications et vous font ainsi gagner du temps et de l'argent. Lorsque vous concevez de nouveaux outils et produits, ou que vous assurez la gestion de ceux qui existent déjà, les API vous offrent plus de flexibilité, simplifient la conception, l'administration et l'utilisation, et vous donnent les moyens d'innover.

Les API sont parfois considérées comme des contrats, avec une documentation qui constitue un accord entre les parties : si la partie 1 envoie une requête à distance selon une structure particulière, le logiciel de la partie 2 devra répondre selon les conditions définies.

Le DevSecOps

Le DevSecOps quant à lui, reprend l'ensemble des méthodes, techniques et outils associés au DevOps mais en rajoutant un aspect sécurité aux projets. On ne parle pas ici simplement d'un pôle sécurité au sein de l'entreprise mais bien cybersécurité au sens large, on retrouve le security by design avec des développeurs qui sont formés aux bonnes pratiques de codages et qui réalises des tests de sécurité sur leur code, de modèle zéro-trust, de sécurisation des infrastructure avec de la redondance, du chaos monkey ou encore une supervision/hypervision de l'ensemble des environnements. Souvent seul quelques une de ces pratiques suffisent à se donner le nom de DevSecOps et à s'assurer un niveau de sécurité convenable sans pousser vers le trou budgétaire.

L'application

Pourquoi cette application ?

Cette application est là pour servir de modèle et de cobaye pour ceux qui veulent se lancer dans le DevOps. L'application à été pensé pour reprendre un grand nombre de concept clé du DevOps (api, conteneur, BDD, microservice...) permettant ainsi de se rendre compte de ce que peut être une application réalisé selon les méthodes DevOps et avec les technologies associées.