J. Simoncello 2026-03-25T21:38:20.375948Z https://www.jmus.fr/ JMUShttps://blog.jmus.fr Setting up a server to publish Archimate models https://www.jmus.fr/2023-10-26-archimate-publishing.html 2023-10-26T00:00:00Z 2023-10-26T00:00:00Z <h1>Setting up a server to publish Archimate models </h1> <p>I have just finished a project where I had to set up a publishing service for Archimate models in my enterprise. I&#x27;d like to share some thoughts about it.<br> The solution is designed to be as simple and stupid as possible but the &quot;the devil is in the details&quot; (not sure this phrases means anything in english...)</p> <h2 id="whatitshoulddo">What it should do</h2> <ul><li>The models should either be hosted in our internal gitlab instance or directly on the publishing server</li> <li>The models should be exported daily (and automatically of course) to html sites with standard Archi export features</li> </ul> <p> * the publishing server is the smallest VM I could ask for (1vCpu/2Gb Memory/40 Gb Drive, and it is still an overkill)<br> * I use Linux Server with just Apache Web server and Archi.<br> * Archi runs on this server in headless mode <br> * Note there is no need to update the website as soon as a commit is pushed to a model, refreshing each website daily is more than enough.<br> </p> <ul><li>Some models contains &quot;hidden&quot; views and anybody should not be able to access them</li> </ul> <p> * Archi offers a view property (` _hide_from_export` ) that hides the view in the menu of the exported websites, but I had to go further and effectively delete the html files and images from the website. This way, someone reading the html source code cannot get the view url. This is all done in bash script.<br> </p> <ul><li>&quot;Hidden&quot; views should be accessible to some users</li> </ul> <p> * Each models is published twice : one website without hidden views and one website with the hidden views.<br> * The private website is protected by Shibboleth. Through SAMLv2, user must be authenticated to our LDAP enterprise server and be granted a dedicated role, prior to get access to this site.</p> <p>All in all, it does not seem a lot to do but it took around 40 days to setup everything including v2 (see below), write documentation, follow various processes. Yes we are a 100% agile company... and a 200% slow enterprise too.</p> <figure> <a href="./img/2023/publish-server.png"><img alt="/img/2023/publish-server.png" src="./img/2023/publish-server.png" style="max-width:500px" class="center"></a> </figure> <h2 id="somemorefeatures...">Some more features...</h2> <p>There are a lot of &quot;hidden&quot; things and features in these 40 days : <br> </p> <ul><li>Tools to help support in administering and monitoring the solutions I have to say that the server is not operated by our standard IT operator (long story shorts : It would have taken 4-5 additional months, I could not afford it), so I added tools to purge logs, send email on disk 80% full, and so on. </li> <li>Minor features like adding</li> </ul> <p> * the date/time the website was generated, <br> * a light version of the menu so that it loads faster on Edge browser.<br> * a welcome portal page,<br> </p> <ul><li>Security, I may be a little paranoid here but as an architect I feel my own applications should be commendable on these aspects :</li> </ul> <p> * Tools that check nobody is tampering with the published models and send alerts <br> * a dedicated firewall to further protect the server<br> </p> <ul><li>Migrate the legacy website (generated by Mega Hopex) without destroying hyperlinks that were done long ago to the legacy diagrams.</li> <li>(a lot of) documentation as I am leaving my job, I had to write everything down for a potential successor.</li> <li>For this reason, I have anticipated the development of the V2 version which provides</li> </ul> <p> * Archistory : a jArchi script which generates a visual diff between snapshots of a model, so that everyone can easily see what have been changed in views between two dates.<br> * Although my bash script which delete hidden views works like a charm, I have gone one step further and have written a jArchi Script that before export, deletes the view and every concept in the model that only appears in hidden views. <br> * A REST API which can be used by other applications (or end-users) to query the published models<br> * the API is coded in Python, with Flask and Flassger (for the swagger generation)<br> * the data are read from OEF files generated daily by Archi.<br> * the API offers few endpoints to get Single Point of Trust for any given business object, provides permalink to view with human readable parameters (not internal id but name of the application and the type of view you want to see)</p> <h2 id="whatihavelearned">What I have learned </h2> <ul><li>Using jArchi on the server side adds a lot of value. In my use cases :</li> </ul> <p> * it is a lot easier to purge the models from the views I want to hide<br> * It allows to automate Archistory process (get the latest model, compare it to previous one, generate the diff pages ...)<br> * Disclosure : I have not deployed it on my production server because Archimatetool is still not referenced in our SAP environnement so that we can not support Archi development.<br> </p> <ul><li>There is a lot of data in your models, plan time to implement mechanisms so that everyone may not access or alter sensitive information.</li> <li>Speak with the others architects, incite them to share their models, it does not matter if the models are hosted on git or not, but it matters that they are not forgotten on some local drives. (Remind them to tag the sensitive views !)</li> </ul> JMUShttps://blog.jmus.fr Model-Based Architecture Documentation https://www.jmus.fr/2023-10-05-mbad.html 2023-10-05T00:00:00Z 2023-10-05T00:00:00Z <h1>Model-Based Architecture Documentation </h1> <p>Quelques réflexions supplémentaires qui font suite au long article où j&#x27;avais expliqué l&#x27;intérêt qu&#x27;il y avait à modéliser vos architectes. Il y aura quelques répétitions, mais je voudrais ici aller un cran plus loin, en présentant l&#x27;intérêt à baser toute la documentation architecture sur un modèle. J&#x27;appelle cela le &quot;Model-Based Architecture Documentation&quot; MBAD donc, en partie pour faire écho à MBSE (Model-Based Systems Engineering) et en partie pour faire des jeux de mots autour de Michaël Jackson.</p> <ul> <li><a href="/pourquoi-modeliser">/pourquoi-modeliser</a></li> </ul> <p>Je le redis, le modèle est une base de données. Le schéma (ou la vue, les 2 termes sont ici équivalents) est une requête sur cette base de données.<br> Le fait de modéliser votre documentation architecture (DA dans la suite de l&#x27;article) va structurer l&#x27;information tout comme une base de données est une structure de stockage beaucoup plus formalisée qu&#x27;un tableur.</p> <p>L&#x27;effort de modélisation (car il y a un effort à fournir ne nous le cachons pas) va permettre ensuite de :<br> </p> <ul><li>requêter cette documentation</li> <li>valider les données</li> <li>garantir la cohérence des informations et de leurs mises-à-jour.</li> <li>éviter de laisser les marges d&#x27;interprétation et de flou induites par une documentation purement rédigée.</li> </ul> <p>Une prestation qui produit un livrables sous forme de modèle est bien plus facile à valider que s&#x27;il s&#x27;agit de documents de plusieurs dizaines de pages.</p> <p>Je suis convaincu que pour la DA, il faut vraiment abandonner le paradigme &quot;papier&quot; bêtement traduit en multiples fichiers Word (ou, si les schémas sont modélisés, ils sont conservés sous leur forme la moins riche, une copie d&#x27;écran dans le document). Le recul de quelques décennies est maintenant suffisant pour voir que cela ne fonctionne quand même pas très bien non ? </p> <p>La difficulté est qu&#x27;il n&#x27;y a pas de standard de ce qu&#x27;il faut modéliser (et qu&#x27;il ne faudrait pas se retrouver à TOUT modéliser) mais je ne suis même pas convaincu qu&#x27;un tel standard soit souhaitable. Je préconise qu&#x27;au sein de chaque entreprise/organisation, de prendre pour base l&#x27;existant de la DA et, par itération, de modéliser progressivement ce contenu. Cette démarche progressive doit se faire en se demandant à chaque étape, si chaque information a réellement sa place dans la DA et si ce n&#x27;est pas le cas de l&#x27;externaliser en gardant sa forme non structurée.</p> <p>Je ne peux pas lister tout ce qui serait à modéliser, cela dépend du contexte de chaque organisation, je voudrais juste illustrer par un exemple concret, très orienté SI qui doit se rencontrer dans à peu près toutes les entreprises.</p> <p>Ensuite, prenez comme base les sollicitations qui vous parviennent, celles qui sont les plus fréquentes ou les plus ardues à traiter, et interrogez-vous si un effort raisonnable de modélisation permettrait de mieux y répondre (ou d&#x27;y répondre tout court).</p> <p>Dans mon cas, on me demandait régulièrement si le cadre technique du SI servait à quelque chose et s&#x27;il était respecté. Je n&#x27;ai jamais pu y répondre autrement qu&#x27;au feeling mais voilà comment je procéderais dans une approche MBAD</p> <p>D&#x27;abord je modéliserais les grands principes (principles) et règles (requirements) de ce cadre technique du SI : </p> <figure> <a href="./img/2023/mbad-a.png"><img alt="Modélisation des grands principes et pré-requis du SI" src="./img/2023/mbad-a.png" style="max-width:500px" class="center"></a> <figcaption>Modélisation des grands principes et pré-requis du SI</figcaption> </figure> <p>Puis pour chaque solution technique, je dois indiquer si ces règles sont ou non respectées : </p> <figure> <a href="./img/2023/mbad-b.png"><img alt="on modélise le fait que l&#x27;application A respecte tous les principes et prérequis sauf R03" src="./img/2023/mbad-b.png" style="max-width:500px" class="center"></a> <figcaption>on modélise le fait que l&#x27;application A respecte tous les principes et prérequis sauf R03</figcaption> </figure> <p>L&#x27;inconvénient de cette approche est qu&#x27;elle créé une ambiguité : l&#x27;absence de relation entre A et R03 est-elle un oubli ou volontaire ?<br> Essayons de faire plus explicite. Archimate n&#x27;a pas de relation &quot;négative&quot;, j&#x27;utilise ici une convention en indiquant [!] pour montrer que la relation signifie &quot;n&#x27;est pas réalisée&quot;</p> <figure> <a href="./img/2023/mbad-c.png"><img alt="En explicitant toutes les relations" src="./img/2023/mbad-c.png" style="max-width:500px" class="center"></a> <figcaption>En explicitant toutes les relations</figcaption> </figure> <p>C&#x27;est mieux mais si on a 150 prérequis, le schéma risque d&#x27;être un peu long et chargé. On peut ainsi proposer de factoriser le fait que &quot;tous les prérequis sont satisfaits sauf R03&quot; en indiquant la relation entre A et le principe &#x27;Respecter le référentiel technique&#x27;</p> <figure> <a href="./img/2023/mbad-d.png"><img alt="En allégeant le schéma" src="./img/2023/mbad-d.png" style="max-width:500px" class="center"></a> <figcaption>En allégeant le schéma</figcaption> </figure> <p>C&#x27;est une illustration, inutile de dire que cet effort de modélisation doit être mené sur le long-terme pour documenter ainsi tout un SI.</p> <p>On peut aussi imaginer d&#x27;autres questions auxquelles un modèle peut répondre, voici quelques exemples issus de mon expérience personnelle :<br> </p> <ul><li>Est-ce que tous mes flux inter-applicatifs utilisent un protocole sécurisé ?</li> <li>Quelles solutions de mon SI embarquent une mécanique d&#x27;audit-trail ?</li> <li>Quelles chaines applicatives ont mis en place leur propre gestion de logs ? </li> <li>Chez quel fournisseur SaaS ai-je des données de niveau restreint ? </li> <li>Quelles applications prévues par les architectes d&#x27;entreprise n&#x27;ont pas été encore implémentées ? </li> </ul> JMUShttps://blog.jmus.fr Pourquoi bâtir des modèles et non simplement dessiner des schémas ? https://www.jmus.fr/2023-10-04-pourquoi-modeliser.html 2023-10-04T00:00:00Z 2023-10-04T00:00:00Z <h1>Pourquoi bâtir des modèles et non simplement dessiner des schémas ? </h1> <p>L&#x27;architecte SI comme son homologue dans le monde physique de la construction doit produire des plans. Je n&#x27;irais pas jusqu&#x27;à dire qu&#x27;il doit passer tout son temps à cela (il faut se laisser un peu de temps pour de la veille, monter des prototypes, discuter avec d&#x27;autres architectes) mais une bonne partie de sa charge de travail doit tourner autour de ces schémas d&#x27;architecture.</p> <p>Et quitte à y passer du temps autant que ce soit le plus efficace possible.</p> <p>Le schéma peut-être une fin en soi d&#x27;ailleurs une fin qui a plusieurs niveaux de finition, il doit permettre</p> <ul><li>de communiquer sur le fonctionnement, l&#x27;intérêt de la solution décrite. Pour cela il doit donc être</li> </ul> <p> * accessible sans une formation particulière, d&#x27;où l&#x27;intérêt d&#x27;un formalisme léger et relativement intuitif<br> * homogène dans l&#x27;entreprise concernée pour éviter de se réinterroger sur la signification de chaque composant à chaque solution abordée<br> </p> <ul><li>de capitaliser les informations pertinentes de manière synthétique.</li> </ul> <p>Etablir un schéma peut faire peur. Pourquoi ? Mon hypothèse est qu&#x27;il est beaucoup plus difficile de tricher lorsqu&#x27;on réalise un schéma que quand rédige un texte : dans ce dernier cas, on peut utiliser le conditionnel, adopter des tournures de phrase un peu floue, recourir à des termes ambiguës. Sur un schéma, c&#x27;est plus difficile : vos flèches doivent bien partir de quelque part et arriver à un autre endroit, vos boites doivent bien avoir un nom ! Bien sûr, il reste toujours possible de contourner les difficultés en nommant les objets de manière vague en adoptant des vues tellement haut-niveau qu&#x27;on ne distingue plus le sol mais on s&#x27;aperçoit alors vite que le roi est nu.</p> <p>Théoriquement n&#x27;importe quel outil de dessin peut être employé pour réaliser des schémas (même PowerPoint mais je ne le souhaite à personne) mais c&#x27;est oublié qu&#x27;au-delà du schéma il y a le modèle. C&#x27;est aussi oublier le fait que si vous faites construire votre maison et que l&#x27;architecte vous présente des plans sous PowerPoint ou Paint, vous éprouveriez sans doute une légitime appréhension.</p> <p><b>Le schéma est un visuel, le modèle est une base de données contenant des concepts liés entre eux.</b></p> <figure> <a href="./img/2023/models.png"><img alt="Tout ce qui n&#x27;est pas dans le dossier Views constitue le modèle." src="./img/2023/models.png" style="max-width:300px" class="center"></a> <figcaption>Tout ce qui n&#x27;est pas dans le dossier Views constitue le modèle.</figcaption> </figure> <p>Le modèle est la bibliothèque de concepts que vous trouverez sous Archi dans la fenêtre nommée de manière très pertinente… &quot;Models&quot;. Le schéma (ou la vue) est ce que vous trouvez dans la fenêtre principale.</p> <p>Une vue peut-être considérée comme une projection selon un axe particulier du modèle. Les objets apparaissant dans la vue sont des instanciations des concepts présents dans le modèle.</p> <p>C&#x27;est de la constitution de ce modèle que va découler la vraie plus-value de la méo et une justification majeure du travail rigoureux, constant, exhaustif de réalisation de ces schémas.</p> <p>Le respect d&#x27;un formalisme/langage de modélisation est aussi un exercice qui oblige à se poser des questions sur la nature des concepts représentés et de leurs relations. C&#x27;est tout à fait différent d&#x27;un schéma « libre » rapidement ébauché sur PowerPoint où l&#x27;on choisit des formes/couleurs/flèches au gré des envies : on obtient ainsi (parfois) quelque chose qui peut-être visuellement satisfaisant mais dont la durée de vie est limitée et qu&#x27;on ne pourra jamais réellement exploiter.</p> <p>Un modèle se doit de<br> </p> <ul><li>respecter le principe DRY (Do not Repeat Yourself), une information n&#x27;est saisie qu&#x27;une fois peut importe le nombre de fois où elle est employée.</li> <li>être dynamique, lorsqu&#x27;un concept est modifié, la mise à jour se répercute immédiatement à tous les schémas où il est utilisé.</li> <li>être lisible algorithmiquement, il est possible de l&#x27;analyser, de le parcourir pour en extraire de l&#x27;information, de ou pour reformater cette information, de le vérifier</li> </ul> <p>Et en contrepartie d&#x27;un peu de rigueur, ce modèle va rendre possible :</p> <ul><li>la réutilisation les concepts précédemment modélisés, en ce sens il est un catalogue de l&#x27;existant.</li> <li>l&#x27;accélération de la réalisation et l&#x27;homogénéisation de nouveaux schémas</li> <li>l&#x27;analyse, le requêtage des concepts</li> <li>une mise à jour rapide et surtout fiable des informations : plus besoin de chercher pendant des heures des documents épars pour des pénibles modifications à la main.</li> </ul> <p>Le contenu du modèle se détermine au cas par cas en fonction du contexte et des usages.</p> <p>A titre personnel, parce que j&#x27;apprécie les options tranchées, j&#x27;ai l&#x27;habitude de dire que le modèle doit contenir tout ce qui concerne directement l&#x27;architecte et que s&#x27;il n&#x27;arrive pas à le modéliser c&#x27;est probablement que ce n&#x27;est pas de l&#x27;architecture (ce qui ne veut pas dire que cela n&#x27;est pas pertinent bien entendu).</p> <p>Mais attention à ne pas aller vers de la sur-modélisation : à chaque fois que vous ajoutez un concept ou une relation avec un concept, soyez fainéant : estimez si on pourrait un jour vous posez une question qui nécessiterait de requêter votre modèle pour y répondre.</p> <p>Si oui continuez, si non cette information peut sans doute trouver sa place ailleurs, éventuellement dans la documentation du schéma ou du concept.</p> <p>Exemple : en mon âme et conscience, j&#x27;ai considéré qu&#x27;on pourrait me demander le nombre d&#x27;utilisateurs potentiels d&#x27;une application mais aucunement le nombre d&#x27;utilisateurs simultanés. Je vais donc incorporer cette information du nombre potentiels d&#x27;utilisateurs à mon modèle (par un nombre sur la relation entre l&#x27;application et l&#x27;utilisateur 30 et 500 ici puis je note cette pratique dans un document qui référence tout ce qui est modélisé afin que tous les architectes de l&#x27;entreprise modélisent cette notion de la même façon) mais je ne modéliser pas le nombre d&#x27;utilisateurs simultanés</p> <figure> <a href="./img/2023/models02.png"><img alt="les quantités indiquées sur les associations avec les business-actors correspondent au nombre d&#x27;utilisateurs potentiels" src="./img/2023/models02.png" style="max-width:500px" class="center"></a> <figcaption>les quantités indiquées sur les associations avec les business-actors correspondent au nombre d&#x27;utilisateurs potentiels</figcaption> </figure> <p>Idem, dans un certain contexte, les problématiques de performance sont inexistantes (ce qui ne veut pas dire que les performances sont bonnes mais simplement que lorsqu&#x27;elles sont mauvaises on passe cela sous silence), aucune exigence sur ces aspects n&#x27;est donc modélisée.</p> <figure> <a href="./img/2023/models01.png"><img alt="/img/2023/models01.png" src="./img/2023/models01.png" style="max-width:500px" class="center"></a> </figure> <p>La seule limite est votre capacité à transformer en concept Archimate toutes les notions que vous avez à documenter. Un formalisme comme Archimate permet aisément, sans même avoir à le tordre/détourner, de représenter les exigences non-fonctionnelles, les grandes étapes de la vie d&#x27;une application, les besoins en terme d&#x27;exploitation, etc…Bref toutes les parties qui constituent un dossier d&#x27;architecture.C&#x27;est un peu dur au début mais je peux vous certifier qu&#x27;une fois qu&#x27;on a pris le pli, il est intellectuellement hyper-satisfaisant de ne plus rédiger un dossier d&#x27;architecture à l&#x27;ancienne en bataillant avec Word.</p> <p>Je reconnais que c&#x27;est une position extrême qui rencontre beaucoup de résistance quand je la propose, tant l&#x27;habitude du papier et de sa contrepartie électronique -le document word- est ancrée dans nos méthodes de travail.</p> <p>Mais n&#x27;oubliez pas que la puissance d&#x27;un modèle est de pouvoir ensuite être traitée algorithmiquement : vous avez besoin d&#x27;un document word/PDF ? Développer un rapport qui traite les informations de votre modèle et vous permette de produire un tel document : ce dernier sera parfait pour les besoins de traçabilité, pour « snapshoter » une version particulière de la documentation d&#x27;une solution ou pour des exigences réglementaires.</p> JMUShttps://blog.jmus.fr Bonnes pratiques sur les vues Archimate https://www.jmus.fr/2023-09-10-bonnes-pratiques.html 2023-09-10T00:00:00Z 2023-09-10T00:00:00Z <h1>Bonnes pratiques sur les vues Archimate </h1> <p>Quelques règles d&#x27;hygiène, essentiellement du bon sens, règles qui comme souvent seront plus utiles si vous êtes plusieurs à travailler sur des modèles communs.<br> Ces règles sont indiquées pour Archi mais je ne doute pas que les autres logiciels proposent quelque chose d&#x27;équivalent.<br> </p> <h2 id="nommage">Nommage</h2> <p>Les vues doivent être nommées en respectant un formalisme, selon vos besoins. A titre d&#x27;exemple, j&#x27;ai utilisé<br> `[code de la vue]-[Application concernée ou domaine concerné]-[nom de la vue]`</p> <p>Le `[code de la vue]` est à entendre comme une notion essentiellement technique, parlante plutôt pour un public d&#x27;architectes. Au contraire le &quot;nom de la vue&quot; s&#x27;adresse plutôt au &quot;grand public&quot;.</p> <p>Ex : &quot;Vc07 - MaSuperAppli- vue fonctionnelle&quot;</p> <h2 id="propriétésdesvues">Propriétés des vues</h2> <p>Comme tous les concepts Archimate (enfin en tout cas dans Archi mais j&#x27;imagine que c&#x27;est similaire dans les autres outils), les vues peuvent avoir des propriétés. Là encore, j&#x27;ai eu l&#x27;occasion d&#x27;utiliser : <br> </p> <ul><li>le code de la vue (on répète donc l&#x27;information du titre)</li> <li>l&#x27;application/solution sur laquelle la vue est centrée, cad la solution qui est le personnage principal de la vue. </li> <li>l&#x27;attribut `_hide_from_export_` qui permet de cacher une vue dans les exports</li> <li>un attribut permettant d&#x27;identifier les vues qui auraient été générées de manière automatique (par un script, un outil, la commande &quot;Generate View For.. (Ctrl+G)&quot; dans Archi )</li> </ul> <p>Ici je répète des informations déjà précisées dans le titre. Par principe, je fuis comme la peste la répétition des informations mais ici l&#x27;usage des propriétés est utile pour les traitements automatisés par scripts : il est plus fiable de s&#x27;appuyer sur ces données que de parser le titre de la vue.</p> <h2 id="cartouche">Cartouche</h2> <p>Ajoutez un cartouche sur chaque schéma avec, a minima, titre, auteur date. Si ce n&#x27;est pas forcément utile pour les architectes, c&#x27;est une information toujours très intéressante pour le public qui consultera les schémas en dehors du contexte de l&#x27;outil dans un site web, un PowerPoint, etc.</p> <figure> <a href="./img/2023/bp01.png"><img alt="/img/2023/bp01.png" src="./img/2023/bp01.png" style="max-width:500px" class="center"></a> </figure> <h2 id="lisibilitéglobale">Lisibilité globale</h2> <p>Efforcez-vous de garder un schéma lisible sans avoir à zoomer/dézoomer en permanence. Adaptez la mise en page (paysage ou portrait) au support final le plus probable (site web, word, PPT, etc..) </p> <h2 id="miseenforme">Mise en forme</h2> <ul><li>Alignez les éléments les un par rapport aux autres, </li> <li>Homogénéisez les écarts entre les éléments et la taille des différents concepts</li> <li>Limitez les croisement de relations.</li> <li>N&#x27;abusez pas des &quot;junctions&quot; elles peuvent alléger la charge visuelle du schéma mais gêner la compréhension : une bonne pratique est d&#x27;éviter les junctions de type &quot;plusieurs entrées/plusieurs sorties&quot; et se limiter à &quot;plusieurs entrées/ 1 sortie&quot; ou &quot;1 entrée/plusieurs sorties&quot;. </li> </ul> <figure> <a href="./img/2023/bp08.png"><img alt="/img/2023/bp08.png" src="./img/2023/bp08.png" style="max-width:500px" class="center"></a> </figure> <h2 id="apparencevisuelledesconcepts">Apparence visuelle des concepts</h2> <ul><li>Respectez les couleurs par défaut définies par votre outil. Cependant, vous pouvez jouer sur la saturation de la couleur pour réduire/accroitre la visibilité d&#x27;un élément.</li> </ul> <figure> <a href="./img/2023/bp07.png"><img alt="/img/2023/bp07.png" src="./img/2023/bp07.png" style="max-width:500px" class="center"></a> </figure> <ul><li>Définissez une feuille de style que tous les architectes partageront (Dans Archi, Menu Preferences &gt; Appearance &gt; Colours &gt; Import Scheme). Les goûts et les couleurs... personnellement j&#x27;utilise celle-ci : </li> <li><a href="/files/ArchiColours_V3.prefs">V3</a></li> </ul> <ul><li>Définissez quelles représentations par défaut vous utilisez pour chaque concept : dans Archi c&#x27;est au niveau du menu &quot;Preferences &gt; diagram &gt; Default figures&quot;</li> </ul> <figure> <a href="./img/2023/bp02.png"><img alt="/img/2023/bp02.png" src="./img/2023/bp02.png" style="max-width:300px" class="center"></a> </figure> <ul><li>Définissez des visuels pour mettre en évidence les spécialisations de vos concepts : les utilisateurs verront le plus souvent vos schémas sous forme d&#x27;images, une icone permet de facilement leur indiquer cette information sémantiquement importante.</li> </ul> <p>Exemple : </p> <figure> <a href="./img/2023/bp03.png"><img alt="/img/2023/bp03.png" src="./img/2023/bp03.png" style="max-width:500px" class="center"></a> </figure> <h2 id="viewpoint">Viewpoint</h2> <p>Je n&#x27;ai jamais trop utilisé les viewpoints Archimate (a priori je ne suis pas le seul), laisser l&#x27;outil restreindre les concepts utilisables par schémas ne me semble pas très pertinent. </p> <blockquote> Paragraphe extrait d&#x27;Archimate 101<br></blockquote> <ul> <li><a href="https://archimate-community.pages.opengroup.org/workgroups/archimate-101/fr/#_about_viewpoint_enforcement_in_tools">https://archimate-community.pages.opengroup.org/workgroups/archimate-101/fr/#_about_viewpoint_enforcement_in_tools</a></li> </ul> <p> &gt; <br> </p> <blockquote> Is it useful to have a tool that forces you to use only a very restricted set of concepts? No because in some cases you might need a concept which was not planned when defining the viewpoint but makes sense in some very specific cases.<br></blockquote> <p>Je vois 2 cas où les viewpoints peuvent présenter un intérêt : <br> </p> <ul><li>pour des présentations, en utilisant ce principe pour masquer/mettre en évidence des éléments couche par couche.</li> <li>comme information exploitées par des outils de vérification automatique des schémas afin de contraindre plus fermement ce que doit contenir la vue et éviter ainsi que des écarts fassent planter l&#x27;outil. </li> </ul> <h1>Eléments &quot;nested&quot;</h1> <p>La superposition visuelle d&#x27;un concept dans un autre sans création d&#x27;une relation est toujours un peu risquée, d&#x27;ailleurs le valideur de modèle d&#x27;Archi vous signalera ce genre d&#x27;incohérences.</p> <p>Attention, placer des concepts de technology layer dansun concept de l&#x27;application layer ne crée pas de liens automatiquement. Vous pouvez néanmoins paramétrer Archi pour qu&#x27;il vous propose de créer une association via les préférences. Cochez la case &quot;association relation&quot; dans la première zone du menu Connections &gt; ARM. <br> Exemple : </p> <figure> <a href="./img/2023/bp05.png"><img alt="/img/2023/bp05.png" src="./img/2023/bp05.png" style="max-width:300px" class="center"></a> </figure> <h2 id="vuesdansdesvues">Vues dans des vues</h2> <p>Il est possible de glisser déposer une vue existante dans une autre vue afin de faciliter la navigation entre le schémas. 2 cas d&#x27;usage que je trouve intéressants : <br> </p> <ul><li>faire une vue de type &quot;Sommaire&quot; facilitant la navigation,permettant d&#x27;accéder aux autres vues d&#x27;un modèle. Vous éviterez ainsi à vos lecteurs d&#x27;avoir à se demander par où ils doivent commencer.</li> <li>faire des &quot;zooms&quot; : partir d&#x27;une vue globale peu détaillée et offrir ensuite la possibilité d&#x27;accéder aux détails internes d&#x27;un concept. En pratique, c&#x27;est vite assez délicat à gérer au niveau des relations avec les concepts extérieurs à l&#x27;élément &quot;zoomé&quot;.</li> </ul> <p>Exemple de sommaire :</p> <figure> <a href="./img/2023/bp04.png"><img alt="/img/2023/bp04.png" src="./img/2023/bp04.png" style="max-width:500px" class="center"></a> </figure> <p>Exemple de zoom : </p> <figure> <a href="./img/2023/bp06.png"><img alt="/img/2023/bp06.png" src="./img/2023/bp06.png" style="max-width:500px" class="center"></a> </figure> JMUShttps://blog.jmus.fr Threat modelling avec Archimate https://www.jmus.fr/2023-09-10-threat-modelling.html 2023-09-10T00:00:00Z 2023-09-10T00:00:00Z <h1>Threat modelling avec Archimate </h1> <h2 id="lepointdedépart">Le point de départ</h2> <p>En lisant - on a les occupations qu&#x27;on peut - le livre de préparation de la certification CISSP (# (ISC)2 CISSP Certified Information Systems Security Professional Official Study Guide, 9th Edition – ISBN-10: 1119786231), je suis tombé sur une page concernant le threat modelling. </p> <p>L&#x27;idée est de représenter visuellement un certain nombre de composants d&#x27;une solution pour faciliter l&#x27;identification des menaces. Exemple :</p> <figure> <a href="./img/2023/threat00.png"><img alt="/img/2023/threat00.png" src="./img/2023/threat00.png" style="max-width:500px" class="center"></a> </figure> <p>Source : <br> </p> <ul> <li><a href="https://medium.com/@alex.wauters/how-to-get-started-with-threat-modeling-before-you-get-hacked-1bf0ea3310df">How to get started with Threat Modeling, before you get hacked. | by Alex Wauters | Medium Oui il y a des flèches bidirectionnelles, oui c&#x27;est le mal.</a></li> </ul> <p>Il s&#x27;agit d&#x27;une forme de représentation graphique que je n&#x27;avais jamais croisée dans le monde professionnel. Y sont notamment indiqués :</p> <ul><li>les briques de la solution,</li> <li>les interaction entre ces briques : sous forme de requête/réponse systématiquement, je n&#x27;en ai pas trouvé la raison</li> <li>les « security boundaries »</li> <li>les fonctions exécutés avec des privilèges élevés.</li> </ul> <p>Je n&#x27;ai pas trouvé de formalisme bien défini pour ce type de visualisation et me suis demandé si Archimate pouvait répondre à ce type de besoin en apportant un peu plus de « cadre » à la représentation.</p> <p>_Cet article présuppose que vous connaissez Archimate ainsi que le logiciel <br> </p> <ul> <li><a href="https://www.archimatetool.com/">Archi . Un autre logiciel peut sans aucun doute aboutir au même résultat visuellement mais la deuxième partie de l&#x27;article fait appel au plugin jArchi spécifique à Archi._</a></li> </ul> <h2 id="leschéma">Le schéma</h2> <p>Première étape, une proposition de mapping entre les concepts utilisés pour ce threat modelling et les concepts Archimate :</p> <p>Eléments du threat model =&gt; Concept Archimate</p> <ul><li>briques de la solution étudiée =&gt; Tout élément pertinent du métamodèle « core »</li> <li>interactions entre les briques =&gt; « flow-relationship » qui représente à la fois la requête et la réponse</li> <li>security boundaries =&gt; voir plus bas</li> <li>Fonctions privilégiées =&gt; application-function</li> <li>Threat =&gt; assessment (voir _How to Model Enterprise Risk Management and Security with the ArchiMate® Language_ Nov 2019 TOGAF)</li> </ul> <p>La difficulté principale est, à mon sens, la modélisation des « frontières », Archimate n&#x27;ayant pas de concept de « limite ». Plusieurs solutions sont envisageables</p> <ul><li>1. faire passer le flux « au travers/par-dessus » : visuellement satisfaisant mais cela reste une convention graphique et ne se retrouve pas dans le modèle.</li> <li>2. la frontière comme concept : visuellement satisfaisant mais on scinde le flux en 2 sous-flux, ce qui alourdit le modèle et complique l&#x27;analyse</li> <li>3. un attribut ou une spécialisation du flux : on peut par exemple ajouter un attribut « secBoundaries = zone 1 | zone 2 » et/ou une spécialisation. Visuellement, ce n&#x27;est pas très parlant, et nécessite un code couleur pour * bien le mettre en évidence. C&#x27;est facile à analyser mais peu pratique à mettre à jour : le jour ou « zone 2 » est renommé il faut penser à mettre à jour les propriétés des flux concernés</li> <li>4. associer un concept au flux : en liant un concept de type « technology-interface » au flux, on obtient quelque chose visuellement parlant, facile à analyser dans le modèle et à mettre à jour.</li> <li>5. utiliser des concepts déjà modélisés : ici les différentes briques applicatives sont liées à des locations. Visuellement, cela charge un peu le schéma mais on voit immédiatement les flux qui passent d&#x27;une « location » à l&#x27;autre. Bien entendu cela implique que les « locations » soient correctement modélisées pour représenter les zones logiques d&#x27;un SI (et non uniquement des sites physiques par exemple). </li> </ul> <figure> <a href="./img/2023/threat01.png"><img alt="/img/2023/threat01.png" src="./img/2023/threat01.png" style="max-width:300px" class="center"></a> </figure> <p>La dernière approche a ma préférence car elle évite d&#x27;introduire un nouveau concept pour représenter la « boundary » tout en permettant de réutiliser des concepts qui ont probablement déjà été introduits par ailleurs dans le modèle.</p> <p>Voilà un exemple basique pour une application web avec load balancer, serveurs frontends mutualisés à la maille de l&#x27;entreprise, puis frontends et backends dédiés à chaque application. Les backends sont dans une zone sécurisé, tout le reste est dans une zone réseau « à plat ». On a donc 2 « boundaries » :</p> <ul><li>entre le browser et le datacenter,</li> <li>entre la zone par défaut du datacenter et la zone dite sécurisée.</li> </ul> <p>Enfin, on identifie 3 vulnérabilités (en violet), nous y reviendrons dans le § suivant : 2 sont associées à des flux non chiffrés, 1 à l&#x27;absence de filtrage sur un frontend. </p> <figure> <a href="./img/2023/threat02.png"><img alt="/img/2023/threat02.png" src="./img/2023/threat02.png" style="max-width:500px" class="center"></a> </figure> <h2 id="pourallerplusloin">Pour aller plus loin</h2> <p>Nous avons maintenant produit un visuel, c&#x27;est bien, cela permet de communiquer, de clarifier les concepts. Tout l&#x27;intérêt de modéliser n&#x27;est pas juste de produire un beau schéma, mais de progressivement bâtir un modèle qu&#x27;on pourra ensuite valoriser par des analyses, des requêtes. Mon objectif est ici, une fois une vulnérabilité modélisée, de « scanner » le reste du modèle afin de détecter tous les autres cas où cette vulnérabilité se rencontre.</p> <p>Sur l&#x27;exemple, ci-dessus, on modélise 3 vulnérabilités :</p> <ul><li>flux http non chiffré,</li> <li>flux http non chiffré entre 2 zones différentes (ce qui correspond à un flux traversant les fameuses boundaries abordées au début de l&#x27;article),</li> <li>Frontend non associé à du filtrage : on suppose ici que cela induit la possibilité qu&#x27;un attaquant se connecte directement auprès du frontend de l&#x27;application sans passer par les briques précédentes qui peuvent porter des services de sécurité.,</li> </ul> <p>Pour cela, nous avons besoin de créer des règles. Elles vont être implémentées via une propriété de la vulnérabilité, ici notée « check_rule » :</p> <figure> <a href="./img/2023/threat03.png"><img alt="/img/2023/threat03.png" src="./img/2023/threat03.png" style="max-width:500px" class="center"></a> </figure> <p>Elles sont écrites en javascript afin d&#x27;être évaluées par le plugin jArchi d&#x27;Archi. Par convention, on considère que la variable « o » référence le concept associé à la vulnérabilité (un flow-relationship ici).</p> <p>La première vulnérabilité « Unencrypted flow » se code :</p> <pre>o.name.indexOf(&quot;(http)&quot;)&gt;-1 </pre> <p>Se traduit par, « il y a vulnérabilité si le nom du flux indique que le protocole est (http) ».</p> <p>La vulnérabilité « Unencrypted flow between 2 different zones » peut se coder de la façon suivante :</p> <pre>((o.name.toLowerCase().indexOf(&quot;(http)&quot;)&gt;-1) &amp;&amp; (!compareFirstAncestors(o.source,o.target,&quot;location&quot;))) </pre> <p>En bon français, cela se lit : on a une vulnérabilité si le flux est indiqué comme (http) ET que la source et la destination du flux sont situés dans des « locations » différentes.</p> <p>La méthode compareFirstAncestors n&#x27;existe pas dans le SDK de jArchi, c&#x27;est une méthode que j&#x27;ai conçue pour l&#x27;exemple et qui compare le premier « parent » de type « location » contenant chacun des 2 concepts passés en paramètre de la méthode. Elle retourne true si c&#x27;est le même concept.</p> <p>Enfin, la vulnérabilité « No filtering on incoming request » décrite de manière ultra-simplifiée par :</p> <pre>(o.name.indexOf(&quot;Frontend&quot;)&gt;-1) &amp;&amp; (!isRelatedTo(o, &quot;filtering&quot;,&quot;association-relationship&quot;)) </pre> <p>Traduction : il y a vulnérabilité si le composant contient le terme « Frontend » et n&#x27;est pas lié à un bloc nommé « filtering ».</p> <p>De même que « compareFirstAncestors », la méthode « isRelatedTo » a été créée spécifiquement pour mon besoin.</p> <p>Reste à rédiger ensuite le script qui va vérifier ces règles sur l&#x27;ensemble du modèle.</p> <ul><li>Le script doit itérer sur l&#x27;ensemble des concepts « assessment » du modèle.</li> <li>Si « l&#x27;assessment » possède une propriété check_rule, on évalue la valeur de cette propriété.</li> <li>Si elle est vraie, on créé une relation entre « l&#x27;assessment » et l&#x27;objet ne respectant pas la règle.</li> </ul> <p>Le code suivant implémente ceci de manière très basique, il mérite un peu de travail pour être pleinement opérationnel :</p> <pre> $(&quot;assessment&quot;).each(function (as) { let rule = null; if (as.prop(&quot;check_rule&quot;) !== undefined) { rule = as.prop(&quot;check_rule&quot;); let assessedElement = &quot;&quot;; //get the type of the concept associated with the assessment (suppose that an assessment is always associated with this type of concept across models) $(as).rels(&quot;association-relationship&quot;).ends().each(function (element) { if (element.type !== &quot;assessment&quot;) { assessedElement = element.type; return; } }) //check for all concepts of this type in the model $(assessedElement).each(function (o) { //if rule evaluation is true, create a vulnerabilty association between assessment and object if (eval(rule)) { if ($(as).rels(&quot;association-relationship&quot;).ends(o.type).filter(&quot;#&quot; + o.id).size() === 0) { model.createRelationship(&quot;association-relationship&quot;, &quot;vulnerability&quot;, as, o) } else { //do nothing at the moment } } else { //delete relationship $(&quot;association-relationship&quot;).each(function (rel) { if ((rel.source.id === as.id)&amp;&amp; (rel.target.id===o.id) &amp;&amp; rel.name===&quot;vulnerability&quot;) { rel.delete(); } }); } }) } }); </pre> <p>Notez la ligne « eval(rule) » qui comme son nom l&#x27;indique évalue (cad exécute) la ligne de code indiquée par la propriété « check_rule » de l&#x27;assessment.</p> <p>Après avoir passé le script (et, pour les raisons du test modifiés le protocole du flux browser &gt; load balancer en http), 2 nouvelles associations sont apparues dans le modèle (mais pas dans la vue, on pourrait toutefois facilement les faire ajouter dans le script)</p> <p>Il y a donc nécessité de faire un peu de code et, surtout, de fournir un effort de formalisation des vulnérabilités. En contrepartie, cet exemple permet de discerner les apports d&#x27;un modèle, apports qui vont bien au-delà de simple représentation visuelle.</p> <h2 id="conclusion">Conclusion</h2> <p>Ainsi, au-delà d&#x27;une « simple » représentation graphique via Archimate (ce qui est déjà beaucoup, entendons-nous bien), on peut utiliser la puissance du modèle pour capitaliser les vulnérabilités détectées sur une solution et rechercher leur occurrence dans les autres solutions modélisées.<br> JMUShttps://blog.jmus.fr Comment automatiser les tests de scripts bash ? https://www.jmus.fr/2023-09-10-bash-testing.html 2023-09-10T00:00:00Z 2023-09-10T00:00:00Z <h1>Comment automatiser les tests de scripts bash ? </h1> <p>On parle beaucoup de tests unitaires automatisés en développement Java, Python, JS, etc.. (notez que je dis bien &quot;on parle&quot; et non &quot;on fait&quot;...) mais dès qu&#x27;on entre dans le monde des scripts Shell, ce type d&#x27;exigence disparaît souvent comme par enchantement. J&#x27;ignore s&#x27;il y a une raison historique à cette absence de pratique mais, étant très loin d&#x27;être un spécialiste de la ligne de commande, et devant pourtant en écrire assez souvent, j&#x27;éprouve le besoin de pouvoir tester mes productions, notamment lorsque je prépare des déploiements.</p> <p>D&#x27;aucun diront peut-être qu&#x27;à l&#x27;état de l&#x27;art, on n&#x27;a plus besoin de ce genre de compétences mais de Terraform, d&#x27;Ansible, que sais-je encore ? Oui sauf que dans la vraie vie, ces technologies ne sont pas toujours disponibles dans mon contexte et que j&#x27;ai tendance à privilégier les solutions les plus simples afin de faciliter la vie des personnes qui, après moi, assureront la maintenance. Si je sais qu&#x27;elles sont bilingues dans les technos sus-dites, aucun problème mais si ce n&#x27;est pas le cas, je fais du basique. Et puis même avec ces technologies, je reste persuadé qu&#x27;avoir un moyen d&#x27;automatiser la vérification du résultat d&#x27;une installation est toujours pertinent.</p> <p>Bats-core permet ainsi de procéder à de tels tests et semble le faire très bien (j&#x27;ai lu la doc mais pas testé sur mes serveurs)</p> <ul> <li><a href="https://github.com/bats-core/bats-core)">https://github.com/bats-core/bats-core)</a></li> </ul> <p>Mais comme on est jamais aussi bien servi que par soi-même (et que cela me permettait de pratiquer le bash) J&#x27;ai aussi fait mon propre outil qui permet de répondre à ce type de besoin plutôt orienté &quot;vérification d&#x27;une installation&quot; avec des méthodes qui permettent de tester par exemple :<br> </p> <ul><li>l&#x27;existence d&#x27;un dossier/fichier</li> <li>l&#x27;existence d&#x27;un groupe/utilisateur</li> <li>le fait qu&#x27;un service/process soit en cours d&#x27;exécution</li> <li>le fait qu&#x27;un package soit installé</li> </ul> <p>Le script est dispo sur mon Gitlab</p> <ul> <li><a href="https://gitlab.com/jsimoncello/dev-bash/-/blob/73bf50a31c9e016b74215f3059d8bae9ff4405ed/bash/check_installation.sh">gitlab</a></li> </ul> <p>Ainsi on peut tester par exemple la présence d&#x27;un fichier<br> </p> <pre>checkFileExists &quot;/etc/yum.repos.d/shibboleth.repo&quot;` </pre> <p>et on obtient à l&#x27;exécution une sortie texte, verte si tout est OK, rouge sino.</p> <figure> <a href="./img/2023/test_script.png"><img alt="/img/2023/test_script.png" src="./img/2023/test_script.png" style="max-width:500px" class="center"></a> </figure> <p>C&#x27;est une solution KISS, beaucoup moins évoluée que Bats bien entendu. Mais, si j&#x27;en reviens à mon second § sur la transmission de mes développements à mes successeurs, elle présente l&#x27;avantage de ne pas leur demander d&#x27;acquérir de nouvelles compétences sur un point pour lesquels ils seront peu fréquemment sollicités.</p>