<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>alexandre.folin, Auteur</title>
	<atom:link href="https://www.riskinsight-wavestone.com/author/alexandre-folin/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.riskinsight-wavestone.com/author/alexandre-folin/</link>
	<description>Le blog cybersécurité des consultants Wavestone</description>
	<lastBuildDate>Thu, 13 Jun 2024 12:39:01 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://www.riskinsight-wavestone.com/wp-content/uploads/2024/02/Blogs-2024_RI-39x39.png</url>
	<title>alexandre.folin, Auteur</title>
	<link>https://www.riskinsight-wavestone.com/author/alexandre-folin/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Comment construire un coding game Cloud public étape par étape ? </title>
		<link>https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/</link>
					<comments>https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/#respond</comments>
		
		<dc:creator><![CDATA[alexandre.folin]]></dc:creator>
		<pubDate>Thu, 13 Jun 2024 12:38:59 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[students]]></category>
		<category><![CDATA[wavegame]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=23285</guid>

					<description><![CDATA[<p>Etape 0 : contexte et objectifs  Le Wavegame est un challenge inter-école créé en 2019 qui vise à promouvoir l’expertise cybersécurité et le métier du conseil. La compétition comporte deux volets, le premier étant réservé aux étudiants en commerce et...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/">Comment construire un coding game Cloud public étape par étape ? </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2><b><span data-contrast="none">Etape 0 :</span></b><span data-contrast="none"> contexte et objectifs</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Le Wavegame est un challenge inter-école créé en 2019 qui vise à promouvoir l’expertise cybersécurité et le métier du conseil. La compétition comporte deux volets, le premier étant réservé aux étudiants en commerce et le second aux étudiants en informatique. La partie technique consiste en 2 exercices de qualification et un événement final. Cet article aborde le deuxième exercice où, dans sa saison 2023, 33 équipes se sont affrontées autour de la sécurisation d’une infrastructure Cloud AWS.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Sur fond d’une intrigue futuriste, les étudiants devenus consultants ont été mandatés par France Fusion, une entreprise chargée d’exploiter les premières usines à fusion nucléaire du pays. France Fusion souhaitait mettre au point une plateforme de supervision dans le Cloud. Pour ce faire, les données d’équipements industriels collectées, relevant de la propriété intellectuelle de France Fusion, devaient être analysées au travers d’une base de données ElasticSearch. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Démarré sous la forme d’un Proof of Concept (PoC) en marge des équipes sécurité, une équipe de développeurs est parvenue à déployer une architecture fonctionnelle sur AWS. Les étudiants sont alors amenés à sécuriser l’infrastructure en respectant les politiques Cloud public de France Fusion. Le défi technique était de taille : déployer une infrastructure vulnérable en libre-service sur 33 comptes AWS. Il s&rsquo;agissait également d&rsquo;accorder aux étudiants un accès administrateur et les autorisations nécessaires pour effectuer des modifications directement depuis la console AWS, le tout avec un budget limité compte tenu du nombre de participants. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Dans cet article, nous allons vous partager la recette qui a permis de faire de ce défi une réalité.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<h2><b><span data-contrast="none">Etape 1 :</span></b><span data-contrast="none"> Mettre sur le papier une architecture portant une dimension pédagogique</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559991&quot;:851}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Avant de nous lancer dans le développement du </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none">, nous avons pris en compte 4 contraintes : </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="none">La population cible</span></b><span data-contrast="none"> : s’agissant d’étudiants, il est primordial de tenir compte de l’hétérogénéité en matière de connaissances Cloud. Par conséquent, nous nous sommes concentrés sur l&rsquo;utilisation des services essentiels AWS (e.g., S3, EC2, Lambda), car ce sont des ressources bien documentées et parce que les étudiants sont susceptibles de les avoir abordés en classe ou dans le cadre de projets personnels.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><b><span data-contrast="none">Le thème :</span></b><span data-contrast="none"> c’est un élément crucial pour immerger les étudiants dans un contexte de mission client. Nous avons donc cherché à créer une architecture aussi réaliste que possible. Ainsi, le choix de déployer une suite ELK (Elasticsearch, Logstash, Kibana) sur une instance EC2 nous a paru pertinent pour un PoC lié à de la supervision.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><b><span data-contrast="none">Les coûts :</span></b><span data-contrast="none"> sachant que l’infrastructure doit être accessible par des étudiants pendant 2 semaines et qu’elle doit être répliquée sur 33 comptes AWS, nous avions tout intérêt à optimiser les coûts. Pour y parvenir, nous avons utilisé le calculateur de tarification AWS pour estimer les coûts, opté pour une région à faible coût et construit l&rsquo;infrastructure autour de services « paiement à l’utilisation » tels que les fonctions Lambda.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><b><span data-contrast="none">Les échéances : </span></b><span data-contrast="none">pour faire face à un calendrier rapproché, nous avons défini des objectifs et des jalons avec une marge suffisante pour surmonter les éventuelles contraintes techniques. Les principales étapes du projet sont le développement, les tests, la création de comptes et le déploiement.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">Le schéma d’architecture « vulnérable » ci-dessous reflète ces 4 contraintes (</span><i><span data-contrast="none">Figure 1</span></i><span data-contrast="none">). L’équipement industriel est simulé par une fonction Lambda (Datalake) qui va générer des logs et les envoyer dans un </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 (Datalake). Une seconde fonction Lambda (ELK) est alors déclenchée par une notification S3. Elle va récupérer le fichier de logs et l’envoyer dans la base ElasticSearch (image Docker dans une instance EC2). Enfin, l’interface Kibana est accessible depuis Internet pour l’analyse des logs. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:0}"> <img fetchpriority="high" decoding="async" class="aligncenter wp-image-23292 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1.jpg" alt="" width="1477" height="608" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1.jpg 1477w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1-437x180.jpg 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1-71x29.jpg 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/1-768x316.jpg 768w" sizes="(max-width: 1477px) 100vw, 1477px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">1</span></i><i><span data-contrast="none"> :</span></i><i><span data-contrast="none"> schéma d’architecture initiale du Wavegame 2023</span></i><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559739&quot;:120,&quot;335559991&quot;:851,&quot;469777462&quot;:[851],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<h2><b><span data-contrast="none">Etape 2 :</span></b><span data-contrast="none"> Concevoir une architecture sécurisée basée sur des politiques sécurité du Cloud public</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Maintenant que nous avons notre scénario initial, il s’agit de concevoir des politiques du Cloud public qui vont fixer les exigences sécurité et les critères d’évaluation. Pour cela, nous avons adapté des bonnes pratiques de sécurité mises en œuvre chez nos clients dont voici un extrait :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><span data-contrast="none">AWS-01 : Toutes les ressources AWS doivent utiliser des rôles IAM spécifiques à leurs besoins et respectant le principe du moindre privilège.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">AWS-02 : Toutes les ressources AWS doivent être connectées et/ou attachées à un réseau privé (VPC).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><span data-contrast="none">AWS-03 : Les instances EC2 ne doivent pas être accessibles au public via Internet.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">AWS-04 : Tous les logs d&rsquo;infrastructure générés par les services AWS doivent être envoyés à CloudWatch.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">AWS-05 : Le volume Amazon EBS racine doit être chiffré sur toutes les instances EC2.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="10" data-aria-level="1"><span data-contrast="none">AWS-06 : les données dans le </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 doivent être chiffrées.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">À partir des politiques du Cloud public, nous avons élaboré l&rsquo;architecture sécurisée suivante (</span><i><span data-contrast="none">Figure 2</span></i><span data-contrast="none">) :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> <img decoding="async" class="aligncenter wp-image-23294 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2.jpg" alt="" width="1366" height="695" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2.jpg 1366w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2-375x191.jpg 375w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2-71x36.jpg 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/2-768x391.jpg 768w" sizes="(max-width: 1366px) 100vw, 1366px" /></span></p>
<p style="text-align: center;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">2</span></i><i><span data-contrast="none">:</span></i><i><span data-contrast="none"> schéma d’architecture cible du Wavegame 2023</span></i><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559739&quot;:120,&quot;335559991&quot;:851,&quot;469777462&quot;:[851],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">En résumé, l’ensemble des ressources Calcul sont positionnées dans un sous-réseau privé, le </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 est accédé via un point de terminaison VPC, la plateforme de supervision ELK est accédée via une machine virtuelle de rebond. Les services </span><i><span data-contrast="none">Cloudwatch</span></i><span data-contrast="none"> et </span><i><span data-contrast="none">CloudTrail</span></i><span data-contrast="none"> sont activés pour le monitoring et la supervision. Des </span><i><span data-contrast="none">security groups</span></i><span data-contrast="none"> sont attachés aux ressources pour n’autoriser que les communications entrantes strictement nécessaires.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p> </p>
<h2><b><span data-contrast="none">Etape 3 :</span></b><span data-contrast="none"> passer du design au développement en Terraform</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Pour construire le </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none">, nous avons créé et maintenu 2 architectures distinctes, représentées par 2 branches distinctes dans Github. La première étant l&rsquo;architecture vulnérable qui sera déployée initialement, et la seconde étant la solution qui sert de garantie de faisabilité. Cette « </span><i><span data-contrast="none">garantie de faisabilité</span></i><span data-contrast="none"> » signifie que 3 points obligatoires sont remplis :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="11" data-aria-level="1"><span data-contrast="none">Les permissions IAM doivent être suffisantes pour permettre au système de fonctionner correctement.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">La configuration finale de l&rsquo;infrastructure doit prendre en compte les cycles de vie des objets et leurs interactions.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="13" data-aria-level="1"><span data-contrast="none">L&rsquo;expertise requise pour compléter le </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none"> doit être adaptée à la montée en compétence des étudiants sur une période de 2 semaines.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">Concernant le cycle de développement, plutôt que de suivre une approche linéaire, où l&rsquo;on créerait d&rsquo;abord le code pour l&rsquo;infrastructure initiale, puis pour l&rsquo;infrastructure cible, nous avons opté pour une approche agile avec la définition de blocs fonctionnels. Pour illustrer cette idée, le bloc « </span><i><span data-contrast="none">Lambda (ELK) -&gt; S3</span></i><span data-contrast="none"> » vise à concevoir une fonction Lambda déclenchée dès qu&rsquo;une notification S3 </span><i><span data-contrast="none">PutObject</span></i><span data-contrast="none"> est générée, avec ou sans point de terminaison VPC. Bien que nous devions maintenir 2 configurations Terraform simultanément, cette approche nous a donné une plus grande agilité pour réévaluer nos choix techniques. Pour réduire davantage la redondance et assurer la maintenabilité, nous nous sommes aussi concentrés sur le développement de modules Terraform pour les objets Lambda et S3.  </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Pour automatiser le déploiement des ressources dans notre Sandbox et dans nos comptes étudiants, nous avons créé une chaîne CI/CD simplifiée dans Github. Elle est constituée de 2 Github Actions. A travers une syntaxe YAML, les Github Actions permettent d&rsquo;exécuter des tâches intégrées à AWS ou Hashicorp. Dans notre cas de figure, nous avions une tâche pour exécuter la commande </span><i><span data-contrast="none">terraform apply</span></i><span data-contrast="none"> et une tâche pour appliquer la commande inverse </span><i><span data-contrast="none">terraform destroy</span></i><span data-contrast="none">. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">L&rsquo;un des avantages des Github Actions est le fait de pouvoir stocker les identifiants d&rsquo;accès à AWS dans Github Secrets au lieu du code source ou d&rsquo;un fichier local. De plus, le stockage des états Terraform dans un </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 facilite la collaboration. Un état Terraform est un fichier qui garde une trace de la configuration actuelle. Ainsi, chaque développeur configure sa clé S3 dans sa branche Github qui deviendra la référence de son état.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Au fur et à mesure que le développement avançait, nous nous sommes rendu compte de l&rsquo;ampleur de l&rsquo;écart entre l&rsquo;architecture initiale et l&rsquo;architecture cible. La raison principale est que les logiques IAM et réseau sont très différentes. En conséquence, il est devenu essentiel d&rsquo;effectuer des tests en conditions réelles, c&rsquo;est-à-dire à partir de la console AWS, afin d&rsquo;identifier les ruptures, les politiques bloquantes et d&rsquo;évaluer la complexité. A titre d&rsquo;exemple, l&rsquo;un des tests nous a rappelé que le script de démarrage d&rsquo;un EC2 appelé </span><i><span data-contrast="none">user-data</span></i><span data-contrast="none"> n&rsquo;est pas persistant après un redémarrage. Par conséquent, ce comportement a empêché la mise en œuvre de la politique de sécurité relative au chiffrement du volume racine Amazon EBS (AWS-05).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<h2><b><span data-contrast="none">Etape 4 :</span></b><span data-contrast="none"> Déployer les environnements de manière sécurisée</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559991&quot;:851}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Dans le cadre de ce défi, nous étions sur le point d&rsquo;accorder un accès privilégié à des étudiants dans un environnement pendant deux semaines pour lequel une surveillance ou une assistance individuelle constante est impossible. Bien que cette approche représente une meilleure opportunité d&rsquo;apprentissage, elle soulève des scénarios de sécurité spécifiques que nous devons anticiper et atténuer. Parmi ceux-ci, le dépassement de budget était une préoccupation majeure, étant donné l&rsquo;accès illimité et les ressources à leur disposition. Une autre menace importante est la possibilité pour les étudiants de s&rsquo;élever au sein de l&rsquo;organisation, d&rsquo;obtenir des accès non prévus ou de se compromettre les uns avec les autres. Enfin, le risque de détournement des ressources à des fins non autorisées ou malveillantes n&rsquo;est pas négligeable. Chacune de ces menaces doit faire l&rsquo;objet d&rsquo;un examen attentif afin de garantir un déploiement sûr et responsable.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Pour ce </span><i><span data-contrast="none">coding game</span></i><span data-contrast="none">, nous avons opté pour une conception AWS multicomptes afin d&rsquo;isoler les environnements de chaque équipe. Grâce à l&rsquo;organisation AWS, nous avons simplifié l&rsquo;administration, amélioré le contrôle des coûts et pu mettre en place des garde-fous à l&rsquo;aide de politiques de contrôle de la sécurité (SCP). Dans la </span><i><span data-contrast="none">Figure 3</span></i><span data-contrast="none">, nous présentons notre organisation AWS, composée d&rsquo;un compte admin et d&rsquo;une Unité d’Organisation (UO) Wavegame qui héberge les comptes des équipes où l&rsquo;infrastructure est déployée. Nous avons mis en place 3 SCP spécifiques pour :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="14" data-aria-level="1"><span data-contrast="none">Restreindre l&rsquo;accès aux services AWS en dehors de la région désignée, </span><i><span data-contrast="none">us-east-1</span></i><span data-contrast="none">, en définissant une liste d&rsquo;opérations autorisées.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">Renforcer l&rsquo;utilisation des types d&rsquo;instance Amazon EC2 à du t2.micro ou t2.large (contrainte liée à l&rsquo;environnement ElasticSearch).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="16" data-aria-level="1"><span data-contrast="none">Interdire aux comptes étudiants de supprimer ou de modifier une ressource dont la balise est « </span><i><span data-contrast="none">protected</span></i><span data-contrast="none">« .</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="none">Par ailleurs, pour mieux gérer les coûts, en particulier pour une durée de deux semaines, nous avons mis en place une fonction Lambda pour fermer automatiquement les instances EC2 après 2 heures d&rsquo;activité. Pour éviter toute modification non autorisée par les étudiants, cette fonction Lambda était l&rsquo;une des ressources sécurisées avec la balise « </span><i><span data-contrast="none">protected</span></i><span data-contrast="none">« .</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> <img decoding="async" class="aligncenter wp-image-23296 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3.jpg" alt="" width="826" height="612" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3.jpg 826w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3-258x191.jpg 258w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3-53x39.jpg 53w, https://www.riskinsight-wavestone.com/wp-content/uploads/2024/06/3-768x569.jpg 768w" sizes="(max-width: 826px) 100vw, 826px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">3</span></i><i><span data-contrast="none">:</span></i><i><span data-contrast="none"> Organisation AWS pour le Wavegame 2023</span></i><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:851,&quot;335559739&quot;:120,&quot;335559991&quot;:851,&quot;469777462&quot;:[851],&quot;469777927&quot;:[0],&quot;469777928&quot;:[1]}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Enfin, en plus de notre utilisateur IAM qui est administrateur de l&rsquo;UO Wavegame via un rôle IAM, nous avons créé un utilisateur IAM avec le rôle </span><i><span data-contrast="none">AdministratorAccess</span></i><span data-contrast="none"> pour chaque compte AWS, afin de donner de l&rsquo;autonomie aux étudiants pendant le challenge. Ils ont notamment suffisamment de droits pour se créer des comptes nominatifs.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p> </p>
<h2><b><span data-contrast="none">Etape 5 :</span></b><span data-contrast="none"> Se préparer au RUN et à la correction</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559738&quot;:240,&quot;335559739&quot;:360}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="none">Une fois le coup d’envoi donné, les étudiants ont 2 semaines pour sécuriser les ressources dans leur compte AWS en suivant nos politiques sécurité du Cloud public. Avec autant de permissions, des erreurs de configuration cassantes peuvent vite survenir. Par exemple, un groupe a créé une politique S3 « </span><i><span data-contrast="none">Deny All</span></i><span data-contrast="none">« , ce qui l&rsquo;a conduit à s&rsquo;exclure lui-même, ainsi que toute autre personne, puisqu’aucun d&rsquo;entre nous n&rsquo;a les privilèges du compte racine.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Pour faire face à ce genre de situation, nous avons mis en place le système de communication suivant : chaque équipe dispose d&rsquo;un coach chargé de signaler les problèmes techniques à l&rsquo;équipe organisatrice qui nous remonte ensuite les incidents. Nous avons ainsi pu enquêter et résoudre les problèmes ou communiquer rapidement avec eux sans recevoir trop de messages pour des questions simples auxquelles les coachs pouvaient répondre. </span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Outre la gestion des incidents, notre rôle consistait également à surveiller les dépassements de budget. Pour ce faire, nous avons mis en place des alertes de coûts pour chaque compte AWS. Nous avons également développé un script pour suivre l&rsquo;évolution du budget des équipes en temps réel. Cet outil s&rsquo;est avéré très utile pour fournir une estimation du temps passé par les étudiants sur le défi et réagir en cas de dépenses anormales. Par exemple, deux jours après le début du défi, une alerte a été déclenchée en raison d&rsquo;une défaillance de la fonction Lambda destinée à éteindre la machine virtuelle.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-contrast="none">Une fois que le défi s&rsquo;est terminé avec peu d&rsquo;incidents et que l&rsquo;accès des étudiants a été révoqué, il était temps de procéder à l&rsquo;évaluation pour déclarer les gagnants. Pour rappel, les étudiants devaient configurer leur compte AWS en conformité avec les politiques du Cloud public. Pour leur évaluation, nous avons utilisé deux mécanismes de notation :</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<ul>
<li data-leveltext="/" data-font="Tempus Sans ITC" data-listid="3" data-list-defn-props="{&quot;335551500&quot;:5255288,&quot;335552541&quot;:1,&quot;335559685&quot;:284,&quot;335559991&quot;:284,&quot;469769226&quot;:&quot;Tempus Sans ITC&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;/&quot;,&quot;469777815&quot;:&quot;multilevel&quot;}" aria-setsize="-1" data-aria-posinset="17" data-aria-level="1"><span data-contrast="none">Une évaluation automatique grâce au déploiement de règles gérées AWS Config à la fin du défi. Amazon fournit un ensemble de règles couvrant un pourcentage significatif des exigences. Par exemple, une règle permet de vérifier si le </span><i><span data-contrast="none">bucket</span></i><span data-contrast="none"> S3 est chiffré (AWS-06).</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
<li><span data-contrast="none">Une évaluation manuelle basée sur des critères attendus et des étapes de vérification clairement documentées.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559739&quot;:120}"> </span></li>
</ul>
<p style="text-align: justify;" aria-level="1"> </p>
<p aria-level="1"> </p>
<p aria-level="1"> </p>
<p style="text-align: justify;"><span data-contrast="none">Pour conclure, organiser un coding game est un challenge ambitieux qui nécessite des compétences Cloud public et Terraform, une organisation solide et des capacités de réaction face à des événements inattendus. Malgré les défis, c&rsquo;est une opportunité exceptionnelle d’apprentissage. Pour les participants, le Wavegame offre une introduction immersive à la sécurité dans le Cloud public. Pour les organisateurs, le Wavegame est une expérience pratique sur le design, la conception et le maintien en condition opérationnelle d’une infrastructure dans le Cloud public.</span><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335551550&quot;:6,&quot;335551620&quot;:6,&quot;335559685&quot;:567,&quot;335559739&quot;:120}"> </span></p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/">Comment construire un coding game Cloud public étape par étape ? </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/2024/06/comment-construire-un-coding-game-cloud-public-etape-par-etape/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
