{"id":2449,"date":"2026-01-05T09:50:00","date_gmt":"2026-01-05T01:50:00","guid":{"rendered":"https:\/\/ichwanchandra.com\/blog\/?p=2449"},"modified":"2026-07-20T12:48:46","modified_gmt":"2026-07-20T04:48:46","slug":"aws-solutions-architect-project-security-pillar-part-1","status":"publish","type":"post","link":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/","title":{"rendered":"AWS Solutions Architect Project (Security Pillar) &#8211; Secure Application Deployment &#8211; Part 1"},"content":{"rendered":"\n<p>As part of the Well-Architected Framework from AWS, security is one of the main fundamental aspects in designing and delivering any AWS project. In this project we will demonstrate how to transform a vulnerable cloud environment into a secure and production grade architecture. After deploying the insecure baseline, the step-by-step re-design will follow the security-first design principles by involving the AWS services such as custom VPC, secured EC2, RDS, S3, CloudFront, and ALB (Application Load Balancer) with WAF protection enabled.<\/p>\n\n\n\n<p>To start of with, here is the to-be architecture diagram for this project:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"757\" height=\"592\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/security-pillar-diagram.png\" alt=\"\" class=\"wp-image-2471\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/security-pillar-diagram.png 757w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/security-pillar-diagram-300x235.png 300w\" sizes=\"auto, (max-width: 757px) 100vw, 757px\" \/><\/figure>\n\n\n\n<p>Below is the explanation of above architecture diagram:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>The user make the request to the application via HTTPS<\/li>\n\n\n\n<li>AWS WAF filters the requests for common threat<\/li>\n\n\n\n<li>ALB forwards cleaned and filtered request to EC2 instance<\/li>\n\n\n\n<li>EC2 runs the backend apps and gets data from RDS<\/li>\n\n\n\n<li>NAT gateway allows EC2 to access the internet for updates<\/li>\n\n\n\n<li>Bastion host allows a secure SSH connection to EC2<\/li>\n\n\n\n<li>Internet gateway connects public subnet with the internet<\/li>\n<\/ol>\n\n\n\n<div style=\"height:24px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Step 1: Insecure Setup &#8211; Launch an EC2 Instance with Public Access<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to the <strong>EC2 Dashboard<\/strong>, click <strong>Launch Instance<\/strong>\n<ul class=\"wp-block-list\">\n<li><strong>Name<\/strong>: <code>shoppingcart-app<\/code><\/li>\n\n\n\n<li><strong>AMI<\/strong>: Amazon Linux 2 or Amazon Linux 2023 (both supported)<\/li>\n\n\n\n<li><strong>Instance type<\/strong>: <code>t2.micro<\/code> (Free Tier eligible)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1012\" height=\"989\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-32.png\" alt=\"\" class=\"wp-image-2561\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-32.png 1012w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-32-300x293.png 300w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-32-768x751.png 768w\" sizes=\"auto, (max-width: 1012px) 100vw, 1012px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Key pair<\/strong>: Create and download a new key pair (.pem file) for SSH access <\/li>\n\n\n\n<li><strong>Network settings<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>VPC<\/strong>: Use the default VPC<\/li>\n\n\n\n<li><strong>Auto-assign public IP<\/strong>: Enable this option<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Security Group settings<\/strong> &#8211; Add these inbound rules:<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1230\" height=\"504\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-1.png\" alt=\"\" class=\"wp-image-2454\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-1.png 1230w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-1-300x123.png 300w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-1-1024x420.png 1024w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-1-768x315.png 768w\" sizes=\"auto, (max-width: 1230px) 100vw, 1230px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1228\" height=\"738\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-2.png\" alt=\"\" class=\"wp-image-2455\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-2.png 1228w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-2-300x180.png 300w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-2-1024x615.png 1024w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/05\/image-2-768x462.png 768w\" sizes=\"auto, (max-width: 1228px) 100vw, 1228px\" \/><\/figure>\n\n\n\n<div style=\"height:24px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Step 2: Insecure Setup &#8211; Install Node.js and Run the Application<\/h2>\n\n\n\n<p>We are simulating a web application deployment where the servers were setup without proper security<\/p>\n\n\n\n<p>Connect to EC2 instance with the .pem key<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ssh -i your-key.pem ec2-user@&lt;your-ec2-public-ip&gt;<\/code><\/pre>\n\n\n\n<p>and then install Node.js using nvm<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -o- https:\/\/raw.githubusercontent.com\/nvm-sh\/nvm\/v0.40.4\/install.sh | bash\nexport NVM_DIR=\"$HOME\/.nvm\"\nsource \"$NVM_DIR\/nvm.sh\"\nnvm install 24\nnvm use 24<\/code><\/pre>\n\n\n\n<p>Create the Shopping Cart application<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>mkdir shoppingcart &amp;&amp; cd shoppingcart\nmkdir public\n\ncat &lt;&lt;EOF &gt; public\/index.html\n&lt;!DOCTYPE html&gt;\n&lt;html&gt;\n&lt;head&gt;&lt;title&gt;ShoppingCart&lt;\/title&gt;&lt;\/head&gt;\n&lt;body&gt;&lt;h1&gt;Welcome to ShoppingCart&lt;\/h1&gt;&lt;p&gt;This is the insecure Demo Page&lt;\/p&gt;&lt;\/body&gt;\n&lt;\/html&gt;\nEOF\n\ncat &lt;&lt;EOF &gt; server.js\nconst http = require('http');\nconst fs = require('fs');\nconst path = require('path');\nconst server = http.createServer((req, res) =&gt; {\n  const filePath = path.join(__dirname, 'public', req.url === '\/' ? 'index.html' : req.url);\n  fs.readFile(filePath, (err, content) =&gt; {\n    if (err) {\n      res.writeHead(404); res.end('Not Found');\n    } else {\n      res.writeHead(200); res.end(content);\n    }\n  });\n});\nserver.listen(80);\nEOF<\/code><\/pre>\n\n\n\n<p>Get the full path to Node.js and copy the output<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;ec2-user@ip-172-31-18-36 shoppingcart]$ which node\n~\/.nvm\/versions\/node\/v24.16.0\/bin\/node<\/code><\/pre>\n\n\n\n<p>Start the application<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># Get the full path to Node.js<br>which node<br><br># Copy the output path (e.g., \/home\/ec2-ser\/.nvm\/versions\/node\/v24.16.0\/bin\/node) Please adjust the node version on your own installation<br><br># Start the server using the full path (&amp; makes sure the task runs on background to keep terminal functional for operations)<br>sudo \/home\/ec2-user\/.nvm\/versions\/node\/v24.16.0\/bin\/node server.js &amp;<\/pre>\n\n\n\n<p>Test the application by opening it using the EC2 instance public IP<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"598\" height=\"233\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image.png\" alt=\"\" class=\"wp-image-2479\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image.png 598w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-300x117.png 300w\" sizes=\"auto, (max-width: 598px) 100vw, 598px\" \/><\/figure>\n\n\n\n<div style=\"height:24px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Step 3: Insecure Setup &#8211; Deploy a Public RDS Instance<\/h2>\n\n\n\n<p>Again, we are simulating the most common miss-configuration in deploying database service which makes it publicly exposed to the public internet due to initially deployment for quick access.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <strong>Aurora and RDS Dashboard<\/strong>, click <strong>Create Database<\/strong><\/li>\n\n\n\n<li>Choose Easy Create and change the value later after database launched<\/li>\n\n\n\n<li><strong>Engine options<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>Creation method<\/strong>: Standard Create<\/li>\n\n\n\n<li><strong>Engine<\/strong>: MySQL<\/li>\n\n\n\n<li><strong>Template<\/strong>: Free Tier<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"1565\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-6.png\" alt=\"\" class=\"wp-image-2488\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-6.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-6-203x300.png 203w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-6-692x1024.png 692w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-6-768x1137.png 768w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-6-1037x1536.png 1037w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Settings<\/strong>:\n<ul class=\"wp-block-list\">\n<li><strong>DB instance identifier: <\/strong><code>shoppingcart-db<\/code><\/li>\n\n\n\n<li><strong>Master username:<\/strong> <code>admin<\/code><\/li>\n\n\n\n<li>Set a simple <strong>password<\/strong> (for example, <code>Secret123!<\/code>)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"1396\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-2.png\" alt=\"\" class=\"wp-image-2483\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-2.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-2-227x300.png 227w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-2-775x1024.png 775w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-2-768x1014.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Connectivity<\/strong> (<strong>Here is where the critical security issues<\/strong> <strong>are happening<\/strong>):\n<ul class=\"wp-block-list\">\n<li><strong>VPC<\/strong>: Default VPC<\/li>\n\n\n\n<li><strong>Public access<\/strong>: <strong>YES<\/strong> (<strong>Major vulnerability &#8211; never do this in production<\/strong>)<\/li>\n\n\n\n<li><strong>VPC security group<\/strong>: Create new or use existing<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"1320\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-3.png\" alt=\"\" class=\"wp-image-2484\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-3.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-3-240x300.png 240w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-3-820x1024.png 820w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-3-768x959.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<p><strong>Security Group Configuration<\/strong> <strong>on EC2<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Edit the security group to add:<\/li>\n\n\n\n<li><strong>Inbound rule<\/strong>: MySQL\/Aurora (port 3306) from <code>0.0.0.0\/0<\/code><\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"1320\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-4.png\" alt=\"\" class=\"wp-image-2485\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-4.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-4-240x300.png 240w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-4-820x1024.png 820w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-4-768x959.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<div style=\"height:24px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<h2 class=\"wp-block-heading\">Step 4: Insecure Setup &#8211; Create Public S3 Bucket<\/h2>\n\n\n\n<p>In here, we are demonstrating how S3 bucket miss-configuration  can lead to accidentally sensitive data to be exposed.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Go to <strong>S3 Dashboard<\/strong>, click <strong>Create Bucket<\/strong> \n<ul class=\"wp-block-list\">\n<li>Name the bucket: <code>shoppingcart-insecure-demo<\/code>. (Ensure the name has to be globally unique) <\/li>\n\n\n\n<li>Choose the same region as your EC2 instance.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"726\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-7.png\" alt=\"\" class=\"wp-image-2491\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-7.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-7-300x206.png 300w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-7-1024x703.png 1024w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-7-768x528.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Under <strong>Block Public Access settings<\/strong>:\n<ul class=\"wp-block-list\">\n<li>Uncheck <strong>Block all public access<\/strong><\/li>\n\n\n\n<li>Acknowledge the warning prompt<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"658\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-8.png\" alt=\"\" class=\"wp-image-2492\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-8.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-8-300x187.png 300w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-8-1024x637.png 1024w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-8-768x478.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<p>Click Create Bucket<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Upload a Sample File\n<ul class=\"wp-block-list\">\n<li>Click into your newly created bucket \u2192 <strong>Upload<\/strong> tab<\/li>\n\n\n\n<li>Upload a sample file, such as <code>shoppingcart-logo.png<\/code>, and click <strong>Upload<\/strong><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"487\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-10.png\" alt=\"\" class=\"wp-image-2494\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-10.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-10-300x138.png 300w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-10-1024x472.png 1024w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-10-768x354.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Apply Dangerous Bucket Policy\n<ul class=\"wp-block-list\">\n<li>Go to the <strong>Permissions<\/strong> tab of the bucket.<\/li>\n\n\n\n<li>Scroll to <strong>Bucket Policy<\/strong> \u2192 click <strong>Edit<\/strong><\/li>\n\n\n\n<li>Paste the following policy and save (Modify the resource value accordingly to your bucket name):<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"Version\": \"2012-10-17\",\n  \"Statement\": &#91;\n    {\n      \"Sid\": \"AllowPublicReadAccessToObjects\",\n      \"Effect\": \"Allow\",\n      \"Principal\": \"*\",\n      \"Action\": \"s3:GetObject\",\n      \"Resource\": \"arn:aws:s3:::shoppingcart-insecure-demo\/*\"\n    }\n  ]\n}<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"1189\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-11.png\" alt=\"\" class=\"wp-image-2496\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-11.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-11-267x300.png 267w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-11-910x1024.png 910w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-11-768x864.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<p>This allows all users (even unauthenticated) to read any object in this bucket.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Verify Public Access\n<ul class=\"wp-block-list\">\n<li>Go back to the uploaded object (<code>shoppingcart-logo.png<\/code>)<\/li>\n\n\n\n<li>Copy the <strong>Object URL<\/strong> (visible at the top)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1057\" height=\"628\" src=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-12.png\" alt=\"\" class=\"wp-image-2497\" srcset=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-12.png 1057w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-12-300x178.png 300w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-12-1024x608.png 1024w, https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/01\/image-12-768x456.png 768w\" sizes=\"auto, (max-width: 1057px) 100vw, 1057px\" \/><\/figure>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Open it in an incognito\/private browser window <\/li>\n\n\n\n<li>The file should be accessible without any authentication via below URL:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>https:&#47;&#47;shoppingcart-insecure-demo.s3.us-east-1.amazonaws.com\/shoppingcart-logo.png<\/code><\/pre>\n\n\n\n<div style=\"height:24px\" aria-hidden=\"true\" class=\"wp-block-spacer\"><\/div>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Summary<\/strong><\/h2>\n\n\n\n<p>At this point, we have successfully deployed a highly insecure cloud environment that mimics common real-world issues and vulnerabilities as below list:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Network Security Issues<\/strong>\n<ul class=\"wp-block-list\">\n<li>No network segmentation between tiers<\/li>\n\n\n\n<li>All resources deployed in the public subnets<\/li>\n\n\n\n<li>Overly permissive security groups<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Data Protection Failures<\/strong>\n<ul class=\"wp-block-list\">\n<li>Database exposed to public internet<\/li>\n\n\n\n<li>No encryption for data at rest or in transit<\/li>\n\n\n\n<li>Publicly accessible file storage<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Access Control Problems<\/strong>\n<ul class=\"wp-block-list\">\n<li>SSH access is allowed from anywhere<\/li>\n\n\n\n<li>Database is accessible globally<\/li>\n\n\n\n<li>No IAM role-based access controls<br><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>Monitoring and Compliance Gaps<\/strong>\n<ul class=\"wp-block-list\">\n<li>No logging or monitoring configured<\/li>\n\n\n\n<li>No threat detection enabled<\/li>\n\n\n\n<li>No compliance tracking<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>In <a href=\"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-2\/\" data-type=\"post\" data-id=\"2504\">part 2<\/a>, we&#8217;ll systematically address each of these vulnerabilities using AWS security best practices, transforming this insecure setup into a production-ready with the proper secure architecture best practices.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As part of the Well-Architected Framework from AWS, security pillar is one of the main fundamental aspects in designing and delivering any AWS project. In this project we&#8217;ll demonstrate how to transform a vulnerable cloud environment into a secure and production grade architecture. After deploying the insecure baseline, the step-by-step re-design will follow the security-first design principles by involving the AWS services such as custom VPC, secured EC2, and ALB (Application Load Balancer) with WAF protection-enabled.<\/p>\n","protected":false},"author":1,"featured_media":2652,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20,10,85,75,8],"tags":[],"class_list":["post-2449","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-backend","category-cloud","category-projects","category-system-design","category-technology"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.0 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>AWS Solutions Architect Project (Security Pillar) - Secure Application Deployment - Part 1 - Ichwan Chandra<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"AWS Solutions Architect Project (Security Pillar) - Secure Application Deployment - Part 1 - Ichwan Chandra\" \/>\n<meta property=\"og:description\" content=\"As part of the Well-Architected Framework from AWS, security pillar is one of the main fundamental aspects in designing and delivering any AWS project. In this project we&#039;ll demonstrate how to transform a vulnerable cloud environment into a secure and production grade architecture. After deploying the insecure baseline, the step-by-step re-design will follow the security-first design principles by involving the AWS services such as custom VPC, secured EC2, and ALB (Application Load Balancer) with WAF protection-enabled.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/\" \/>\n<meta property=\"og:site_name\" content=\"Ichwan Chandra\" \/>\n<meta property=\"article:published_time\" content=\"2026-01-05T01:50:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-20T04:48:46+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/06\/aws-solutions-architect-project-security-pillar-part-1-1024x572.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"572\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ichwan Chandra\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ichwan Chandra\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/\"},\"author\":{\"name\":\"Ichwan Chandra\",\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/#\\\/schema\\\/person\\\/2fa69a7a1008a3369584752194b063d5\"},\"headline\":\"AWS Solutions Architect Project (Security Pillar) &#8211; Secure Application Deployment &#8211; Part 1\",\"datePublished\":\"2026-01-05T01:50:00+00:00\",\"dateModified\":\"2026-07-20T04:48:46+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/\"},\"wordCount\":744,\"image\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/aws-solutions-architect-project-security-pillar-part-1.png\",\"articleSection\":[\"Backend\",\"Cloud\",\"Projects\",\"System Design\",\"Technology\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/\",\"url\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/\",\"name\":\"AWS Solutions Architect Project (Security Pillar) - Secure Application Deployment - Part 1 - Ichwan Chandra\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/aws-solutions-architect-project-security-pillar-part-1.png\",\"datePublished\":\"2026-01-05T01:50:00+00:00\",\"dateModified\":\"2026-07-20T04:48:46+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/#\\\/schema\\\/person\\\/2fa69a7a1008a3369584752194b063d5\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/aws-solutions-architect-project-security-pillar-part-1.png\",\"contentUrl\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/06\\\/aws-solutions-architect-project-security-pillar-part-1.png\",\"width\":1376,\"height\":768,\"caption\":\"aws solutions architect project on security pillar - part 1\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/aws-solutions-architect-project-security-pillar-part-1\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AWS Solutions Architect Project (Security Pillar) &#8211; Secure Application Deployment &#8211; Part 1\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/\",\"name\":\"Ichwan Chandra\",\"description\":\"In a lifelong learning mode\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/#\\\/schema\\\/person\\\/2fa69a7a1008a3369584752194b063d5\",\"name\":\"Ichwan Chandra\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8d8d64c76e361108ee058442df7c49c539eefd1d1e5a3e8dbcc9d70289e0bbf2?s=96&d=retro&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8d8d64c76e361108ee058442df7c49c539eefd1d1e5a3e8dbcc9d70289e0bbf2?s=96&d=retro&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/8d8d64c76e361108ee058442df7c49c539eefd1d1e5a3e8dbcc9d70289e0bbf2?s=96&d=retro&r=g\",\"caption\":\"Ichwan Chandra\"},\"sameAs\":[\"https:\\\/\\\/ichwanchandra.com\\\/blog\"],\"url\":\"https:\\\/\\\/ichwanchandra.com\\\/blog\\\/author\\\/isuchan193\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"AWS Solutions Architect Project (Security Pillar) - Secure Application Deployment - Part 1 - Ichwan Chandra","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:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/","og_locale":"en_US","og_type":"article","og_title":"AWS Solutions Architect Project (Security Pillar) - Secure Application Deployment - Part 1 - Ichwan Chandra","og_description":"As part of the Well-Architected Framework from AWS, security pillar is one of the main fundamental aspects in designing and delivering any AWS project. In this project we'll demonstrate how to transform a vulnerable cloud environment into a secure and production grade architecture. After deploying the insecure baseline, the step-by-step re-design will follow the security-first design principles by involving the AWS services such as custom VPC, secured EC2, and ALB (Application Load Balancer) with WAF protection-enabled.","og_url":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/","og_site_name":"Ichwan Chandra","article_published_time":"2026-01-05T01:50:00+00:00","article_modified_time":"2026-07-20T04:48:46+00:00","og_image":[{"width":1024,"height":572,"url":"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/06\/aws-solutions-architect-project-security-pillar-part-1-1024x572.png","type":"image\/png"}],"author":"Ichwan Chandra","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Ichwan Chandra","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/#article","isPartOf":{"@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/"},"author":{"name":"Ichwan Chandra","@id":"https:\/\/ichwanchandra.com\/blog\/#\/schema\/person\/2fa69a7a1008a3369584752194b063d5"},"headline":"AWS Solutions Architect Project (Security Pillar) &#8211; Secure Application Deployment &#8211; Part 1","datePublished":"2026-01-05T01:50:00+00:00","dateModified":"2026-07-20T04:48:46+00:00","mainEntityOfPage":{"@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/"},"wordCount":744,"image":{"@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/06\/aws-solutions-architect-project-security-pillar-part-1.png","articleSection":["Backend","Cloud","Projects","System Design","Technology"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/","url":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/","name":"AWS Solutions Architect Project (Security Pillar) - Secure Application Deployment - Part 1 - Ichwan Chandra","isPartOf":{"@id":"https:\/\/ichwanchandra.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/#primaryimage"},"image":{"@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/#primaryimage"},"thumbnailUrl":"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/06\/aws-solutions-architect-project-security-pillar-part-1.png","datePublished":"2026-01-05T01:50:00+00:00","dateModified":"2026-07-20T04:48:46+00:00","author":{"@id":"https:\/\/ichwanchandra.com\/blog\/#\/schema\/person\/2fa69a7a1008a3369584752194b063d5"},"breadcrumb":{"@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/#primaryimage","url":"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/06\/aws-solutions-architect-project-security-pillar-part-1.png","contentUrl":"https:\/\/ichwanchandra.com\/blog\/wp-content\/uploads\/2026\/06\/aws-solutions-architect-project-security-pillar-part-1.png","width":1376,"height":768,"caption":"aws solutions architect project on security pillar - part 1"},{"@type":"BreadcrumbList","@id":"https:\/\/ichwanchandra.com\/blog\/aws-solutions-architect-project-security-pillar-part-1\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ichwanchandra.com\/blog\/"},{"@type":"ListItem","position":2,"name":"AWS Solutions Architect Project (Security Pillar) &#8211; Secure Application Deployment &#8211; Part 1"}]},{"@type":"WebSite","@id":"https:\/\/ichwanchandra.com\/blog\/#website","url":"https:\/\/ichwanchandra.com\/blog\/","name":"Ichwan Chandra","description":"In a lifelong learning mode","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ichwanchandra.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/ichwanchandra.com\/blog\/#\/schema\/person\/2fa69a7a1008a3369584752194b063d5","name":"Ichwan Chandra","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/8d8d64c76e361108ee058442df7c49c539eefd1d1e5a3e8dbcc9d70289e0bbf2?s=96&d=retro&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/8d8d64c76e361108ee058442df7c49c539eefd1d1e5a3e8dbcc9d70289e0bbf2?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/8d8d64c76e361108ee058442df7c49c539eefd1d1e5a3e8dbcc9d70289e0bbf2?s=96&d=retro&r=g","caption":"Ichwan Chandra"},"sameAs":["https:\/\/ichwanchandra.com\/blog"],"url":"https:\/\/ichwanchandra.com\/blog\/author\/isuchan193\/"}]}},"_links":{"self":[{"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/posts\/2449","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/comments?post=2449"}],"version-history":[{"count":44,"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/posts\/2449\/revisions"}],"predecessor-version":[{"id":2813,"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/posts\/2449\/revisions\/2813"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/media\/2652"}],"wp:attachment":[{"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/media?parent=2449"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/categories?post=2449"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ichwanchandra.com\/blog\/wp-json\/wp\/v2\/tags?post=2449"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}