{"id":23299,"date":"2024-06-13T13:37:33","date_gmt":"2024-06-13T12:37:33","guid":{"rendered":"https:\/\/www.riskinsight-wavestone.com\/?p=23299"},"modified":"2024-06-13T13:37:35","modified_gmt":"2024-06-13T12:37:35","slug":"how-to-build-a-coding-game-around-public-cloud-security-step-by-step","status":"publish","type":"post","link":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/","title":{"rendered":"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0"},"content":{"rendered":"\n<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}\">\u00a0<\/span><\/h2>\n<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>\n<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\">\u00a0is the topic of this article.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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\u2019s 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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/h2>\n<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\">\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<ul>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<\/ul>\n<p style=\"text-align: justify;\"><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<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>\n<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\">\u202f:<\/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]}\">\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/h2>\n<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}\">\u00a0<\/span><\/p>\n<ul>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<\/ul>\n<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}\">\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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>\n<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]}\">\u00a0<\/span><\/p>\n<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.\u202f<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/h2>\n<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}\">\u00a0<\/span><\/p>\n<ul>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<\/ul>\n<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\">\u201cLambda (ELK) -&gt; S3\u201d<\/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.\u00a0\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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.\u00a0<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/h2>\n<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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<ul>\n<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}\">\u00a0<\/span><\/li>\n<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}\">\u00a0<\/span><\/li>\n<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 \u201c<\/span><i><span data-contrast=\"auto\">protected<\/span><\/i><span data-contrast=\"auto\">\u201d tag.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/li>\n<\/ul>\n<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 \u201c<\/span><i><span data-contrast=\"auto\">protected<\/span><\/i><span data-contrast=\"auto\">\u201d 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}\">\u00a0<\/span><\/p>\n<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>\n<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]}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<h2>\u00a0<\/h2>\n<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}\">\u00a0<\/span><\/h2>\n<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 \u201c<\/span><i><span data-contrast=\"auto\">Deny All<\/span><\/i><span data-contrast=\"auto\">\u201d 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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<ul>\n<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}\">\u00a0<\/span><\/li>\n<li><span data-contrast=\"auto\">A manual assessment based on clearly documented expected criteria and steps for verification.<\/span><\/li>\n<\/ul>\n<p>\u00a0<\/p>\n<p>\u00a0<\/p>\n<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}\">\u00a0<\/span><\/p>\n<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}\">\u00a0<\/span><\/p>\n<p style=\"text-align: justify;\"><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:278}\">\u00a0<\/span><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Step 0: context and objectives\u00a0 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&#8230;.<\/p>\n","protected":false},"author":1508,"featured_media":23290,"comment_status":"open","ping_status":"closed","sticky":true,"template":"page-templates\/tmpl-one.php","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[2777],"tags":[2772,4462,4463,4464],"coauthors":[4456,4457,4458],"class_list":["post-23299","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cybersecurity-digital-trust","tag-cybersecurity","tag-public-cloud-2","tag-students-2","tag-wavegame-2"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0 - RiskInsight<\/title>\n<meta name=\"description\" content=\"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.\u00a0The challenge was split into 2 tracks, the first being dedicated to Business majors and the later for Computer Science majors. The technical track consisted of 2 qualifying exercises and a final event. The second exercise\u00a0is the topic of this article.\u00a0\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0 - RiskInsight\" \/>\n<meta property=\"og:description\" content=\"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.\u00a0The challenge was split into 2 tracks, the first being dedicated to Business majors and the later for Computer Science majors. The technical track consisted of 2 qualifying exercises and a final event. The second exercise\u00a0is the topic of this article.\u00a0\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/\" \/>\n<meta property=\"og:site_name\" content=\"RiskInsight\" \/>\n<meta property=\"article:published_time\" content=\"2024-06-13T12:37:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-06-13T12:37:35+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"853\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Arnaud PETITCOL, alexandre.folin, Cl\u00e9ment Guillemare\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Arnaud PETITCOL, alexandre.folin, Cl\u00e9ment Guillemare\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/\"},\"author\":{\"name\":\"Arnaud PETITCOL\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/07c86447109d4127ecbc5709b4054030\"},\"headline\":\"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0\",\"datePublished\":\"2024-06-13T12:37:33+00:00\",\"dateModified\":\"2024-06-13T12:37:35+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/\"},\"wordCount\":1958,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg\",\"keywords\":[\"cybersecurity\",\"public cloud\",\"students\",\"wavegame\"],\"articleSection\":[\"Cybersecurity &amp; Digital Trust\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/\",\"name\":\"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0 - RiskInsight\",\"isPartOf\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg\",\"datePublished\":\"2024-06-13T12:37:33+00:00\",\"dateModified\":\"2024-06-13T12:37:35+00:00\",\"description\":\"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.\u00a0The challenge was split into 2 tracks, the first being dedicated to Business majors and the later for Computer Science majors. The technical track consisted of 2 qualifying exercises and a final event. The second exercise\u00a0is the topic of this article.\u00a0\",\"breadcrumb\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg\",\"contentUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg\",\"width\":1280,\"height\":853},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#website\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\",\"name\":\"RiskInsight\",\"description\":\"The cybersecurity &amp; digital trust blog by Wavestone&#039;s consultants\",\"publisher\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.riskinsight-wavestone.com\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#organization\",\"name\":\"Wavestone\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png\",\"contentUrl\":\"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png\",\"width\":50,\"height\":50,\"caption\":\"Wavestone\"},\"image\":{\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/07c86447109d4127ecbc5709b4054030\",\"name\":\"Arnaud PETITCOL\",\"url\":\"https:\/\/www.riskinsight-wavestone.com\/en\/author\/arnaud-petitcol\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0 - RiskInsight","description":"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.\u00a0The challenge was split into 2 tracks, the first being dedicated to Business majors and the later for Computer Science majors. The technical track consisted of 2 qualifying exercises and a final event. The second exercise\u00a0is the topic of this article.\u00a0","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/","og_locale":"en_US","og_type":"article","og_title":"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0 - RiskInsight","og_description":"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.\u00a0The challenge was split into 2 tracks, the first being dedicated to Business majors and the later for Computer Science majors. The technical track consisted of 2 qualifying exercises and a final event. The second exercise\u00a0is the topic of this article.\u00a0","og_url":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/","og_site_name":"RiskInsight","article_published_time":"2024-06-13T12:37:33+00:00","article_modified_time":"2024-06-13T12:37:35+00:00","og_image":[{"width":1280,"height":853,"url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg","type":"image\/jpeg"}],"author":"Arnaud PETITCOL, alexandre.folin, Cl\u00e9ment Guillemare","twitter_misc":{"Written by":"Arnaud PETITCOL, alexandre.folin, Cl\u00e9ment Guillemare","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#article","isPartOf":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/"},"author":{"name":"Arnaud PETITCOL","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/07c86447109d4127ecbc5709b4054030"},"headline":"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0","datePublished":"2024-06-13T12:37:33+00:00","dateModified":"2024-06-13T12:37:35+00:00","mainEntityOfPage":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/"},"wordCount":1958,"commentCount":0,"publisher":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage"},"thumbnailUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg","keywords":["cybersecurity","public cloud","students","wavegame"],"articleSection":["Cybersecurity &amp; Digital Trust"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/","url":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/","name":"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0 - RiskInsight","isPartOf":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage"},"thumbnailUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg","datePublished":"2024-06-13T12:37:33+00:00","dateModified":"2024-06-13T12:37:35+00:00","description":"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.\u00a0The challenge was split into 2 tracks, the first being dedicated to Business majors and the later for Computer Science majors. The technical track consisted of 2 qualifying exercises and a final event. The second exercise\u00a0is the topic of this article.\u00a0","breadcrumb":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#primaryimage","url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg","contentUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2024\/06\/chess-5100865_1280.jpg","width":1280,"height":853},{"@type":"BreadcrumbList","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/2024\/06\/how-to-build-a-coding-game-around-public-cloud-security-step-by-step\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/www.riskinsight-wavestone.com\/en\/"},{"@type":"ListItem","position":2,"name":"\u00a0\u00a0\u00a0How to build a coding game around Public Cloud Security step by step?\u00a0\u00a0 \u00a0"}]},{"@type":"WebSite","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#website","url":"https:\/\/www.riskinsight-wavestone.com\/en\/","name":"RiskInsight","description":"The cybersecurity &amp; digital trust blog by Wavestone&#039;s consultants","publisher":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.riskinsight-wavestone.com\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#organization","name":"Wavestone","url":"https:\/\/www.riskinsight-wavestone.com\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png","contentUrl":"https:\/\/www.riskinsight-wavestone.com\/wp-content\/uploads\/2021\/08\/Monogramme\u2013W\u2013NEGA-RGB-50x50-1.png","width":50,"height":50,"caption":"Wavestone"},"image":{"@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.riskinsight-wavestone.com\/en\/#\/schema\/person\/07c86447109d4127ecbc5709b4054030","name":"Arnaud PETITCOL","url":"https:\/\/www.riskinsight-wavestone.com\/en\/author\/arnaud-petitcol\/"}]}},"_links":{"self":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/23299","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/users\/1508"}],"replies":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/comments?post=23299"}],"version-history":[{"count":4,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/23299\/revisions"}],"predecessor-version":[{"id":23306,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/posts\/23299\/revisions\/23306"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/media\/23290"}],"wp:attachment":[{"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/media?parent=23299"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/categories?post=23299"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/tags?post=23299"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.riskinsight-wavestone.com\/en\/wp-json\/wp\/v2\/coauthors?post=23299"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}