<?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>Clément Guillemare, Auteur</title>
	<atom:link href="https://www.riskinsight-wavestone.com/en/author/clement-guillemare/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.riskinsight-wavestone.com/author/clement-guillemare/</link>
	<description>The cybersecurity &#38; digital trust blog by Wavestone&#039;s consultants</description>
	<lastBuildDate>Fri, 04 Jul 2025 08:27:16 +0000</lastBuildDate>
	<language>en-US</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>Clément Guillemare, Auteur</title>
	<link>https://www.riskinsight-wavestone.com/author/clement-guillemare/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Resilience Entra ID</title>
		<link>https://www.riskinsight-wavestone.com/en/2025/07/resilience-entra-id/</link>
					<comments>https://www.riskinsight-wavestone.com/en/2025/07/resilience-entra-id/#respond</comments>
		
		<dc:creator><![CDATA[Clément Guillemare]]></dc:creator>
		<pubDate>Thu, 03 Jul 2025 08:42:03 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[Focus]]></category>
		<category><![CDATA[Active directory]]></category>
		<category><![CDATA[cloud]]></category>
		<category><![CDATA[cyber resilience]]></category>
		<category><![CDATA[Entra ID]]></category>
		<category><![CDATA[risk management strategy & governance]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=26544</guid>

					<description><![CDATA[<p>Entra ID (formally known as Azure AD) is an Identity and Access Management solution. Through a Cloud-based directory, administrators provision and manage the lifecycle of various identities from Users, Applications to Devices. Unlike Microsoft Active Directory, Entra ID extends its...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2025/07/resilience-entra-id/">Resilience Entra ID</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="text-align: justify;">Entra ID (formally known as Azure AD) is an Identity and Access Management solution. Through a Cloud-based directory, administrators provision and manage the lifecycle of various identities from Users, Applications to Devices. Unlike Microsoft Active Directory, Entra ID extends its authentication and authorization capabilities beyond the company&#8217;s network to cover SaaS applications, on-premises and Cloud workloads using either company-owned devices or BYOD. These new features and connections are achieved thanks to web-based protocols like SAML and simplified identity structure (AD forest vs Entra ID tenant).</p>
<p style="text-align: justify;">In this article, we will expose the cyber-resilience challenge of Entra ID, explain why native features are incomplete and present the result of a PoC conducted on an open-source tool, Microsoft 365 DSC, to backup and recover Entra ID’s data.</p>
<p style="text-align: justify;"> </p>
<h2 style="text-align: justify;">The challenge of cyber-resilience in managed Cloud services</h2>
<p> </p>
<p style="text-align: justify;">With Entra ID, the directory management strategy is in line with the Cloud paradigm. It means that the various network, storage, computer, OS and application layers are handled by Microsoft, leaving the customer to focus solely on his identity data.</p>
<p><img fetchpriority="high" decoding="async" class="aligncenter wp-image-26527 size-full" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/07/Diapositive1.jpg" alt="" width="1280" height="720" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/07/Diapositive1.jpg 1280w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/07/Diapositive1-340x191.jpg 340w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/07/Diapositive1-69x39.jpg 69w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/07/Diapositive1-768x432.jpg 768w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/07/Diapositive1-800x450.jpg 800w" sizes="(max-width: 1280px) 100vw, 1280px" /></p>
<p style="text-align: justify;">This fundamental difference has an impact on the resiliency of the service. Indeed, the creation of snapshots to back up the integrality of the system, which is a common practice on AD, is not native on a managed service such as Entra ID. Thus, in order to face a disaster recovery scenario linked to malicious activities, we can only rely on native Microsoft functionalities: the identity lifecycle model, RBAC administration model and import/export capabilities.</p>
<p> </p>
<h2 style="text-align: justify;">The incomplete soft delete model</h2>
<p> </p>
<p style="text-align: justify;">To ensure resilience, Cloud services are widely using a soft delete mechanism. Its main purpose is to recover data in the event of an accidental deletion. For example, in Azure Recovery Service Vault, the soft delete is the last safeguard in the event of intentional or unintentional deletion of the vault. Combined with immutability parameters, the vault cannot be erased regardless of admin permissions.</p>
<p style="text-align: justify;">In Entra ID, the concept of soft delete exists but is insufficient to ensure data resilience for two reasons. On the one hand, there is neither role distinction between soft-delete and hard-delete nor Recovery role, i.e. the permissions required to delete an object are sufficient to allow for permanent deletion. On the other hand, the life cycle of objects in Entra ID (create, manage, delete) is governed by the same role:</p>
<ul>
<li>The role User Administrator can both create and hard-delete a user</li>
<li>The role Cloud Application Administrator can register an application, configure all aspects of the application and hard-delete the application</li>
<li>The role Cloud Device Administrator can add a device, configure all aspects of the device and unregister a device</li>
</ul>
<h2> </h2>
<h2 style="text-align: justify;">The impact of a deletion on Entra ID</h2>
<p> </p>
<p style="text-align: justify;">This design makes the User Administrator, Privileged Authentication Administrator, Cloud Application Administrator, Application Administrator, Cloud Device Administrator, Intune Administrator and Windows 365 Administrator roles all the more critical, as their compromise can lead to the permanent loss of identity data. The impact of such a deletion can be a loss of access to applications and data, a loss of permissions, and an inability to administrate.</p>
<p style="text-align: justify;">Although the deletion of hybrid users synchronized with an on-premise AD is reversible, information such as role assignment will be lost, threatening the rights and access model. This is not the case for Cloud identities, which are generally part of the Control Plane. As part of the Enterprise Access Model, the Control Plane includes the most sensitive access, leading to a global compromise of an Information System.</p>
<p style="text-align: justify;">In a disaster recovery scenario, some assets are more critical than others and should be backed up as a priority. These include:</p>
<ul>
<li>Control Plane users, groups and roles assigned</li>
<li>Enterprise Applications (service principals) with critical permissions over Azure or Microsoft 365</li>
<li>Administrative workstations</li>
</ul>
<h2> </h2>
<h2 style="text-align: justify;">Comparison of backup open-source methods</h2>
<p> </p>
<p style="text-align: justify;">To reduce the likelihood of Entra ID malicious data loss risk, the implementation of a backup solution seems essential, at least for the Control Plane in order to maintain control over your Information System and rebuild. We have therefore analyzed 3 open-source methods for ensuring data backup:</p>
<ul style="text-align: justify;">
<li><strong>Microsoft Graph PowerShell</strong>: this is the PowerShell library for Microsoft Graph APIs. You can build your own script(s) to export and import Entra ID objects attributes that fit with organization needs</li>
<li><strong>Microsoft Entra Exporter</strong>: this is a PowerShell module that export a local copy of some Entra ID attributes (Users, Applications, Service Principals, Roles, etc.) into JSON file</li>
<li><strong>Microsoft 365 Desired State Configuration (DSC)</strong>: this is a PowerShell module for declarative configuration, deployment and management of Microsoft 365 services</li>
</ul>
<p style="text-align: justify;"> </p>
<h2 style="text-align: justify;">Backing up Entra ID objects with Microsoft 365 DSC</h2>
<p> </p>
<p style="text-align: justify;">In this part, we will explain how we tested the open-source solution Microsoft 365 DSC and share the results and conclusions we got.</p>
<p style="text-align: justify;">Our PoC</p>
<p style="text-align: justify;">Microsoft 365 DSC enables the management of the configuration and state of Microsoft 365 services following a declarative approach. By defining the desired state rather than specific steps, it simplifies the management of complex cloud configurations and ensures consistency across the environment.</p>
<p style="text-align: justify;">In the context of a PoC, the test population deployed in our test tenant is as follows:</p>
<ul style="text-align: justify;">
<li>30 Cloud Only Users (randomly generated by Microsoft as part of the test’s tenant creation process)</li>
<li>10 Security Groups (randomly assigned to Users)</li>
</ul>
<p style="text-align: justify;">The purpose of this PoC is to identify the benefits and limitations of the solution through a series of tested and documented uses cases:</p>
<table>
<tbody>
<tr>
<td style="text-align: center;" colspan="3" width="623">
<p><strong>Users</strong></p>
</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2" width="365">
<p><strong>Use cases</strong></p>
</td>
<td style="text-align: center;" width="257">
<p><strong>Findings</strong></p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if we delete a user and then restore a backup?</strong></p>
</td>
<td width="204">
<p>Does the user return with all the data that was attached to them?</p>
<p>Does their password come back, or do they have a new password?</p>
<p>Do their information return or not?</p>
</td>
<td width="257">
<p>Not all the attributes related to deleted users are retrieved. However, their password is replaced with a default password. In case of inconsistency, a non-blocking error occurs in the script, preventing the user from being set with attributes that point to non-existent object.</p>
<p>If the user has the “Ensure” attribute set to “Absent”, then they will not be retrieved.</p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if a user is deactivated but, in the backup, they are active?</strong></p>
</td>
<td width="204">
<p>Do they get reactivated?</p>
</td>
<td rowspan="2" width="257">
<p>We cannot know the state of users (active or deactivated) from the backup.</p>
<p>Depending on the situation, we can set the “Ensure” parameter to “Absent” or “Present” to ensure consistency between our tenant state and our export.</p>
<p>When set to “Absent”, the user will be considered as deactivated and not be deployed during the restoration process. When set to “Present”, the user will be considered as active and be deployed during the restoration process.</p>
<p>If we attempt to recover a user marked as &#8216;Absent&#8217; and they do not exist on Entra ID, we simply get a confirmation of their non-existence.</p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if a user is active but, in the backup, they are deactivated?</strong></p>
</td>
<td width="204">
<p>Do they get deactivated?</p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if we add a user, and the backup doesn&#8217;t contain this new user?</strong></p>
</td>
<td width="204">
<p>Does the user get deleted?</p>
<p>Do their data remain intact?</p>
</td>
<td width="257">
<p>There is no impact observed on the new user.</p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if we make a backup without changing the user?</strong></p>
</td>
<td width="204">
<p>If nothing changed, what happens?</p>
<p>If only an attribute of the user (like a group) was deleted, what happens?</p>
<p>If an attribute of the user (like a group) was added, what happens?</p>
<p>If an attribute was modified (like a password), what happens?</p>
<p>If a group they belonged to was deleted, what happens?</p>
<p>What happens with the licenses assigned to a user if a backup is made before the modification?</p>
<p>What happens if we modify a user’s role before making the backup?</p>
</td>
<td width="257">
<p>Because the username is used to associate attributes with the user, if it changes, the user cannot be found from the backup (unless it is also changed there).</p>
<p>The attributes from the backup overwrite the existing ones. Everything else remains untouched. Therefore, if an attribute is not included in the snapshot, it will stay as it was.</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"> </p>
<table>
<tbody>
<tr>
<td style="text-align: center;" colspan="3" width="623">
<p><strong>Groups</strong></p>
</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2" width="365">
<p><strong>Use cases</strong></p>
</td>
<td style="text-align: center;" width="257">
<p><strong>Findings</strong></p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if I delete a group and then restore a backup?</strong></p>
</td>
<td width="204">
<p>Does the group return with all the data that was attached to it?</p>
<p>Are the members of this group reintegrated?</p>
<p>Does the snapshot save who belongs to which group?</p>
<p>Are all groups saved in the snapshot?</p>
<p>Does the snapshot save the rights within the group?</p>
</td>
<td width="257">
<p>Only the security groups and Microsoft 365 groups with the right confidentiality label are backed-up.</p>
<p>The snapshot contains the members of the group and the owner but does not save the rights within the group.</p>
<p>It is necessary to redo the snapshot as the newly created group no longer has the same ID as the previous one. It won’t be recognized by the snapshot which will consider that the group does not exist.</p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if I back up a group that already exists but has modified attributes?</strong></p>
</td>
<td width="204">
<p>What happens if the name has changed?</p>
<p>What happens if a user has left the group after the snapshot?</p>
<p>What happens if there are new users after the snapshot?</p>
</td>
<td width="257">
<p>The backup overwrites the old attributes except for the name.</p>
</td>
</tr>
<tr>
<td width="161">
<p><strong>What happens if a group exists in the tenant but not in the backup?</strong></p>
</td>
<td width="204">
<p>Does it get deleted or impacted after restoration?</p>
</td>
<td width="257">
<p>There is no impact observed apart from the information defined in the configuration file.</p>
</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">The process required configuring a service account with the right permissions (<em>User.ReadWrite.All,</em> <em>Group.ReadWrite.All</em>) in Entra ID to interact with Microsoft Graph API for data export and import.</p>
<p style="text-align: justify;">These permissions enabled the service account to retrieve the necessary configuration and data from Entra ID and later re-import it.</p>
<p style="text-align: justify;">Result of the PoC Microsoft 365 DSC</p>
<p style="text-align: justify;">As a result of these tests, we were able to gather conclusive information on the solution’s benefits and limitations. On the positive side:</p>
<ul>
<li><strong>Granular Configuration Selection: </strong>The solution allows precise targeting of configurations for backup, enabling users to select specific settings.</li>
<li><strong>Recovery without deletion: </strong>During recovery, current users and groups are retained, preventing accidental deletion.</li>
<li><strong>Overwrite of Outdated Attributes: </strong>Backed-up attributes replace the old ones.</li>
<li><strong>Language of the Data Storage: </strong>Data is stored in JSON format, making it easy to manipulate and modify backup files.</li>
<li><strong>Automation Capabilities: </strong>Once the necessary tools are installed, the solution is easy to automate.</li>
<li><strong>Monitoring and Alerts: </strong>Microsoft 365 DSC can be used to monitor data consistency and receive alerts in the event of suspicious changes</li>
<li><strong>Snapshot Versions management: </strong>It enables easy maintenance and administration of multiple snapshot versions</li>
<li><strong>Detailed Logging Functionality: </strong>It offers the possibility to generate highly detailed logs, providing records of all operations for enhanced oversight.</li>
</ul>
<p style="text-align: justify;">Despite these advantages, the study revealed several limitations:</p>
<ul>
<li><strong>Incomplete Data in Backup: </strong>The backup process does not capture all attributes, leading to potential loss of important information.</li>
<li><strong>Backup Size Limit: </strong>The backup size is capped at 11MB, which may be insufficient for larger configurations or datasets.</li>
<li><strong>Deactivation Status Not Captured: </strong>Snapshots do not store deactivation statuses for users, potentially re-enabling disabled users during recovery.</li>
<li><strong>Unencrypted Data and Credentials: </strong>Security concerns arise from data and credentials being stored unencrypted, posing risks to sensitive information.</li>
<li><strong>Object IDs’ Loss: </strong>During imports, object IDs are lost, causing recreated objects to have new IDs, which can lead to duplicate entries in subsequent imports.</li>
<li><strong>Privileged Service Principal: </strong>The service principal involved has elevated privileges, increasing the risk of security vulnerabilities if not properly managed.</li>
</ul>
<p style="text-align: justify;">It is important to note that this tool does not really support “restoration” as it is possible to re-create objects, but it does not ensure service restoration and continuity. The reason being that it currently cannot restore links between new ID objects and applications, which is an issue native to Entra ID.</p>
<p style="text-align: justify;">Our opinion about Microsoft 365 DSC</p>
<p style="text-align: justify;">Microsoft 365 DSC is a great tool when it comes to basic uses and documentation as it is simple to use and to deploy on test environments. It is also quite efficient as a monitoring tool thanks to its version control and detailed logs. However, it is not adapted to large environments because of the limited scalability, the poor user experience and security issues related to configurations and credentials. It can also lead to inconsistencies or duplication as object IDs that can be referenced elsewhere are unrecoverable.</p>
<p style="text-align: justify;">Additional solutions may be required such as scripting for handling configuration files and ensuring the consistency of the modifications, as well as well-defined encryption and backup processes. Therefore, we recommend always carefully evaluating the specific needs, planning additional developments and mainly using the solution for supervision and testing purposes.</p>
<p style="text-align: justify;">Given the limitations of Microsoft&#8217;s open-source tools, it could be worthwhile to explore what third-party vendors, such as Semperis or Quest who are pure players on the subject, have to offer. These alternatives might address some of the challenges related to scalability, reliability and security, providing options that better suit larger environments. It is important to remain open to these possibilities and evaluate them based on the specific requirements of your organization.</p>
<p style="text-align: justify;"> </p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2025/07/resilience-entra-id/">Resilience Entra ID</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/en/2025/07/resilience-entra-id/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Enterprise Access Model (2/2): What are the solutions to secure the Control Plane </title>
		<link>https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-2-2-what-are-the-solutions-to-secure-the-control-plane/</link>
					<comments>https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-2-2-what-are-the-solutions-to-secure-the-control-plane/#respond</comments>
		
		<dc:creator><![CDATA[Clément Guillemare]]></dc:creator>
		<pubDate>Fri, 31 Jan 2025 15:11:04 +0000</pubDate>
				<category><![CDATA[Focus]]></category>
		<category><![CDATA[CICD]]></category>
		<category><![CDATA[cloud security]]></category>
		<category><![CDATA[compromise]]></category>
		<category><![CDATA[control plane]]></category>
		<category><![CDATA[IT support]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=25229</guid>

					<description><![CDATA[<p>In the first article of this series, we explored the foundation of Microsoft’s Enterprise Access Model (EAM), focusing on the critical task of scoping the Control Plane to safeguard cloud administration. We delved into the evolving security landscape, where the...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-2-2-what-are-the-solutions-to-secure-the-control-plane/">Enterprise Access Model (2/2): What are the solutions to secure the Control Plane </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="text-align: justify;"><span data-contrast="auto">In the first article of this series, we explored the foundation of Microsoft’s Enterprise Access Model (EAM), focusing on the critical task of scoping the Control Plane to safeguard cloud administration. We delved into the evolving security landscape, where the traditional AD 3-tiers model is no longer sufficient for the complexities and dependencies of cloud environments. The shift to the cloud has introduced new risks, particularly the global compromise originating from a single weak point of the Control Plane. Then, we emphasized the importance of identifying and isolating key components whose compromise could lead to a global compromise of Entra ID. </span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">In this second article, we will analyze practical attack scenarios that threaten the Control Plane and provide actionable recommendations to mitigate these risks. Specifically, we will explore three common attack scenarios that pose significant threats to the control plane: IT Support compromise, Control Plane Administrator Laptop compromise and CI/CD compromise. By understanding these attack vectors and implementing robust security measures, you can significantly enhance your cloud environment&#8217;s resilience against potential compromises.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> </span></p>
<h2><b><span data-contrast="auto">IT support compromise</span></b><span data-ccp-props="{}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">Imagine a scenario where the account of a member of the IT support is compromised. This might occur through a phishing attack, social engineering, or even a credential stuffing attempt. Such accounts often can reset passwords, including those of very high-privilege users, like Application Administrator or an Azure’s </span><i><span data-contrast="auto">Owner</span></i><span data-contrast="auto"> at root level, thereby gaining unauthorized access to critical resources from Entra ID to the Cloud to On-premises to SaaS.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> <img decoding="async" class="aligncenter size-full wp-image-25220" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/1-IT-support-compromise-scenario.jpg" alt="1-IT-support-compromise-scenario" width="930" height="417" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/1-IT-support-compromise-scenario.jpg 930w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/1-IT-support-compromise-scenario-426x191.jpg 426w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/1-IT-support-compromise-scenario-71x32.jpg 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/1-IT-support-compromise-scenario-768x344.jpg 768w" sizes="(max-width: 930px) 100vw, 930px" /></span></p>
<p style="text-align: justify;"><span data-contrast="auto">This type of attack illustrates a critical point we discussed in the first article: the need to scope and isolate the control plane effectively. The help desk, while essential for everyday operations, must be rigorously segregated from high-privilege administrative functions. The lack of such separation can allow an attacker to pivot from a compromised help desk account to a Global Admin role.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">To mitigate this risk, organizations must implement a series of strategic defenses:</span><span data-ccp-props="{}"> </span></p>
<ul style="text-align: justify;">
<li data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">First, isolating control plane accounts from those managed by IT support is essential. This ensures that even if a help desk account is compromised, it cannot be used to access or manipulate high-privilege accounts. </span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Second, using cloud-only accounts dedicated to control plane tasks reduces the likelihood of legacy systems being exploited as an entry point. </span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="" data-font="Symbol" data-listid="6" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">Third, coupling these accounts with phishing-resistant Multi-Factor Authentication (MFA), Just-In-Time admin (JIT), robust identity governance and conditional access policies, strict workstation conformity creates a multi-layered defense that significantly diminishes the risk of such an attack.</span><span data-ccp-props="{}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="auto">This scenario underscores the importance of viewing every account as a potential threat vector. By enforcing strict segregation and controls, you can ensure that your control plane remains secure, even if a lower-tier account is compromised.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> </span></p>
<h2><b><span data-contrast="auto">Control Plane Admin’s Laptop compromise</span></b><span data-ccp-props="{}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">Now, consider </span><span data-contrast="auto">a situation where the </span><span data-contrast="auto">attacker successfully compromises Intune’s </span><span data-contrast="auto">Mobile Device Manager (MDM) admin account</span><span data-contrast="auto">. With this access, the attacker gains control over Intune admin portal, allowing him to manipulate the laptop of a control plane admin. He can deploy malicious configurations, install backdoors, or directly connect to the admin’s laptop (Remote Help). This access turns the admin’s laptop into a powerful tool for further exploitation, granting the attacker the ability to execute commands, exfiltrate sensitive data, and manipulate cloud resources without the need for additional sophisticated hacking.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> <img decoding="async" class="aligncenter size-full wp-image-25222" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/2-Control-plane-administration-workstation-compromise-scenario.jpg" alt="2-Control-plane-administration-workstation-compromise-scenario." width="925" height="414" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/2-Control-plane-administration-workstation-compromise-scenario.jpg 925w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/2-Control-plane-administration-workstation-compromise-scenario-427x191.jpg 427w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/2-Control-plane-administration-workstation-compromise-scenario-71x32.jpg 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/2-Control-plane-administration-workstation-compromise-scenario-768x344.jpg 768w" sizes="(max-width: 925px) 100vw, 925px" /></span></p>
<p style="text-align: justify;"><span data-contrast="auto">This scenario reminds us of a key principle from the first article: cloud security must be approached holistically. It is not just about securing identities but also ensuring that the devices used to access the Control Plane are secured. In this case, the Control Plane admin’s laptop becomes a critical asset that, if compromised, could undermine even the most sophisticated cloud defences.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">To prevent such an outcome, organizations need to integrate admin workstations in the Control Plane. At a minimum, devices used for administrative tasks must be tightly controlled through dedicated MDM policies, ensuring strict access controls, encryption, and continuous monitoring. However, for higher-risk scenarios, leveraging Privileged Access Workstations (PAWs) is essential. PAWs are isolated, hardened machines dedicated solely to administrative activities. They operate under a far stricter security regime than standard devices—limited internet access, dedicated management, and enhanced monitoring—ensuring that they cannot easily become a tool for attackers.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">This scenario demonstrates that endpoint security is inseparable from cloud security. By securing the very devices that control your cloud infrastructure, you reduce the chances of a breach originating from compromised endpoints, ensuring that your Control Plane remains protected against even the most sophisticated attacks.</span><span data-ccp-props="{}"> </span></p>
<p> </p>
<h2><b><span data-contrast="auto">CI/CD compromise</span></b><span data-ccp-props="{}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">As cloud environments rely heavily on automation, CI/CD pipelines for managing infrastructure become prime targets for attackers. Imagine a scenario where an attacker gains access to a DevOps engineer’s account via phishing or credential theft. With this foothold, he pushes malicious Infrastructure as Code (IaC) change into a Git repository, knowing this will trigger an automated Azure pipeline. The pipeline validates, plans, and deploys the infrastructure on Azure, leading to the destruction or alteration of key Azure resources, i.e. the foundations of the Landing Zone. Alternatively, the attacker modifies the Azure Pipeline’s YAML configuration. By doing so, he causes the pipeline to leak a service principal secret in the logs or debug console, which is then used to make unauthorized Graph API calls. Abusing the overprivileged identity, the attacker can escalate its privilege, compromising Entra ID identities or Office 365 accounts. Runners also play a crucial role in the CICD pipeline. They are agents responsible for executing jobs in the pipeline. They can be hosted and maintained by the Cloud Provider or hosted on-premises. As with any server, their compromise can be used as a pivot point to bounce back to the Landing Zone (e.g., token stealing) or other associated services.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-25224" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/3-CICD-compromise-scenario.jpg" alt="3-CICD-compromise-scenario." width="932" height="387" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/3-CICD-compromise-scenario.jpg 932w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/3-CICD-compromise-scenario-437x181.jpg 437w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/3-CICD-compromise-scenario-71x29.jpg 71w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/3-CICD-compromise-scenario-768x319.jpg 768w" sizes="auto, (max-width: 932px) 100vw, 932px" /></span></p>
<p style="text-align: justify;"><span data-contrast="auto">This scenario illustrates interconnectedness of cloud security. The CI/CD pipeline, often seen as a back-office function, is, in reality, deeply integrated with the Control Plane. Its compromise can lead to widespread, devastating consequences to the very foundation of your cloud operations.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">To protect against such threat, it is crucial to isolate the Control Plane’s pipeline whose purpose is to build the Landing Zone from project pipelines. Then, one should apply the principle of least privilege, ensuring that accounts and runners within the pipeline have only the permissions they need to perform their tasks. For example, to limit runner permissions we can use federated identity and request OpenID Connect (OIDC) tokens, which provide scoped and temporary access to Cloud Services like Azure. Additionally, adopting automated security practices such as Configuration as Code (CaC) or Policy as Code (PaC), can help reduce human error and ensure consistent security across your deployments.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">In cloud security, every process and every tool must be viewed through the lens of potential risk. The CI/CD pipeline is no exception. By securing this critical component, you not only protect your control plane but also ensure the stability and security of your entire cloud infrastructure. This holistic approach to cloud security is what will ultimately keep your operations running smoothly, even in the face of sophisticated attacks.</span><span data-ccp-props="{}"> </span></p>
<p> </p>
<h2 style="text-align: justify;"><b><span data-contrast="auto">Synthesis</span></b><span data-ccp-props="{}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">In this article, we have examined three attack scenarios that threaten the security of the control plane in cloud environments: IT support compromise, Control Plane Admin’s laptop compromise, and CI/CD pipeline compromise. </span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Each of these scenarios highlights the importance of a multi-layered security approach that includes both technical and organizational measures. We propose a four-step strategy designed to design your Control Plane and secure it against potential attacks:</span><span data-ccp-props="{}"> </span></p>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Aptos" data-listid="5" data-list-defn-props="{&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="0" data-aria-level="1"><b><span data-contrast="auto">Step 1: define what is systemic for your infrastructure:</span></b><span data-contrast="auto"> identify the critical components and accounts within your control plane that, if compromised, could lead to a global disruption.</span></li>
<li data-leveltext="-" data-font="Aptos" data-listid="5" data-list-defn-props="{&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="0" data-aria-level="1"><b><span data-contrast="auto">Step 2: assess your current risk with a security audit:</span></b><span data-contrast="auto"> conduct regular security audits to evaluate the current state of your control plane security. This will help you identify vulnerabilities and prioritize remediation efforts.</span></li>
<li data-leveltext="-" data-font="Aptos" data-listid="5" data-list-defn-props="{&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="0" data-aria-level="1"><b><span data-contrast="auto">Step 3: define a roadmap to isolate and secure the assets most at risk:</span></b><span data-contrast="auto"> based on your audit findings, develop a clear roadmap for securing the most critical assets. This should include timelines, resource allocation, and specific actions to mitigate identified risks.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Aptos" data-listid="5" data-list-defn-props="{&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="0" data-aria-level="1"><b><span data-contrast="auto">Step 4: prepare for cloud eraser scenarios:</span></b><span data-contrast="auto"> consider worst-case scenarios where entire sections of your cloud infrastructure might be compromised or disabled. Develop contingency plans and ensure that backups and disaster recovery processes are in place.</span><span data-ccp-props="{}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="auto">By following these recommendations, you can build a robust defense against potential threats to your control plane, ensuring that your cloud environment remains secure and resilient.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"> </p>
<p style="text-align: justify;">Thank you to <strong>Louis CLAVERO</strong> for contributing to this article.</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-2-2-what-are-the-solutions-to-secure-the-control-plane/">Enterprise Access Model (2/2): What are the solutions to secure the Control Plane </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-2-2-what-are-the-solutions-to-secure-the-control-plane/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Enterprise Access Model (1/2): How to scope your Control Plane to secure your Cloud Administration and prevent a global Cloud compromise</title>
		<link>https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-1-2-how-to-scope-your-control-plane-to-secure-your-cloud-administration-and-prevent-a-global-cloud-compromise/</link>
					<comments>https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-1-2-how-to-scope-your-control-plane-to-secure-your-cloud-administration-and-prevent-a-global-cloud-compromise/#respond</comments>
		
		<dc:creator><![CDATA[Clément Guillemare]]></dc:creator>
		<pubDate>Mon, 27 Jan 2025 06:38:19 +0000</pubDate>
				<category><![CDATA[Focus]]></category>
		<category><![CDATA[cloud administration]]></category>
		<category><![CDATA[cloud security]]></category>
		<category><![CDATA[control plane]]></category>
		<category><![CDATA[enterprise access model]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=25214</guid>

					<description><![CDATA[<p>  This article is the first of a series of 2, tackling the implementation of the Enterprise Access Model, an administration model proposed by Microsoft to secure the administration of Cloud environments.   Today, most companies use public cloud to host...</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-1-2-how-to-scope-your-control-plane-to-secure-your-cloud-administration-and-prevent-a-global-cloud-compromise/">Enterprise Access Model (1/2): How to scope your Control Plane to secure your Cloud Administration and prevent a global Cloud compromise</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p style="text-align: justify;"> </p>
<p style="text-align: justify;"><i><span data-contrast="auto">This article is the first of a series of 2, tackling the implementation of the Enterprise Access Model, an administration model proposed by Microsoft to secure the administration of Cloud environments. </span></i><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Today, most companies use public cloud to host numerous workloads from business to functional services. Although this brings benefits, the Cloud also introduces new paradigms, which need to be understood clearly in order to be secured.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Historically, enterprises have relied on a 3-tier model for securing Active Directory environments. This model segments the network into three distinct tiers: Tier 0 for highly sensitive systems and data, Tier 1 for server administration, and Tier 2 for end-user workstations and devices. While this model has proven effective in on-premises environments, the shift to cloud-based infrastructures requires a reevaluation of its applicability.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">This article delves into a recent, concerning trend: the global compromise of Entra ID, originating from the compromise of a helpdesk account. Such an attack can have severe repercussions, even more so than an AD Domain Administrator compromise. We will explore the mechanisms behind these attacks, their implications, and, most importantly, how we should protect against this kind of privilege escalation and implement an adapted and secured administration model.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> </span></p>
<h2><b><span data-contrast="auto">Understanding Entra ID, Active Directory, and Azure Permissions</span></b><span data-ccp-props="{}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">As shown in </span><span data-contrast="auto">Figure 1</span><span data-contrast="auto">, Active Directory and Entra ID (formerly Azure Active Directory) are two Identity services with different structural properties and IAM protocols. While Entra ID focuses on identity and access management across both cloud and on-premises environments, providing authentication and user management, Azure permissions extend to the broader management of cloud infrastructure and services. Understanding the distinctions and interconnections between these tools is essential for maintaining robust security and effective access control in modern enterprise environments.</span><span data-ccp-props="{}"> </span><i><span data-contrast="none"><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-25202" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-1-Differences-cles-entre-Active-Directory-et-Entra-ID.jpg" alt="Figure 1: Active Directory and Entra ID key differences" width="538" height="300" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-1-Differences-cles-entre-Active-Directory-et-Entra-ID.jpg 538w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-1-Differences-cles-entre-Active-Directory-et-Entra-ID-343x191.jpg 343w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-1-Differences-cles-entre-Active-Directory-et-Entra-ID-71x39.jpg 71w" sizes="auto, (max-width: 538px) 100vw, 538px" /></span></i></p>
<p style="text-align: center;"><span data-ccp-props="{}"> <i>Figure </i><i>1</i><i>: Active Directory and Entra ID key differences</i></span></p>
<p> </p>
<p style="text-align: justify;"><span data-contrast="auto">Between Active Directory, Entra ID, and Azure- each manages its own permission model:</span><span data-ccp-props="{}"> </span></p>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Aptos" data-listid="26" data-list-defn-props="{&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="0" data-aria-level="1"><span data-contrast="auto">Active Directory uses a unified permission model for all its objects, from users to servers.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Aptos" data-listid="26" data-list-defn-props="{&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="0" data-aria-level="1"><span data-contrast="auto">Entra ID uses Role-Based Access Control (RBAC) to manage its tenant&#8217;s objects (e.g., users, devices, applications).</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Aptos" data-listid="26" data-list-defn-props="{&quot;335551671&quot;:0,&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Aptos&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="0" data-aria-level="1"><span data-contrast="auto">Azure Resource Manager (RM) uses RBAC to manage Azure resources</span><span data-ccp-props="{}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="auto">However, there is a bridge between Entra ID and Azure RM thanks to the single tenant’s relationship to an Azure organization: the Entra ID’s Global Admin role is assigned by default the User Access Administrator role in the Azure RM service. As a result, it can grant itself full permissions in Azure. </span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Although there is a link between Azure and Entra ID, it&#8217;s important to remember that the roles in Entra ID and Azure RM can be assigned independently. For example, a standard Entra ID user with very limited permissions on Entra ID can hold the highest privileges in Azure RM, which is a critical point of vulnerability exploited in attacks.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Privilege escalation in Entra ID can lead to an extensive compromise of Azure RM (including all resources and infrastructures), Microsoft 365, workstations, Windows servers, cloud networks, and more.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">The most privileged roles in both systems are:</span><span data-ccp-props="{}"> </span></p>
<ul style="text-align: justify;">
<li data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="auto">Entra ID</span></b><span data-contrast="auto">: Global Administrator</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="" data-font="Symbol" data-listid="24" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Symbol&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><b><span data-contrast="auto">Azure RM</span></b><span data-contrast="auto">: Owner (which can be scoped from Management Groups down to resources)</span><span data-ccp-props="{}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="auto">These significant differences mean that the concepts from the traditional AD 3-tier model cannot be directly applied to cloud environments. We must rethink and adapt these concepts to ensure they are relevant and effective in cloud-based contexts, particularly by adequately addressing the specific requirements and risks associated with cloud environments.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;335559685&quot;:1440}"> </span></p>
<h2><b><span data-contrast="auto">A real-life global Entra ID compromise</span></b><span data-ccp-props="{}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">To focus on Cloud Administration compromise and privilege escalation, a small number of hypotheses will be taken:</span><span data-ccp-props="{}"> </span></p>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Tahoma" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">The victim has an Entra ID tenant as Identity Provider.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">The victim</span><span data-contrast="auto"> uses Intune to manage its entire workstation fleet</span><span data-contrast="auto">.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">The victim has an Azure subscription for its Virtual Desktop Infrastructure activities.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">A helpdesk account is compromised (the source of the attack is not relevant, but it is important to note that this is a likely scenario that could have been the result of several different compromise like phishing, credential theft, workstation compromise, social engineering, etc.).</span><span data-ccp-props="{}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-ccp-props="{}"> </span></p>
<h3><b><span data-contrast="auto">1 Compromising a helpdesk account</span></b><span data-ccp-props="{&quot;335559685&quot;:1066,&quot;335559739&quot;:240,&quot;335559991&quot;:709}"> </span></h3>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Tahoma" data-listid="18" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><span data-contrast="auto">Following our last hypothesis, the attacker has gained control of a helpdesk account, that can reset passwords and MFA. </span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><b><span data-contrast="auto">2 Initial Attempt to Reset Global Administrator Account</span></b></h3>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">The attacker initially attempts to reset the Global Administrator account, seeking the quickest path to becoming the Global Administrator of Entra ID.</span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="1" data-aria-level="1"><span data-contrast="auto">This action is blocked by default by Microsoft. The Global Administrator role is a “privileged role”, and only specific privileged roles are authorized to reset its password or modify its attributes.</span> <span data-contrast="auto">Microsoft updates </span><a href="https://learn.microsoft.com/en-us/entra/identity/role-based-access-control/permissions-reference"><span data-contrast="none">here</span></a><span data-contrast="auto"> its list of privileged built-in Entra ID roles.</span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><b><span data-contrast="auto">3 Targeting a High-Value Standard User Account</span></b></h3>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">Restricted to resetting standard Entra ID user passwords, the attacker identifies a user with the username &#8220;VDI Admin”, who is the Owner of an Azure RM subscription used for workstation administration services.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="3" data-aria-level="1"><span data-contrast="auto">Despite MFA being enabled on the account, the attacker successfully resets both the password and MFA mechanisms, gaining access to the account.</span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><b><span data-contrast="auto">4 Searching the available subscription</span></b><span data-ccp-props="{}"> </span></h3>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><span data-contrast="auto">With the VDI Admin password reset, the attacker logs in and accesses the subscription. Through reconnaissance, they discover access to a key vault containing credentials for a service account.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="5" data-aria-level="1"><span data-contrast="auto">The service account is identified as having the &#8220;Intune Administrator&#8221; role in Entra ID.</span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><b><span data-contrast="auto">5 Utilizing Intune Administrator Privileges</span></b><span data-ccp-props="{}"> </span></h3>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><span data-contrast="auto">The attacker logs in as the Intune Administrator, gaining permissions related to workstation administration, including the ability to run scripts on any workstation.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="7" data-aria-level="1"><span data-contrast="auto">They deploy a script on the Global Administrator’s workstation to extract authentication cookies from the Global Administrator’s browser.</span><span data-ccp-props="{}"> </span></li>
</ul>
<h3><b><span data-contrast="auto">6 Compromising the Global Administrator Account</span></b></h3>
<ul style="text-align: justify;">
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="9" data-aria-level="1"><span data-contrast="auto">The attacker obtains the Global Administrator’s authentication cookies and uses them on their own workstation to impersonate the Global Administrator.</span><span data-ccp-props="{}"> </span></li>
<li data-leveltext="-" data-font="Tahoma" data-listid="21" data-list-defn-props="{&quot;335552541&quot;:1,&quot;335559685&quot;:720,&quot;335559991&quot;:360,&quot;469769226&quot;:&quot;Tahoma&quot;,&quot;469769242&quot;:[8226],&quot;469777803&quot;:&quot;left&quot;,&quot;469777804&quot;:&quot;-&quot;,&quot;469777815&quot;:&quot;hybridMultilevel&quot;}" aria-setsize="-1" data-aria-posinset="9" data-aria-level="1"><span data-contrast="auto">This grants the attacker control over the entire Microsoft Entra ID tenant, which includes compromising the Microsoft365 tenant, the Azure RM environments, and all other Microsoft cloud-based tools relying on Entra ID.</span><span data-ccp-props="{}"> </span></li>
</ul>
<p><img loading="lazy" decoding="async" class="aligncenter size-full wp-image-25204" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-2-Chemin-de-compromission-globale-du-Cloud-Azure-.jpg" alt="Figure 2: A global Cloud compromise path " width="573" height="358" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-2-Chemin-de-compromission-globale-du-Cloud-Azure-.jpg 573w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-2-Chemin-de-compromission-globale-du-Cloud-Azure--306x191.jpg 306w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-2-Chemin-de-compromission-globale-du-Cloud-Azure--62x39.jpg 62w" sizes="auto, (max-width: 573px) 100vw, 573px" /></p>
<p style="text-align: center;"><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">2</span></i><i><span data-contrast="none">: A global Cloud compromise </span></i><i><span data-contrast="none">path</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:200,&quot;335559740&quot;:240}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">By following these steps, the attacker, beyond being able to compromise the entire cloud infrastructure, can deeply affect a company&#8217;s business through unauthorized access to emails &amp; documents, backups, endpoints and corporate network. This attack demonstrates the critical importance of securing high privilege accounts that have permissions that could lead to a global compromise. </span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true}"> <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-25206" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-3-Impact-dune-compromission-du-Control-Plane-.jpg" alt="Figure 3 Impact of a compromise at the Control Plane level " width="599" height="288" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-3-Impact-dune-compromission-du-Control-Plane-.jpg 599w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-3-Impact-dune-compromission-du-Control-Plane--397x191.jpg 397w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-3-Impact-dune-compromission-du-Control-Plane--71x34.jpg 71w" sizes="auto, (max-width: 599px) 100vw, 599px" /></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">Impact of a compromise at the Control Plane level</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:200,&quot;335559740&quot;:240}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> </span></p>
<h2 style="text-align: justify;"><b><span data-contrast="auto">How to ensure this does not happen: Implement the Enterprise Access Model and scope your Control Plane</span></b><span data-ccp-props="{}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">As discussed in the first part, cloud directories, particularly Entra ID, exhibit key differences from Active Directory. Consequently, the traditional three-tier model requires adaptation to be fully effective in cloud environments. To address these challenges, Microsoft has introduced a new administration framework specifically designed for cloud environments: </span><a href="https://learn.microsoft.com/en-us/security/privileged-access-workstations/privileged-access-access-model"><span data-contrast="none">the Enterprise Access Model</span></a><span data-contrast="auto">.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> <img loading="lazy" decoding="async" class="aligncenter size-full wp-image-25208" src="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-4-LEnterprise-Access-Model.jpg" alt="Figure 4: The Enterprise Access Model " width="600" height="335" srcset="https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-4-LEnterprise-Access-Model.jpg 600w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-4-LEnterprise-Access-Model-342x191.jpg 342w, https://www.riskinsight-wavestone.com/wp-content/uploads/2025/01/Figure-4-LEnterprise-Access-Model-71x39.jpg 71w" sizes="auto, (max-width: 600px) 100vw, 600px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="none">Figure </span></i><i><span data-contrast="none">4</span></i><i><span data-contrast="none">: The Enterprise Access Model</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:200,&quot;335559740&quot;:240}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">While there are some modifications, the core concept remains the same: sensitive resources must be isolated to ensure that a compromise in one plane (formerly tier) does not lead to a compromise in another. This leads us to a crucial question: how should we scope our Control Plane within our Information System to effectively isolate it and mitigate the risks of a global compromise?</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">The answer lies in identifying the systemic components within our Information System — those whose compromise could lead to a widespread breach. Losing one project is far less critical than a global compromise of the entire Information System.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">In our cloud environment, numerous components interact to support projects, from CI/CD infrastructure and deployment pipelines to various IAM tools (such as Identity Providers like AD, Entra ID or Okta, IGA, etc.), along with cross-functional security tools (like EDR, Bastion, and MDM for example). While these are generic components likely present in many systems, there are also numerous environment-specific ones to consider.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">We must assess the impact of compromising high-privilege accounts within these components. For instance, if an attacker gains control of a high-privilege account for the CI/CD infrastructure, they could potentially alter the CI/CD processes and/or run a specific pipeline to deploy unauthorized changes in the cloud, which would allow them to gain global access. Thus, these high-privilege CI/CD accounts should be part of the Control Plane. Similarly, consider the EDR solution: if a high-privilege administrator can execute scripts across all workstations, potentially stealing authentication cookies, accessing critical data, or rendering all workstations inoperable, then this high-privilege account must also be included in the Control Plane.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">By carefully scoping and securing our Control Plane, we can significantly reduce the risk of a global compromise within our Information System.</span><span data-ccp-props="{}"> </span></p>
<p> </p>
<h2 style="text-align: justify;"><b><span data-contrast="auto">Synthesis</span></b><span data-ccp-props="{&quot;335559685&quot;:0}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">As we have seen, the risk of global compromise in a Cloud environment is significant. While cloud computing offers enhanced flexibility, resilience, and cost optimization, it also introduces new paradigms and operational methodologies that must be mastered to ensure security.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">The traditional 3-tier model from the on-premises world, particularly from Active Directory, is not suited for organizing administration in the cloud. To address this, Microsoft has introduced the Enterprise Access Model (EAM). This model expands the 3 tiers into five distinct planes, with the most critical being the Control Plane. However, just as with the 3-tier model, isolation measures are crucial in the EAM, requiring the identification of critical components and high-privilege accounts within your Information System as a top priority for cloud security.</span><span data-ccp-props="{}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">The next article in this series will provide concrete examples of attack scenarios that can lead to a global compromise of cloud environments. It will also include security recommendations to enhance cloud administration and prevent such risks from becoming security incidents.</span><span data-ccp-props="{}"> </span></p>
<p> </p>
<p> </p>
<p> </p>
<p style="text-align: justify;"><span data-ccp-props="{}"> Thank you to <strong>Louis CLAVERO</strong> for contributing to this article.</span></p>
<p> </p>
<p> </p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-1-2-how-to-scope-your-control-plane-to-secure-your-cloud-administration-and-prevent-a-global-cloud-compromise/">Enterprise Access Model (1/2): How to scope your Control Plane to secure your Cloud Administration and prevent a global Cloud compromise</a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/en/2025/01/enterprise-access-model-1-2-how-to-scope-your-control-plane-to-secure-your-cloud-administration-and-prevent-a-global-cloud-compromise/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>   How to build a coding game around Public Cloud Security step by step?    </title>
		<link>https://www.riskinsight-wavestone.com/en/2024/06/how-to-build-a-coding-game-around-public-cloud-security-step-by-step/</link>
					<comments>https://www.riskinsight-wavestone.com/en/2024/06/how-to-build-a-coding-game-around-public-cloud-security-step-by-step/#respond</comments>
		
		<dc:creator><![CDATA[Clément Guillemare]]></dc:creator>
		<pubDate>Thu, 13 Jun 2024 12:37:33 +0000</pubDate>
				<category><![CDATA[Cybersecurity & Digital Trust]]></category>
		<category><![CDATA[cybersecurity]]></category>
		<category><![CDATA[public cloud]]></category>
		<category><![CDATA[students]]></category>
		<category><![CDATA[wavegame]]></category>
		<guid isPermaLink="false">https://www.riskinsight-wavestone.com/?p=23299</guid>

					<description><![CDATA[<p>Step 0: context and objectives  Wavegame is a Wavestone inter-school challenge designed to promote cybersecurity expertise and the consulting profession created in 2019. In its 2023 edition, 33 teams competed in a hands-on exercise focused on securing an AWS Infrastructure....</p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2024/06/how-to-build-a-coding-game-around-public-cloud-security-step-by-step/">   How to build a coding game around Public Cloud Security step by step?    </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h2 style="text-align: justify;"><b><span data-contrast="none">Step 0:</span></b><span data-contrast="none"> context and objectives</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559740&quot;:278}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">Wavegame is a Wavestone inter-school challenge designed to promote cybersecurity expertise and the consulting profession</span> <span data-contrast="auto">created in 2019</span><span data-contrast="auto">. In its 2023 edition, 33 teams competed in a hand</span><span data-contrast="auto">s</span><span data-contrast="auto">-on exercise focused on securing an AWS Infrastructure.</span></p>
<p style="text-align: justify;"><span data-contrast="auto">The challe</span><span data-contrast="auto">n</span><span data-contrast="auto">ge </span><span data-contrast="auto">was split in</span><span data-contrast="auto">to</span><span data-contrast="auto"> 2</span><span data-contrast="auto"> tracks, </span><span data-contrast="auto">the first being </span><span data-contrast="auto">dedicated to Business major</span><span data-contrast="auto">s</span><span data-contrast="auto"> and the </span><span data-contrast="auto">later </span><span data-contrast="auto">for Computer Science major</span><span data-contrast="auto">s.</span><span data-contrast="auto"> The technical track </span><span data-contrast="auto">consisted </span><span data-contrast="auto">of </span><span data-contrast="auto">2 qualifying </span><span data-contrast="auto">exercises</span><span data-contrast="auto"> and a final event. The second </span><span data-contrast="auto">exercise</span><span data-contrast="auto"> is the topic of this article.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">As part of a futuristic scenario, the students, acting as consultants, are hired by France Fusion, a company operating the country’s first nuclear fusion plants. France Fusion is developing a Cloud-based monitoring platform to analyze data from its proprietary industrial equipment. For this purpose, it uses an ElasticSearch database.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Initially started independently as a Proof of Concept (PoC), detached from the security department, a team of developers succeeded in deploying a functional architecture on AWS. The students are then tasked with strengthening the infrastructure&#8217;s security, in accordance with France Fusion&#8217;s Public Cloud policies.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">The technical challenge was significant: deploying a self-service, vulnerable infrastructure across 33 AWS accounts. This also meant granting students full admin access and necessary permissions to make direct modifications from the AWS console, all within </span><span data-contrast="auto">l</span><span data-contrast="auto">imited budget considering the number of participants. In this article, we will share the recipe that made this challenge a reality.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<h2 style="text-align: justify;"><b><span data-contrast="none">Step 1:</span></b><span data-contrast="none"> draw up an architecture with an educational dimension</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559740&quot;:278}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">Before delving into the development of the coding game, </span><span data-contrast="none">we had to keep in mind 4 constraints:</span><span data-contrast="auto"> </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<ul>
<li><b><span data-contrast="auto">Target Audience:</span></b><span data-contrast="auto"> as our participants are students with heterogeneous backgrounds in the Cloud, it is important to take this diversity into account. Therefore, we focused on using essential AWS services only (e.g., S3, EC2, Lambda), because such resources are well-documented, and students may already have used them in class or as part of personal projects.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="2" data-aria-level="1"><b><span data-contrast="auto">Theme:</span></b><span data-contrast="auto"> our objective was to create an architecture similar to a client environment. The immersion and realism of the interface was a key to student engagement. We therefore opted for an ELK stack on an EC2 instance as it seemed appropriate for a proof-of-concept with a monitoring dimension.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
<li><b><span data-contrast="auto">Costs:</span></b><span data-contrast="auto"> as the infrastructure would be available to students for two weeks and replicated across 33 AWS accounts, it was in our interest to optimize costs. To achieve this, we used AWS Pricing Calculator to estimate costs, </span><span data-contrast="auto">and </span><span data-contrast="auto">opted for a low-cost region</span><span data-contrast="auto"> and built the </span><span data-contrast="auto">infrastrucure</span><span data-contrast="auto"> around pay-as-you-go services such as Lambda functions</span><span data-contrast="auto">.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="4" data-aria-level="1"><b><span data-contrast="auto">Deadlines:</span></b><span data-contrast="auto"> to cope with a tight schedule, we have defined objectives and deadlines with enough margin to overcome any technical constraints. The main stages of the project include development, testing, account creation and deployment.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Considering the project constraints, we have sketched the &#8220;vulnerable&#8221; architecture schema outlined below (</span><i><span data-contrast="auto">Figure 1</span></i><span data-contrast="auto">). The industrial equipment is simulated by a Lambda (Datalake) which generates logs and sends them to an S3 bucket (Datalake). A second Lambda (ELK) is then triggered by an S3 notification. It will retrieve the log file and send it to the ElasticSearch database (Docker image within an EC2 instance). Finally, the Kibana interface is accessible from Internet for visualization and log analysis.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:0,&quot;335559740&quot;:278}"> <img loading="lazy" decoding="async" class="aligncenter wp-image-23293 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="auto, (max-width: 1477px) 100vw, 1477px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="auto">Figure </span></i><i><span data-contrast="auto">1</span></i><i><span data-contrast="auto"> :</span></i><i><span data-contrast="auto"> initial architecture diagram of the Wavegame 2023</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:851,&quot;335559739&quot;:160,&quot;335559740&quot;:278,&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;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<h2><b><span data-contrast="none">Step 2:</span></b><span data-contrast="none"> picture a secure architecture based on Public Cloud policies</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559740&quot;:278}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">Now that we have our initial infrastructure, the next step is to design Public Cloud policies that will define the security requirements and provide evaluation criteria. To achieve this, we have fine-tuned security best practices implemented by clients, here are some examples:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<ul>
<li><span data-contrast="auto">AWS-01: All AWS resources must use IAM roles that are specific to their needs and that respect the principle of least privilege.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="6" data-aria-level="1"><span data-contrast="auto">AWS-02: All AWS resources must be connected and/or attached to a VPC.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
<li><span data-contrast="auto">AWS-03: EC2 instances must not be publicly accessible through Internet.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="8" data-aria-level="1"><span data-contrast="auto">AWS-04: All infrastructure logs (AWS Lambda and EC2) generated by AWS services must be sent to CloudWatch.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
<li><span data-contrast="auto">AWS-05: Root EBS volume must be encrypted on all EC2 instances.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="auto">AWS-06: Data stored on S3 buckets must be encrypted.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="auto">From the Public Cloud policies, we came up with the following secure architecture (</span><i><span data-contrast="auto">Figure 2</span></i><span data-contrast="auto">):</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> <img loading="lazy" decoding="async" class="aligncenter wp-image-23295 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="auto, (max-width: 1366px) 100vw, 1366px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="auto">Figure </span></i><i><span data-contrast="auto">2</span></i><i><span data-contrast="auto">:</span></i><i><span data-contrast="auto"> target architecture diagram of the Wavegame 2023</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:851,&quot;335559739&quot;:160,&quot;335559740&quot;:278,&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="auto">To summarize network design, all compute resources are placed in a private subnet, the S3 bucket is reachable through a VPC endpoint, the ELK monitoring platform is solely accessed through a jump host Virtual Machine (VM). CloudWatch and CloudTrail services are activated for monitoring and supervision purposes. Finally, some security groups are attached to resources to only allow incoming communications that are strictly necessary. </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<h2><b><span data-contrast="none">Step 3:</span></b><span data-contrast="none"> move from design to code in Terraform</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559740&quot;:278}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">To build the coding game, we created and maintained 2 distinct architectures, represented by 2 distinct branches in Github. The first one being the vulnerable architecture which will be deployed initially, and the second being the solution that acts as a warranty of feasibility. This &#8220;warranty of feasibility&#8221; means that 3 mandatory points are met:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="auto">The IAM permissions set are enough to allow the system to work properly.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
<li><span data-contrast="auto">The final configuration of the infrastructure must consider objects lifecycles and their interactions.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="auto">The expertise required to complete the coding game must be adapted to students&#8217; skills development over a 2-week challenge period.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="auto">Regarding the development lifecycle, rather than following a linear development approach, where we would first create the code for the initial infrastructure, then for the target infrastructure, we opted for an agile approach with the definition of functional blocks. To illustrate this idea, the block </span><i><span data-contrast="auto">“Lambda (ELK) -&gt; S3”</span></i><span data-contrast="auto"> aims to design a Lambda that will request an S3 bucket as soon as an S3 PutObject notification is created, with or without a VPC endpoint. Although we must maintain 2 Terraform configurations simultaneously, this approach gives us greater agility in reassessing our technical choices. To further reduce redundancy and ensure maintainability, we focused on developing Terraform modules such as lambda and S3.  </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">To automate the deployment of resources within our sandbox and student accounts, we created a simple CI/CD in Github. It is constituted of 2 Github Actions: one workflow to terraform apply, the other to terraform destroy. In a YAML syntax, Github Actions allow you to execute AWS or Hashicorp built-in tasks. </span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">One advantage of such workflow is that you can store AWS access credentials in Github Secrets instead of source code or local file. Moreover, by storing Terraform states in a S3 bucket it facilitates collaboration. A Terraform state is a file that keeps track of the current configuration. Each developer sets up his S3 key in his Github branch that will become the reference of his state.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">As the development progressed, we realized how wide the gap was between the initial and the target architecture. The main reason is that IAM and network logics are very different. As a result, it has become essential to carry out tests under real conditions, i.e. from the AWS console, to identify breaking changes, blocking policies, and to assess complexity. As an example, one of the tests reminded us that the startup script of an EC2 called user-data is not persistent after a reboot. Therefore, this behavior prevented the implementation of the EBS root volume encryption security policy (AWS-05).</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<h2><b><span data-contrast="none">Step 4:</span></b><span data-contrast="none"> securely deploy the environments</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559740&quot;:278}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">In the context of the challenge, we were about to grant students privileged access to an environment for two weeks where constant individual monitoring or assistance would not be feasible. While this approach represents a better learning opportunity, it raises specific security scenarios that we must anticipate and mitigate. Among these, budget overrun was a major concern, given the unrestricted access and resources at their disposal. Another significant threat is the potential for students to ascend within the organization, gaining access systems or messing with each other. Lastly, the risk of resource misappropriation for unauthorized or malicious purposes is not negligible. Each of these threats requires careful consideration to ensure a secure and responsible deployment.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">For this coding game, we opted for a multi-account AWS design to isolate each team environments. With AWS Organization, we achieved a simplified administration, improved cost control, and were able to enforce guardrails using Security Control Policies (SCP). In Figure 3, we present our AWS Organization, made of an admin account and an OU Wavegame that hosts the teams accounts where the infrastructure is deployed. We implemented 3 specific SCPs to:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="auto">Restrict access to AWS services outside the designated region, us-east-1, by defining a list of authorized operations.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
<li><span data-contrast="auto">Enforce the use of Amazon EC2 instance types t2.micro or t2.large, a constraint related to the ElasticSearch (ELK) environment.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="auto">Deny students accounts from deleting or modifying a resource that has “</span><i><span data-contrast="auto">protected</span></i><span data-contrast="auto">” tag.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
</ul>
<p style="text-align: justify;"><span data-contrast="auto">Additionally, to better manage costs, especially for a two-week duration, we set up a Lambda function to automatically shut down EC2 instances after two hours of activity. To prevent any unauthorized alterations by the students, this Lambda function was one of the resources secured with the “</span><i><span data-contrast="auto">protected</span></i><span data-contrast="auto">” tag.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:567,&quot;335559739&quot;:160,&quot;335559740&quot;:278,&quot;335559991&quot;:426}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134245418&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> <img loading="lazy" decoding="async" class="aligncenter wp-image-23297 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="auto, (max-width: 826px) 100vw, 826px" /></span></p>
<p style="text-align: center;"><i><span data-contrast="auto">Figure </span></i><i><span data-contrast="auto">3</span></i><i><span data-contrast="auto">:</span></i><i><span data-contrast="auto"> AWS Organization of the Wavegame 2023</span></i><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559685&quot;:851,&quot;335559739&quot;:160,&quot;335559740&quot;:278,&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="auto">Finally, in addition to our IAM user being administrator of the OU Wavegame via an assumable IAM role, we created an IAM user with the AdministratorAccess role for each AWS account, to give students autonomy during the challenge. In particular so they have enough rights to create nominative accounts.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<h2> </h2>
<h2><b><span data-contrast="none">Step 5:</span></b><span data-contrast="none"> prepare for the Run and the correction</span><span data-ccp-props="{&quot;134245418&quot;:true,&quot;134245529&quot;:true,&quot;201341983&quot;:0,&quot;335559738&quot;:240,&quot;335559739&quot;:360,&quot;335559740&quot;:278}"> </span></h2>
<p style="text-align: justify;"><span data-contrast="auto">Once the challenge kicked off, the students had two weeks to secure the resources in their AWS account following the guidelines. With such extensive permissions, major configuration errors can quickly arise. For instance, one group created a “</span><i><span data-contrast="auto">Deny All</span></i><span data-contrast="auto">” S3 policy, which resulted in them locking themselves out, as well as anyone else since none of us had root account privileges.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">To address such situations, we set up the following communication system: each team would be assigned a coach responsible for reporting technical issues to the organizing team, which then escalated the incidents to us. We were then able to investigate and fix the issue or be able to quickly communicate with them without receiving too many messages for simple questions that could be answered by the coaches.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Besides incident management, our role also involved monitoring budget overruns. To achieve this, we set up cost alerts for each AWS account. We also developed a script to track the budget evolution of the teams in real-time. This tool proved to be very useful in providing an estimate of the time spent by the students on the challenge and respond in case or abnormal spending. For example, two days after the challenge began, an alert was triggered due to a failure in the Lambda function meant to shut down the VM.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-contrast="auto">Once the challenge concluded with few incidents, and student access had been revoked, it was time to proceed with the assessment to declare the winners. As a reminder, the students were required to configure their AWS account in compliance with the Public Cloud policies. For their evaluation, we used two grading mechanisms:</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </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="auto">An automatic assessment through the deployment of AWS Config Managed rules at the end of the challenge. Amazon provides a sufficient set of rules to cover a significant percentage of the requirements. For example, a rule checks whether the S3 bucket is encrypted (AWS-06).</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></li>
<li><span data-contrast="auto">A manual assessment based on clearly documented expected criteria and steps for verification.</span></li>
</ul>
<p> </p>
<p> </p>
<p style="text-align: justify;"><span data-contrast="auto">To conclude, the organization of a coding game is an ambitious project, requiring strong Cloud and Terraform skills, solid management capabilities and the ability to react to unexpected events. Despite the challenges, this is an outstanding learning opportunity. Indeed, for the participants, the Wavegame provides an immersive entrance into Public Cloud Security. Meanwhile, for the organizers, the Wavegame offers a new practical experience in designing, building, and maintaining operational readiness for an infrastructure in the Public Cloud.</span><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;134233117&quot;:true,&quot;134233118&quot;:true,&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p style="text-align: justify;"><span data-ccp-props="{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}"> </span></p>
<p>Cet article <a href="https://www.riskinsight-wavestone.com/en/2024/06/how-to-build-a-coding-game-around-public-cloud-security-step-by-step/">   How to build a coding game around Public Cloud Security step by step?    </a> est apparu en premier sur <a href="https://www.riskinsight-wavestone.com/en/">RiskInsight</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.riskinsight-wavestone.com/en/2024/06/how-to-build-a-coding-game-around-public-cloud-security-step-by-step/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
