<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: SUDO Consultants</title>
    <description>The latest articles on Forem by SUDO Consultants (@sudoconsultants).</description>
    <link>https://forem.com/sudoconsultants</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F5996%2Ff1ed32ac-63d4-403d-820f-c790f6215583.png</url>
      <title>Forem: SUDO Consultants</title>
      <link>https://forem.com/sudoconsultants</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/sudoconsultants"/>
    <language>en</language>
    <item>
      <title>From Chaos to Control: The AWS Governance Framework That Saves Money</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Tue, 12 May 2026 10:43:16 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/from-chaos-to-control-the-aws-governance-framework-that-saves-money-1g27</link>
      <guid>https://forem.com/sudoconsultants/from-chaos-to-control-the-aws-governance-framework-that-saves-money-1g27</guid>
      <description>&lt;h3&gt;
  
  
  The Bill Nobody Expected
&lt;/h3&gt;

&lt;p&gt;Last quarter, a Dubai-based SaaS company we work with opened its AWS bill to find it had jumped from AED 68,000 to AED 96,000. No new product launch. No traffic spike. Just drift.&lt;/p&gt;

&lt;p&gt;When we dug in, here's what we found: an EC2 fleet in eu-west-1 that the DevOps team had forgotten after a client demo three months earlier. An RDS instance for a decommissioned analytics pipeline is still running at full capacity. Several unattached Elastic IPs. And not a single resource tagged with an owner or cost centre.&lt;/p&gt;

&lt;p&gt;Nobody had done anything malicious. The team was just moving fast, and the environment had grown faster than their ability to see it. That's the governance gap. And it shows up in AWS bills across the UAE every single month.&lt;/p&gt;

&lt;p&gt;This guide walks you through fixing it. Not only conceptually, but with exact steps, real configuration, and the specific AWS tools that make governance stick.&lt;/p&gt;

&lt;p&gt;🔗  If you’re building your cloud foundation in the UAE, read: &lt;a href="https://sudoconsultants.com/how-uae-based-businesses-can-gain-a-competitive-edge-with-aws-cloud-adoption/" rel="noopener noreferrer"&gt;How UAE-Based Businesses Can Gain a Competitive Edge with AWS Cloud Adoption&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Cloud Costs Spiral: The Governance Gap
&lt;/h3&gt;

&lt;p&gt;Cloud overspending rarely comes from one big mistake. It comes from small operational gaps that compound over time:&lt;/p&gt;

&lt;p&gt;• Resources provisioned for a demo, a test, or a one-off project and never cleaned up&lt;br&gt;
• Dev and staging environments running 24/7 when they only need to be on during business hours&lt;br&gt;
• No tagging policy, so when you open Cost Explorer, you see one number with no breakdown&lt;br&gt;
• Multiple AWS accounts with no consolidated billing or budget alerts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The result:&lt;/strong&gt; your infrastructure is doing exactly what it was told to do. The problem is nobody told it to stop.&lt;/p&gt;

&lt;p&gt;The fix is four disciplines, each with a specific AWS implementation. Here's how to set them up.&lt;/p&gt;

&lt;p&gt;🔗 Sound familiar? See how other UAE organisations have dealt with this: &lt;a href="https://sudoconsultants.com/common-cloud-adoption-challenges-in-the-middle-east-and-how-to-overcome-them/" rel="noopener noreferrer"&gt;Common Cloud Adoption Challenges in the Middle East and How to Overcome Them&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Hands-On Implementation: The 4 Pillars
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pillar 1: Tagging &amp;amp; Resource Attribution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without tags, your AWS bill is a black box. Tags are how you connect every dollar back to a team, a project, and an environment. The goal here is to enforce tags automatically, not rely on developers remembering.&lt;/p&gt;

&lt;p&gt;We'll set this up using AWS Tag Policies inside AWS Organizations, then add an AWS Config rule to catch anything that slips through.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: Create and Enforce a Tag Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → AWS Organizations → Policies → Tag Policies → Create Policy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Open AWS Organizations:&lt;/strong&gt; Sign in to your management account. Search for organizations in the Service search bar and go to Organizations. In the left menu, go to Policies → Tag Policies.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsc6jasaqqewbts6suuq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvsc6jasaqqewbts6suuq.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.    Enable Tag Policies:&lt;/strong&gt; If this is your first Tag Policy, click Enable Tag Policies. This activates enforcement across all accounts in your organization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy5ys21jfpx3prmv8tlv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foy5ys21jfpx3prmv8tlv.png" alt=" " width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.    Click Create Policy:&lt;/strong&gt; Give it a name like -mandatory-tags. In the JSON editor, write the policy according to the tags and:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "tags": {&lt;br&gt;
    "Environment": {&lt;br&gt;
      "tag_key": { "@@assign": "Environment" },&lt;br&gt;
      "tag_value": { "@@assign": ["production","staging","development","sandbox"] },&lt;br&gt;
      "enforced_for": { "@@assign": ["ec2:instance","rds:db","s3:bucket","lambda:function"] }&lt;br&gt;
    },&lt;br&gt;
    "Team": {&lt;br&gt;
      "tag_key": { "@@assign": "Team" },&lt;br&gt;
      "tag_value": { "@@assign": ["engineering","data","devops","marketing","product"] },&lt;br&gt;
      "enforced_for": { "@@assign": ["ec2:instance","rds:db","lambda:function"] }&lt;br&gt;
    },&lt;br&gt;
    "CostCentre": {&lt;br&gt;
      "tag_key": { "@@assign": "CostCentre" },&lt;br&gt;
      "enforced_for": { "@@assign": ["ec2:instance","rds:db","s3:bucket"] }&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.    Attach the policy:&lt;/strong&gt; Click Next, then attach to the Root of your organisation (or to a specific OU). Click Create Policy.&lt;br&gt;
&lt;strong&gt;5.    Add a Config rule for enforcement:&lt;/strong&gt; Go to AWS Config → Rules → Add Rule. Search for required tags. Select the scope of changes, and set the required tag keys as Environment, Team, and Cost Centre. Any resource missing these tags will appear as NON_COMPLIANT within minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9yfovdedbk90sxq45v6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd9yfovdedbk90sxq45v6.png" alt=" " width="800" height="325"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge3q3zw49zfw3c4y6b7n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fge3q3zw49zfw3c4y6b7n.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddp4aap9601yusnqf2eo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fddp4aap9601yusnqf2eo.png" alt=" " width="800" height="333"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI Alternative&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create a tag policy JSON file and write the tag enforcement policy as per your needs&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Apply tag policy via CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws organizations create-policy \&lt;br&gt;
 -content file://tag-policy.json \&lt;br&gt;
 -description "SUDO mandatory tags" \&lt;br&gt;
 -name sudo-mandatory-tags \&lt;br&gt;
 -type TAG_POLICY&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attach to the organization root&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws organizations attach-policy \&lt;br&gt;
 -policy-id p-xxxxxxxxxx \&lt;br&gt;
 -target-id r-xxxx&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pillar 2: Cost Visibility &amp;amp; Budget Alerts
&lt;/h3&gt;

&lt;p&gt;Tags are useless without a way to read them. AWS Cost Explorer turns your tagging data into per-team cost reports. AWS Budgets adds proactive alerting so teams know when they're approaching their limit, not after they've crossed it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: Enable Cost Explorer and Set Up Team Views&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → Billing &amp;amp; Cost Management → Cost Explorer → Enable Cost Explorer&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.    Enable Cost Explorer:&lt;/strong&gt; Go to Billing &amp;amp; Cost Management → Cost Explorer. If not already enabled, click Enable Cost Explorer. It takes up to 24 hours to populate historical data on first activation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fips5n4x51w9y7h0z04yv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fips5n4x51w9y7h0z04yv.png" alt=" " width="800" height="316"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.    Create a Team spend view:&lt;/strong&gt; In Cost Explorer, click Date Range. Set the date range to Last 3 months or as per your need. Under Group by, select Tag → . You'll see a stacked bar chart showing spend by tag per month. If bars show 'No tag', those are untagged resources; fix them using Pillar 1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbt3jfmm27m3b3kotm5xt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbt3jfmm27m3b3kotm5xt.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.    Enable Cost Anomaly Detection:&lt;/strong&gt; In Cost Management → Cost Anomaly Detection, create a new monitor. Select AWS Services as the monitor type. Click Next. &lt;br&gt;
To set up alerts, select Create a new subscription. Select the alert frequency, whether you want to receive daily alerts or weekly. Set an alert threshold of $200 (adjust to your scale). Add your cloud team email as a subscriber and click " Create monitor.&lt;br&gt;
This catches unexpected spikes like looping lambda functions or forgotten EC2 instances before they compound and alerts your team.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fij9fa1g84wfg04swohlo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fij9fa1g84wfg04swohlo.png" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrmgy4mcdk465wg08yeo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsrmgy4mcdk465wg08yeo.png" alt=" " width="800" height="377"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdy719g8jea8tumtrhgwn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdy719g8jea8tumtrhgwn.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: Create a Budget Alert Per Team&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Console:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → Billing &amp;amp; Cost Management → Budgets → Create Budget&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Go to Billing &amp;amp; Cost Management&lt;/li&gt;
&lt;li&gt; On the left bar, &lt;strong&gt;go to Budgets → Create Budget&lt;/strong&gt; — Select Cost Budget. Click Next.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;3.    Name and scope the budget:&lt;/strong&gt; Set name as Monthly-Budget. Set period to Monthly. Select Recurring Budget. Select the budgeting method as Fixed/Planned. Set the budgeted amount, for example, $5,000 USD. &lt;br&gt;
For the budget scope, select Filter specific AWS cost dimensions, select Dimension as Tag, select your tag, select the respective value, and click Apply filter. Click Next.&lt;br&gt;
&lt;strong&gt;4.    Set alert thresholds:&lt;/strong&gt; Add two alerts: 80% of the budgeted amount (Actual), and 100% of the budgeted amount (Actual). Add email subscribers for your team and to receive alerts, either enter the existing SNS topic ARN or create a new one.&lt;br&gt;
&lt;strong&gt;5.    Click Create Budget:&lt;/strong&gt; Repeat this for each application or team. A budget takes effect immediately and tracks against real spend.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9enab3qdvfs0ua2vsv8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa9enab3qdvfs0ua2vsv8.png" alt=" " width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihoskhi94o3pckqjudcg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fihoskhi94o3pckqjudcg.png" alt=" " width="800" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ar017iwnh9ovbqkjz0n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ar017iwnh9ovbqkjz0n.png" alt=" " width="800" height="430"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4359aj5s3jq9qo0bhdb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu4359aj5s3jq9qo0bhdb.png" alt=" " width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CLI Alternative&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws budgets create-budget \&lt;br&gt;
  --account-id 123456789012 \&lt;br&gt;
  --budget '{&lt;br&gt;
    "BudgetName": "Monthly-Budget",&lt;br&gt;
    "BudgetLimit": {"Amount": "5000", "Unit": "USD"},&lt;br&gt;
    "CostFilters": {"TagKeyValue": ["user:Application$Betterlife"]},&lt;br&gt;
    "TimeUnit": "MONTHLY",&lt;br&gt;
    "BudgetType": "COST"&lt;br&gt;
  }' \&lt;br&gt;
  -notifications-with-subscribers '[{&lt;br&gt;
    "Notification": {&lt;br&gt;
      "NotificationType": "ACTUAL",&lt;br&gt;
      "ComparisonOperator": "GREATER_THAN",&lt;br&gt;
      "Threshold": 80&lt;br&gt;
    },&lt;br&gt;
    "Subscribers": [{"SubscriptionType": "EMAIL", "Address": "cloudops@company.ae"}]&lt;br&gt;
  }]'&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pillar 3: Guardrails with Service Control Policies (SCPs)
&lt;/h3&gt;

&lt;p&gt;The first two pillars show you what's happening. This pillar prevents costly mistakes before they happen. Service Control Policies are rules you attach to your AWS organisation or accounts that enforce hard limits regardless of what any IAM user or role is allowed to do.&lt;/p&gt;

&lt;p&gt;Think of SCPs as the last line of defence. Even if a developer has full admin access, an SCP can stop them from spinning up a GPU instance or deploying into an unapproved region. You write the rule once, attach it to the account or OU, and it applies automatically to everyone.&lt;/p&gt;

&lt;p&gt;SCPs require AWS Organizations to be enabled. If you're running a single AWS account, you'll need to create an organisation first; it's free and takes about 5 minutes.&lt;/p&gt;

&lt;p&gt;🔗  Going deeper on AWS security and compliance? Read: Implementing AWS Security &amp;amp; Compliance: &lt;a href="https://sudoconsultants.com/implementing-aws-security-compliance-a-hands-on-guide-to-iam-recovery-and-governance/" rel="noopener noreferrer"&gt;A Hands-On Guide to IAM, Recovery, and Governance&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisite: Enable SCPs in AWS Organizations&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Console:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → AWS Organizations → Policies → Service Control Policies&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.    Open AWS Organizations&lt;/strong&gt; — In your management account, search for AWS Organizations and open it.&lt;br&gt;
&lt;strong&gt;2.    Enable Service Control Policies&lt;/strong&gt; — In the left menu, go to Policies → Service Control Policies. If SCPs are not yet enabled, click Enable Service Control Policies. This takes effect immediately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbxd1zejslwv3qfblrb7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbxd1zejslwv3qfblrb7.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8hu917etawo2rgnylcx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw8hu917etawo2rgnylcx.png" alt=" " width="800" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: Create and Attach an SCP&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Console:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → AWS Organizations → Policies → Service Control Policies → Create Policy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.    Click Create Policy&lt;/strong&gt; — Give it a clear name, e.g., deny-non-approved-regions. In the JSON editor, paste your SCP. Two of the most impactful ones for UAE businesses are below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SCP 1 — Restrict all activity to approved regions only. This prevents accidental deployments in us-east-1, eu-west-1, or any other region your team defaults to out of habit:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "Version": "2012-10-17",&lt;br&gt;
  "Statement": [{&lt;br&gt;
    "Sid": "DenyNonApprovedRegions",&lt;br&gt;
    "Effect": "Deny",&lt;br&gt;
    "Action": "*",&lt;br&gt;
    "Resource": "*",&lt;br&gt;
    "Condition": {&lt;br&gt;
      "StringNotEquals": {&lt;br&gt;
        "aws:RequestedRegion": ["me-south-1", “me-central-1”]&lt;br&gt;
      }&lt;br&gt;
    }&lt;br&gt;
  }]&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
⚠️  Important: Before attaching this SCP, verify that all your active workloads are already running in the regions you are allowing. Attaching this to an account with resources in other regions will block operations on those resources.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SCP 2 — Block high-cost GPU and memory-intensive instances from being launched without prior approval:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "Version": "2012-10-17",&lt;br&gt;
  "Statement": [{&lt;br&gt;
    "Sid": "DenyExpensiveInstanceTypes",&lt;br&gt;
    "Effect": "Deny",&lt;br&gt;
    "Action": "ec2:RunInstances",&lt;br&gt;
    "Resource": "arn:aws:ec2:*:*:instance/*",&lt;br&gt;
    "Condition": {&lt;br&gt;
      "StringLike": {&lt;br&gt;
        "ec2:InstanceType": ["p4d.*", "p3.*", "x1e.*", "u-*"]&lt;br&gt;
      }&lt;br&gt;
    }&lt;br&gt;
  }]&lt;br&gt;
}&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Click Create Policy — Once the JSON is in place, click Create Policy. The policy is saved but not yet active.&lt;/li&gt;
&lt;li&gt; Attach the SCP to your account or OU — Go back to AWS Organizations → AWS Accounts. Select the account or Organisational Unit (OU) you want to apply the policy to. Click Policies tab → Attach → select your SCP → Attach Policy. The policy takes effect immediately.&lt;/li&gt;
&lt;li&gt; Test the SCP — In the target account, try launching an EC2 instance in a blocked region or with a blocked instance type. You should see: 'An error occurred (AccessDenied): Explicit deny in a service control policy.' That means it's working.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;🔗  Setting up governance as part of a cloud migration? Our Cloud Migration Services help design scalable, governance-ready AWS architectures from day one.  →  &lt;a href="https://sudoconsultants.com/services/migration-modernization/cloud-migration/" rel="noopener noreferrer"&gt;sudoconsultants.com/cloud-migration-services&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Pillar 4: Continuous Optimisation with Trusted Advisor &amp;amp; Compute Optimizer
&lt;/h3&gt;

&lt;p&gt;The first three pillars establish control. This pillar keeps improving. AWS Trusted Advisor and Compute Optimizer scan your environment continuously and surface specific waste with dollar estimates attached. The goal is to turn these findings into a monthly action backlog, not a report nobody reads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: Action Trusted Advisor Cost Findings&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Console:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → Trusted Advisor → Cost Optimization&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.    Open Trusted Advisor:&lt;/strong&gt; Search for Trusted Advisor in the console. Note: Full Cost Optimization checks require AWS Business or Enterprise Support. If you're on Developer support, upgrade or use Compute Optimizer (free) as your primary tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.    Go to Cost Optimization tab:&lt;/strong&gt; You'll see checks for: Low Utilization Amazon EC2 Instances, Idle Load Balancers, Underutilized Amazon EBS Volumes, Unassociated Elastic IP Addresses, and Amazon RDS Idle DB Instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.    Click each check:&lt;/strong&gt; Expand the check to see the resource list with estimated monthly savings per resource. Download the CSV for your monthly review.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.    Action the findings:&lt;/strong&gt; For each flagged resource, verify with the owning team (use the owner tag from Pillar 1), then stop, resize, or terminate. Add unresolved items to your engineering backlog with the estimated savings attached.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fouzzbelahslhdmn77rdw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fouzzbelahslhdmn77rdw.png" alt=" " width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step-by-Step: Right-Size with Compute Optimizer&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;AWS Console:&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → AWS Compute Optimizer → Opt in → EC2 instances&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.    Opt in to Compute Optimizer:&lt;/strong&gt; Go to AWS Compute Optimizer. Click Get Started and opt in for your account (or all accounts via Organizations). It begins analysing your EC2 instances immediately full recommendations appear after 14 days of utilisation data.&lt;br&gt;
&lt;strong&gt;2.    Review EC2 recommendations:&lt;/strong&gt; Click EC2 instances. Filter by Finding: Over-provisioned. For each instance, Compute Optimizer shows the current type, recommended type, projected CPU/memory utilisation, and estimated monthly savings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpx40yj1jxbt6oc2rhegf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpx40yj1jxbt6oc2rhegf.png" alt=" " width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What This Looked Like for the SaaS Team&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;📊 &lt;em&gt;AED 96,000 → AED 71,500 in 90 days. Same product. Same team. Better governance.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob4umtnp0pjpy63ksmtm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fob4umtnp0pjpy63ksmtm.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick-Start Checklist: What to Do This Week
&lt;/h3&gt;

&lt;p&gt;You don't need to implement all four pillars at once. This is the order that delivers early wins:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Enable AWS Cost Explorer, if not active, takes 2 minutes, data appears within 24 hours&lt;/li&gt;
&lt;li&gt; Run a tagging audit, go to Cost Explorer, group by Tag: Team. How much shows as No Tag?&lt;/li&gt;
&lt;li&gt; Set up one budget alert, pick your highest-spending account and set an 80% alert&lt;/li&gt;
&lt;li&gt; Open Trusted Advisor Cost Optimization, note the top 3 flagged items and their estimated savings&lt;/li&gt;
&lt;li&gt; Draft your tag taxonomy, list the 4 to 5 mandatory tag keys your organisation needs before creating the Tag Policy&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These five steps cost nothing and take less than two hours. They will give you more visibility into your AWS spend than most organisations in the UAE have today.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;br&gt;
• Cloud overspending is a governance problem and every piece of it is fixable with native AWS tools&lt;br&gt;
• Tags are the foundation. Without them, all other cost management is guesswork&lt;br&gt;
• AWS Budgets with team-scoped alerts turns end-of-month surprises into mid-month conversations&lt;br&gt;
• SCPs make cost control structural, not dependent on developer discipline&lt;br&gt;
• Trusted Advisor and Compute Optimizer deliver specific, dollar-valued findings, and treat them as a monthly backlog&lt;br&gt;
• The companies controlling AWS costs in the UAE aren't spending less; they know exactly where every dirham is going&lt;/p&gt;

&lt;h3&gt;
  
  
  How SUDO Helps
&lt;/h3&gt;

&lt;p&gt;At SUDO, we implement this exact framework for businesses across the UAE, from the initial tagging strategy and Control Tower deployment through to ongoing FinOps on AWS advisory and monthly governance reviews. As an AWS Premium Tier Partner and trusted cloud consulting UAE practice, we help organisations across Dubai and the GCC take control of their AWS spend.&lt;br&gt;
If your AWS bill feels like a black box, or if you know there's waste but can't locate it, the right starting point is a clear assessment of where your governance gaps are.&lt;/p&gt;

&lt;p&gt;🔗  Learn more about how SUDO approaches cost management: &lt;a href="https://sudoconsultants.com/cost-optimization-strategies-in-managed-cloud-services/" rel="noopener noreferrer"&gt;Cost Optimization Strategies in Managed Cloud Services&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Ready to Close the Governance Gap?
&lt;/h3&gt;

&lt;p&gt;Cloud governance is not overhead. It is the operating model that makes everything else work.&lt;br&gt;
The four steps above are not complex. They are just disciplines applied through the right tools. Start with what you can measure. Then control what you cannot yet.&lt;/p&gt;

&lt;p&gt;The bill that arrives next month will look different.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://forms.office.com/Pages/ResponsePage.aspx?id=L4yNhBvdhEWWERWaMoylI6Y0mGfvljVBmPflDbMkcRtUMkpEMUQwQjNTRUo3RUJTVDRJNThHMko3Ty4u" rel="noopener noreferrer"&gt;Contact us&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>governance</category>
      <category>costoptimization</category>
      <category>ai</category>
    </item>
    <item>
      <title>How to Cut AWS S3 Storage Costs by 40% Using Lifecycle Policies: A Practical Guide</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Tue, 12 May 2026 08:17:24 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/how-to-cut-aws-s3-storage-costs-by-40-using-lifecycle-policies-a-practical-guide-1mlp</link>
      <guid>https://forem.com/sudoconsultants/how-to-cut-aws-s3-storage-costs-by-40-using-lifecycle-policies-a-practical-guide-1mlp</guid>
      <description>&lt;p&gt;If your AWS bill has been growing month over month and you cannot pinpoint the cause, your S3 buckets are usually where the investigation starts. Most engineering teams configure storage during the early stages of a project and move on without ever setting a lifecycle rule. Over time, application logs pile up, backup files accumulate, and processed media sits untouched in S3 Standard at the same price you pay for live production data.&lt;/p&gt;

&lt;p&gt;For cloud engineers and solutions architects, this is not just a billing problem. It is a governance gap. Without a tiering strategy, your team is paying premium storage rates for data that nobody has accessed in months.&lt;br&gt;
S3 Lifecycle Policies are the most direct way to fix this. They let you automate how data moves through storage classes as it ages, so cost optimization happens continuously without anyone on your team having to manage it manually.&lt;/p&gt;

&lt;p&gt;For organizations that want to look beyond storage and review their entire AWS architecture, our &lt;a href="https://sudoconsultants.com/what-is-an-aws-well-architected-review-a-beginners-guide/" rel="noopener noreferrer"&gt;AWS Well-Architected Review&lt;/a&gt; covers cost efficiency, security, reliability, and performance improvement opportunities across all workloads.&lt;/p&gt;

&lt;p&gt;Amazon S3 Lifecycle Policies let you automatically move data across storage tiers based on access patterns and retention requirements. When paired with S3 Intelligent-Tiering and S3 Glacier, most enterprises see storage cost reductions of 30 to 40 percent without sacrificing accessibility or compliance.&lt;/p&gt;

&lt;p&gt;This guide gives you a complete hands-on walkthrough covering storage class selection, lifecycle rule configuration, versioning strategy, delete marker management, CLI implementation, AWS Console setup, and the best practices that separate a well-managed storage environment from one that just keeps getting more expensive.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why AWS Storage Costs Keep Growing Without Warning
&lt;/h3&gt;

&lt;p&gt;AWS storage bills rarely jump overnight. They grow gradually because of decisions that were never made and processes that were never put in place. When we audit enterprise AWS environments, the same patterns appear repeatedly regardless of industry.&lt;/p&gt;

&lt;p&gt;Application logs are usually the biggest single contributor. A team enables verbose logging during a debugging phase and never sets an expiration date. Two years later, gigabytes of log data are sitting in S3 Standard at the same cost per gigabyte as the production database files the team accesses every day.&lt;/p&gt;

&lt;p&gt;Backup files present a similar problem. They are created automatically on a schedule and retained indefinitely because removing them without a formal policy feels too risky. Compliance records follow a different path. Teams know they need to keep them, but without automated archiving, they tend to stay in high-cost tiers far longer than necessary.&lt;/p&gt;

&lt;p&gt;The underlying issue is consistent: without lifecycle automation, every object in a bucket is treated the same, regardless of how long it has been there or how often it gets accessed. A two-year-old log file costs the same to store as a file your application reads a hundred times a day.&lt;br&gt;
Here is how access patterns actually look for most enterprise data:&lt;/p&gt;

&lt;p&gt;• Application logs are accessed heavily during the first 7 to 30 days for debugging and monitoring, then rarely again&lt;br&gt;
• Financial audit records need to be retained for years, but are rarely retrieved once the relevant reporting period ends&lt;br&gt;
• Media processing outputs are used actively during production and then become archive-only the moment a project is delivered&lt;/p&gt;

&lt;p&gt;Once you understand these patterns for your own data, building the right lifecycle strategy becomes straightforward.&lt;/p&gt;

&lt;p&gt;Choosing the Right S3 Storage Class for Each Data Type&lt;br&gt;
Before you write a single lifecycle rule, you need to understand what each storage class actually costs and what tradeoffs it carries. Choosing the wrong tier for a given data type is one of the main reasons lifecycle configurations fail to deliver meaningful savings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. S3 Standard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 Standard is built for data that gets accessed regularly. It delivers millisecond retrieval and has no minimum storage duration, which means you can delete or transition objects at any point without a penalty. If a file is being read more than once or twice a month, it belongs here.&lt;/p&gt;

&lt;p&gt;Practical candidates include production application files, analytics datasets that are actively queried, media assets served directly to users, and any content your platform reads on a frequent schedule. The moment a dataset's access frequency drops below that threshold, it is a candidate for transition.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. S3 Standard-Infrequent Access (Standard-IA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Standard-IA is the most underused storage class in most AWS accounts. It cuts storage costs by around 46 percent compared to Standard while still delivering millisecond retrieval when you need it, but it carries a per-gigabyte retrieval fee that makes it economical only for data accessed less than once or twice a month.&lt;/p&gt;

&lt;p&gt;Good candidates include monthly finance reports, backup snapshots you would only open after an incident, application logs past their debugging window, and historical datasets used for quarterly reviews. If your data access pattern drops significantly after 30 days, Standard-IA should be your first transition target.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. S3 Intelligent-Tiering&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Intelligent-Tiering is the right choice when you cannot reliably predict how often a dataset will be accessed. Rather than requiring you to define transition timelines up front, it monitors each object individually and automatically moves it between tiers based on actual usage patterns, with no retrieval charges when an object is promoted back to a higher tier.&lt;/p&gt;

&lt;p&gt;It works particularly well for shared enterprise data lakes, large user-generated content libraries, and mixed archives where access varies considerably across different objects. One practical consideration: the per-object monitoring fee of around $0.0025 per 1,000 objects per month makes it less attractive for buckets containing millions of small files under 128 kilobytes. For large files with variable access, the fee is negligible compared to the storage savings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. S3 Glacier Flexible Retrieval and Deep Archive&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Glacier tiers are purpose-built for data you must retain but rarely need to retrieve. At a small fraction of S3 Standard pricing, they suit compliance records, audit trails, legal documents, and long-term backup archives well.&lt;/p&gt;

&lt;p&gt;The difference between the two Glacier tiers comes down to retrieval speed and price. Glacier Flexible Retrieval restores objects in 3 to 5 hours on a standard retrieval request. Glacier Deep Archive takes up to 12 hours but costs under $0.001 per gigabyte per month, making it the cheapest storage option in AWS. Both tiers have minimum storage durations that affect your transition timing: 90 days for Glacier Flexible and 180 days for Deep Archive. For compliance data where emergency access is a possibility, Glacier Flexible Retrieval is the safer choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How S3 Lifecycle Actions Work&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every lifecycle policy uses one or both of the two action types. Understanding how each works before you start writing rules helps you avoid configuration mistakes that can limit your savings or create unexpected retrieval costs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Transition Actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Transition actions automatically move objects from one storage class to another after a defined number of days. There is no manual step required once the rule is in place. Think of it as a scheduled process that shifts data from expensive to cheaper storage as it ages, running continuously in the background without any ongoing effort from your team.&lt;/p&gt;

&lt;p&gt;One important constraint to understand from the start: transitions only move data to colder tiers. A lifecycle rule cannot promote an object back to S3 Standard. If you ever need to move data back to a higher-cost tier for a specific use case that requires a manual copy operation or application-level logic. This means your transition timelines should be grounded in real access data rather than assumptions about how your data will behave.&lt;/p&gt;

&lt;p&gt;A typical transition chain for enterprise data:&lt;/p&gt;

&lt;p&gt;• Days 0 to 30: Object stays in S3 Standard at approximately $0.023 per gigabyte per month&lt;br&gt;
• Day 30: Moves to Standard-IA at approximately $0.0125 per gigabyte per month, which is roughly 46 percent cheaper&lt;br&gt;
• Day 90: Moves to Glacier Deep Archive at under $0.001 per gigabyte per month, which represents more than 95 percent savings compared to Standard&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expiration Actions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Expiration actions are the cleanup side of lifecycle management. Where transition rules reduce cost by moving data to cheaper storage, expiration rules eliminate storage costs by permanently deleting objects that no longer need to be retained.&lt;/p&gt;

&lt;p&gt;Current version expiration sets a hard deletion date for live objects. This is most useful for temporary files such as intermediate processing outputs, session data, or any content that has a clearly defined end of life.&lt;/p&gt;

&lt;p&gt;Noncurrent version expiration becomes critical when you have versioning enabled. Every time an object is overwritten or deleted in a versioned bucket, the previous version is retained and billed at full storage rates. A bucket that has been running with versioning for a year can easily hold three to five times more data than your dashboards suggest, with most of it being old versions that will never be accessed again. A lifecycle rule that deletes noncurrent versions after 60 days, while keeping the most recent three, gives you meaningful recovery capability without the cost of retaining everything.&lt;/p&gt;

&lt;p&gt;Incomplete multipart upload cleanup is the most frequently overlooked savings opportunity in AWS environments. When a large file upload fails partway through, S3 retains all the uploaded parts and bills you for them indefinitely. A lifecycle rule set to abort incomplete multipart uploads after three to seven days eliminates this, and in environments with frequent large file uploads, the savings are more significant than most teams expect.&lt;/p&gt;

&lt;h3&gt;
  
  
  A Real Enterprise Example: 43% Storage Cost Reduction in 90 Days
&lt;/h3&gt;

&lt;p&gt;One of our clients, a mid-size media analytics platform processing video content for e-commerce brands, came to us with a problem that appears in some form in almost every enterprise AWS environment we review. Their S3 bill had grown by 25 percent month over month for six consecutive months, and nobody on the team could identify the source of the growth. When we audited their environment, total storage had crossed 400 terabytes, but active production files accounted for less than 15 percent of it.&lt;/p&gt;

&lt;p&gt;The diagnosis took about an hour. Everything was in S3 Standard. Raw uploaded videos, transcoding outputs, application logs, and seven years of compliance records were all sitting in the same storage class at the same rate with no expiration or transition rules applied anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is what we implemented:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• S3 Standard retained for active media files and logs from the past 30 days&lt;br&gt;
• Standard-IA for processing outputs and logs between 30 and 90 days old&lt;br&gt;
• Glacier Flexible Retrieval for compliance records older than 90 days&lt;br&gt;
• Glacier Deep Archive for anything older than 365 days with no retrieval time requirement&lt;br&gt;
• Noncurrent version deletion after 60 days to stop versioning storage from compounding&lt;br&gt;
• Incomplete multipart upload abort after 7 days to eliminate orphaned upload parts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Results after 90 days:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Monthly S3 spend dropped from approximately $38,000 to $21,500, a 43 percent reduction&lt;br&gt;
• Over 280 terabytes moved to Glacier tiers automatically with zero manual intervention&lt;br&gt;
• Compliance posture improved with all records stored in immutable Glacier storage with documented retention windows&lt;/p&gt;

&lt;p&gt;Many enterprises begin this kind of work during a broader cloud migration or modernization initiative. Our &lt;a href="https://sudoconsultants.com/avoid-these-common-mistakes-in-cloud-migration-services/" rel="noopener noreferrer"&gt;Cloud Migration Services&lt;/a&gt; help teams design AWS environments where cost efficiency is built into the architecture from the start, rather than addressed later when bills become hard to justify.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture Overview: How the Data Flow Works
&lt;/h3&gt;

&lt;p&gt;The lifecycle architecture is designed around how data access patterns actually behave over time. For most enterprise data types, access is high in the first few weeks, drops sharply after 30 days, and reaches near zero beyond three months. The storage tier structure maps directly to that curve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Active Storage to Warm Storage to Cold Storage to Archive to Deletion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is how each transition maps to a specific business rationale and why those thresholds make sense:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; New objects land in S3 Standard, where they are immediately available for application reads, active reporting, and debugging workflows&lt;/li&gt;
&lt;li&gt; At 30 days, objects move to Standard-IA. This timing aligns with the end of most active debugging cycles and monthly reporting windows, where data is still occasionally needed but no longer accessed daily&lt;/li&gt;
&lt;li&gt; At 90 days, objects transition to Glacier. This covers quarterly reporting cycles while keeping data restorable for audit requests. Most operational data that has not been accessed for three months will not be needed again except in exceptional circumstances&lt;/li&gt;
&lt;li&gt; Noncurrent versions older than 60 days are deleted. This gives your team a two-month window to recover from accidental changes or overwrites while preventing old versions from accumulating into a high and growing cost&lt;/li&gt;
&lt;li&gt; Expired delete markers are removed automatically. Without this rule, orphaned markers accumulate and obscure the true size and structure of your bucket&lt;/li&gt;
&lt;li&gt; Objects expire at 365 days, which aligns with standard minimum retention windows for operational data that is not subject to longer compliance holds&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The outcome is a storage environment that manages itself. No monthly cleanup tasks, no manual archiving queues, no spreadsheets tracking which buckets need attention this quarter. Once the rules are written and tested, the cost savings happen continuously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hands-On Implementation Using AWS Console and CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create an S3 Bucket&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start by creating your S3 bucket in the region closest to your application workload. Placing storage in the same region as your computer resources reduces latency and eliminates inter-region data transfer fees that can add up in high-throughput environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;aws s3api create-bucket \&lt;br&gt;
 -bucket your-company-storage-lifecycle \&lt;br&gt;
 -region ap-south-1 \&lt;br&gt;
 -create-bucket-configuration LocationConstraint=ap-south-1&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console Path&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console to Amazon S3 to Buckets to Create bucket&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When setting up the bucket, leave Block Public Access enabled. This is the default, and it acts as a failsafe even if bucket policies are later misconfigured. Keep versioning disabled at this stage. We will enable it in Step 4 with a clear understanding of how it interacts with your lifecycle rules.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fho19c82tlujkb3j4sf14.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fho19c82tlujkb3j4sf14.png" alt=" " width="800" height="289"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Upload and Organize Your Data&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before uploading, organize your data into prefixes that reflect different data categories. This matters because lifecycle rules can be scoped to specific prefixes, which lets you apply different transition timelines to different types of data. A rule targeting the logs/ prefix will not affect objects in your compliance/ directory.&lt;/p&gt;

&lt;p&gt;A prefix structure that works well for most enterprise environments:&lt;/p&gt;

&lt;p&gt;• logs/ for application and access logs that age out quickly&lt;br&gt;
• reports/ for monthly and quarterly business outputs&lt;br&gt;
• media/ for raw and processed image or video assets&lt;br&gt;
• backups/ for database dumps and infrastructure snapshots&lt;br&gt;
• compliance/ for audit records and legal documents requiring the longest retention&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws s3 cp your-local-data/ s3://your-company-storage-lifecycle/ - recursive&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console&lt;/strong&gt;&lt;br&gt;
Open your bucket to upload files and folders. Use the prefix structure above as your folder names when uploading.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftyk4jmt5474wbvjub05k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftyk4jmt5474wbvjub05k.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Apply the Lifecycle Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the step that generates the actual cost savings. Before applying the configuration, two constraints are worth understanding.&lt;/p&gt;

&lt;p&gt;The empty Prefix value in the filter applies the rule to every object in the bucket. That works for a test environment, but is too broad for production. In production, define separate rules scoped to individual prefixes. Also, keep in mind that S3 enforces a minimum of 30 days in Standard before an object can move to Standard-IA, and a minimum of 30 additional days in Standard-IA before it can transition to Glacier.&lt;/p&gt;

&lt;p&gt;Create lifecycle.json&lt;br&gt;
&lt;code&gt;{&lt;br&gt;
"Rules": [&lt;br&gt;
{&lt;br&gt;
"ID": "StorageOptimizationPolicy",&lt;br&gt;
"Filter": { "Prefix": "" },&lt;br&gt;
"Status": "Enabled",&lt;br&gt;
"Transitions": [&lt;br&gt;
{ "Days": 30, "StorageClass": "STANDARD_IA" },&lt;br&gt;
{ "Days": 90, "StorageClass": "GLACIER" }&lt;br&gt;
],&lt;br&gt;
"Expiration": { "Days": 365 },&lt;br&gt;
"NoncurrentVersionExpiration": { "NoncurrentDays": 60 }&lt;br&gt;
}&lt;br&gt;
]&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apply the configuration:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;aws s3api put-bucket-lifecycle-configuration \&lt;br&gt;
 -bucket your-company-storage-lifecycle \&lt;br&gt;
 -lifecycle-configuration file://lifecycle.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console Path&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Bucket to Management tab to Lifecycle rules to Create lifecycle rule. Set transitions at 30 days to Standard-IA and 90 days to Glacier, with object expiration at 365 days.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F92n0vwur4r1t8hihqpmg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F92n0vwur4r1t8hihqpmg.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Enable Versioning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Versioning protects against accidental deletion and overwrites, but it comes with a cost implication that is easy to underestimate. Every time an object is modified or deleted in a versioned bucket, the previous version is retained and billed at full storage rates. In an active environment, this can compound your stored data volume significantly within weeks if you do not pair versioning with noncurrent version expiration rules.&lt;/p&gt;

&lt;p&gt;Enable versioning, knowing that the NoncurrentVersionExpiration setting you added in Step 3 will handle the cleanup automatically. Old versions will be removed on schedule, while your current version remains fully accessible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws s3api put-bucket-versioning \&lt;br&gt;
-bucket your-company-storage-lifecycle \&lt;br&gt;
-versioning-configuration Status=Enabled&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Console Path&lt;/strong&gt;&lt;br&gt;
Bucket to Properties to Bucket Versioning to Edit to Enable&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxldwo6lnf85doztwdr7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxldwo6lnf85doztwdr7u.png" alt=" " width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing Versioning with Lifecycle Policies
&lt;/h3&gt;

&lt;p&gt;Versioning and lifecycle rules work best when they are configured together, but the interaction between them is not always obvious. The most common point of confusion involves delete markers, and getting this wrong can quietly erode the savings your lifecycle rules are delivering elsewhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Actually Happens When You Delete a Versioned Object&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you delete an object in a versioned bucket, S3 does not remove it. It creates a delete marker, which is a zero-byte placeholder that makes the object appear deleted to standard read requests. The previous versions of that object continue to exist in storage underneath the marker, and you continue to be billed for all of them.&lt;/p&gt;

&lt;p&gt;Buckets that have been running with versioning enabled for more than a few months typically contain far more stored data than they appear to. Delete markers accumulate from routine deletions, and the versions beneath them add up without any visibility in standard usage reports. Without lifecycle rules specifically targeting this, the gap between what your bucket seems to contain and what you are actually paying for grows wider over time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to Remove Delete Markers and Old Versions Automatically&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lifecycle rules give you several controls for keeping versioned buckets from becoming expensive over time:&lt;/p&gt;

&lt;p&gt;• Set NoncurrentVersionExpiration with a NoncurrentDays value to delete old versions a set number of days after they are replaced by a newer version&lt;br&gt;
• Use NoncurrentVersionTransition to move noncurrent versions to Glacier before deletion if you want a lower-cost recovery window before permanent removal&lt;br&gt;
• Enable ExpiredObjectDeleteMarker to automatically clean up delete markers once all their associated versions have been deleted&lt;br&gt;
• Use NewerNoncurrentVersions to keep only a specific number of recent versions and delete everything older, so your recovery capability stays consistent without compounding storage costs&lt;/p&gt;

&lt;h3&gt;
  
  
  Key Lifecycle Controls for Versioned Buckets
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Days After Noncurrent&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This setting triggers a transition or expiration based on how many days have passed since a version was replaced by a newer one. It is more practical than an absolute age setting because different objects have different update frequencies, and this control accounts for that variation automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Newer Versions to Retain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This tells S3 how many of the most recent noncurrent versions to preserve before applying expiration rules. Setting this to 3 means you always have the three most recent previous versions available for recovery, while older ones are deleted on schedule.&lt;/p&gt;

&lt;p&gt;A properly configured versioned bucket gives you full recovery capability for recent changes while preventing historical versions and orphaned delete markers from compounding into a significant and growing storage cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Monitor Your Cost Savings Over Time&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lifecycle rules do not need active management once they are in place, but they do benefit from periodic monitoring to confirm they are working as expected and to catch edge cases you did not anticipate when you first wrote them.&lt;/p&gt;

&lt;p&gt;S3 Storage Lens gives you a storage class distribution view across your entire account. Within 30 days of enabling lifecycle rules, your Standard tier should be shrinking, and your Standard-IA tier should be growing. If the standard is not decreasing, the most common causes are an incorrect prefix filter or a rule that is set to Disabled rather than enabled.&lt;/p&gt;

&lt;p&gt;AWS Cost Explorer filtered by S3 and grouped by storage class shows you the cost per tier each month. Comparing this month to the previous month gives you a clear and measurable picture of your savings progress.&lt;/p&gt;

&lt;p&gt;CloudWatch S3 request metrics are useful when retrieval costs increase unexpectedly. A spike in GetObject or RestoreObject requests from a particular prefix usually means your transition threshold is too aggressive for that data type, and objects are being accessed after they have already moved to a tier with retrieval fees.&lt;/p&gt;

&lt;p&gt;A quarterly review of your lifecycle rules is the minimum maintenance cadence for most enterprise environments. Access patterns change as applications evolve, and rules that were accurate six months ago may need adjustment as new data types and prefixes are added to your buckets.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm63wh1tj76b57zt22ykl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm63wh1tj76b57zt22ykl.png" alt=" " width="800" height="378"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before vs After: What Changes When Lifecycle Rules Are Active&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before&lt;/strong&gt;&lt;br&gt;
• All objects sit in S3 Standard regardless of age, access frequency, or whether they will ever be read again&lt;br&gt;
• Storage bills grow month over month with no clear explanation for the increase&lt;br&gt;
• Compliance records, aging logs, and expired backups accumulate without any automated cleanup process&lt;br&gt;
• Archiving decisions are made manually when someone remembers to make them, which in practice means they rarely get made on schedule&lt;br&gt;
• There is no clear view of which prefixes are consuming the most storage or which data has not been accessed in months&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After&lt;/strong&gt;&lt;br&gt;
• Data moves automatically from Standard to Standard-IA to Glacier as it ages, with the entire process running without any manual intervention&lt;br&gt;
• Monthly storage costs decline predictably as the proportion of data in lower-cost tiers grows over time&lt;br&gt;
• Compliance records are automatically moved to immutable Glacier storage with defined and auditable retention windows&lt;br&gt;
• Noncurrent versions, orphaned delete markers, and incomplete multipart uploads are cleaned up on schedule before they become high costs&lt;br&gt;
• Storage Lens and Cost Explorer dashboards give your team clear visibility into storage class distribution, cost trends, and whether your lifecycle rules are performing as designed&lt;/p&gt;

&lt;h3&gt;
  
  
  Advanced Best Practices for Enterprise S3 Optimization
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Enable Encryption&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Encryption should be the default on every S3 bucket that holds enterprise data. Since early 2023, AWS has automatically applied SSE-S3 encryption to all new objects, so most workloads already have a baseline level of protection without any additional configuration.&lt;/p&gt;

&lt;p&gt;Where organizations need to go further is in regulated industries. Healthcare, financial services, and government environments operating under frameworks like HIPAA, PCI-DSS, or SOC 2 often require customer-managed encryption keys for audit trail purposes, key rotation control, and cross-account access restrictions. AWS Key Management Service provides that level of control with a small per-request cost that is almost always justified by the compliance requirement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Apply Strong Access Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Access control for S3 buckets that hold lifecycle-managed data deserves the same discipline you would apply to any sensitive resource in your AWS environment.&lt;/p&gt;

&lt;p&gt;Enable all four Block Public Access settings at the bucket level regardless of your bucket policy configuration. These settings override policy misconfigurations and serve as a permanent safety net. Replace ACLs with bucket policies and IAM role-based access if you have not already done so. ACLs are harder to audit at scale and create more opportunities for unintended access.&lt;/p&gt;

&lt;p&gt;For buckets containing compliance records or backup archives, enable MFA Delete. This requires multi-factor authentication before any versioning configuration or lifecycle rule can be modified or removed, which protects against both accidental changes and unauthorized access.&lt;/p&gt;

&lt;p&gt;Restrict the s3:PutLifecycleConfiguration permission to a specific cloud engineering or DevOps role. Lifecycle rules control how long data is retained and when it is permanently deleted. That level of authority should not be available to all developers by default.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Intelligent-Tiering for Dynamic Workloads&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For organizations managing shared data lakes, large user-generated content libraries, or any dataset where different objects have significantly different access frequencies, Intelligent-Tiering is worth serious consideration as your default storage class.&lt;/p&gt;

&lt;p&gt;The practical advantage is that you do not need to analyze access logs or tune transition timelines by hand. S3 monitors usage at the individual object level and moves each one automatically based on what actually happens rather than what you predicted would happen. The tradeoff is a per-object monitoring fee of approximately $0.0025 per 1,000 objects per month, which becomes significant only in buckets containing millions of small files under 128 kilobytes. For large files with unpredictable access, the monitoring fee is negligible relative to the storage savings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Review Storage Reports Regularly&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lifecycle rules do not stay optimized on their own. Applications grow, data types change, and new prefixes get added to buckets that your original rules were not designed to handle.&lt;/p&gt;

&lt;p&gt;A quarterly review is the right cadence for most enterprise environments. In each review, look at whether any prefix has grown unexpectedly, whether Glacier restore requests are spiking for a particular data type, which would suggest a transition threshold that is too aggressive, whether any new prefixes lack lifecycle coverage, and whether compliance retention requirements have changed since your rules were last updated.&lt;/p&gt;

&lt;p&gt;S3 Storage Lens provides an organization-level dashboard where you can assess storage class distribution, access patterns, and cost trends across every bucket in your account from a single view. It makes quarterly reviews significantly faster and more actionable than reviewing individual buckets one at a time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;S3 Lifecycle Policies are one of the highest-return optimizations available in AWS, not because they are technically complex but because most organizations simply have not implemented them. The data is already there. The costs are already accumulating. All that is missing is the automation to manage the data through its natural lifecycle.&lt;/p&gt;

&lt;p&gt;The savings that matter most consistently come from the areas teams tend to overlook. Noncurrent versions accumulate silently in versioned buckets. Incomplete multipart uploads from failed processes stack up without any visible indicator. Expired delete markers pile up after bulk deletions and inflate your storage footprint in ways that standard reporting does not make obvious. None of these gets addressed without explicit lifecycle rules targeting them.&lt;/p&gt;

&lt;p&gt;Start with a single bucket. Write transition timelines based on real access data from Storage Lens rather than assumptions. Add expiration rules for temporary data and noncurrent versions. Measure the results after 30 days. What you find will almost certainly give you the template you need to replicate the approach across every bucket in your account.&lt;/p&gt;

&lt;p&gt;S3 cost optimization at scale is not a project with an end date. It is an ongoing practice that compounds in value as your data volume grows. &lt;/p&gt;

&lt;p&gt;Organizations that build lifecycle governance into their storage architecture from the beginning end up with storage costs that grow proportionally to their actual usage rather than exponentially because nobody was managing the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Reducing Your AWS Storage Costs This Week&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If your S3 bill has been growing without a clear explanation, you now have everything you need to identify the cause and fix it. The lifecycle rules, CLI commands, and JSON configurations in this guide are production-ready. Pick one bucket, apply the policy, and check your Storage Lens dashboard after 30 days to see the impact.&lt;/p&gt;

&lt;p&gt;If you would prefer a comprehensive review of your current storage environment before making changes, our AWS Well-Architected Review is the right starting point. We assess your storage class distribution, lifecycle gaps, versioning configuration, and access patterns across your entire account and deliver a prioritized action plan with projected savings attached to each recommendation.&lt;/p&gt;

&lt;p&gt;The enterprises we work with typically see storage cost reductions of 30 to 45 percent within 90 days of implementing lifecycle governance. The savings do not require re-architecture. They require the right rules applied to the right data.&lt;/p&gt;

&lt;p&gt;At SUDO, we help enterprises build AWS environments that are cost-efficient, secure, and scalable through our &lt;a href="https://sudoconsultants.com/top-7-reasons-startups-need-cloud-consulting-services-from-day-one/" rel="noopener noreferrer"&gt;Cloud Consulting Services&lt;/a&gt;, AWS Well-Architected Reviews, and Cloud Migration Solutions.&lt;br&gt;
If you want to reduce your S3 spend, improve your retention governance, or bring your storage architecture up to enterprise standards, &lt;a href="https://forms.office.com/r/vrehiGRz4H" rel="noopener noreferrer"&gt;reach out to our AWS team&lt;/a&gt;, and we will show you exactly where the opportunity is in your environment.&lt;/p&gt;

</description>
      <category>automation</category>
      <category>aws</category>
      <category>infrastructure</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>AWS DevOps Agent: Automated Incident Response and Root Cause Analysis on AWS</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Tue, 14 Apr 2026 08:07:45 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/aws-devops-agent-automated-incident-response-and-root-cause-analysis-on-aws-fkg</link>
      <guid>https://forem.com/sudoconsultants/aws-devops-agent-automated-incident-response-and-root-cause-analysis-on-aws-fkg</guid>
      <description>&lt;h3&gt;
  
  
  &lt;em&gt;Stop Waking Up at 3 AM: How AWS DevOps Agent Automates Incident Response&lt;/em&gt;
&lt;/h3&gt;

&lt;p&gt;Every on-call engineer knows the drill: a CloudWatch alarm fires at 3 AM, and you spend the next 30 minutes manually correlating logs, metrics, and service events across five browser tabs. This is not a scalability problem; it is an AWS automation gap that AWS DevOps Agent is designed to close.&lt;/p&gt;

&lt;p&gt;AWS DevOps Agent, launched in preview in early 2026, is an Anthropic-powered AI embedded directly into the AWS console. It is built to behave like an experienced on-call engineer: it receives your alarm, investigates autonomously across your entire AWS environment, correlates signals, and delivers a diagnosis with recommended actions. No hints. No prompting. Just results.&lt;/p&gt;

&lt;p&gt;This is not another AI chatbot where you paste log excerpts and ask questions. The agent has native read access to your AWS environment and performs its own investigation from start to finish.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who Should Use AWS DevOps Agent
&lt;/h3&gt;

&lt;p&gt;DevOps and Cloud Engineers managing on-call rotations, AWS DevOps Agent acts as an AI-powered second responder that continuously monitors your AWS environment and never misses a log correlation.&lt;/p&gt;

&lt;p&gt;CTOs and Engineering Managers evaluating AI-driven cloud operations to reduce MTTR (mean time to resolution) and operational overhead without growing headcount.&lt;/p&gt;

&lt;p&gt;Teams in e-commerce, SaaS, banking, and healthcare industries where every minute of downtime has a direct dollar cost and 3 AM incidents are non-negotiable.&lt;/p&gt;

&lt;h3&gt;
  
  
  How AWS DevOps Agent Integrates with CloudWatch, EventBridge, and Your Existing AWS Stack
&lt;/h3&gt;

&lt;p&gt;The agent does not require sidecar infrastructure or a separate observability platform. It integrates with your existing AWS setup and acts as an autonomous reasoning layer on top of it.&lt;/p&gt;

&lt;p&gt;When a CloudWatch alarm fires, an EventBridge rule routes the event to the agent. The agent then independently queries CloudWatch Logs, EC2 metrics, SSM Run Command, the AWS Health API, and other data sources, without being told where to look. It delivers a structured incident report with findings and recommended actions.&lt;/p&gt;

&lt;p&gt;The flow is: &lt;em&gt;CloudWatch Alarm → EventBridge Rule → AWS DevOps Agent → Investigation → Findings and Recommendations&lt;/em&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step-by-Step: Implementing AWS DevOps Agent for Automated EC2 Incident Response
&lt;/h3&gt;

&lt;p&gt;The scenario below is a real walkthrough. An EC2 instance running a production PHP application spikes to 98% CPU utilization. No human investigates. The agent is triggered and given only the alarm event. Everything that follows is autonomous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1:  Enable the agent and connect your alarm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enable AWS DevOps Agent from the AWS console under the Operations category. Then create an EventBridge rule that routes your CloudWatch CPU alarm to the agent’s event bus.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws events put-rule \&lt;br&gt;
  --name "cpu-spike-to-devops-agent" \&lt;br&gt;
  --event-pattern '{&lt;br&gt;
    "source": ["aws.cloudwatch"],&lt;br&gt;
    "detail-type": ["CloudWatch Alarm State Change"],&lt;br&gt;
    "detail": {&lt;br&gt;
      "alarmName": ["EC2-CPU-High"],&lt;br&gt;
      "state": {"value": ["ALARM"]}&lt;br&gt;
    }&lt;br&gt;
  }' \&lt;br&gt;
  --state ENABLED&lt;br&gt;
aws events put-targets \&lt;br&gt;
  --rule "cpu-spike-to-devops-agent" \&lt;br&gt;
  --targets '[{&lt;br&gt;
    "Id": "devops-agent-target",&lt;br&gt;
    "Arn": "arn:aws:devops-agent:ap-south-1:ACCOUNT_ID:agent/default"&lt;br&gt;
  }]'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Define the CloudWatch alarm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws cloudwatch put-metric-alarm \&lt;br&gt;
  --alarm-name "healthcheck360-CPU-High" \&lt;br&gt;
  --alarm-description "CPU utilization above 85% for 5 minutes" \&lt;br&gt;
  --metric-name CPUUtilization \&lt;br&gt;
  --namespace AWS/EC2 \&lt;br&gt;
  --statistic Average \&lt;br&gt;
  --period 300 \&lt;br&gt;
  --threshold 85 \&lt;br&gt;
  --comparison-operator GreaterThanThreshold \&lt;br&gt;
  --evaluation-periods 1 \&lt;br&gt;
  --dimensions '[{"Name":"InstanceId","Value":"i-0abc1234def567890"}]' \&lt;br&gt;
  --alarm-actions "arn:aws:events:ap-south-1:ACCOUNT_ID:rule/cpu-spike-to-devops-agent"&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Simulate the CPU spike&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To replicate this scenario in a test environment, stress the instance using SSM Run Command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws ssm send-command \&lt;br&gt;
  --instance-ids "i-0abc1234def567890" \&lt;br&gt;
  --document-name "AWS-RunShellScript" \&lt;br&gt;
  --parameters '{"commands":["stress --cpu 4 --timeout 600"]}' \&lt;br&gt;
  --comment "Simulate CPU spike for DevOps Agent demo"&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What the Agent Did: Step by Step
&lt;/h3&gt;

&lt;p&gt;The following is the agent’s investigation trace. It received one input: the alarm state change event. Everything below is what it derived on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+00:04:&lt;/strong&gt; CloudWatch Alarm Alarm EC2-CPU-High transitioned to ALARM state. CPUUtilization = 98.4% over a 5-minute average.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+00:09:&lt;/strong&gt; Agent Received alarm event via EventBridge. Resolved instance metadata: t3.medium, ap-south-1a, running Amazon Linux 2, 2 vCPUs. Instance state: running. Initiating investigation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+00:22:&lt;/strong&gt; Agent Queried CloudWatch Metrics for CPUUtilization over the past 2 hours. CPU was stable at 18–22% for approximately 115 minutes, then escalated sharply to 98.4% over a 7-minute window. Spike onset: 02:41 UTC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+00:38:&lt;/strong&gt; Agent Cross-referenced the spike onset against CloudWatch Logs for /var/log/php-fpm/error.log. Found 847 repeated entries: “PHP Fatal error: Allowed memory size of 134217728 bytes exhausted.” First occurrence at 02:40:58 UTC. Correlation: strong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+00:51:&lt;/strong&gt; Agent Issued SSM Run Command: ps aux –sort=-%cpu | head -15. Top process: php-fpm: pool www, consuming 4 processes at 24% CPU each. Total PHP-FPM CPU: 96.1%. No other anomalous processes were found.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+01:02:&lt;/strong&gt; Agent Examined ALB access logs via S3. Request volume at 02:40 UTC: 2,847 requests per minute, up from a 312 req/min baseline. Origin IPs concentrated across 3 CIDR ranges not previously seen. Pattern consistent with an external load spike or traffic anomaly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+01:18:&lt;/strong&gt; Agent checked the AWS Health Dashboard API for ap-south-1 service events. No active incidents. CPU contention is instance-specific, not regional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+01:29:&lt;/strong&gt; Agent Queried current PHP-FPM configuration via SSM: pm.max_children = 5, memory_limit = 128M. At 2,847 req/min with 5 workers on 2 vCPUs: the worker pool is severely underprovisioned for this traffic volume. Memory is not the bottleneck. CPU is.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+01:44:&lt;/strong&gt; Agent Root cause identified. Generating incident summary and remediation recommendations.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the Agent Concluded
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Critical: PHP-FPM worker pool exhaustion under traffic surge&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;A 9x increase in inbound request volume at 02:40 UTC overwhelmed the PHP-FPM worker pool (pm.max_children = 5) on a 2-vCPU instance. Workers queued and retried, saturating both CPU cores. The PHP memory exhaustion errors in the logs are a symptom of worker thrashing, not the root cause.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Warning: No Auto Scaling configured on this instance&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Instance i-0abc1234def567890 is not part of an Auto Scaling Group. The traffic spike had no horizontal scale-out path. A single t3.medium was absorbing all inbound load with no relief mechanism.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Observation: Traffic origin suggests a non-organic spike&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;ALB logs show 68% of the spike traffic originated from 3 CIDR blocks not previously observed during the baseline window. This may indicate a load test, bot activity, or a marketing campaign without prior capacity planning coordination.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the Agent Recommended
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Increase pm.max_children in /etc/php-fpm.d/&lt;a href="http://www.conf" rel="noopener noreferrer"&gt;www.conf&lt;/a&gt; from 5 to 20–25 and restart PHP-FPM. This reduces CPU saturation by distributing load across more workers without requiring an instance resize.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Move the instance behind an Auto Scaling Group with a target tracking policy on CPUUtilization at 60%. Configure scale-out to add t3.medium instances when the threshold is breached for 2 consecutive minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Investigate the three anomalous CIDR blocks in the ALB access logs. If confirmed as bot traffic, add a WAF rate-based rule capping requests to 100 per IP per 5-minute window from unknown CIDR ranges.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consider upgrading from t3.medium (2 vCPU, 4GB RAM) to t3.large or c6i.large if PHP-FPM worker tuning alone proves insufficient at sustained peak load.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add a CloudWatch alarm on php-fpm_active_processes via the CloudWatch Agent to detect worker pool exhaustion before it saturates CPU, giving you a leading indicator rather than a lagging one.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To apply the PHP-FPM fix immediately via SSM without SSH:&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS DevOps Agent vs. Manual Incident Response: Speed, Accuracy, and Scale
&lt;/h3&gt;

&lt;p&gt;AWS DevOps Agent completed a full root cause analysis in under two minutes, autonomously correlating CloudWatch metrics, PHP-FPM logs, ALB access logs, and the AWS Health API. A human engineer performing the same investigation typically needs 15–40 minutes, assuming full familiarity with the environment.&lt;/p&gt;

&lt;p&gt;The implications go beyond speed. The agent has no knowledge gaps about your environment’s history. It does not skip the ALB logs because it is tired. It does not miss the PHP-FPM configuration because it assumes the problem was infrastructure. It checks everything systematically.&lt;/p&gt;

&lt;p&gt;For lean DevOps teams or those operating across time zones, AWS DevOps Agent delivers an always-on, AI-powered first response. The on-call rotation doesn’t disappear, but the first 20 minutes of every incident now happen without a human.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>agentaichallenge</category>
      <category>automation</category>
      <category>ai</category>
    </item>
    <item>
      <title>Implementing AWS Security &amp; Compliance: A Hands-On Guide to IAM, Recovery, and Governance</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Fri, 10 Apr 2026 07:42:34 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/implementing-aws-security-compliance-a-hands-on-guide-to-iam-recovery-and-governance-68j</link>
      <guid>https://forem.com/sudoconsultants/implementing-aws-security-compliance-a-hands-on-guide-to-iam-recovery-and-governance-68j</guid>
      <description>&lt;h3&gt;
  
  
  Introduction
&lt;/h3&gt;

&lt;p&gt;When organizations move to AWS, one of the biggest misconceptions is that security and compliance are automatically handled by the cloud provider. In reality, AWS follows a shared responsibility model, where AWS secures the infrastructure, but everything inside your account is your responsibility.&lt;br&gt;
This is where most real-world issues begin.&lt;/p&gt;

&lt;p&gt;Teams often deploy workloads quickly but overlook:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fine-grained access control in IAM &lt;/li&gt;
&lt;li&gt;Proper audit logging across regions &lt;/li&gt;
&lt;li&gt;Continuous compliance monitoring &lt;/li&gt;
&lt;li&gt;Well-defined disaster recovery strategies &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As a result, environments become difficult to audit, risky to operate, and non-compliant with enterprise or regulatory standards.&lt;/p&gt;

&lt;p&gt;This guide takes a hands-on implementation approach to AWS cloud security and compliance. Instead of discussing theory, we will walk through how to actually configure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identity and Access Management (IAM) &lt;/li&gt;
&lt;li&gt;Security monitoring and compliance services &lt;/li&gt;
&lt;li&gt;Disaster recovery mechanisms &lt;/li&gt;
&lt;li&gt;Governance using AWS Organizations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each section includes console steps, CLI commands, and practical reasoning so you understand not just how, but why each control is important.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. AWS Security &amp;amp; Compliance Architecture Overview
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7abpspgz5701z1xqx2vr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7abpspgz5701z1xqx2vr.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before diving in, here is how a secure AWS environment is structured and why each layer matters.&lt;/p&gt;

&lt;p&gt;A well-architected setup typically consists of multiple layers:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Identity Layer&lt;/strong&gt;&lt;br&gt;
IAM controls who can access what. This includes users, roles, and policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security and Monitoring Layer&lt;/strong&gt;&lt;br&gt;
Services like CloudTrail, AWS Config, GuardDuty, and Security Hub provide visibility into activities, configuration changes, and threats.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure Layer&lt;/strong&gt;&lt;br&gt;
Your workloads run inside a VPC with properly segmented subnets and controlled access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recovery Layer&lt;/strong&gt;&lt;br&gt;
Backup strategies, cross-region replication, and failover mechanisms ensure business continuity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Governance Layer&lt;/strong&gt;&lt;br&gt;
AWS Organizations and Service Control Policies enforce rules across accounts and prevent misconfigurations.&lt;/p&gt;

&lt;p&gt;The key idea is &lt;strong&gt;defense in depth&lt;/strong&gt;. No single service guarantees security, but together they create a resilient system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ssin07b1vgv6a6ygna4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ssin07b1vgv6a6ygna4.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Implementing Identity and Access Management (IAM) in AWS
&lt;/h3&gt;

&lt;p&gt;IAM is the most critical component of AWS cloud security. If access is not properly controlled, even the best monitoring setup cannot prevent misuse.&lt;/p&gt;

&lt;p&gt;In real-world environments, misconfigured IAM permissions are one of the leading causes of security incidents in AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create an IAM Role&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;IAM roles are preferred over users for most workloads because they provide temporary credentials and reduce long-term risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Console Steps&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to IAM → Roles &lt;/li&gt;
&lt;li&gt;Click on Create Role &lt;/li&gt;
&lt;li&gt;Choose a trusted entity (for example, EC2 or custom) &lt;/li&gt;
&lt;li&gt;Attach only required permissions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1gxus2djo5ivrihx2o5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl1gxus2djo5ivrihx2o5.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws iam create-role \&lt;br&gt;
 - role-name S3ReadOnlyRole \&lt;br&gt;
 - assume-role-policy-document file://trust-policy.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Using roles instead of static credentials aligns with AWS IAM best practices and reduces the risk of credential leakage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Apply Least Privilege Access&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A common mistake is granting excessive permissions using wildcards. Instead, define precise access.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
 "Effect": "Allow",&lt;br&gt;
 "Action": ["s3:GetObject"],&lt;br&gt;
 "Resource": "arn:aws:s3:::example-bucket/*"&lt;br&gt;
 }&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jg3xclai3oi3fw3v5se.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1jg3xclai3oi3fw3v5se.png" alt=" " width="800" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This attaches AmazonS3ReadOnlyAccess, which is read-only on S3 and nothing broader.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws iam attach-role-policy \&lt;br&gt;
  --role-name S3ReadOnlyRole \&lt;br&gt;
  --policy-arn arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Practice&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Always scope:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Actions &lt;/li&gt;
&lt;li&gt;Resources &lt;/li&gt;
&lt;li&gt;Conditions (if applicable)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is essential for compliance frameworks like ISO 27001 and SOC 2.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Enable Multi-Factor Authentication (MFA)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MFA adds a layer of security beyond passwords.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubrwrck7aspxf04hf1pw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubrwrck7aspxf04hf1pw.png" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here, MFA is configured using an authenticator app by scanning a QR code, which ensures that even if credentials are compromised, unauthorized access is still prevented.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws iam create-virtual-mfa-device \&lt;br&gt;
  --virtual-mfa-device-name MyMFADevice \&lt;br&gt;
  --outfile /tmp/mfa.png \&lt;br&gt;
  --bootstrap-method QRCodePNG&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Insight&lt;/strong&gt;&lt;br&gt;
Many security breaches occur due to compromised credentials. MFA significantly reduces this risk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Organize Access Using IAM Groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of assigning permissions directly to users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create groups &lt;/li&gt;
&lt;li&gt;Attach policies to groups &lt;/li&gt;
&lt;li&gt;Add users to groups&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v8ssgjyz82c9a3c6mwv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1v8ssgjyz82c9a3c6mwv.png" alt=" " width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An IAM group is created, and the AmazonS3ReadOnlyAccess policy is attached, ensuring that all users added to this group inherit consistent and controlled permissions.&lt;/p&gt;

&lt;p&gt;This simplifies management and ensures consistency.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Enable IAM Access Analyzer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;IAM Access Analyzer is a critical tool for identifying unintended external access to your AWS resources. It continuously analyzes resource-based policies and flags resources that are shared with external accounts, the public internet, or unknown principals.&lt;/p&gt;

&lt;p&gt;Access Analyzer serves three key functions: finding externally exposed resources, generating least-privilege policies from actual CloudTrail activity, and detecting unused access. Together, these help you continuously right-size your IAM posture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws accessanalyzer create-analyzer \&lt;br&gt;
--analyzer-name MyAnalyzer \&lt;br&gt;
--type ACCOUNT&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without Access Analyzer, you cannot systematically detect S3 buckets, KMS keys, SQS queues, or IAM roles inadvertently exposed to the public or external accounts. It is essential for both compliance validation and continuous least-privilege enforcement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Set IAM Permission Boundaries&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;IAM Permission Boundaries define the maximum permissions that an IAM entity (user or role) can have, regardless of what policies are attached to it. They are the primary mechanism for safely delegating role creation to developers or automation without enabling privilege escalation.&lt;/p&gt;

&lt;p&gt;For example, a developer account may be granted permission to create IAM roles, but with a boundary policy that caps those roles at S3 read-only access. Even if a developer attaches AdministratorAccess to a role they create, the boundary silently limits effective permissions to the approved scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws iam put-role-permissions-boundary \&lt;br&gt;
 --role-name DeveloperRole \&lt;br&gt;
 --permissions-boundary arn:aws:iam::ACCOUNT-ID:policy/DeveloperBoundaryPolicy&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 7: Manage Secrets with AWS Secrets Manager&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the most common compliance failures is hardcoding passwords, API keys, and database credentials in application code or environment variables. AWS Secrets Manager provides a secure, centralized store for application secrets with automatic rotation and KMS-backed encryption.&lt;/p&gt;

&lt;p&gt;Secrets Manager integrates natively with RDS, Redshift, and DocumentDB to rotate credentials automatically without requiring application code changes. Each secret is encrypted with a KMS Customer Managed Key (CMK), giving you full control over key access and rotation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws secretsmanager create-secret \&lt;br&gt;
 --name MyDatabasePassword \&lt;br&gt;
 --secret-string '{"username":"admin","password":"P@ssw0rd!"}' \&lt;br&gt;
 --kms-key-id alias/MyCMK&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best Practice&lt;/strong&gt;&lt;br&gt;
Enable automatic rotation for all database credentials, API keys, and OAuth tokens. Combine Secrets Manager with VPC endpoints so that Lambda functions and EC2 instances retrieve secrets without traversing the public internet. This is a baseline requirement for SOC 2 and PCI-DSS compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Setting Up AWS Cloud Security Monitoring and Compliance
&lt;/h3&gt;

&lt;p&gt;Security is not just about prevention. It is about visibility, detection, and response. The AWS services below give you all three.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Enable CloudTrail&lt;/strong&gt;&lt;br&gt;
CloudTrail records all API activity, which is critical for auditing and investigations.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5zl69shbxpq2qcllxt8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj5zl69shbxpq2qcllxt8.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A multi-region CloudTrail is configured to ensure that all API activity across AWS regions is captured and stored securely in an S3 bucket for auditing and compliance purposes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws cloudtrail create-trail \&lt;br&gt;
 --name MyTrail \&lt;br&gt;
 --s3-bucket-name my-cloudtrail-logs \&lt;br&gt;
 --is-multi-region-trail&lt;br&gt;
aws cloudtrail start-logging - name MyTrail&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Without CloudTrail, you cannot answer:&lt;/li&gt;
&lt;li&gt;Who made a change&lt;/li&gt;
&lt;li&gt;When it happened&lt;/li&gt;
&lt;li&gt;What exactly was modified&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Hardening CloudTrail: Log Integrity and Immutable Storage
&lt;/h3&gt;

&lt;p&gt;Storing logs in S3 is not enough. An attacker who gains account access can delete CloudTrail logs to cover their tracks, making your entire audit trail worthless. You must enforce log integrity using the following controls:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log file validation:&lt;/strong&gt; CloudTrail can generate a digest file every hour that contains the hash of every log file delivered. Enable this so you can cryptographically prove that no log was tampered with after delivery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;S3 Object Lock (WORM storage):&lt;/strong&gt; Enable Object Lock on your CloudTrail S3 bucket in Compliance mode with a retention period aligned to your compliance requirements (typically 90 days to 1 year). Once locked, no user, including the root account, can delete or overwrite those log objects during the retention window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;KMS encryption on the trail:&lt;/strong&gt; Encrypt CloudTrail log files using a Customer Managed Key (CMK). This ensures that even if someone gains read access to S3, they cannot read logs without also having KMS decrypt permission, which you control through key policy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws cloudtrail update-trail \&lt;br&gt;
 --name MyTrail \&lt;br&gt;
 --enable-log-file-validation \&lt;br&gt;
 --kms-key-id alias/CloudTrailCMK&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Enable AWS Config&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Config tracks configuration changes and evaluates compliance continuously.&lt;/p&gt;

&lt;p&gt;AWS Config plays a critical role in detecting configuration drift, ensuring that resources remain aligned with defined security baselines over time.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gd1wmf69i469cy0ycov.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1gd1wmf69i469cy0ycov.png" alt=" " width="800" height="675"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Config is enabled to record all resource configurations, including global resources like IAM, allowing continuous monitoring and compliance evaluation across the environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws configservice put-configuration-recorder \&lt;br&gt;
 --configuration-recorder name=default,roleARN=arn:aws:iam::ACCOUNT-ID:role/config-role&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Rules&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3 buckets must not be public&lt;/li&gt;
&lt;li&gt;Root account usage should be restricted&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 3: Enable GuardDuty
&lt;/h3&gt;

&lt;p&gt;GuardDuty provides threat detection using anomaly detection and threat intelligence.&lt;/p&gt;

&lt;p&gt;It uses machine learning and threat intelligence feeds to detect anomalies such as unauthorized access attempts and unusual API activity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuwy0slkbin1ysfm6f0t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuwy0slkbin1ysfm6f0t.png" alt=" " width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxef3utx0me7gbbxjkaus.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxef3utx0me7gbbxjkaus.png" alt=" " width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;GuardDuty is enabled to continuously monitor the AWS environment for suspicious activity, unauthorized access, and potential threats, providing a centralized view of security findings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws guardduty create-detector - enable&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Enable Security Hub&lt;/strong&gt;&lt;br&gt;
Security Hub aggregates findings and provides a compliance score.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzswrpns0j8y7c9ci3f0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgzswrpns0j8y7c9ci3f0.png" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl4e61mlfut26q4k0slda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl4e61mlfut26q4k0slda.png" alt=" " width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Security Hub provides a centralized view of security findings and compliance posture by aggregating results from multiple AWS services, including GuardDuty, AWS Config, and IAM checks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws securityhub enable-security-hub&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: Enable Amazon Macie for Sensitive Data Discovery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You cannot claim compliance without knowing what data you actually have in your S3 buckets. Amazon Macie uses machine learning to automatically discover, classify, and protect sensitive data, including Personally Identifiable Information (PII), financial data, credentials, and API keys stored in S3.&lt;/p&gt;

&lt;p&gt;Macie continuously inventories your S3 buckets and evaluates them for access controls, encryption status, and public exposure. It generates findings when sensitive data is discovered in unencrypted or publicly accessible buckets, which feed directly into Security Hub for centralized visibility.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws macie2 enable-macie&lt;br&gt;
aws macie2 create-classification-job \&lt;br&gt;
 --job-type SCHEDULED \&lt;br&gt;
 --name SensitiveDataScan \&lt;br&gt;
 --s3-job-definition file://macie-job.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GDPR, HIPAA, and PCI-DSS all require that you know where sensitive data lives. Without Macie, compliance is theoretical rather than real. A single misconfigured S3 bucket containing PII could trigger a reportable breach under GDPR, so catching it early matters.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6: Enable AWS Audit Manager&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The blog has covered monitoring, detection, and logging. But compliance requires more than monitoring tools: you need a structured way to prove controls to auditors. AWS Audit Manager is the primary AWS service built for this purpose.&lt;/p&gt;

&lt;p&gt;Audit Manager automates the collection of evidence against industry-standard frameworks, including SOC 2, PCI-DSS, HIPAA, GDPR, and CIS Benchmarks. It pulls evidence directly from AWS Config rules, CloudTrail activity, Security Hub findings, and IAM policies, then maps each piece of evidence to the specific control it satisfies. This creates an audit-ready package without manual spreadsheet work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws auditmanager register-account&lt;br&gt;
aws auditmanager create-assessment \&lt;br&gt;
 --name SOC2Assessment \&lt;br&gt;
 --framework-id &amp;lt;SOC2_FRAMEWORK_ID&amp;gt; \&lt;br&gt;
 --assessment-reports-destination file://destination.json \&lt;br&gt;
 --roles file://roles.json \&lt;br&gt;
 --scope file://scope.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why it matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Without Audit Manager, there is no structured, control-to-evidence mapping between your AWS configuration and compliance requirements. Security Hub tells you what is failing. Audit Manager tells you what that means against SOC 2 CC6.1 or PCI-DSS Requirement 10, and packages it for auditors. Both are necessary for a production compliance program.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3a. Encryption: KMS, Customer Managed Keys, and Data-at-Rest / In-Transit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Encryption is foundational to any security and compliance program. In AWS, encryption covers two domains: data at rest (stored data) and data in transit (data moving between services or clients). Neither is optional for regulated workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a Customer Managed Key (CMK) in AWS KMS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS-managed keys are convenient but give you limited control. Customer Managed Keys (CMKs) let you define exactly who can use and administer the key through a key policy, enable automatic annual key rotation, and audit every cryptographic operation via CloudTrail. CMKs are the standard for compliance workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws kms create-key \&lt;br&gt;
 --description "CMK for S3 and RDS encryption" \&lt;br&gt;
 --key-usage ENCRYPT_DECRYPT \&lt;br&gt;
 --origin AWS_KMS&lt;br&gt;
aws kms enable-key-rotation - key-id &amp;lt;key-id&amp;gt;&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Enable SSE-KMS on S3&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apply SSE-KMS as the default encryption policy on all S3 buckets used for sensitive or regulated data. Every object written to the bucket is automatically encrypted using your CMK, and every decrypt operation is logged in CloudTrail. Combine this with a bucket policy that denies any PutObject request missing the x-amz-server-side-encryption header.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws s3api put-bucket-encryption \&lt;br&gt;
 --bucket my-sensitive-bucket \&lt;br&gt;
 --server-side-encryption-configuration '{"Rules":[{"ApplyServerSideEncryptionByDefault":{"SSEAlgorithm":"aws:kms","KMSMasterKeyID":"alias/MyCMK"}}]}'&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Enforce Encryption in Transit with TLS and ACM&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;All data in transit must be encrypted using TLS 1.2 or higher. AWS Certificate Manager (ACM) provides free, auto-renewing TLS certificates for use with ALB, CloudFront, API Gateway, and other services. For S3, enforce TLS by adding a bucket policy that denies any request where the condition aws:SecureTransport is false.&lt;/p&gt;

&lt;p&gt;For RDS and other managed services, enable SSL/TLS connections at the parameter group level. For RDS MySQL, set require_secure_transport=ON. For PostgreSQL, set ssl=1 and enforce it using an IAM policy condition that requires rds:ssl.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Envelope Encryption&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Envelope encryption is how AWS KMS works at scale. Encrypting large amounts of data directly with the CMK is not practical because it has size limits and incurs per-API-call charges. Instead, AWS generates a Data Encryption Key (DEK) to encrypt your data locally, then uses the CMK to encrypt only the DEK. AWS SDKs handle this automatically. Understanding the model matters for compliance documentation and for any custom encryption built with the AWS Encryption SDK.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3b. VPC Security: Network Segmentation, Flow Logs, and VPC Endpoints&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A VPC is mentioned in the architecture overview, but implementing it securely requires explicit hands-on configuration. The Infrastructure Layer is only as strong as its network controls. The following steps cover the critical components.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Public/Private Subnet Segmentation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Never place databases, caches, or internal services in public subnets. The standard pattern is: public subnets contain only load balancers and NAT gateways; private subnets contain application servers; isolated subnets (no route to the internet) contain databases. This limits the blast radius if any tier is compromised.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Configure Security Groups and NACLs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Security Groups are stateful firewalls that operate at the instance level. Use them to whitelist only required ports and source ranges: for example, allow port 443 inbound from 0.0.0.0/0 on the ALB security group, but allow port 3306 only from the application-tier security group on the database security group.&lt;/p&gt;

&lt;p&gt;Network ACLs (NACLs) are stateless and operate at the subnet boundary. Use them as a second line of defense to explicitly deny known-malicious IP ranges and block unwanted outbound traffic that security groups might miss due to their stateful nature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI (Create Security Group)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws ec2 create-security-group \&lt;br&gt;
 --group-name DatabaseSG \&lt;br&gt;
 --description "Allow MySQL from app tier only" \&lt;br&gt;
 --vpc-id vpc-xxxxxxxx&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Enable VPC Flow Logs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;VPC Flow Logs capture metadata about all IP traffic entering and leaving your VPC, subnets, and individual ENIs. They are essential for incident investigation, detecting lateral movement, and proving to auditors that you have network-level visibility. Send flow logs to CloudWatch Logs or S3 for querying with Athena.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws ec2 create-flow-logs \&lt;br&gt;
 --resource-type VPC \&lt;br&gt;
 --resource-ids vpc-xxxxxxxx \&lt;br&gt;
 --traffic-type ALL \&lt;br&gt;
 --log-destination-type s3 \&lt;br&gt;
 --log-destination arn:aws:s3:::my-flow-logs-bucket&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Configure VPC Endpoints&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here is something worth knowing: even though you own both your EC2 instance and your S3 bucket, traffic between them travels over the public internet by default. VPC endpoints fix this by keeping all traffic within the AWS network, and they let you apply endpoint policies to restrict exactly which buckets or KMS keys are accessible from your VPC.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws ec2 create-vpc-endpoint \&lt;br&gt;
 --vpc-id vpc-xxxxxxxx \&lt;br&gt;
 --service-name com.amazonaws.us-east-1.s3 \&lt;br&gt;
 --vpc-endpoint-type Gateway \&lt;br&gt;
 --route-table-ids rtb-xxxxxxxx&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Designing AWS Disaster Recovery for High Availability
&lt;/h3&gt;

&lt;p&gt;A robust AWS disaster recovery strategy. Keeps your system available even when failures occur.&lt;/p&gt;

&lt;p&gt;A well-designed AWS disaster recovery strategy minimises downtime and protects business-critical workloads from regional outages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Configure AWS Backup&lt;/strong&gt;&lt;br&gt;
AWS Backup centralizes backup management across services.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57uu9ln9ilhopl78ot81.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F57uu9ln9ilhopl78ot81.png" alt=" " width="800" height="736"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An AWS Backup plan is created to automate daily backups with a defined retention period, ensuring that data can be recovered in case of failure or data loss.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws backup create-backup-plan \&lt;br&gt;
 --backup-plan file://backup-plan.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Enable S3 Cross-Region Replication&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cross-region replication ensures your data remains available even if an entire AWS region goes offline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7vhgzq8tbqcyds81ddc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk7vhgzq8tbqcyds81ddc.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Cross-region replication is configured to automatically replicate objects from the source bucket to a destination bucket in another region, ensuring data durability and disaster recovery.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws s3api put-bucket-replication \&lt;br&gt;
 --bucket source-bucket \&lt;br&gt;
 --replication-configuration file://replication.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Multi-Region Database Resilience&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An important distinction: RDS Multi-AZ protects against Availability Zone failures, not regional failures. If an entire AWS Region becomes unavailable due to a large-scale event, Multi-AZ alone will not keep your database online. True disaster recovery requires a multi-region architecture using the following services:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;RDS Cross-Region Read Replicas:&lt;/strong&gt; Asynchronously replicate RDS instances to a secondary region. In a disaster, you can promote the read replica to a standalone primary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aurora Global Database:&lt;/strong&gt; Aurora Global Database replicates across up to five secondary regions with a typical lag of under one second. Failover to a secondary region can be completed in under a minute, making it suitable for near-zero RPO workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DynamoDB Global Tables:&lt;/strong&gt; DynamoDB Global Tables provide fully managed, multi-region, multi-active replication. Every region can both read and write, and changes propagate globally in milliseconds. This is the AWS-native way to achieve active-active multi-region for DynamoDB workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multi-Region KMS Keys:&lt;/strong&gt; KMS keys are regional by default. For cross-region DR, create multi-region KMS keys so that your encrypted data can be decrypted in the failover region without needing to re-encrypt it. This is essential for KMS-encrypted RDS snapshots, S3 objects, and Secrets Manager secrets that need to be accessible during a regional failover.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI (Multi-Region KMS Key)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws kms create-key \&lt;br&gt;
 --multi-region \&lt;br&gt;
 --description "Multi-Region CMK for DR" \&lt;br&gt;
 --key-usage ENCRYPT_DECRYPT&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note on High Availability vs. Disaster Recovery&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Multi-AZ is a high availability feature: it protects against instance hardware failure and AZ-level outages with automatic failover in under two minutes. Cross-region replication is a disaster recovery feature: it protects against regional outages and requires a planned or unplanned failover event. Both are needed in production environments, and your RTO/RPO targets should drive which multi-region pattern you choose.&lt;/p&gt;

&lt;p&gt;As shown above, RDS Multi-AZ automatically fails over to a standby replica in another Availability Zone, keeping your database available during instance-level outages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v9m2nrafwoula8vpn1y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2v9m2nrafwoula8vpn1y.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Set up Route 53 Failover&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Route 53 handles DNS-level failover automatically, redirecting traffic to a healthy endpoint the moment your primary goes down.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi46g5q9vu90ow24e9z0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi46g5q9vu90ow24e9z0s.png" alt=" " width="800" height="174"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With failover routing configured, Route 53 monitors your primary endpoint via health checks and automatically switches traffic to the secondary when the primary becomes unhealthy. No manual intervention is needed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS CLI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;aws route53 change-resource-record-sets \&lt;br&gt;
 --hosted-zone-id ZONEID \&lt;br&gt;
 --change-batch file://failover.json&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding RTO and RPO&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;RTO defines how quickly systems must recover&lt;/li&gt;
&lt;li&gt;RPO defines acceptable data loss&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These values guide your architecture decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Implementing AWS Governance Using Organizations and SCPs
&lt;/h3&gt;

&lt;p&gt;Governance ensures consistency, especially in multi-account environments.&lt;/p&gt;

&lt;p&gt;In enterprise environments, SCPs are commonly used to enforce guardrails such as restricting regions, preventing public access, and controlling critical actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Set up AWS Organizations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ekkksz6qm2laqbr9rsb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9ekkksz6qm2laqbr9rsb.png" alt=" " width="704" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Organizations enables centralized management of multiple AWS accounts, allowing administrators to enforce policies, control access, and standardize configurations across environments.&lt;/p&gt;

&lt;p&gt;Organizational Units (OUs) are created to logically separate environments such as Development and Production, enabling structured governance and policy enforcement across accounts.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create organization&lt;/li&gt;
&lt;li&gt;Add accounts&lt;/li&gt;
&lt;li&gt;Define structure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Apply Service Control Policies&lt;/strong&gt;&lt;br&gt;
SCPs act as organisation-wide guardrails. They define the maximum permissions any account in a given OU can exercise, regardless of what individual IAM policies allow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam0cwv03bamyfes9drx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fam0cwv03bamyfes9drx8.png" alt=" " width="717" height="713"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljslc77p18parxhslp3h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fljslc77p18parxhslp3h.png" alt=" " width="712" height="628"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Service Control Policy is successfully attached to the Production Organizational Unit, restricting actions such as S3 bucket deletion across all accounts within the OU.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Examples:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deny public S3 access&lt;/li&gt;
&lt;li&gt;Restrict regions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2b: Apply Resource Control Policies (RCPs)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SCPs control what your IAM principals (users, roles) are allowed to do. But they do not control who can access your resources from outside your organization. Resource Control Policies (RCPs) fill this gap by acting as the resource-side complement to SCPs.&lt;/p&gt;

&lt;p&gt;An RCP is attached to a resource type (S3 buckets, KMS keys, SQS queues, and similar) and applies organization-wide. For example, an RCP can enforce that no S3 bucket in your organization can ever be accessed by principals outside the organization, regardless of what the bucket policy says. This provides a hard guardrail that cannot be overridden by individual account administrators.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example RCP (Deny cross-org S3 access)&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;{"Version":"2012–10–17","Statement":[{"Effect":"Deny","Principal":"*","Action":"s3:*","Resource":"*","Condition":{"StringNotEqualsIfExists":{"aws:PrincipalOrgID":"o-xxxxxxxxxxxx"}}}]}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why this matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SCPs alone only cover half the governance story. An SCP prevents your principals from doing things outside the organization. An RCP prevents external principals from accessing resources inside your organization. Together, they create a complete perimeter. For regulated industries such as financial services and healthcare, implementing both is a compliance requirement under data residency and data isolation controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Continuous Compliance Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwrk0q0qlbtg2tkpdzk0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzwrk0q0qlbtg2tkpdzk0.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Config continuously evaluates resource configurations against predefined rules and automatically identifies non-compliant resources, ensuring ongoing adherence to security best practices&lt;/p&gt;

&lt;p&gt;Compliance rules are evaluated periodically and on configuration changes, ensuring that any deviation from defined standards is immediately detected. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Cost Governance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Cost governance is a key pillar of FinOps, helping organizations balance performance, cost, and operational efficiency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyb2qpo6mh5gb1xk5gra3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyb2qpo6mh5gb1xk5gra3.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Cost Explorer provides detailed insights into cloud spending patterns, allowing teams to monitor usage trends, analyze costs by service, and identify opportunities for optimization.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Best Practices for AWS Security and Compliance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Always follow least privilege access&lt;/li&gt;
&lt;li&gt;Enable logging across all regions&lt;/li&gt;
&lt;li&gt;Use a multi-account strategy&lt;/li&gt;
&lt;li&gt;Regularly review compliance reports&lt;/li&gt;
&lt;li&gt;Automate backups and recovery testing&lt;/li&gt;
&lt;li&gt;Encrypt all data at rest with Customer Managed Keys and enforce encryption in transit with TLS&lt;/li&gt;
&lt;li&gt;Enable CloudTrail log file validation and protect logs with S3 Object Lock&lt;/li&gt;
&lt;li&gt;Use AWS Secrets Manager with automatic rotation for all application credentials&lt;/li&gt;
&lt;li&gt;Implement both SCPs and RCPs for a complete organizational governance perimeter&lt;/li&gt;
&lt;li&gt;Use Aurora Global Database, DynamoDB Global Tables, and multi-region KMS keys for true cross-region DR&lt;/li&gt;
&lt;li&gt;Use AWS Audit Manager to continuously collect compliance evidence for SOC 2, PCI-DSS, HIPAA, and GDPR&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  7. Common Mistakes in AWS Security and Compliance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Using overly permissive IAM roles&lt;/li&gt;
&lt;li&gt;Not enabling logging across all regions&lt;/li&gt;
&lt;li&gt;Ignoring compliance violations&lt;/li&gt;
&lt;li&gt;No disaster recovery testing&lt;/li&gt;
&lt;li&gt;Lack of governance controls&lt;/li&gt;
&lt;li&gt;Storing secrets and credentials in code, environment variables, or S3 instead of Secrets Manager&lt;/li&gt;
&lt;li&gt;Deploying workloads without encryption at rest or in transit, especially for regulated data&lt;/li&gt;
&lt;li&gt;Confusing Multi-AZ high availability with cross-region disaster recovery&lt;/li&gt;
&lt;li&gt;Not protecting CloudTrail logs against deletion, leaving the audit trail untrustworthy&lt;/li&gt;
&lt;li&gt;Implementing SCPs without RCPs, leaving resources accessible to external accounts&lt;/li&gt;
&lt;li&gt;Monitoring without Audit Manager, resulting in no structured compliance evidence for auditors&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  8. Final Thoughts
&lt;/h3&gt;

&lt;p&gt;Building a secure and compliant AWS environment is an ongoing process, not a one-time setup. By layering identity management, encryption, network security, monitoring, disaster recovery, governance, and compliance automation, you build a cloud architecture that holds up under both attack and audit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;By focusing on:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Strong IAM practices&lt;/li&gt;
&lt;li&gt;Continuous monitoring&lt;/li&gt;
&lt;li&gt;Reliable disaster recovery&lt;/li&gt;
&lt;li&gt;Governance at scale&lt;/li&gt;
&lt;li&gt;End-to-end encryption with KMS Customer Managed Keys&lt;/li&gt;
&lt;li&gt;VPC network controls and secrets management&lt;/li&gt;
&lt;li&gt;Structured compliance evidence collection with Audit Manager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security in AWS is not a feature you turn on. It is a posture you build, layer by layer. Start with IAM, get logging in place, and everything else follows from there.&lt;/p&gt;

&lt;p&gt;Whether you are a startup moving fast or an enterprise in a regulated industry, this layered approach gives you a production-ready foundation you can build on and audit with confidence.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>security</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Building and Deploying a Product Listing Frontend App with AWS Amplify</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Mon, 16 Mar 2026 11:50:19 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/building-and-deploying-a-product-listing-frontend-app-with-aws-amplify-2ceh</link>
      <guid>https://forem.com/sudoconsultants/building-and-deploying-a-product-listing-frontend-app-with-aws-amplify-2ceh</guid>
      <description>&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern software delivery demands speed, reliability, and scalability. As businesses continue to shift toward cloud-native architectures, the ability to rapidly build and deploy frontend applications has become a critical competitive advantage.&lt;/p&gt;

&lt;p&gt;In this blog post, I walk through the process of building a Product Listing Frontend Application using React and deploying it to production using AWS Amplify Hosting, a managed service that eliminates infrastructure complexity and enables continuous delivery directly from a GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is AWS Amplify?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Amplify is a fully managed platform from Amazon Web Services designed to help frontend and mobile developers build, deploy, and host web applications at scale — without managing servers or infrastructure.&lt;/p&gt;

&lt;p&gt;Amplify Hosting provides a Git-based CI/CD workflow, meaning that every code change pushed to a connected GitHub repository automatically triggers a new build and deployment. This makes it an ideal solution for teams that need fast, reliable, and repeatable deployments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core capabilities of AWS Amplify Hosting include:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Automatic build and deployment on every git push&lt;br&gt;
• Free SSL/TLS certificate provisioning (HTTPS out of the box)&lt;br&gt;
• Global Content Delivery Network (CDN) for low-latency access worldwide&lt;br&gt;
• Branch-based deployments for staging and production environments&lt;br&gt;
• Custom domain support with simple DNS configuration&lt;br&gt;
• Generous free tier suitable for startups and enterprise projects alike&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before proceeding, ensure the following are in place:&lt;/p&gt;

&lt;p&gt;• A GitHub account with access to create repositories&lt;br&gt;
• An AWS account (free tier is sufficient for this guide)&lt;br&gt;
• Node.js (v18+) and npm installed on your local machine&lt;br&gt;
• Basic familiarity with React and Git&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1 — Create the React Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Begin by scaffolding a new React project using Create React App. Open your terminal and execute the following commands.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0h7jfihfjibw87wv6pl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0h7jfihfjibw87wv6pl.png" alt=" " width="512" height="104"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;npx create-react-app product-listing-app&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzer9kpzm6tw7agirn7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzer9kpzm6tw7agirn7h.png" alt=" " width="513" height="83"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;cd product-listing-app&lt;/p&gt;

&lt;p&gt;Go to the file explorer &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2z6kqaz77ewvugds02h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz2z6kqaz77ewvugds02h.png" alt=" " width="800" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;C:\Users\hp\product-listing-app\src\&lt;br&gt;
import React from "react";&lt;br&gt;
Right-click on App.js&lt;br&gt;
Open with Visual Studio&lt;br&gt;
Paste the code over there &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2l8s93mpjfcs219kxf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft2l8s93mpjfcs219kxf1.png" alt=" " width="800" height="597"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;products&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Wireless Headphones&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$49.99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Audio&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Smart Watch&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;         &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$99.99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Wearables&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Bluetooth Speaker&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;   &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$29.99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Audio&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Laptop Stand&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;        &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$19.99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Accessories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;USB-C Hub&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;           &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$39.99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Accessories&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
  &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Noise Cancelling Earbuds&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;price&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;$79.99&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;category&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Audio&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;ProductCard&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;category&lt;/span&gt; &lt;span class="p"&gt;})&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1px solid #e0e0e0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;borderRadius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.2rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="na"&gt;boxShadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0 2px 6px rgba(0,0,0,0.06)&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;fontSize&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.75rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#888&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;textTransform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;uppercase&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;letterSpacing&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.05em&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;category&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;span&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;margin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.5rem 0&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h3&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;fontWeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bold&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#2d6a4f&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;price&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.5rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;0.5rem 1rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#0073e6&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#fff&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;none&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;borderRadius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;6px&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;pointer&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        Add to Cart
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;button&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;App&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;2rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;fontFamily&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Inter, sans-serif&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;backgroundColor&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#f9f9f9&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;minHeight&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;100vh&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#1a1a2e&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;🛒 Product Listing&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;h1&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;#555&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;Browse our latest collection of products.&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;p&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt; &lt;span class="na"&gt;style&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;display&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;grid&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;gridTemplateColumns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;repeat(auto-fill, minmax(220px, 1fr))&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;gap&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.2rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="na"&gt;marginTop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;1.5rem&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;products&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;
          &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;ProductCard&lt;/span&gt; &lt;span class="na"&gt;key&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;p&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
        &lt;span class="p"&gt;))&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nt"&gt;div&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;export default App;&lt;br&gt;
Verify the application runs correctly on your local environment:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F014yhcdf4hdvpss5ymf5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F014yhcdf4hdvpss5ymf5.png" alt=" " width="800" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;npm start&lt;/p&gt;

&lt;p&gt;The application will be available at &lt;a href="http://localhost:3000" rel="noopener noreferrer"&gt;http://localhost:3000&lt;/a&gt;. Confirm the product cards render as expected before proceeding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhosk4p0mutb7u0nijlb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhosk4p0mutb7u0nijlb.png" alt=" " width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2 — Initialize a GitHub Repository and Push the Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Navigate to github.com and create a new repository named product-listing-app. Set the visibility to Public or Private based on your requirements.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qri7b4jjgqz2tmt3zlv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2qri7b4jjgqz2tmt3zlv.png" alt=" " width="757" height="624"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the repository is created, execute the following commands in your terminal to initialize Git and push the project:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6mk70tv9feujxvzaq68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm6mk70tv9feujxvzaq68.png" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial commit: product listing app"&lt;/span&gt;
git remote add origin https://github.com/YOUR-USERNAME/product-l
isting-app.git
git branch &lt;span class="nt"&gt;-M&lt;/span&gt; main
git push &lt;span class="nt"&gt;-u&lt;/span&gt; origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Confirm that all files are visible in your GitHub repository before moving to the next step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq482ikiljk90iigp2fh8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq482ikiljk90iigp2fh8.png" alt=" " width="778" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3 — Connect the Repository to AWS Amplify&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.1 — Open the AWS Amplify Console&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sign in to the AWS Management Console and navigate to AWS Amplify. Click "Create new app".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwytflvprr6selz0fhv8c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwytflvprr6selz0fhv8c.png" alt=" " width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.2 — Select GitHub as the Source&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;On the Deploy your app page, select &lt;strong&gt;GitHub&lt;/strong&gt; and click &lt;strong&gt;Continue&lt;/strong&gt;. You will be redirected to GitHub to authorize AWS Amplify access to your account. Click &lt;strong&gt;Authorize AWS Amplify&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f85wca9cvx25tjmh0qb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6f85wca9cvx25tjmh0qb.png" alt=" " width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.3 — Install the Amplify GitHub App&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;GitHub will prompt you to install the Amplify GitHub App in your account. This app grants Amplify read-only access to your selected repositories, a more secure approach compared to full OAuth access.&lt;/p&gt;

&lt;p&gt;• Select your GitHub account&lt;br&gt;
• Choose only select repositories and select product-listing-app&lt;br&gt;
• Click Install &amp;amp; Authorize&lt;/p&gt;

&lt;p&gt;You will be redirected back to the Amplify Console automatically.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.4 — Select Repository and Branch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the Add repository branch page:&lt;br&gt;
• Repository: product-listing-app&lt;br&gt;
• Branch: main&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F597izuc0nsqa9fd7jqfn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F597izuc0nsqa9fd7jqfn.png" alt=" " width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Next.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4 — Configure Build Settings&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Amplify automatically detects the React framework and populates the build configuration. The default amplify.yml build specification will look like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1iv5zksbhxqjpviqmpzb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1iv5zksbhxqjpviqmpzb.png" alt=" " width="800" height="330"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No modifications are required for a standard React application. Click Next to proceed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5 — Review and Deploy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Review all configured settings on the final screen. Once confirmed, click "&lt;strong&gt;Save and deploy&lt;/strong&gt;".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcz9616v0y9taqkpl2f6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmcz9616v0y9taqkpl2f6.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Amplify will immediately begin the deployment pipeline, which consists of four automated stages:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn0dsoeyw29hcp0lzydkc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn0dsoeyw29hcp0lzydkc.png" alt=" " width="663" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The entire process typically completes within 2 to 3 minutes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 6 - Access Your Live Application&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Upon successful deployment, AWS Amplify provides a publicly accessible URL in the following format:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flluyfqjynpax42x6itgx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flluyfqjynpax42x6itgx.png" alt=" " width="800" height="306"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://main.d1abc123xyz.amplifyapp.com" rel="noopener noreferrer"&gt;https://main.d1abc123xyz.amplifyapp.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g4x0bszg5sja1qbyl47.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5g4x0bszg5sja1qbyl47.png" alt=" " width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your Product Listing App is now live, secured with HTTPS, and served globally via AWS CDN.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Deployment in Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A key advantage of AWS Amplify is its built-in &lt;strong&gt;continuous deployment pipeline&lt;/strong&gt;. Any subsequent code changes pushed to the connected branch will automatically trigger a new build and deployment, no manual intervention required.&lt;/p&gt;

&lt;p&gt;To verify this, make a small update to your application:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqbof3xzj7jg4euwn8h2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frqbof3xzj7jg4euwn8h2.png" alt=" " width="800" height="318"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Edit src/App.js — update the heading&lt;/span&gt;
&lt;span class="c"&gt;# From: &amp;lt;h1&amp;gt;🛒 Product Listing&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;span class="c"&gt;# To:   &amp;lt;h1&amp;gt;🛒 Featured Products&amp;lt;/h1&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzuefpa0y6hvb1h9jon3k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzuefpa0y6hvb1h9jon3k.png" alt=" " width="767" height="358"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Updated page heading"&lt;/span&gt;
git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Return to the Amplify Console, and a new deployment will be triggered automatically within seconds of the push.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjuxu8e1974mmcgaobo8z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjuxu8e1974mmcgaobo8z.png" alt=" " width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Amplify provides a robust, production-grade hosting solution that significantly reduces the time and effort required to deploy frontend applications. By integrating directly with GitHub, it enables engineering teams to focus on writing code rather than managing infrastructure.&lt;/p&gt;

&lt;p&gt;Whether you are deploying a simple product page or a complex enterprise frontend, AWS Amplify's Git-based workflow offers a clean, repeatable, and efficient path from development to production.&lt;/p&gt;

</description>
      <category>awsamplify</category>
      <category>aws</category>
      <category>agenticai</category>
      <category>productlisting</category>
    </item>
    <item>
      <title>Designing Secure Agentic AI Platforms on AWS: Identity, Data Boundaries, and Guardrails</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Mon, 16 Mar 2026 10:38:02 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/designing-secure-agentic-ai-platforms-on-aws-identity-data-boundaries-and-guardrails-2jod</link>
      <guid>https://forem.com/sudoconsultants/designing-secure-agentic-ai-platforms-on-aws-identity-data-boundaries-and-guardrails-2jod</guid>
      <description>&lt;p&gt;Agentic AI is redefining how enterprises build intelligent systems. Unlike traditional AI applications that respond to prompts, Agentic AI platforms reason, plan, retrieve context, invoke tools, and execute multi-step workflows autonomously.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This autonomy introduces power. It also introduces risk.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;When an AI agent can access sensitive data, invoke APIs, modify infrastructure, or trigger downstream workflows, the security model must evolve. Traditional role-based controls are no longer sufficient. You must design Secure Agentic AI systems deliberately from day one.&lt;/p&gt;

&lt;p&gt;In this comprehensive guide, we will explore how to design Secure Agentic AI systems on AWS by focusing on three foundational pillars:&lt;/p&gt;

&lt;p&gt;• Identity and Access Control&lt;br&gt;
• Data Boundaries and Isolation&lt;br&gt;
• Guardrails and Runtime Enforcement&lt;/p&gt;

&lt;p&gt;This is a practical, production-focused architecture guide tailored for enterprise deployment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Understanding Agentic AI in an AWS Context&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Agentic AI systems typically combine:&lt;/p&gt;

&lt;p&gt;• Amazon Bedrock for foundation model reasoning&lt;br&gt;
• Knowledge bases and vector stores for context retrieval&lt;br&gt;
• AWS Lambda for tool execution&lt;br&gt;
• API Gateway for controlled API exposure&lt;br&gt;
• Amazon S3, DynamoDB, or RDS for data storage&lt;br&gt;
• IAM for identity enforcement&lt;br&gt;
• VPC and PrivateLink for network isolation&lt;/p&gt;

&lt;p&gt;The moment an AI system gains the ability to call tools or take actions, your design becomes a security architecture problem.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpi4t2jlg24njngkx9q71.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpi4t2jlg24njngkx9q71.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture Flow&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User sends a request&lt;/li&gt;
&lt;li&gt;API Gateway authenticates the request&lt;/li&gt;
&lt;li&gt;Bedrock model reasons and proposes a tool action&lt;/li&gt;
&lt;li&gt;Lambda validates and executes the tool&lt;/li&gt;
&lt;li&gt;IAM enforces least privilege&lt;/li&gt;
&lt;li&gt;Data retrieved via VPC endpoints&lt;/li&gt;
&lt;li&gt;Logs recorded in CloudTrail and CloudWatch&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This layered approach ensures that no single component has unrestricted power.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pillar 1: Identity – The Foundation of Secure Agentic AI on AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Identity is the primary control plane in Secure Agentic AI systems.&lt;/p&gt;

&lt;p&gt;In this architecture, identities include:&lt;/p&gt;

&lt;p&gt;• Human users&lt;br&gt;
• Application services&lt;br&gt;
• AI agent execution roles&lt;br&gt;
• Tool-specific roles&lt;br&gt;
• Cross-account service roles&lt;/p&gt;

&lt;p&gt;Without strict identity segmentation, your AI agent becomes a privileged automation engine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Zero-Trust Identity Design for Agentic AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Secure Agentic AI on AWS requires:&lt;/p&gt;

&lt;p&gt;• No direct model-to-database access&lt;br&gt;
• No broad AdministratorAccess policies&lt;br&gt;
• No static credentials&lt;br&gt;
• No wildcard IAM permissions&lt;/p&gt;

&lt;p&gt;Instead, implement identity segmentation:&lt;/p&gt;

&lt;p&gt;• Model reasoning role&lt;br&gt;
• Tool execution role&lt;br&gt;
• Data retrieval role&lt;br&gt;
• Logging role&lt;/p&gt;

&lt;p&gt;Each role should have minimal permissions required for its function.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implementing Least Privilege IAM for AI Tool Execution&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4y67gb5inf7ymzn8qut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4y67gb5inf7ymzn8qut.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Console Location&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Console → IAM → Roles → Lambda Execution Role → Permissions&lt;/p&gt;

&lt;p&gt;Ensure:&lt;br&gt;
• No “*” in Action or Resource&lt;br&gt;
• S3 access restricted to specific bucket prefix&lt;br&gt;
• DynamoDB is restricted to a specific table&lt;br&gt;
• Explicit deny statements for other resources&lt;/p&gt;

&lt;p&gt;Example policy design approach:&lt;/p&gt;

&lt;p&gt;Allow:&lt;br&gt;
• s3:GetObject on bucket-name/tenant-01/*&lt;/p&gt;

&lt;p&gt;Deny:&lt;br&gt;
• s3:GetObject on bucket-name/* if tenant mismatch&lt;/p&gt;

&lt;p&gt;This ensures tenant isolation at the identity layer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cross-Account Access for Enterprise Environments&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In mature environments, Agentic AI systems may:&lt;/p&gt;

&lt;p&gt;• Access centralized logging accounts&lt;br&gt;
• Access shared data services&lt;br&gt;
• Operate in multi-account AWS Organizations&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8med2b171osw4j1rv8bz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8med2b171osw4j1rv8bz.png" alt=" " width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use:&lt;br&gt;
• IAM trust policies&lt;br&gt;
• External ID validation&lt;br&gt;
• Short STS session duration&lt;br&gt;
• CloudTrail monitoring&lt;/p&gt;

&lt;p&gt;Never hardcode cross-account credentials.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pillar 2: Data Boundaries – Designing Isolation Layers&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Secure Agentic AI systems must prevent:&lt;/p&gt;

&lt;p&gt;• Cross-tenant leakage&lt;br&gt;
• Data classification violations&lt;br&gt;
• Context poisoning&lt;br&gt;
• Unauthorized retrieval&lt;/p&gt;

&lt;p&gt;You must design boundaries at:&lt;/p&gt;

&lt;p&gt;• Storage layer&lt;br&gt;
• Retrieval layer&lt;br&gt;
• Network layer&lt;br&gt;
• Encryption layer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbjj814f8isvo8i0vs7u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwbjj814f8isvo8i0vs7u.png" alt=" " width="800" height="286"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Required Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;AWS Console → S3 → Bucket → Properties&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Enable:&lt;br&gt;
• Server-side encryption with KMS&lt;br&gt;
• Bucket-level Block Public Access&lt;br&gt;
• Versioning&lt;br&gt;
• Access logging&lt;/p&gt;

&lt;p&gt;For highly sensitive systems:&lt;br&gt;
• Use a separate bucket per tenant&lt;br&gt;
• Separate bucket per environment (dev, staging, prod)&lt;/p&gt;

&lt;p&gt;Never mix production and test data in Agentic AI systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encryption Architecture for Secure Agentic AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtleewptcxc63y3rhf3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgtleewptcxc63y3rhf3s.png" alt=" " width="800" height="395"&gt;&lt;/a&gt;&lt;br&gt;
Use:&lt;br&gt;
• Customer-managed KMS keys&lt;br&gt;
• Key policies restricting access to specific roles&lt;br&gt;
• Automatic key rotation&lt;br&gt;
• Separate keys for separate classification levels&lt;/p&gt;

&lt;p&gt;Encryption is not optional in enterprise AI systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieval Augmented Generation Security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When using RAG in Secure Agentic AI systems:&lt;/p&gt;

&lt;p&gt;• Tag documents with metadata&lt;br&gt;
• Filter retrieval queries before embedding&lt;br&gt;
• Restrict embedding generation permissions&lt;br&gt;
• Validate chunk size and context injection&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqjz3xahc9u3ot6r1rgu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqjz3xahc9u3ot6r1rgu.png" alt=" " width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Example metadata design:&lt;/p&gt;

&lt;p&gt;tenant: tenant-01&lt;br&gt;
classification: internal&lt;br&gt;
region: us-east-1&lt;/p&gt;

&lt;p&gt;Before passing context to the model:&lt;br&gt;
Filter:&lt;br&gt;
tenant == userTenant&lt;/p&gt;

&lt;p&gt;This prevents cross-tenant exposure inside model reasoning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Network-Level Isolation with VPC and PrivateLink&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucw5ro4y4xnq5yak8que.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fucw5ro4y4xnq5yak8que.webp" alt=" " width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Configuration checklist:&lt;/p&gt;

&lt;p&gt;• Lambda deployed in private subnet&lt;br&gt;
• No public internet gateway attached&lt;br&gt;
• Interface endpoint for Bedrock&lt;br&gt;
• Gateway endpoint for S3&lt;br&gt;
• Security groups with restricted egress&lt;/p&gt;

&lt;p&gt;This ensures Secure Agentic AI workloads never leave the AWS backbone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pillar 3: Guardrails – Behavioral and Runtime Controls&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Identity and isolation are not enough. Agentic AI systems must also control behavior.&lt;/p&gt;

&lt;p&gt;Guardrails operate at:&lt;/p&gt;

&lt;p&gt;• Prompt level&lt;br&gt;
• Model configuration level&lt;br&gt;
• Runtime validation level&lt;br&gt;
• Infrastructure enforcement level&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Designing Secure System Prompts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;System prompts must:&lt;/p&gt;

&lt;p&gt;• Explicitly define allowed actions&lt;br&gt;
• Define disallowed operations&lt;br&gt;
• Validate user roles&lt;br&gt;
• Require confirmation for sensitive actions&lt;/p&gt;

&lt;p&gt;Bad pattern:&lt;/p&gt;

&lt;p&gt;“Fetch all customer data.”&lt;/p&gt;

&lt;p&gt;Secure pattern:&lt;/p&gt;

&lt;p&gt;“Only retrieve customer records if the user role is support and the ticket ID is validated.”&lt;/p&gt;

&lt;p&gt;Guardrails reduce hallucinated tool usage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon Bedrock Guardrails&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnh4c9tehvb1th97brht.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnnh4c9tehvb1th97brht.jpg" alt=" " width="800" height="560"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Enable:&lt;/p&gt;

&lt;p&gt;• Content filtering&lt;br&gt;
• Denied topics&lt;br&gt;
• PII detection&lt;br&gt;
• Contextual grounding&lt;/p&gt;

&lt;p&gt;This protects against:&lt;/p&gt;

&lt;p&gt;• Toxic outputs&lt;br&gt;
• Sensitive data exposure&lt;br&gt;
• Prompt injection attacks&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime Validation Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Never allow direct model-to-action execution.&lt;/p&gt;

&lt;p&gt;Secure flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Model proposes tool invocation&lt;/li&gt;
&lt;li&gt;Lambda validates input schema&lt;/li&gt;
&lt;li&gt;IAM enforces permissions&lt;/li&gt;
&lt;li&gt;Audit logs captured&lt;/li&gt;
&lt;li&gt;Response returned&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo75hzla6i3vd9jmt3mq4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo75hzla6i3vd9jmt3mq4.png" alt=" " width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Validation must include:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Parameter whitelisting&lt;br&gt;
• Regex validation&lt;br&gt;
• Role verification&lt;br&gt;
• Rate limiting&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability and Continuous Monitoring&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Secure Agentic AI systems require continuous audit.&lt;/p&gt;

&lt;p&gt;Enable:&lt;br&gt;
• CloudTrail in all regions&lt;br&gt;
• CloudWatch Logs for Lambda&lt;br&gt;
• AWS Config rules for IAM&lt;br&gt;
• GuardDuty anomaly detection&lt;/p&gt;

&lt;p&gt;Monitor for:&lt;br&gt;
• Unusual AssumeRole spikes&lt;br&gt;
• Cross-tenant data access&lt;br&gt;
• Large S3 object retrievals&lt;br&gt;
• Abnormal API invocation patterns&lt;/p&gt;

&lt;p&gt;Security is ongoing, not static.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Enterprise Deployment Checklist for Secure Agentic AI on AWS&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Before production go-live:&lt;/p&gt;

&lt;p&gt;• No wildcard IAM permissions&lt;br&gt;
• Encryption enabled everywhere&lt;br&gt;
• VPC endpoints configured&lt;br&gt;
• Guardrails active&lt;br&gt;
• Logs centralized&lt;br&gt;
• Secrets in AWS Secrets Manager&lt;br&gt;
• STS used instead of static credentials&lt;br&gt;
• RAG metadata filtering implemented&lt;br&gt;
• Runtime validation layer tested&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Common Enterprise Mistakes in Agentic AI Deployments&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Giving Lambda AdministratorAccess&lt;/li&gt;
&lt;li&gt;Allowing the model to directly query databases&lt;/li&gt;
&lt;li&gt;Storing API keys in prompts&lt;/li&gt;
&lt;li&gt;Ignoring metadata filtering&lt;/li&gt;
&lt;li&gt;Skipping runtime validation&lt;/li&gt;
&lt;li&gt;No CloudTrail logging&lt;/li&gt;
&lt;li&gt;Single shared vector store for all tenants&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Avoiding these is essential for building Secure Agentic AI systems on AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Thoughts: From Intelligent to Trustworthy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agentic AI introduces a new paradigm of autonomy. But autonomy without control creates systemic risk.&lt;/p&gt;

&lt;p&gt;Designing Secure Agentic AI systems on AWS requires:&lt;/p&gt;

&lt;p&gt;• Strong identity segmentation&lt;br&gt;
• Enforced data boundaries&lt;br&gt;
• Multi-layer guardrails&lt;br&gt;
• Continuous observability&lt;/p&gt;

&lt;p&gt;When these principles are implemented correctly, Secure Agentic AI becomes not just intelligent but enterprise-ready, compliant, and trustworthy.&lt;/p&gt;

&lt;p&gt;That is the difference between experimentation and production.&lt;/p&gt;

</description>
      <category>agentaichallenge</category>
      <category>ai</category>
      <category>genai</category>
      <category>security</category>
    </item>
    <item>
      <title>Designing a Reliable File Processing Pipeline on AWS for Real-World Applications</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Mon, 16 Mar 2026 08:26:23 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/designing-a-reliable-file-processing-pipeline-on-aws-for-real-world-applications-fe8</link>
      <guid>https://forem.com/sudoconsultants/designing-a-reliable-file-processing-pipeline-on-aws-for-real-world-applications-fe8</guid>
      <description>&lt;p&gt;&lt;strong&gt;Executive Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This article presents the design and implementation of a resilient, event-driven file processing pipeline built using AWS serverless services. The solution leverages Amazon S3, AWS Lambda, Amazon SQS, DynamoDB, and a Dead Letter Queue (DLQ) to ensure scalability, fault tolerance, and operational reliability.&lt;/p&gt;

&lt;p&gt;The system was not only implemented but also validated through real-world testing scenarios, including successful file processing, duplicate handling using idempotency logic, IAM permission troubleshooting, and controlled failure simulation to verify retry and DLQ behavior.&lt;/p&gt;

&lt;p&gt;The result is a production-ready serverless architecture designed not just to function, but to remain stable under failure conditions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction: Why File Processing Is Harder Than It Looks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;File uploads sound simple.&lt;/p&gt;

&lt;p&gt;A user uploads a CSV.&lt;br&gt;
The system reads it.&lt;br&gt;
The data gets stored.&lt;/p&gt;

&lt;p&gt;But in production systems, file ingestion is rarely that straightforward.&lt;/p&gt;

&lt;p&gt;What happens if:&lt;br&gt;
• The file is uploaded twice?&lt;br&gt;
• The processing function fails midway?&lt;br&gt;
• Downstream services are temporarily unavailable?&lt;br&gt;
• Permissions are misconfigured?&lt;br&gt;
• The system retries endlessly?&lt;br&gt;
• Does the data get duplicated?&lt;/p&gt;

&lt;p&gt;In distributed systems, small architectural gaps quickly become operational problems.&lt;/p&gt;

&lt;p&gt;To address this properly, I designed and implemented a &lt;strong&gt;fully functional, event-driven file processing pipeline on AWS,&lt;/strong&gt; not as a theoretical example, but as a working, tested, and debugged implementation.&lt;/p&gt;

&lt;p&gt;This article walks through that journey, from architecture design to IAM troubleshooting, failure handling, idempotency, and validation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Architecture Overview: Event-Driven and Decoupled by Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of directly processing files when uploaded, the system follows a decoupled event-driven pattern:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User Upload&lt;/strong&gt;&lt;br&gt;
→ Amazon S3&lt;br&gt;
→ Validation Lambda&lt;br&gt;
→ Amazon SQS&lt;br&gt;
→ Processing Lambda&lt;br&gt;
→ Amazon DynamoDB&lt;br&gt;
→ Dead Letter Queue (DLQ) for failures&lt;/p&gt;

&lt;p&gt;This architecture achieves:&lt;br&gt;
• Loose coupling&lt;br&gt;
• Retry safety&lt;br&gt;
• Failure isolation&lt;br&gt;
• Horizontal scalability&lt;br&gt;
• Observability&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjepcikujxbjf5cz48qyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjepcikujxbjf5cz48qyx.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why This Architecture Matters&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many implementations directly trigger a Lambda from S3 and process files immediately.&lt;/p&gt;

&lt;p&gt;That works until:&lt;br&gt;
• Processing becomes slow&lt;br&gt;
• Traffic spikes&lt;br&gt;
• Downstream systems fail&lt;br&gt;
• Retries cause duplicates&lt;/p&gt;

&lt;p&gt;By introducing SQS in the middle, we create a buffer that:&lt;br&gt;
• Absorbs traffic spikes&lt;br&gt;
• Retries safely&lt;br&gt;
• Prevents cascading failures&lt;br&gt;
• Allows independent scaling&lt;/p&gt;

&lt;p&gt;This is a production mindset shift, from “it works” to “it survives”.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Configuring the S3 Ingestion Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The S3 bucket serves as the entry point.&lt;/p&gt;

&lt;p&gt;Configuration applied:&lt;br&gt;
• Versioning enabled&lt;br&gt;
• Public access blocked&lt;br&gt;
• Server-side encryption enabled&lt;br&gt;
• Event notification for ObjectCreated:Put&lt;/p&gt;

&lt;p&gt;Versioning was enabled intentionally. In production, files are sometimes re-uploaded or overwritten. Versioning preserves historical states and prevents silent data loss.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndm0knmcezqgbe102i96.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fndm0knmcezqgbe102i96.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpdapatu8bpahe5rjcgg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqpdapatu8bpahe5rjcgg.png" alt=" " width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Building the Validation Layer (Lambda + SQS)&lt;/strong&gt;&lt;br&gt;
The validation Lambda does not process the file.&lt;br&gt;
Its responsibility is narrow and intentional:&lt;br&gt;
• Extract bucket and key from S3 event&lt;br&gt;
• Send a message to SQS&lt;/p&gt;

&lt;p&gt;Why separate validation from processing?&lt;br&gt;
Because responsibilities should be minimal and isolated.&lt;br&gt;
This Lambda only verifies the upload event and queues the job.&lt;br&gt;
This reduces the blast radius if processing fails.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza4n0lq780y7v2hcxyvo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fza4n0lq780y7v2hcxyvo.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frx2z264i11bptdjy2jja.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frx2z264i11bptdjy2jja.png" alt=" " width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IAM permissions granted:&lt;br&gt;
• s3:GetObject&lt;br&gt;
• sqs:SendMessage&lt;br&gt;
This follows the principle of least privilege.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Introducing the Message Buffer (Amazon SQS + DLQ)&lt;/strong&gt;&lt;br&gt;
The SQS queue acts as a shock absorber between ingestion and processing.&lt;/p&gt;

&lt;p&gt;Configuration:&lt;br&gt;
• Standard queue&lt;br&gt;
• Visibility timeout configured&lt;br&gt;
• Dead Letter Queue attached&lt;br&gt;
• Max receive count: 3&lt;/p&gt;

&lt;p&gt;This means if processing fails three times, the message is moved to the DLQ.&lt;br&gt;
This prevents infinite retry loops.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2e00wnnd1fy18blb09cr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2e00wnnd1fy18blb09cr.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18h0e87smsxo5npf1tyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18h0e87smsxo5npf1tyg.png" alt=" " width="800" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Processing Lambda, Where the Real Work Happens&lt;/strong&gt;&lt;br&gt;
The processing Lambda performs the following:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Receives message from SQS&lt;/li&gt;
&lt;li&gt;Fetches file from S3&lt;/li&gt;
&lt;li&gt;Parses CSV&lt;/li&gt;
&lt;li&gt;Counts rows&lt;/li&gt;
&lt;li&gt;Checks if already processed (idempotency)&lt;/li&gt;
&lt;li&gt;Stores metadata in DynamoDB&lt;/li&gt;
&lt;li&gt;Throws an exception if failure occurs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is where production-grade logic lives.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4uznfnp43umi1y44jczv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4uznfnp43umi1y44jczv.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuy081ib5ioujiaomyjx8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuy081ib5ioujiaomyjx8.png" alt=" " width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The First Real Debugging Moment: IAM Misconfiguration&lt;/strong&gt;&lt;br&gt;
During implementation, an error appeared:&lt;br&gt;
&lt;code&gt;AccessDeniedException for dynamodb:Scan&lt;/code&gt;&lt;br&gt;
The root cause?&lt;br&gt;
The Lambda role had PutItem permission but not Scan permission.&lt;br&gt;
This was a classic example of IAM policies not matching actual runtime behavior.&lt;br&gt;
After updating the policy to include:&lt;br&gt;
• dynamodb:Scan&lt;/p&gt;

&lt;p&gt;The issue was resolved.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsto4fa5vbempcugfm3y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsto4fa5vbempcugfm3y.png" alt=" " width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tgw7miwlb5m16c4bzyb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5tgw7miwlb5m16c4bzyb.png" alt=" " width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This moment reinforced a critical operational lesson:&lt;br&gt;
Infrastructure is only as reliable as its permissions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 5: DynamoDB as the Persistence Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The DynamoDB table stores metadata:&lt;br&gt;
• fileId&lt;br&gt;
• fileName&lt;br&gt;
• rowCount&lt;br&gt;
• status&lt;/p&gt;

&lt;p&gt;This table allows:&lt;br&gt;
• Audit visibility&lt;br&gt;
• Duplicate detection&lt;br&gt;
• Operational tracing&lt;/p&gt;

&lt;p&gt;On successful processing, an entry is created with status = PROCESSED.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxumjh2rwun5hxp1jb2uu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxumjh2rwun5hxp1jb2uu.png" alt=" " width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security and IAM Design Considerations&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Security was treated as a foundational component of this architecture rather than an afterthought.&lt;/p&gt;

&lt;p&gt;The following measures were implemented:&lt;/p&gt;

&lt;p&gt;• The S3 bucket was configured with public access blocked and server-side encryption enabled.&lt;br&gt;
• Lambda functions were assigned dedicated IAM roles following the principle of least privilege.&lt;br&gt;
• Validation Lambda was granted only s3:GetObject and sqs:SendMessage permissions.&lt;br&gt;
• Processing Lambda was granted scoped permissions for DynamoDB operations and SQS consumption.&lt;br&gt;
• Explicit permissions such as dynamodb:Scan were added only after runtime validation confirmed their necessity.&lt;/p&gt;

&lt;p&gt;This structured IAM design ensures that each component performs only its intended function, thereby reducing the security attack surface and minimizing risk in a production environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Testing the Pipeline End-to-End&lt;/strong&gt;&lt;br&gt;
A system is only reliable when tested under real conditions.&lt;br&gt;
Three scenarios were validated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 1: Successful File Processing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uploaded: customer-data.csv&lt;br&gt;
Processing Lambda logs confirmed:&lt;br&gt;
• File detected&lt;br&gt;
• CSV parsed&lt;br&gt;
• 5 rows counted&lt;br&gt;
• Metadata stored&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfly6w4h5vywtqs9oag1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqfly6w4h5vywtqs9oag1.png" alt=" " width="800" height="510"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;DynamoDB reflected the correct data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 2: Duplicate Upload (Idempotency)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Uploaded the same file again.&lt;br&gt;
Processing Lambda detected an existing entry and skipped re-processing.&lt;br&gt;
This prevents duplicate records, a common issue in distributed systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvt0pwuiw6ejt76jztfc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzvt0pwuiw6ejt76jztfc.png" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scenario 3: Failure Simulation &amp;amp; DLQ Validation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To validate resilience:&lt;br&gt;
A forced exception was introduced.&lt;br&gt;
After 3 retry attempts, the message moved to the DLQ.&lt;/p&gt;

&lt;p&gt;This confirmed:&lt;br&gt;
• Retry behavior works&lt;br&gt;
• Failures are isolated&lt;br&gt;
• System stability is preserved&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgndjud99d1aoahjfdgj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgndjud99d1aoahjfdgj.png" alt=" " width="800" height="369"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4k2jt62gs6usbd18yb4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4k2jt62gs6usbd18yb4.png" alt=" " width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84vt62rh7ebra7decvs7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84vt62rh7ebra7decvs7.png" alt=" " width="800" height="295"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Observability and Monitoring Strategy&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Operational visibility was a critical aspect of validating this architecture.&lt;/p&gt;

&lt;p&gt;CloudWatch Logs were used to monitor Lambda execution flow, confirm successful processing, and diagnose IAM permission errors. Retry behavior was verified by observing repeated invocation attempts and tracking message receive counts in SQS.&lt;/p&gt;

&lt;p&gt;The Dead Letter Queue served as an operational safety net, allowing failed messages to be isolated and inspected without disrupting the primary workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In a production deployment, this setup can be enhanced further by:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Configuring CloudWatch Alarms for DLQ message thresholds&lt;br&gt;
• Monitoring Lambda error rates&lt;br&gt;
• Tracking SQS queue depth metrics&lt;/p&gt;

&lt;p&gt;These monitoring practices ensure rapid detection and resolution of runtime anomalies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operational Learnings from This Implementation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Serverless does not remove architectural responsibility.&lt;/li&gt;
&lt;li&gt;Idempotency is mandatory in distributed workflows.&lt;/li&gt;
&lt;li&gt;DLQs are essential, not optional.&lt;/li&gt;
&lt;li&gt;IAM must reflect runtime operations.&lt;/li&gt;
&lt;li&gt;Logging is critical for troubleshooting.&lt;/li&gt;
&lt;li&gt;Decoupling increases resilience.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;How This Scales in Production&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This architecture supports:&lt;br&gt;
• Horizontal Lambda scaling&lt;br&gt;
• Queue buffering during spikes&lt;br&gt;
• Safe retry behavior&lt;br&gt;
• Failure isolation&lt;br&gt;
• Independent service evolution&lt;/p&gt;

&lt;p&gt;With minimal modification, it can support:&lt;br&gt;
• Large CSV ingestion&lt;br&gt;
• ETL pipelines&lt;br&gt;
• Data lake ingestion&lt;br&gt;
• Audit pipelines&lt;br&gt;
• Compliance workflows&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Reflection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What began as a simple file upload evolved into a robust, decoupled, production-ready serverless system.&lt;br&gt;
The real difference was not in writing Lambda code.&lt;br&gt;
It was in:&lt;br&gt;
• Designing for failure&lt;br&gt;
• Preventing duplication&lt;br&gt;
• Tuning IAM&lt;br&gt;
• Validating retries&lt;br&gt;
• Testing the DLQ&lt;br&gt;
• Observing logs carefully&lt;/p&gt;

&lt;p&gt;Building resilient systems is not about adding services.&lt;br&gt;
It is about intentional design decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key Takeaways&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Decoupling ingestion and processing through SQS significantly improves system resilience.&lt;br&gt;
• Idempotency logic is essential to prevent duplicate processing in distributed systems.&lt;br&gt;
• Dead Letter Queues protect system stability by isolating repeated failures.&lt;br&gt;
• IAM policies must align with real execution paths to avoid runtime disruptions.&lt;br&gt;
• Observability through structured logging accelerates debugging and operational confidence.&lt;/p&gt;

&lt;p&gt;These principles extend beyond this implementation and apply broadly to production-grade serverless architectures.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;This end-to-end implementation demonstrates how to design and validate a reliable file processing pipeline using AWS services.&lt;/p&gt;

&lt;p&gt;It moves beyond basic examples and incorporates:&lt;br&gt;
• Decoupling&lt;br&gt;
• Retry logic&lt;br&gt;
• Idempotency&lt;br&gt;
• Observability&lt;br&gt;
• Security best practices&lt;br&gt;
• Real-world debugging&lt;/p&gt;

&lt;p&gt;This is the difference between a demo architecture and a production-ready design.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>git</category>
      <category>pipeline</category>
      <category>ai</category>
    </item>
    <item>
      <title>Secure Your AWS Environment with GuardDuty and Inspector</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Thu, 19 Feb 2026 09:18:54 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/secure-your-aws-environment-with-guardduty-and-inspector-574j</link>
      <guid>https://forem.com/sudoconsultants/secure-your-aws-environment-with-guardduty-and-inspector-574j</guid>
      <description>&lt;h3&gt;
  
  
  Introduction:
&lt;/h3&gt;

&lt;p&gt;In today’s cloud-native world, security isn’t just a checkbox; it’s a continuous process that needs to be embedded throughout your development lifecycle. AWS provides two powerful security services that work together to protect your cloud infrastructure: Amazon GuardDuty for intelligent threat detection and Amazon Inspector for comprehensive vulnerability management. This guide explores how to leverage both services to implement a robust DevSecOps strategy that secures your applications from code to runtime. &lt;/p&gt;

&lt;h4&gt;
  
  
  Part 1: Amazon GuardDuty – Your 24/7 Threat Detection Guardian
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon GuardDuty?&lt;/strong&gt;&lt;br&gt;
Amazon GuardDuty is an intelligent threat detection service that continuously monitors your AWS environment for malicious activity and unauthorized behavior. Think of it as your cloud security guard that never sleeps and analyzes billions of events across multiple data sources using machine learning, anomaly detection, and integrated threat intelligence from AWS and industry-leading third parties. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Key GuardDuty Capabilities:&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Expanded Workload Runtime Protection
&lt;/h3&gt;

&lt;p&gt;GuardDuty now monitors EC2 instances, Amazon EKS containers, and AWS Fargate workloads at runtime to detect: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Suspicious processes and unauthorized executables &lt;/li&gt;
&lt;li&gt;Reverse shells indicating remote access attempts &lt;/li&gt;
&lt;li&gt;Cryptocurrency mining malware.&lt;/li&gt;
&lt;li&gt;Backdoor behavior and persistence mechanisms. &lt;/li&gt;
&lt;li&gt;Defense evasion tactics and unusual file access patterns. 
This agent-based monitoring provides deep visibility into operating system-level activity, generating over 30 different runtime security findings to help protect your workloads. &lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Enhanced Malware Detection Capability
&lt;/h3&gt;

&lt;p&gt;GuardDuty Malware Protection now offers comprehensive malware scanning across multiple AWS services&lt;/p&gt;

&lt;p&gt;1.EC2 and EBS Volume Scanning: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agentless scanning of EBS volumes attached to EC2 instances. &lt;/li&gt;
&lt;li&gt;GuardDuty initiated scans triggered by suspicious behavior. &lt;/li&gt;
&lt;li&gt;On-demand scans you can initiate manually. &lt;/li&gt;
&lt;li&gt;Detects trojans, ransomware, botnets, webshells, and cryptominers. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2.S3 Malware Protection: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic scanning of newly uploaded objects to S3 buckets. &lt;/li&gt;
&lt;li&gt;AWS developed multiple industry-leading third-party scan engines. &lt;/li&gt;
&lt;li&gt;Tagging of scanned objects with scan status (NO_THREATS_FOUND, THREATS_FOUND, etc.) &lt;/li&gt;
&lt;li&gt;Policy-based prevention of accessing malicious files. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3.AWS Backup Malware Protection (New): &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extends malware detection to EC2, EBS, and S3 backups. &lt;/li&gt;
&lt;li&gt;Automatic scanning of new backups. &lt;/li&gt;
&lt;li&gt;On-demand scanning of existing backups. &lt;/li&gt;
&lt;li&gt;Verification that backups are clean before restoration. &lt;/li&gt;
&lt;li&gt;Incremental scanning to analyze only changed data, reducing costs. &lt;/li&gt;
&lt;li&gt;Helps identify your last known clean backup to minimize business disruption.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Broader Service Coverage
&lt;/h3&gt;

&lt;p&gt;GuardDuty now protects an expanded range of AWS services beyond EC2:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon S3 Protection:&lt;/strong&gt; Detects unusual access patterns, data exfiltration attempts, disabling of S3 Block Public Access, and API patterns indicating misconfigured bucket permissions.&lt;br&gt;
&lt;strong&gt;Amazon RDS Protection:&lt;/strong&gt; Monitors RDS and Aurora databases for anomalous login behavior, brute force attacks, and suspicious database access patterns.&lt;br&gt;
&lt;strong&gt;AWS Lambda Protection:&lt;/strong&gt; Detects malicious execution behavior in serverless functions, including invocations from suspicious locations and unusual VPC network activity.&lt;br&gt;
&lt;strong&gt;Amazon EKS Protection:&lt;/strong&gt; Monitors Kubernetes audit logs to detect suspicious API activity, unauthorized access attempts, and policy violations in your EKS clusters.&lt;/p&gt;

&lt;h3&gt;
  
  
  Smarter Threat Intelligence &amp;amp; Advanced Finding Types
&lt;/h3&gt;

&lt;p&gt;GuardDuty’s enhanced machine learning models and AWS and third-party threat intelligence enable detection of sophisticated attack patterns: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Credential Compromise:&lt;/strong&gt; Detects IAM credentials being used from unusual locations or by compromised instances &lt;br&gt;
&lt;strong&gt;Persistence Techniques:&lt;/strong&gt; Identifies attackers establishing backdoors and maintaining access &lt;br&gt;
&lt;strong&gt;Privilege Escalation:&lt;/strong&gt; Flags attempts to gain higher-level permissions within your environment &lt;br&gt;
&lt;strong&gt;Command-and-Control Traffic:&lt;/strong&gt; Detects EC2 instances communicating with known malicious domains and C2 servers &lt;br&gt;
&lt;strong&gt;Cryptomining Activity:&lt;/strong&gt; Identifies unauthorized cryptocurrency mining using your resources &lt;br&gt;
&lt;strong&gt;Extended Threat Detection:&lt;/strong&gt; Uses AI/ML to automatically correlate multiple security signals across network activity, process runtime behavior, malware execution, and API activity to detect multi-stage attacks that might otherwise go unnoticed &lt;/p&gt;

&lt;p&gt;GuardDuty now generates critical severity findings like &lt;strong&gt;&lt;em&gt;AttackSequence:EC2/CompromisedInstanceGroup&lt;/em&gt;&lt;/strong&gt; that provide attack sequence information, complete timelines, MITRE ATT&amp;amp;CK mappings, and remediation recommendations, allowing you to spend less time on analysis and more time responding to threats. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How GuardDuty Works?&lt;/strong&gt;&lt;br&gt;
GuardDuty analyzes and processes data from multiple sources: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPC Flow Logs: Network traffic patterns and communication with malicious IPs. &lt;/li&gt;
&lt;li&gt;AWS CloudTrail Management Events: API calls and account activity for detecting credential misuse. &lt;/li&gt;
&lt;li&gt;CloudTrail S3 Data Events: S3 object-level API activity. &lt;/li&gt;
&lt;li&gt;DNS Query Logs: DNS queries to detect malicious domain communications. &lt;/li&gt;
&lt;li&gt;EKS Audit Logs: Kubernetes control plane activity. &lt;/li&gt;
&lt;li&gt;RDS Login Activity: Database authentication events. &lt;/li&gt;
&lt;li&gt;Lambda Network Activity: Function execution behavior and network connections. &lt;/li&gt;
&lt;li&gt;Runtime Monitoring: Operating system-level process and file activity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All this happens without requiring you to deploy or manage any security software. GuardDuty operates entirely through AWS service integrations.&lt;/p&gt;

&lt;p&gt;Practical GuardDuty Demo: Detecting Real Threats&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Case:&lt;/strong&gt; Detecting a Compromised EC2 Instance with Cryptomining Activity&lt;/p&gt;

&lt;p&gt;Let’s walk through a real-world scenario where GuardDuty detects and alerts on a compromised EC2 instance that’s been infected with cryptocurrency mining malware.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Enable GuardDuty&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Navigate to AWS Console → GuardDuty → Get Started&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh34g1x4rvg8ze414r60f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh34g1x4rvg8ze414r60f.png" alt=" " width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click “Enable GuardDuty” (30-day free trial available)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb72ghc29xuvh9fk59gu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb72ghc29xuvh9fk59gu9.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable protection plans: Foundational, Runtime Monitoring, and Malware Protection. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Simulate a Compromised Instance&lt;/strong&gt;&lt;br&gt;
Launch an EC2 instance and simulate suspicious activity: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH into your EC2 instance. &lt;/li&gt;
&lt;li&gt;Make DNS queries to known malicious test domains (provided by GuardDuty for testing). &lt;/li&gt;
&lt;li&gt;Generate unusual network traffic patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: Review GuardDuty Findings&lt;/strong&gt;&lt;br&gt;
Within 15-30 minutes, GuardDuty will generate findings such as &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cryptocurrency:&lt;/strong&gt; EC2/BitcoinTool.B!DNS (indicates your EC2 instance is querying a domain associated with Bitcoin mining). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unauthorized Access:&lt;/strong&gt; EC2/MaliciousIPCaller.Custom (EC2 instance is communicating with a known malicious IP). &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Runtime:&lt;/strong&gt; EC2/SuspiciousProcess (Suspicious process detected at the OS level).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each finding includes: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Severity level (Low, Medium, High, Critical) &lt;/li&gt;
&lt;li&gt;Affected resource details &lt;/li&gt;
&lt;li&gt;Action details showing what triggered the alert &lt;/li&gt;
&lt;li&gt;Recommended remediation steps &lt;/li&gt;
&lt;li&gt;MITRE ATT&amp;amp;CK technique mappings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9pw20effastoz0x7p2q.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fw9pw20effastoz0x7p2q.jpg" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Investigate with Malware Protection&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When GuardDuty detects suspicious behavior, it can automatically trigger a malware scan: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to GuardDuty → Malware scans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02pnv7t83w02uq7tfy41.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F02pnv7t83w02uq7tfy41.jpg" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;View the scan results for your EC2 instance &lt;/li&gt;
&lt;li&gt;If malware is detected, GuardDuty generates an &lt;em&gt;Execution:EC2/MaliciousFile&lt;/em&gt; finding &lt;/li&gt;
&lt;li&gt;Finding details includes the file hash, file path, and threat name &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcky7prboh6xj6p0womyx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcky7prboh6xj6p0womyx.png" alt=" " width="800" height="688"&gt;&lt;/a&gt;&lt;br&gt;
Step 5: Automated Response &lt;/p&gt;

&lt;p&gt;Set up automated remediation using EventBridge and Lambda:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create an EventBridge rule to trigger on GuardDuty findings &lt;/li&gt;
&lt;li&gt;Connect it to a Lambda function that: &lt;/li&gt;
&lt;li&gt;Isolates the compromised instance (modifiessecurity group)
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Creates a snapshot for forensics
- Sends notifications to your security team
- Tags the resource for investigation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjcjpygdoo80l3u8kbx0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjjcjpygdoo80l3u8kbx0.png" alt=" " width="800" height="345"&gt;&lt;/a&gt;&lt;br&gt;
This demo demonstrates how GuardDuty provides continuous, intelligent monitoring with minimal configuration, detecting threats in real-time, and enabling rapid response to protect your AWS environment. &lt;/p&gt;

&lt;h4&gt;
  
  
  Part 2: Amazon Inspector – Comprehensive Vulnerability Management
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;What is Amazon Inspector?&lt;/strong&gt;&lt;br&gt;
Amazon Inspector is an automated vulnerability management service that continuously scans your AWS workloads for software vulnerabilities and network exposures. While GuardDuty detects active threats, Inspector identifies weaknesses before they can be exploited. It’s your proactive security assessor that helps you implement a “shift-left” security approach by catching vulnerabilities early in the development lifecycle. &lt;/p&gt;

&lt;p&gt;Key Inspector Capabilities (Enhanced Features):&lt;/p&gt;

&lt;h4&gt;
  
  
  Code Security Scanning: Shift-Left DevSecOps
&lt;/h4&gt;

&lt;p&gt;Inspector now supports application dependency and source code scanning, enabling true shift-left security: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Software Composition Analysis (SCA):&lt;/strong&gt; Scans open-source library vulnerabilities in your dependencies. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Static Application Security Testing (SAST):&lt;/strong&gt; Analyzes your source code for security flaws. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Secrets Detection:&lt;/strong&gt; Identifies hardcoded credentials, API keys, and sensitive data in code. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure as Code (IaC) Scanning:&lt;/strong&gt; Detects misconfigurations in Terraform, CloudFormation, and CDK templates. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Supported Package Managers &amp;amp; Languages:&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;JavaScript/Node.js: package.json, package-lock.json, yarn.lock &lt;br&gt;
Python: requirements.txt, Pipfile.lock, poetry.lock &lt;br&gt;
Java: pom.xml (Maven), build.gradle (Gradle) &lt;br&gt;
Ruby: Gemfile.lock &lt;br&gt;
Go: go.mod, go.sum&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Scanning&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unlike traditional security tools that run on schedules, Inspector provides continuous, event-driven scanning: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic scanning on every code commit to connected repositories. &lt;/li&gt;
&lt;li&gt;Immediate scanning when new container images are pushed to ECR. &lt;/li&gt;
&lt;li&gt;Instant scanning when Lambda functions are created or updated.&lt;/li&gt;
&lt;li&gt;Continuous monitoring of running EC2 instances. &lt;/li&gt;
&lt;li&gt;Real-time rescanning when new CVEs are published. &lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Network Exposure Detection
&lt;/h4&gt;

&lt;p&gt;The inspector detects network reachability issues that could expose your workload: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open ports accessible from the internet. &lt;/li&gt;
&lt;li&gt;Overly permissive security groups. &lt;/li&gt;
&lt;li&gt;Instances with public IP addresses. &lt;/li&gt;
&lt;li&gt;Vulnerable services exposed to untrusted networks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Complete Code → Container → Compute Lifecycle Coverage
&lt;/h4&gt;

&lt;p&gt;Inspector provides end-to-end security across your entire application lifecycle: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Code Stage:&lt;/strong&gt; Scan source code repositories (GitHub, GitLab) for vulnerabilities and secrets before deployment &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container Stage:&lt;/strong&gt; Scan container images in Amazon ECR for CVEs in packages and base images &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compute Stage:&lt;/strong&gt; Monitor running EC2 instances and Lambda functions for package vulnerabilities &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DevSecOps Integration: Shift-Left Security&lt;/p&gt;

&lt;p&gt;Inspector enables true DevSecOps by shifting security earlier in the Software Development Lifecycle (SDLC): &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CI/CD Pipeline Integration:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scan code before merging pull requests &lt;/li&gt;
&lt;li&gt;Block deployments containing critical vulnerabilities &lt;/li&gt;
&lt;li&gt;Integrate findings into developer workflows via GitHub/GitLab &lt;/li&gt;
&lt;li&gt;Automated security gates in deployment pipelines &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Early Detection Benefits:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Catch vulnerabilities during development, not in production &lt;/li&gt;
&lt;li&gt;Reduce remediation costs by finding issues early &lt;/li&gt;
&lt;li&gt;Empower developers with immediate security feedback &lt;/li&gt;
&lt;li&gt;Maintain security compliance throughout the SDLC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What Inspector Scans?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;EC2 Instances:&lt;/strong&gt; Operating system packages and applications, Common Vulnerabilities and Exposures (CVEs), Center for Internet Security (CIS) benchmark compliance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Container Images (ECR):&lt;/strong&gt; Base image vulnerabilities, installed packages, dependency vulnerabilities&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lambda Functions:&lt;/strong&gt; Application code vulnerabilities, package dependencies, layer vulnerabilities, hardcoded secrets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Source Code Repositories:&lt;/strong&gt; Security vulnerabilities in application code, dependency vulnerabilities, IaC misconfigurations, exposed secrets &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Practical Inspector Demo: Securing Your Application from Network Vulnerabilities&lt;/p&gt;

&lt;p&gt;This demo shows Inspector’s ability to detect and address network vulnerabilities within your deployed infrastructure, helping secure the network layer across the application lifecycle. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Enable Amazon Inspector&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Navigate to AWS Console → Inspector → Get Started&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnjvuveko73ek5xkt0pf1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnjvuveko73ek5xkt0pf1.png" alt=" " width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select “Activate Inspector.” &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyhwh5cmy74hj9bhfht3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmyhwh5cmy74hj9bhfht3.png" alt=" " width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Deploy a Vulnerable Infrastructure&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Launch an EC2 instance with intentional misconfigurations:&lt;/li&gt;
&lt;li&gt;Launch an EC2 instance with an outdated AMI (e.g., Amazon Linux 2).&lt;/li&gt;
&lt;li&gt;Create a security group with port 22 (SSH) open to 0.0.0.0/0 (public access).&lt;/li&gt;
&lt;li&gt;Install outdated packages to simulate a vulnerable environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3: View Network Vulnerability Findings&lt;/strong&gt;&lt;br&gt;
After deploying your vulnerable infrastructure, Inspector will scan for network-related issues and generate findings:&lt;/p&gt;

&lt;p&gt;Network Exposure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Finding: Port 22 (SSH) is open to the internet.&lt;/li&gt;
&lt;li&gt;Severity: Medium&lt;/li&gt;
&lt;li&gt;Remediation: Restrict access to specific IP ranges or use a bastion host for secure SSH access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Package Vulnerabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multiple CVEs in system packages&lt;/li&gt;
&lt;li&gt;Outdated kernel version&lt;/li&gt;
&lt;li&gt;Suggested package updates&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flq4f96n9ibo2sx96jdjl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flq4f96n9ibo2sx96jdjl.png" alt=" " width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 4: Remediate and Rescan:&lt;/strong&gt;&lt;br&gt;
Fix the identified issues and observe continuous monitoring &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The inspector automatically rescans and closes remediated findings.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This demo focuses on identifying and remediating network vulnerabilities within your infrastructure using Amazon Inspector. &lt;/p&gt;

&lt;h4&gt;
  
  
  GuardDuty + Inspector: Better Together
&lt;/h4&gt;

&lt;p&gt;While GuardDuty and Inspector serve different purposes, they complement each other perfectly to provide comprehensive AWS security: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GuardDuty:&lt;/strong&gt; Detects active threats and malicious activity in real-time (“something bad is happening”) &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Inspector:&lt;/strong&gt; Identifies vulnerabilities and misconfigurations proactively (“something could be exploited”) &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Integration Best Practices&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Centralize with Security Hub:&lt;/strong&gt; Aggregate findings from both GuardDuty and Inspector in AWS Security Hub for a unified security dashboard &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automate Responses:&lt;/strong&gt; Use EventBridge to trigger Lambda functions for automated remediation based on finding severity &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enable Organization-Wide:&lt;/strong&gt; Deploy both services across all AWS accounts using AWS Organizations for comprehensive coverage &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrate with SIEM&lt;/strong&gt;: Export findings to your Security Information and Event Management system for correlation with other security data &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Track Metrics:&lt;/strong&gt; Monitor mean time to detect (MTTD) and mean time to remediate (MTTR) to measure security posture improvements. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
Securing your AWS environment requires a multi-layered approach. Amazon GuardDuty provides intelligent, continuous threat detection across your entire AWS infrastructure, while Amazon Inspector enables proactive vulnerability management from code to production. Together, they form a comprehensive security solution that: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Implements shift-left security by catching vulnerabilities during development &lt;/li&gt;
&lt;li&gt;Continuously monitors for threats and vulnerabilities across your entire environment &lt;/li&gt;
&lt;li&gt;Detects malware, cryptomining, and sophisticated multi-stage attacks &lt;/li&gt;
&lt;li&gt;Provides actionable findings with remediation guidance &lt;/li&gt;
&lt;li&gt;Integrates seamlessly into DevSecOps workflows and CI/CD pipelines &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Enables automated security responses and compliance reporting&lt;br&gt;
By enabling both GuardDuty and Inspector, you create a robust security foundation that protects your AWS workloads throughout their entire lifecycle from the first line of code to running production infrastructure. Start your security journey today by enabling both services and implementing the best practices outlined in this guide. &lt;/p&gt;

</description>
      <category>security</category>
      <category>guardduty</category>
      <category>aws</category>
      <category>ai</category>
    </item>
    <item>
      <title>Designing Compliant Cloud Analytics on AWS: Why Enterprises Must Rethink Data Governance</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Wed, 21 Jan 2026 06:56:36 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/designing-compliant-cloud-analytics-on-aws-why-enterprises-must-rethink-data-governance-1k66</link>
      <guid>https://forem.com/sudoconsultants/designing-compliant-cloud-analytics-on-aws-why-enterprises-must-rethink-data-governance-1k66</guid>
      <description>&lt;h3&gt;
  
  
  1. Introduction - The Governance Crisis in Modern Analytics
&lt;/h3&gt;

&lt;p&gt;Enterprises today are experiencing an unprecedented growth in data. Digital transformation initiatives, customer engagement platforms, IoT, financial systems, and AI workloads generate massive volumes of structured and unstructured data every day. At the same time, regulatory pressure is intensifying across industries. Laws such as GDPR, HIPAA, PCI-DSS, ISO 27001, and regional data residency requirements impose strict rules on how organizations collect, process, store, and share information.&lt;/p&gt;

&lt;p&gt;Traditional data governance models were designed for on-premises environments where data movement was slow, centralized, and tightly controlled. Cloud computing has completely changed this reality. Data is now highly distributed, consumed by multiple teams, accessed through self-service analytics tools, and integrated with external partners.&lt;/p&gt;

&lt;p&gt;As a result, enterprises face a critical challenge:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do we unlock business value from analytics while maintaining compliance, privacy, and trust?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer is a new model of compliant cloud analytics, where governance is not an afterthought but a foundational design principle.&lt;/p&gt;

&lt;p&gt;This makes compliant cloud analytics on AWS a critical capability for enterprises building secure, privacy-first, and governed enterprise data analytics platforms.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. What "Compliant Cloud Analytics" Really Means
&lt;/h3&gt;

&lt;p&gt;Compliant cloud analytics is not simply about passing an audit. It is a holistic architectural approach built on five core pillars:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data Privacy by Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sensitive information must be protected from the moment it enters the system. Encryption, masking, tokenization, and controlled access are mandatory, not optional.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Embedded Governance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Governance must be enforced automatically through policies, not manual approvals. Data access rules, ownership models, and lifecycle policies must be codified and enforced by the platform itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security and Identity Control&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every request to data must be tied to an identity, evaluated against policies, logged, and monitored continuously.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auditability and Traceability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Enterprises must be able to answer critical questions at any time:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who accessed which data?&lt;/li&gt;
&lt;li&gt;When was it accessed?&lt;/li&gt;
&lt;li&gt;For what purpose?&lt;/li&gt;
&lt;li&gt;Under which policy?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Responsible Data Sharing&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Analytics frequently requires collaboration between departments, business units, and external partners. This must happen without exposing raw or sensitive data.&lt;/p&gt;

&lt;p&gt;Together, these principles form the foundation of a compliant analytics platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Why AWS Is the Right Platform for Governed Analytics
&lt;/h3&gt;

&lt;p&gt;AWS provides a uniquely comprehensive ecosystem for building compliant analytics platforms.&lt;/p&gt;

&lt;p&gt;AWS enables enterprise data analytics on AWS by combining scalable AWS analytics services with built-in data governance, security, and regulatory compliance controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Core Analytics Stack&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon S3 - Durable, scalable data lake storage&lt;/li&gt;
&lt;li&gt;AWS Glue - Data catalog, ETL, and schema management&lt;/li&gt;
&lt;li&gt;Amazon Athena - Serverless SQL analytics&lt;/li&gt;
&lt;li&gt;Amazon Redshift - Enterprise data warehousing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Governance and Security Layer&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lake Formation - Centralized data governance&lt;/li&gt;
&lt;li&gt;AWS IAM - Fine-grained identity and access control&lt;/li&gt;
&lt;li&gt;AWS KMS - Encryption key management&lt;/li&gt;
&lt;li&gt;AWS CloudTrail - Immutable audit logs&lt;/li&gt;
&lt;li&gt;AWS Config &amp;amp; Audit Manager - Continuous compliance monitoring&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Privacy-Preserving Analytics&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Clean Rooms - Secure multi-party data collaboration without sharing raw datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This tightly integrated toolchain allows enterprises to build governance directly into their analytics architecture rather than bolting it on later.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uuq2leu9275joff4m0y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2uuq2leu9275joff4m0y.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Reference Architecture: Compliant Analytics on AWS
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;End-to-End Data Flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Data Sources → Amazon S3 (Encrypted Data Lake)&lt;br&gt;
↓&lt;br&gt;
AWS Glue (Catalog + ETL)&lt;br&gt;
↓&lt;br&gt;
Lake Formation Governance Layer&lt;br&gt;
↓&lt;br&gt;
Athena / Redshift (Analytics &amp;amp; BI)&lt;br&gt;
↓&lt;br&gt;
Privacy Sharing via AWS Clean Rooms&lt;br&gt;
↓&lt;br&gt;
Monitoring &amp;amp; Compliance Controls&lt;br&gt;
(CloudTrail, Config, Audit Manager)&lt;/p&gt;

&lt;p&gt;This reference architecture demonstrates how data governance on AWS can be consistently enforced across cloud data analytics workflows, from ingestion to insight.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where Governance Happens&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgrezwdya3j6q7sn09tjj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgrezwdya3j6q7sn09tjj.png" alt=" " width="800" height="214"&gt;&lt;/a&gt;&lt;br&gt;
This architecture ensures that governance and compliance remain intact even as analytics scales.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Practical Enterprise Scenario: Regulated Financial Analytics Platform
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Business Context&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A financial services enterprise processes transaction data containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Customer PII&lt;/li&gt;
&lt;li&gt;Financial records&lt;/li&gt;
&lt;li&gt;Risk models&lt;/li&gt;
&lt;li&gt;Regulatory reporting datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The organization needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-performance analytics&lt;/li&gt;
&lt;li&gt;Strict regulatory compliance&lt;/li&gt;
&lt;li&gt;Secure data sharing with partners&lt;/li&gt;
&lt;li&gt;Full audit visibility&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  6. Step-by-Step Implementation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Step 1 - Secure Data Ingestion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Raw financial data is ingested into &lt;strong&gt;Amazon S3&lt;/strong&gt;.&lt;br&gt;
All buckets are encrypted using &lt;strong&gt;AWS KMS&lt;/strong&gt;.&lt;br&gt;
Object-level logging is enabled.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pxvv2ws0962boxo6o21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2pxvv2ws0962boxo6o21.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 2 - Data Cataloging and Governance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Glue crawls the datasets and registers schemas in the Glue Data Catalog.&lt;br&gt;
&lt;strong&gt;AWS Lake Formation&lt;/strong&gt; applies centralized permissions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which roles can read which tables&lt;/li&gt;
&lt;li&gt;Which columns contain sensitive data&lt;/li&gt;
&lt;li&gt;Which teams can query which datasets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS Lake Formation governance ensures fine-grained access control for analytics workloads while maintaining compliance across regulated enterprise environments.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fat026etlm6h5stlbgvul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fat026etlm6h5stlbgvul.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 3 - Analytics Processing&lt;/strong&gt;&lt;br&gt;
Business analysts query data using &lt;strong&gt;Amazon Athena&lt;/strong&gt;.&lt;br&gt;
Advanced analytics teams use &lt;strong&gt;Amazon Redshift&lt;/strong&gt; for large-scale reporting.&lt;br&gt;
Every query is automatically logged and audited.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg1syfmlp2r2t0kt7mz6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcg1syfmlp2r2t0kt7mz6.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 4 - Privacy-Preserving Data Collaboration&lt;/strong&gt;&lt;br&gt;
The enterprise collaborates with an external risk partner using &lt;strong&gt;AWS Clean Rooms&lt;/strong&gt;.&lt;br&gt;
Both parties analyze joint datasets without either side exposing raw customer information.&lt;/p&gt;

&lt;p&gt;AWS Clean Rooms enables privacy-preserving analytics on AWS, allowing organizations to collaborate on sensitive datasets without exposing raw data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F899kj5ow4w5auz9xbseg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F899kj5ow4w5auz9xbseg.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Step 5 - Compliance Monitoring and Auditing&lt;/strong&gt;&lt;br&gt;
All activity is tracked via:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CloudTrail - Who accessed what&lt;/li&gt;
&lt;li&gt;AWS Config - Whether configurations violate policies&lt;/li&gt;
&lt;li&gt;Audit Manager - Automated compliance reports&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfs0e2lfs6rzk088u7e0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfs0e2lfs6rzk088u7e0.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  7. Enterprise Design Principles
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Automate Governance&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Never rely on manual approvals. Encode policies into the platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Classify Data Early&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Apply sensitivity labels at ingestion.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Use Least Privilege Everywhere&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;IAM roles should grant only the exact permissions required.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Encrypt Everything&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;At rest, in transit, and during processing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuously Monitor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Compliance is not static. It must be verified constantly.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Business Outcomes
&lt;/h3&gt;

&lt;p&gt;Enterprises implementing compliant analytics achieve:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regulatory confidence - Reduced audit risk&lt;/li&gt;
&lt;li&gt;Customer trust - Strong privacy guarantees&lt;/li&gt;
&lt;li&gt;Operational efficiency - Automated governance&lt;/li&gt;
&lt;li&gt;Faster insights - Secure self-service analytics&lt;/li&gt;
&lt;li&gt;Scalable growth - Compliance that scales with business&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  9. Why Enterprises Must Rethink Data Governance Now
&lt;/h3&gt;

&lt;p&gt;The cost of non-compliance is rising rapidly. Fines, legal exposure, reputational damage, and loss of customer trust are existential risks. At the same time, competitive advantage increasingly depends on how effectively organizations leverage data.&lt;/p&gt;

&lt;p&gt;Compliant cloud analytics is no longer optional. It is the foundation of sustainable, data-driven enterprises.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Conclusion
&lt;/h3&gt;

&lt;p&gt;Modern enterprise cloud analytics on AWS without strong governance and compliance introduces significant operational and regulatory risk.&lt;br&gt;
AWS enables organizations to innovate with confidence by embedding compliance, privacy, and security directly into the analytics lifecycle.&lt;/p&gt;

&lt;p&gt;Enterprises that redesign their analytics platforms with compliance at the core will move faster, operate safer, and build stronger trust with customers and regulators alike.&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>governance</category>
      <category>aws</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>Kiro: AWS Agentic AI IDE That Thinks, Acts, and Builds with You</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Wed, 21 Jan 2026 06:54:43 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/kiro-aws-agentic-ai-ide-that-thinks-acts-and-builds-with-you-efb</link>
      <guid>https://forem.com/sudoconsultants/kiro-aws-agentic-ai-ide-that-thinks-acts-and-builds-with-you-efb</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;From intent to production, with control, memory, and specs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Have you ever wondered how you're supposed to take that scrappy little prototype you hacked together last week and turn it into a production‑ready application, without burning out?&lt;/p&gt;

&lt;p&gt;It's fun to demo something that &lt;em&gt;kind of works&lt;/em&gt;. But the real work starts when you have to harden it, document it, wire it into infrastructure, and keep everything consistent as the system evolves.&lt;/p&gt;

&lt;p&gt;That gap from &lt;strong&gt;prototype to production&lt;/strong&gt; is exactly where &lt;strong&gt;Kiro&lt;/strong&gt;, AWS's agentic AI IDE, wants to sit: an environment that &lt;strong&gt;thinks, acts, and builds with you&lt;/strong&gt;, instead of just throwing autocompletes at your cursor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Kiro Actually Is&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Kiro is an IDE and CLI built around agents, not bolted-on assistants.&lt;/p&gt;

&lt;p&gt;You don't talk to it in terms of syntax; you talk in terms of outcomes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Add a new capability to this service."&lt;/li&gt;
&lt;li&gt;"Change how this flow is structured."&lt;/li&gt;
&lt;li&gt;"Break a large piece into smaller, easier-to-maintain parts."&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From there:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kiro turns your intent into a spec.&lt;/li&gt;
&lt;li&gt;From the spec, it derives a plan and task breakdown.&lt;/li&gt;
&lt;li&gt;It then produces multi-file code changes that you review as diffs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything still flows through your normal Git process. You review, commit, and ship. The agent helps, but you remain accountable for what goes on to production.&lt;/p&gt;

&lt;p&gt;Instead of feeling like "autocomplete on steroids," Kiro behaves more like a junior architect: it reads the brief, sketches a plan, and edits the repo in a way you can reason about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spec‑Driven Development vs "Vibe Coding"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most AI-assisted development today is vibe coding, prompt, paste, and hope.&lt;/p&gt;

&lt;p&gt;Kiro takes a very different stance. Its default mode is &lt;strong&gt;spec‑driven development&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnnr8sj4v2hnqmuce4z7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvnnr8sj4v2hnqmuce4z7.png" alt=" " width="800" height="535"&gt;&lt;/a&gt;&lt;br&gt;
With Kiro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You start with a spec that captures what you want to build, the constraints, and the key decisions.&lt;/li&gt;
&lt;li&gt;That spec lives inside your repository as a first‑class artifact, not buried in a chat history.&lt;/li&gt;
&lt;li&gt;From the spec, Kiro derives tasks and a plan before touching code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmt9ktoe3wwo1vbil8p0d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmt9ktoe3wwo1vbil8p0d.png" alt=" " width="800" height="546"&gt;&lt;/a&gt;&lt;br&gt;
This gives you a clean, auditable chain:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent → Spec → Plan → Diffs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Weeks or months later, you can come back, read the spec, and understand &lt;em&gt;why&lt;/em&gt; the code looks the way it does, rather than reverse‑engineering a pile of AI‑generated changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Steering: Teaching Kiro "How We Build Here"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Out of the box, no agent truly knows your stack, your conventions, or your constraints.&lt;/p&gt;

&lt;p&gt;With steering, you encode things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The tools and languages you commonly use.&lt;/li&gt;
&lt;li&gt;Shared patterns and conventions your team follows.&lt;/li&gt;
&lt;li&gt;General guardrails around quality, security, and maintainability.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kiro uses these steering inputs to shape its behavior over time, so it starts behaving less like a generic code generator and more like an engineer who has actually read your internal docs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kiro Agent Hooks: Turning Habits into Automation&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Agent hooks are where Kiro starts to feel genuinely &lt;em&gt;agentic&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fks6xerag2oa189vkh1wr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fks6xerag2oa189vkh1wr.png" alt=" " width="800" height="317"&gt;&lt;/a&gt;&lt;br&gt;
Hooks let you say: &lt;strong&gt;when this happens in my workflow, have Kiro do that automatically.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When a spec changes, keep related tasks and notes in sync.&lt;/li&gt;
&lt;li&gt;When certain parts of the codebase change, suggest follow-up work like tests or documentation.&lt;/li&gt;
&lt;li&gt;When important areas are modified, prompt a closer review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of relying on tribal memory, "remember to always do A, B, and C when this changes", you encode those habits as hooks and let the agent help enforce them.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4bdsuy7erdmxm3d585e3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4bdsuy7erdmxm3d585e3.png" alt=" " width="788" height="974"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Model Routing: Using the Right Brain for the Right Job&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Not every task deserves the same model. Explaining a bug, planning a large refactor, and generating boilerplate are very different kinds of work.&lt;/p&gt;

&lt;p&gt;Kiro supports model routing, allowing you to:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3yx45tlvubo1uz1dpuyn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3yx45tlvubo1uz1dpuyn.png" alt=" " width="800" height="159"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a lightweight model for fast explanations and chat-style interactions.&lt;/li&gt;
&lt;li&gt;Use a stronger model for spec generation and planning.&lt;/li&gt;
&lt;li&gt;Use a high-capability model for heavy code generation and multi-file refactoring.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With project-level preferences, Kiro can automatically pick the right model for each phase, while still letting you override when needed. You get control over &lt;strong&gt;cost, latency, and quality&lt;/strong&gt; without constantly micromanaging settings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkpoint and Restore: Courage to Refactor&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One of the biggest blockers to using powerful agents is fear:&lt;/p&gt;

&lt;p&gt;What if this wrecks the codebase and I can't get back?&lt;/p&gt;

&lt;p&gt;Checkpoint and restore is how Kiro gives you courage.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You mark stable moments, clean builds, milestones, or "happy so far" states as checkpoints.&lt;/li&gt;
&lt;li&gt;After a series of agent-driven changes, if the direction feels wrong, you can restore to a checkpoint instead of untangling a mess.&lt;/li&gt;
&lt;li&gt;This works alongside Git commits, making large refactors safer and more approachable.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing you can always roll back makes it much easier to let Kiro operate across multiple files and modules.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;From Prototype to Production, with an Agent at Your Side&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Put it all together, and Kiro starts to feel purpose-built for that journey engineers worry about most: &lt;strong&gt;taking something from prototype to production.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kzcxccldr44s71c46ps.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4kzcxccldr44s71c46ps.png" alt=" " width="800" height="555"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specs preserve intent so the "why" never gets lost.&lt;/li&gt;
&lt;li&gt;Steering aligns the agent with your stack and standards.&lt;/li&gt;
&lt;li&gt;Agent hooks automate the invisible rituals.&lt;/li&gt;
&lt;li&gt;Model routing applies the right level of intelligence at each step.&lt;/li&gt;
&lt;li&gt;Checkpoints keep everything reversible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kiro doesn't replace engineering judgment, but it does raise the level at which you operate.&lt;/p&gt;

</description>
      <category>kiro</category>
      <category>aws</category>
      <category>agentaichallenge</category>
      <category>genai</category>
    </item>
    <item>
      <title>Evolution of Agentic AI C/O Amazon Quick suite</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Wed, 03 Dec 2025 12:07:56 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/evolution-of-agentic-ai-co-amazon-quick-suite-2c82</link>
      <guid>https://forem.com/sudoconsultants/evolution-of-agentic-ai-co-amazon-quick-suite-2c82</guid>
      <description>&lt;p&gt;Today, whatever is new quickly becomes old. We started with AI, then moved to Generative AI, and now it's Agentic AI. Honestly, the lines blur because everything overlaps and shines depending on our use cases and requirements.&lt;/p&gt;

&lt;p&gt;Before diving deeper, it's also key to clarify the difference between Generative AI and Agentic AI.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Generative AI is reactive; it creates content, text, images, and code based on user prompts. It focuses on what to create when asked.&lt;/li&gt;
&lt;li&gt;In contrast, Agentic AI is proactive and autonomous. It takes initiative, sets goals, plans multi-step workflows, makes decisions, adapts dynamically, and executes tasks with minimum supervision.&lt;/li&gt;
&lt;li&gt;Generative AI powers content within these systems, but Agentic AI orchestrates entire processes to achieve goals efficiently, turning AI from a passive tool into an active partner driving outcomes.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This post gives you a glimpse of the newest addition to AWS's agentic AI stack, Amazon QuickSuite.&lt;br&gt;
The name says it all:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quick:&lt;/strong&gt; Enabling you to build agent flows, create agentic AIs, conduct deep research, dive into your data, or even build your own personal chat agent like your own GPT - all really fast, right at your fingertips.&lt;br&gt;
&lt;strong&gt;Suite:&lt;/strong&gt; Because it's a family of tools: Quick Flow, Quick Automate, Quick Agents, Quick Research, and more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiyicqrr2lpu0vwwd0y2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsiyicqrr2lpu0vwwd0y2.png" alt=" " width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;QuickSuite is an agentic AI ecosystem delivered as a SaaS offering from AWS. Before this, building agentic AIs with Bedrock agents meant you had to manage model invocations, quotas, Lambda runtimes, observability, security, and more. Now, all that complexity is gone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnugnge3069fp4i7weipo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnugnge3069fp4i7weipo.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  My QuickSuite Use Cases
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Automated content generation for sales and marketing.&lt;/li&gt;
&lt;li&gt;AWS assistant for Weekly Update.&lt;/li&gt;
&lt;li&gt;Resume analyzer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkfqjs32asb4l1kyaxzw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnkfqjs32asb4l1kyaxzw.png" alt=" " width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Suite Dashboard
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrirlr4hxn0omd160y65.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frrirlr4hxn0omd160y65.png" alt=" " width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Flows
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It is a no-code/low-code automation feature that lets users create intelligent workflows using natural language prompts.&lt;/li&gt;
&lt;li&gt;It automates repetitive or routine tasks by turning simple descriptions into fully functioning workflows, connecting data and actions seamlessly across apps without coding.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tibf2nv4ysutaac8xhb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4tibf2nv4ysutaac8xhb.png" alt=" " width="800" height="470"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpo8a1rfffxwe0mv2tes.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvpo8a1rfffxwe0mv2tes.png" alt=" " width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Automated content generation for sales and marketing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;You can know how fast I created an agentic AI that handles multiple tasks as below. With just bare minimum prompting, that's all.&lt;/li&gt;
&lt;li&gt;We can also edit it by going into editor mode, and we can edit text fields, file upload fields, integrations, UI Agents, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsn48cgndypf16dgrg9v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxsn48cgndypf16dgrg9v.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64mfhtrqz653r1k6svhx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F64mfhtrqz653r1k6svhx.png" alt=" " width="800" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzdtfbjkqhjqtfk00f27.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnzdtfbjkqhjqtfk00f27.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Final Flow Output:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fig3z30f6ourjmjyglv46.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fig3z30f6ourjmjyglv46.png" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS assistant for Weekly Updates
&lt;/h3&gt;

&lt;p&gt;There are three search modes: General Knowledge, which uses GenAI; Web search, which does web browsing; and QuickSuite data, which skims your enterprise data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpbf2htpnma0moctgd17.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmpbf2htpnma0moctgd17.png" alt=" " width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;After running my flow, here is the output&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuymrv7gfrdzjb3wc6yvb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuymrv7gfrdzjb3wc6yvb.png" alt=" " width="800" height="564"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Resume Analyser Agent
&lt;/h3&gt;

&lt;p&gt;Create a resume analyzer where Users upload files that must be PDF, docx, or txt&lt;br&gt;
Please make sure I can upload 3 files at a time. If needed, add a reasoning flow so that the user will enter information like for which role, experience, then provide me recommendations, certifications, weak, strong, compare between other profile's resumes, and generate final info.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkywkkwbrex0ka14sf4g6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkywkkwbrex0ka14sf4g6.png" alt=" " width="800" height="721"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can still improvise it very well enough and add other functionality too.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quick Automations
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Creates multi-agent automations for business processes.&lt;/li&gt;
&lt;li&gt;Automate end-to-end enterprise processes with ease. Build, test, and deploy sophisticated automations using natural language or documentation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AI Footprint Analyst
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simply create from the prompting.&lt;/li&gt;
&lt;li&gt;Create an AI Footprint analyst that goes to the UI agent, Web browsing, and checks information for, and also it will check the latest cloud providers updates in the AI.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxz0jlxg52qqc8avr5ln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyxz0jlxg52qqc8avr5ln.png" alt=" " width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On the left side, you can see we can drag a lot of Action components like unzip folders, PDF text extraction, Excel data extraction, UI Agent, Python code block, process flows, and data Tables ( We can perform CRUD)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwzolcod5mdj2eusicrj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwzolcod5mdj2eusicrj.png" alt=" " width="532" height="844"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Chat Agents
&lt;/h3&gt;

&lt;p&gt;Build personalized AI chat assistants capable of multiple integrated tasks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel0k0atw5bqevx4o3v59.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fel0k0atw5bqevx4o3v59.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Extensions
&lt;/h3&gt;

&lt;p&gt;Quick Suite supports web browser extensions for Firefox, Chrome, and Microsoft Edge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F495kwqyn8hugb7ehudm9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F495kwqyn8hugb7ehudm9.png" alt=" " width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then download and add the Amazon QuickSuite Browser extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffytd3fagu4p2o3dnumzv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffytd3fagu4p2o3dnumzv.png" alt=" " width="800" height="209"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's summarize AWS IVS Service using the QuickSuite browser extension.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffusqaf283huop5bxzfw8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffusqaf283huop5bxzfw8.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can also upload our local files and control which tab we need to have our extension enabled.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3fw1msslmjntn1qnq0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3fw1msslmjntn1qnq0x.png" alt=" " width="800" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4956xipilwdi5tfxk0j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx4956xipilwdi5tfxk0j.png" alt=" " width="743" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Integrations
&lt;/h3&gt;

&lt;p&gt;Quick Suite provides two main types of integrations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Knowledge Bases: Retrieve data and knowledge from external applications for AI-powered search and analysis, like Amazon Q Business, S3, Microsoft OneDrive, Microsoft SharePoint, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56fxbbgz8bwebpvj7ia2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F56fxbbgz8bwebpvj7ia2.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Actions: Perform operations in other applications like MCPs, Asana, SAP, Salesforce, Microsoft 365, Pagerduty, Slack, SmartSheet, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F002efpo0j0smto71ylu4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F002efpo0j0smto71ylu4.png" alt=" " width="800" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;Amazon Quick Suite is designed to cut through information overload and repetitive work, helping you rapidly build, deploy, and manage agentic AI workflows that deliver actionable insights and automation, all while ensuring security and governance. This marks a new frontier in how AI can work proactively as your teammate.&lt;br&gt;
&lt;a href="https://aws.amazon.com/quicksuite/" rel="noopener noreferrer"&gt;Learn more about Amazon QuickSuite&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>quickuite</category>
      <category>agenticai</category>
      <category>ai</category>
    </item>
    <item>
      <title>Serverless Made Simple: Automating Workflows with AWS Lambda, EventBridge &amp; DynamoDB</title>
      <dc:creator>maryam mairaj</dc:creator>
      <pubDate>Wed, 03 Dec 2025 11:30:42 +0000</pubDate>
      <link>https://forem.com/sudoconsultants/serverless-made-simple-automating-workflows-with-aws-lambda-eventbridge-dynamodb-22f0</link>
      <guid>https://forem.com/sudoconsultants/serverless-made-simple-automating-workflows-with-aws-lambda-eventbridge-dynamodb-22f0</guid>
      <description>&lt;h3&gt;
  
  
  Overview
&lt;/h3&gt;

&lt;p&gt;In the modern landscape of cloud computing, "Serverless" has evolved from a niche architectural choice into the default standard for building scalable, cost-effective, and agile applications. However, the true power of serverless is not just about removing servers; it is about embracing &lt;strong&gt;Event-Driven Architecture (EDA)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In a traditional monolithic architecture, services are often tightly coupled and wait synchronously for responses. This creates bottlenecks and points of failure. In an event-driven system, applications react asynchronously to state changes, upload database updates, or a customer placing an order.&lt;/p&gt;

&lt;p&gt;This technical guide explores the "Power Trio" of the AWS Serverless ecosystem that, when combined, allows organizations to automate complex business workflows with near-zero operational overhead:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS Lambda: The compute layer (the "Brain").&lt;/li&gt;
&lt;li&gt;Amazon EventBridge: The event router (the "Nervous System").&lt;/li&gt;
&lt;li&gt;Amazon DynamoDB: The serverless database (the "Memory").&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;By the end of this guide, we will have architected and deployed a fully automated &lt;strong&gt;E-Commerce Order Processing System&lt;/strong&gt; that captures an order event, processes it, and persists it, without provisioning a single EC2 instance.&lt;/p&gt;

&lt;h3&gt;
  
  
  Part 1: The Architecture &amp;amp; Theory
&lt;/h3&gt;

&lt;p&gt;Before implementing the solution in the console, it is critical to understand the architectural decisions that underpin these specific services. We choose tools not just for their functionality, but for their operational excellence in production environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. AWS Lambda: Compute on Demand&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Lambda allows you to run code without provisioning or managing servers. You pay only for the compute time you consume - down to the millisecond.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enterprise Value: It eliminates "idle time" costs. In a traditional setup, you pay for a server 24/7 even if orders only come in during the day. With Lambda, you pay $0 when traffic is zero.&lt;/li&gt;
&lt;li&gt;Statelessness: Lambda functions are ephemeral. They spin up, execute a specific business logic, and vanish. This forces a clean architecture where state is stored externally (e.g., in DynamoDB).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Amazon EventBridge: The Choreographer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon EventBridge (formerly CloudWatch Events) is a serverless event bus that simplifies connecting applications using data from your own apps, SaaS platforms, and AWS services.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decoupling: This is the core benefit. The "Order Service" does not need to know that the "Invoice Service" exists. It simply publishes an event (OrderPlaced) to the bus. We can later add an "Inventory Service" to listen to that same event without changing a single line of code in the Order Service.&lt;/li&gt;
&lt;li&gt;Rules vs. Pipes: In this guide, we use EventBridge Rules, which filter events based on content (e.g., source or detail-type) and route them to targets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Amazon DynamoDB: Serverless Storage&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DynamoDB is a key-value and document database that delivers single-digit millisecond performance at any scale.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;On-Demand Capacity: We will utilize DynamoDB's On-Demand mode. This instantly accommodates traffic spikes (e.g., a Black Friday sale) without the need for capacity planning or pre-warming, aligning perfectly with the unpredictable nature of event-driven workloads.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Part 2: The Workflow Diagram
&lt;/h3&gt;

&lt;p&gt;We are building an Asynchronous Order Processor.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Data Flow:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Trigger:&lt;/strong&gt;An external system (simulating a web store) publishes an OrderPlaced event to the Event Bus.&lt;br&gt;
&lt;strong&gt;2. The Router:&lt;/strong&gt; Amazon EventBridge ingests this event, evaluates it against a defined Rule, and routes it to the target.&lt;br&gt;
&lt;strong&gt;3. The Processor:&lt;/strong&gt; AWS Lambda is triggered with the event payload. It parses the JSON, validates the data, and enriches it with a timestamp and UUID.&lt;br&gt;
&lt;strong&gt;4. The Persistence:&lt;/strong&gt; Lambda writes the processed record to Amazon DynamoDB.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkca1kj7rw62ibgl53tse.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkca1kj7rw62ibgl53tse.png" alt=" " width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Part 3: Step-by-Step Implementation
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Prerequisites&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An active AWS Account.&lt;/li&gt;
&lt;li&gt;Access to the AWS Console.&lt;/li&gt;
&lt;li&gt;Region Selection: For this guide, we will strictly use Asia Pacific (Mumbai) ap-south-1. All resources (Lambda, DynamoDB, EventBridge) must exist in the same region to function correctly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Configuring the Persistence Layer (DynamoDB)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Our data needs a home. We will create a DynamoDB table designed for flexibility.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Log in to the AWS Management Console and search for DynamoDB.&lt;/li&gt;
&lt;li&gt;Click Create table.&lt;/li&gt;
&lt;li&gt;Table details:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;Table name: OrdersTable&lt;br&gt;
Partition key: order_id (Type: String).&lt;br&gt;
Architectural Note: In DynamoDB, the Partition Key is used to distribute data across physical storage partitions. Using a unique ID like order_id ensures uniform distribution and prevents "hot partitions."&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;4.Table settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select Customize settings.&lt;/li&gt;
&lt;li&gt;Under Read/Write capacity settings, select On-demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5.Click Create table.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lxiu8vw9hcb93pswz42.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6lxiu8vw9hcb93pswz42.png" alt=" " width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Wait for the table status to change from 'Creating' to 'Active'.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: The Compute Layer (AWS Lambda)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Now we create the logic.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the AWS Lambda service.&lt;/li&gt;
&lt;li&gt;Click the Create function.&lt;/li&gt;
&lt;li&gt;Basic information:&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;code&gt;Function name: OrderProcessorFunction&lt;br&gt;
Runtime: Python 3.12 (or the latest stable version).&lt;br&gt;
Architecture: x86_64.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;4.Permissions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select Create a new role with basic Lambda permissions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;5.Click Create function.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pcghz5vz8p4dyncg3ea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1pcghz5vz8p4dyncg3ea.png" alt=" " width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Configuring IAM Permissions (The Security Context)
&lt;/h3&gt;

&lt;p&gt;By default, Lambda follows the principle of Least Privilege - it can only write logs to CloudWatch. It cannot touch DynamoDB. We must explicitly grant it access.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to the Configuration tab -&amp;gt; Permissions.&lt;/li&gt;
&lt;li&gt;Click the Role name to open the IAM console.&lt;/li&gt;
&lt;li&gt;Click Add permissions -&amp;gt; Attach policies.&lt;/li&gt;
&lt;li&gt;Search for AmazonDynamoDBFullAccess and attach it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;Production Note: In a live environment, you would never grant FullAccess. You would create a specific inline policy granting dynamodb:PutItem strictly on the arn:aws:dynamodb:ap-south-1:ACCOUNT_ID:table/OrdersTable. For this tutorial, we use the managed policy for simplicity.&lt;/code&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The Business Logic
&lt;/h3&gt;

&lt;p&gt;Return to the Lambda console Code tab and deploy the following Python code. This script uses boto3, the AWS SDK for Python, to interact with AWS services.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import json
import boto3
import uuid
import time

# Initialize the DynamoDB client outside the handler (Best Practice: Connection Reuse)
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('OrdersTable')

def lambda_handler(event, context):
    print("Received event:", json.dumps(event))

    # 1. Parse the incoming event from EventBridge
    # EventBridge sends the actual custom data inside the 'detail' key
    order_details = event.get('detail', {})

    # 2. Extract Data
    item_name = order_details.get('item', 'Unknown Item')
    quantity = order_details.get('quantity', 1)
    customer = order_details.get('customer', 'Guest')

    # 3. Enrichment: Generate a unique Order ID and Timestamp
    order_id = str(uuid.uuid4())
    timestamp = int(time.time())

    # 4. Prepare the item for DynamoDB
    item_to_save = {
        'order_id': order_id,
        'item': item_name,
        'quantity': quantity,
        'customer': customer,
        'status': 'PROCESSED',
        'created_at': timestamp,
        'source': 'EventBridge'
    }

    # 5. Persist to DynamoDB
    try:
        table.put_item(Item=item_to_save)
        return {
            'statusCode': 200,
            'body': json.dumps(f'Order {order_id} processed successfully!')
        }
    except Exception as e:
        print(f"Error saving to DynamoDB: {str(e)}")
        # Re-raising the error ensures Lambda marks the execution as Failed
        raise e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click Deploy to save your changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxw8xkyh0o5nbbw09zmgl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxw8xkyh0o5nbbw09zmgl.png" alt=" " width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 3: The Event Bus (Amazon EventBridge)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is the glue that binds the system. We will configure a Rule to intercept specific events.&lt;br&gt;
&lt;strong&gt;CRITICAL:&lt;/strong&gt; Ensure you are still in the Asia Pacific (Mumbai) ap-south-1 region.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to Amazon EventBridge.&lt;/li&gt;
&lt;li&gt;Select Buses -&amp;gt; Rules from the sidebar.&lt;/li&gt;
&lt;li&gt;Click Create rule.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A. Rule Definition&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Name: OrderPlacedRule.&lt;/li&gt;
&lt;li&gt;Event bus: Select default.&lt;/li&gt;
&lt;li&gt;Rule type: Rule with an event pattern.&lt;/li&gt;
&lt;li&gt;Click Next.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftsqh826lqh4tk0i3yng4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftsqh826lqh4tk0i3yng4.png" alt=" " width="800" height="385"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;B. The Event Pattern&lt;/strong&gt;&lt;br&gt;
This is where we define the filter. We want this rule to trigger only when our e-commerce system sends an order.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scroll to Event source and select Other.&lt;/li&gt;
&lt;li&gt;Under the Creation method, select Custom pattern (JSON editor).&lt;/li&gt;
&lt;li&gt;Paste the following JSON:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;!-- end list --&amp;gt;&lt;br&gt;
{&lt;br&gt;
  "source": ["com.mycompany.ecommerce"],&lt;br&gt;
  "detail-type": ["OrderPlaced"]&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Theory:&lt;/strong&gt; This pattern acts as a precise filter. If an event comes in with source: com.mycompany.finance, this rule will ignore it, preventing unnecessary Lambda invocations and costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9uonw8gcusrxy9j7rk6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg9uonw8gcusrxy9j7rk6.png" alt=" " width="800" height="455"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click Next.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;C. Target Selection&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Target types: AWS service.&lt;/li&gt;
&lt;li&gt;Select a target: Lambda function.&lt;/li&gt;
&lt;li&gt;Function: Select OrderProcessorFunction.&lt;/li&gt;
&lt;li&gt;Click Next through the Tags screen, then Create rule.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 4: Testing &amp;amp; Verification
&lt;/h3&gt;

&lt;p&gt;We will now simulate the behavior of our external e-commerce application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the EventBridge console, click Event buses -&amp;gt; Send events.&lt;/li&gt;
&lt;li&gt;Event source: com.mycompany.ecommerce (This must match our rule exactly).&lt;/li&gt;
&lt;li&gt;Detail type: OrderPlaced.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Event detail (JSON):&lt;br&gt;
&lt;code&gt;&amp;lt;!-- end list --&amp;gt;&lt;br&gt;
{&lt;br&gt;
"item": "Enterprise Server Rack",&lt;br&gt;
"quantity": 5,&lt;br&gt;
"customer": "TechCorp Industries"&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click Send.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9mqfjoz2u5e1u0d2mia.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh9mqfjoz2u5e1u0d2mia.png" alt=" " width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  The Moment of Truth
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Navigate to the Amazon DynamoDB console.&lt;/li&gt;
&lt;li&gt;Open OrdersTable.&lt;/li&gt;
&lt;li&gt;Click Explore table items.&lt;/li&gt;
&lt;li&gt;You should see a newly created record with a UUID, the timestamp, and the customer data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcdc3yc0nwa1dpdoujcv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzcdc3yc0nwa1dpdoujcv.png" alt=" " width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Part 4: Enterprise Considerations
&lt;/h3&gt;

&lt;p&gt;To build resilient, production-ready systems, we must look beyond the "Hello World" example. While the setup above works perfectly for a tutorial, maturing this solution for an enterprise environment requires addressing observability, failure management, and security.&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Observability with AWS X-Ray
&lt;/h4&gt;

&lt;p&gt;In a distributed system, tracing requests is difficult. Enabling AWS X-Ray on the Lambda function, you can visualize the entire request path.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Action: Go to Lambda -&amp;gt; Configuration -&amp;gt; Monitoring and Operations tools -&amp;gt; Enable Active tracing.&lt;/li&gt;
&lt;li&gt;Result: You will see a "Service Map" showing the latency between EventBridge, Lambda, and DynamoDB, allowing you to spot bottlenecks instantly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  2. Failure Management (DLQ)
&lt;/h4&gt;

&lt;p&gt;What happens if DynamoDB is temporarily unreachable? The event is lost.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Best Practice: Configure a Dead Letter Queue (DLQ) using Amazon SQS. Attach this to the Lambda function's Asynchronous Configuration.&lt;/li&gt;
&lt;li&gt;Outcome: If Lambda fails to process the event after 3 retries, the event payload is preserved in SQS for manual inspection and replay.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4&gt;
  
  
  3. Infrastructure as Code (IaC)
&lt;/h4&gt;

&lt;p&gt;While the Console is great for learning, production workloads should be deployed using AWS CDK or Terraform. This ensures reproducibility and disaster recovery.&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Example CDK Snippet for this architecture:&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const table = new dynamodb.Table(this, 'OrdersTable', {
  partitionKey: { name: 'order_id', type: dynamodb.AttributeType.STRING },
  billingMode: dynamodb.BillingMode.PAY_PER_REQUEST,
});

const fn = new lambda.Function(this, 'OrderHandler', {
  runtime: lambda.Runtime.PYTHON_3_12,
  handler: 'index.handler',
  code: lambda.Code.fromAsset('lambda'),
});

table.grantWriteData(fn);
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  4. Cost Optimization at Scale
&lt;/h4&gt;

&lt;p&gt;This architecture is highly cost-efficient:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EventBridge: $1.00/million events.&lt;/li&gt;
&lt;li&gt;Lambda: ~$0.20/million requests (varies by duration/memory).&lt;/li&gt;
&lt;li&gt;DynamoDB: Pay only for the writes you perform. For high-volume workloads, switching Lambda from x86 to ARM64 (Graviton) can save up to 34% on compute costs with better performance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion:
&lt;/h3&gt;

&lt;p&gt;We have successfully demonstrated the power of Serverless on AWS. By leveraging EventBridge for decoupling, Lambda for stateless compute, and DynamoDB for scalable storage, we built a system that is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resilient: Components fail independently without bringing down the system.&lt;/li&gt;
&lt;li&gt;Scalable: It can handle 1 order or 10,000 orders per second without configuration changes.&lt;/li&gt;
&lt;li&gt;Cost-Effective: Zero cost when idle.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This architecture serves as the blueprint for modernizing legacy applications and building the next generation of cloud-native software.&lt;/p&gt;

</description>
      <category>eventdriven</category>
      <category>lambda</category>
      <category>aws</category>
      <category>dynamodb</category>
    </item>
  </channel>
</rss>
