<?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>DEV Community: Disha Gupta</title>
    <description>The latest articles on DEV Community by Disha Gupta (@disha_gupta_91e4b27a012a4).</description>
    <link>https://dev.to/disha_gupta_91e4b27a012a4</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%2Fuser%2Fprofile_image%2F3931814%2F094e661a-f4f9-41cc-99a2-380496f54168.png</url>
      <title>DEV Community: Disha Gupta</title>
      <link>https://dev.to/disha_gupta_91e4b27a012a4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/disha_gupta_91e4b27a012a4"/>
    <language>en</language>
    <item>
      <title>AWS Kiro: The Future of AI-Powered Software Development</title>
      <dc:creator>Disha Gupta</dc:creator>
      <pubDate>Tue, 19 May 2026 16:21:04 +0000</pubDate>
      <link>https://dev.to/disha_gupta_91e4b27a012a4/aws-kiro-the-future-of-ai-powered-software-development-2h28</link>
      <guid>https://dev.to/disha_gupta_91e4b27a012a4/aws-kiro-the-future-of-ai-powered-software-development-2h28</guid>
      <description>&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%2Fimages.openai.com%2Fstatic-rsc-4%2FebaFGfUvMZdLdQwbIjYgBzZdH-U7aMoCWwltqNCHyPPaMdShIyFNi8r_qjeLvhsGKyak-vfRTttzzgNMkcv4cXNubJVLHjP7dxxHhh9aHP8szUkVLlw8SRUU_KMGz2a33Xbz4alXV6wh_RfhT2ybdoyE1uuhwx6OaWByhPlH1ifoed5SoXVQsB5BGPINH6Yu%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FebaFGfUvMZdLdQwbIjYgBzZdH-U7aMoCWwltqNCHyPPaMdShIyFNi8r_qjeLvhsGKyak-vfRTttzzgNMkcv4cXNubJVLHjP7dxxHhh9aHP8szUkVLlw8SRUU_KMGz2a33Xbz4alXV6wh_RfhT2ybdoyE1uuhwx6OaWByhPlH1ifoed5SoXVQsB5BGPINH6Yu%3Fpurpose%3Dfullsize" alt="Image" width="1200" height="643"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FRwxk65eAmT6MJqdxITi8v_N8pAhw88SMGXt2KmHmME-CCFnIOBmBiaXzF0BHZ8aP1o1vyAcIb73fwvtDu14xvZSnxIOU3kIjG-k9blMGXq5Gaffy7vZp01kEYItaf9zG8i3EZ9cBmKODyCmDsO44I7w8jbj4bLCMQJyZ69aqHwOXS5K98zoRqw9UaWRkA5n-%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FRwxk65eAmT6MJqdxITi8v_N8pAhw88SMGXt2KmHmME-CCFnIOBmBiaXzF0BHZ8aP1o1vyAcIb73fwvtDu14xvZSnxIOU3kIjG-k9blMGXq5Gaffy7vZp01kEYItaf9zG8i3EZ9cBmKODyCmDsO44I7w8jbj4bLCMQJyZ69aqHwOXS5K98zoRqw9UaWRkA5n-%3Fpurpose%3Dfullsize" alt="Image" width="1198" height="496"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FXs_z3fFQ5A5yyxX1TZzp754C2PajcLKkxKDJzw8FOh_ZGXp4QOmiivSwVM3wLfbx3exJppyHH_SFh_7BeMKJ_ej7T86-8ra8Jq7vqMBayR_FwuTA2mffdXCr9auXNUSHEb0HW9epiy_Zl0Quvh4KXOLigs8SZydYtALIiKrMq8onnHx4gF7hn9g6C9bwKDaK%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FXs_z3fFQ5A5yyxX1TZzp754C2PajcLKkxKDJzw8FOh_ZGXp4QOmiivSwVM3wLfbx3exJppyHH_SFh_7BeMKJ_ej7T86-8ra8Jq7vqMBayR_FwuTA2mffdXCr9auXNUSHEb0HW9epiy_Zl0Quvh4KXOLigs8SZydYtALIiKrMq8onnHx4gF7hn9g6C9bwKDaK%3Fpurpose%3Dfullsize" alt="Image" width="1024" height="793"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FmkcBUDM2sQ1xWUzO_kz7TPwYzLJ7MjoAluqTPYFIIZZ5uXeT8juJivdk0MbEIsmhCho0iNZ9otUQC_UzoAYWQEAq48lKDcPvfPgCl2jgR9Ua8pSEZeDMxAKj-aCMJmrGSmyM-SCSIq3c78-Etk77pGXy11z3CeOhXMK_iAIffohc5Vd435hGOVi2wEdiKS71%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FmkcBUDM2sQ1xWUzO_kz7TPwYzLJ7MjoAluqTPYFIIZZ5uXeT8juJivdk0MbEIsmhCho0iNZ9otUQC_UzoAYWQEAq48lKDcPvfPgCl2jgR9Ua8pSEZeDMxAKj-aCMJmrGSmyM-SCSIq3c78-Etk77pGXy11z3CeOhXMK_iAIffohc5Vd435hGOVi2wEdiKS71%3Fpurpose%3Dfullsize" alt="Image" width="1024" height="604"&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%2Fimages.openai.com%2Fstatic-rsc-4%2Fk9B0xZ20SeBaPUGyceBQGcKf1Rjp8-RzKLWYedzsmE4t7LGbHOwDzIutankQEAhDYFGZHHVLKa7WLOFbWmPOHz6waDzP3QQrvlVyvT_rlP675czCamvsJrggiPhjSQSZ9XPn1ntxJjxq1HhuCFwhwnjSzJPjH9ZodzhIQFhywTLd5r6PDLMFv0GAWV5GaUG6%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2Fk9B0xZ20SeBaPUGyceBQGcKf1Rjp8-RzKLWYedzsmE4t7LGbHOwDzIutankQEAhDYFGZHHVLKa7WLOFbWmPOHz6waDzP3QQrvlVyvT_rlP675czCamvsJrggiPhjSQSZ9XPn1ntxJjxq1HhuCFwhwnjSzJPjH9ZodzhIQFhywTLd5r6PDLMFv0GAWV5GaUG6%3Fpurpose%3Dfullsize" alt="Image" width="1248" height="788"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FJ5Mc04H0633wxA_RJdqnkJryTX6mzEQMR4Nhx2tieOWgvz50QSAcHnzJV_M0rpIsOmTHYEmDi6ZAM4l0MPzKufi-Up80U62h6rOLbggboWJnIs_0swLTDrsOc7lZiwzjkmkT1VNRPhShr5xSFWb8Ggxn3bIXlkOZzN4j0I5WBcHyhe01pg4NHTHhHC0VDJkr%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FJ5Mc04H0633wxA_RJdqnkJryTX6mzEQMR4Nhx2tieOWgvz50QSAcHnzJV_M0rpIsOmTHYEmDi6ZAM4l0MPzKufi-Up80U62h6rOLbggboWJnIs_0swLTDrsOc7lZiwzjkmkT1VNRPhShr5xSFWb8Ggxn3bIXlkOZzN4j0I5WBcHyhe01pg4NHTHhHC0VDJkr%3Fpurpose%3Dfullsize" alt="Image" width="1200" height="800"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FtQNlE_PCONFf-70pXwNgA0JNI8btEAN3tRKqk2dLMfl8aHMH4zE_f3jgPqasyh7AumqayjQPGMP9fQlTMXRdZfdIvbLHaIlKh3h1oHGOGsoPB9HF_ZYXIYVVk_hfOfRNRBWnbMOSDyupzWi6STnXmAa2VwKU-iYHUCdYDZKHQyQpoNxUIY67PWsT50MqlC06%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FtQNlE_PCONFf-70pXwNgA0JNI8btEAN3tRKqk2dLMfl8aHMH4zE_f3jgPqasyh7AumqayjQPGMP9fQlTMXRdZfdIvbLHaIlKh3h1oHGOGsoPB9HF_ZYXIYVVk_hfOfRNRBWnbMOSDyupzWi6STnXmAa2VwKU-iYHUCdYDZKHQyQpoNxUIY67PWsT50MqlC06%3Fpurpose%3Dfullsize" alt="Image" width="1400" height="1400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The software development industry is entering a new era where Artificial Intelligence is becoming deeply integrated into coding workflows. One of the latest innovations in this field is &lt;a href="https://aws.amazon.com/kiro/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AWS Kiro&lt;/a&gt;, an AI-powered agentic Integrated Development Environment (IDE) introduced by &lt;a href="https://aws.amazon.com?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;Amazon Web Services (AWS)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Unlike traditional AI coding assistants that mainly generate code snippets or autocomplete suggestions, AWS Kiro focuses on &lt;strong&gt;spec-driven development&lt;/strong&gt;. It helps developers transform ideas into structured specifications, implementation plans, production-ready code, automated tests, and documentation.&lt;/p&gt;

&lt;p&gt;Kiro is designed for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software developers&lt;/li&gt;
&lt;li&gt;DevOps engineers&lt;/li&gt;
&lt;li&gt;Cloud architects&lt;/li&gt;
&lt;li&gt;Security professionals&lt;/li&gt;
&lt;li&gt;Enterprise engineering teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Its goal is to reduce repetitive work while improving software quality and development speed.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is AWS Kiro?
&lt;/h1&gt;

&lt;p&gt;According to AWS documentation, Kiro is an “agentic coding environment” that works as an intelligent software engineering partner. It combines AI reasoning, automation, and cloud-native workflows to assist developers throughout the entire software lifecycle.&lt;/p&gt;

&lt;p&gt;Kiro is built on AWS AI technologies and integrates with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon Bedrock&lt;/li&gt;
&lt;li&gt;Cloud services&lt;/li&gt;
&lt;li&gt;APIs&lt;/li&gt;
&lt;li&gt;Infrastructure tools&lt;/li&gt;
&lt;li&gt;Development pipelines&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI-assisted coding&lt;/li&gt;
&lt;li&gt;Automated debugging&lt;/li&gt;
&lt;li&gt;Documentation generation&lt;/li&gt;
&lt;li&gt;Software planning&lt;/li&gt;
&lt;li&gt;Unit testing&lt;/li&gt;
&lt;li&gt;Architecture design&lt;/li&gt;
&lt;li&gt;Workflow automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS positions Kiro as a next-generation development platform rather than just a chatbot for coding.&lt;/p&gt;




&lt;h1&gt;
  
  
  Key Features of AWS Kiro
&lt;/h1&gt;

&lt;h2&gt;
  
  
  1. Spec-Driven Development
&lt;/h2&gt;

&lt;p&gt;One of Kiro’s biggest innovations is its structured workflow approach.&lt;/p&gt;

&lt;p&gt;Instead of directly generating random code from prompts, Kiro first creates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Requirements&lt;/li&gt;
&lt;li&gt;Design specifications&lt;/li&gt;
&lt;li&gt;Task breakdowns&lt;/li&gt;
&lt;li&gt;Test plans&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This helps teams maintain cleaner architecture and avoid technical debt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Workflow
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;Feature Request&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="s"&gt;Build a secure login system&lt;/span&gt;

&lt;span class="na"&gt;Kiro Generates&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Requirements document&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;API design&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Database schema&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Authentication flow&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Unit tests&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;Deployment checklist&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This structured process makes software development more reliable and scalable.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. AI Coding Agents
&lt;/h2&gt;

&lt;p&gt;Kiro includes autonomous AI agents capable of handling development tasks with minimal supervision.&lt;/p&gt;

&lt;p&gt;These agents can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write production-ready code&lt;/li&gt;
&lt;li&gt;Refactor applications&lt;/li&gt;
&lt;li&gt;Generate test cases&lt;/li&gt;
&lt;li&gt;Analyze bugs&lt;/li&gt;
&lt;li&gt;Review pull requests&lt;/li&gt;
&lt;li&gt;Maintain project context&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces developer workload and accelerates project delivery.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Python Snippet Generated by AI
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;flask&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;jsonify&lt;/span&gt;

&lt;span class="n"&gt;app&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Flask&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;__name__&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="nd"&gt;@app.route&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/health&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;health_check&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;jsonify&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;status&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;healthy&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;__name__&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;__main__&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;run&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;debug&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kiro can also explain the code, generate tests for it, and suggest deployment configurations automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Deep AWS Integration
&lt;/h2&gt;

&lt;p&gt;Kiro is especially useful for cloud-native development because of its integration with AWS services.&lt;/p&gt;

&lt;p&gt;It can assist with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Amazon EC2&lt;/li&gt;
&lt;li&gt;Amazon S3&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Infrastructure as Code&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;Security configurations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For DevOps engineers, this means faster automation and infrastructure deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Terraform Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"aws"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ap-south-1"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_s3_bucket"&lt;/span&gt; &lt;span class="s2"&gt;"demo_bucket"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;bucket&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"kiro-demo-bucket"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kiro can generate, validate, and optimize infrastructure code like this automatically.&lt;/p&gt;




&lt;h1&gt;
  
  
  VS Code Compatibility
&lt;/h1&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%2Fimages.openai.com%2Fstatic-rsc-4%2F0C3n326S4rjvupe-Y-Gc0o4q0kv9XbzQs1XSSeW-0zbL9gXC5lX2zDsHFIXbIh6kv0EfK2K7hi5qo2aiFQxW8dNv50DaZC_sODt6S1G_Axp5gFv-71kXpXhbvR28UYfNW9Zs3iVMr_S-KoKLO8UU6tFQZuacX6u1ccX3kDdqakCATYTlvRrwiuYgnE1s-0DO%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2F0C3n326S4rjvupe-Y-Gc0o4q0kv9XbzQs1XSSeW-0zbL9gXC5lX2zDsHFIXbIh6kv0EfK2K7hi5qo2aiFQxW8dNv50DaZC_sODt6S1G_Axp5gFv-71kXpXhbvR28UYfNW9Zs3iVMr_S-KoKLO8UU6tFQZuacX6u1ccX3kDdqakCATYTlvRrwiuYgnE1s-0DO%3Fpurpose%3Dfullsize" alt="Image" width="1024" height="572"&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%2Fimages.openai.com%2Fstatic-rsc-4%2F0biwk_Dh_DfZ8Buz6mDdZYl-TZaM0OECJjzAQo51mbvniiS7E-yxYJucuFOsfhpGPfgM7iqHUprJsYSJFGS2HaJDtVDXml3L7T-Ags_SWf1H4aOOt9DGucvG98uyT73PuRik8sjvPrGBd83D-Bzc-7sB_kBp-zhpqycoegGLj5yv5r9Jhq-ejeZTNYZrZ5zW%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2F0biwk_Dh_DfZ8Buz6mDdZYl-TZaM0OECJjzAQo51mbvniiS7E-yxYJucuFOsfhpGPfgM7iqHUprJsYSJFGS2HaJDtVDXml3L7T-Ags_SWf1H4aOOt9DGucvG98uyT73PuRik8sjvPrGBd83D-Bzc-7sB_kBp-zhpqycoegGLj5yv5r9Jhq-ejeZTNYZrZ5zW%3Fpurpose%3Dfullsize" alt="Image" width="512" height="512"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FcwXyMi5ZmRHTV_I33eoEW8xsTXgoF_LyxOUzlCGs0H9fA79Acc7HWKD3dIx0p7Roi4dxCQfN58tCjZWwaGALTx20j3jLaKO4QynwRNzAzECbbi5yQX8D6O4v22939ZIptyh75J_viwErOueKFOmLEjEXc8m2EEHOcryVjJRKQR_Cx_bFsoFcGbDSlZrI5itH%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FcwXyMi5ZmRHTV_I33eoEW8xsTXgoF_LyxOUzlCGs0H9fA79Acc7HWKD3dIx0p7Roi4dxCQfN58tCjZWwaGALTx20j3jLaKO4QynwRNzAzECbbi5yQX8D6O4v22939ZIptyh75J_viwErOueKFOmLEjEXc8m2EEHOcryVjJRKQR_Cx_bFsoFcGbDSlZrI5itH%3Fpurpose%3Dfullsize" alt="Image" width="1662" height="1217"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FTARXAXI5mPC3cUFETIHvj9j0ZoByIONS6clvHC6utn4XPXIiRxirpOCSYjhdWfT0LmtzI5PC5eZkF5LeaWSscoKBjREtNuOqt5pGAYToCaPZY2yu3s-UH7m68E7B4sQY9GHddnkmt51-bU3C0Wa9irFxG5qNohDNpD2ZVQXBE0TZ9nrFkvHwVLBFX0-Mld1L%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FTARXAXI5mPC3cUFETIHvj9j0ZoByIONS6clvHC6utn4XPXIiRxirpOCSYjhdWfT0LmtzI5PC5eZkF5LeaWSscoKBjREtNuOqt5pGAYToCaPZY2yu3s-UH7m68E7B4sQY9GHddnkmt51-bU3C0Wa9irFxG5qNohDNpD2ZVQXBE0TZ9nrFkvHwVLBFX0-Mld1L%3Fpurpose%3Dfullsize" alt="Image" width="1849" height="1049"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FbCGsQQTotru3d_Hj_xD8AfY96OhggfXIfRGlgCPkeR-vUIsB7cAyzfvLysnFgElS3k3-hh0qxsDVXAONUc51eRDu7BQetHT7S1WDU_qTBCuoeAnlfsVXS7cDbUKTyOK6qYyxSCq8Z4EnjiNr6RtrGNZIUtZ_0t9CziIG8WnmuQAkq5D9W1v2WPBLJ7LIyUhO%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FbCGsQQTotru3d_Hj_xD8AfY96OhggfXIfRGlgCPkeR-vUIsB7cAyzfvLysnFgElS3k3-hh0qxsDVXAONUc51eRDu7BQetHT7S1WDU_qTBCuoeAnlfsVXS7cDbUKTyOK6qYyxSCq8Z4EnjiNr6RtrGNZIUtZ_0t9CziIG8WnmuQAkq5D9W1v2WPBLJ7LIyUhO%3Fpurpose%3Dfullsize" alt="Image" width="1200" height="568"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FfnugSewGPFWvVK2Ri472IuGQl_ornmnKL1iO8YeDEQumz_x4-0FMEAUvW6vUtWF1J21KgONZ-2P9v6Ao0brhHuscL1t7qCAf8t82IxoLlJaALEO1ev7GRSl1aWCyxqrji0pIY8NI3m7UZQ7-YoXq3OIYyjhsuQeX_s6A1srerq0jOw65iBvzQOUZYDZfqL_B%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FfnugSewGPFWvVK2Ri472IuGQl_ornmnKL1iO8YeDEQumz_x4-0FMEAUvW6vUtWF1J21KgONZ-2P9v6Ao0brhHuscL1t7qCAf8t82IxoLlJaALEO1ev7GRSl1aWCyxqrji0pIY8NI3m7UZQ7-YoXq3OIYyjhsuQeX_s6A1srerq0jOw65iBvzQOUZYDZfqL_B%3Fpurpose%3Dfullsize" alt="Image" width="2396" height="1348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Kiro is based on Code OSS, which means developers familiar with Visual Studio Code can easily adapt to it.&lt;/p&gt;

&lt;p&gt;It supports:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Themes&lt;/li&gt;
&lt;li&gt;Extensions&lt;/li&gt;
&lt;li&gt;Keyboard shortcuts&lt;/li&gt;
&lt;li&gt;Developer plugins&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduces the learning curve for developers transitioning from traditional IDEs.&lt;/p&gt;




&lt;h1&gt;
  
  
  Automated Testing and Documentation
&lt;/h1&gt;

&lt;p&gt;A major challenge in software engineering is maintaining proper documentation and testing coverage. Kiro automates both.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example Unit Test
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;test_health_check&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/health&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;assert&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;status_code&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Kiro can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate unit tests&lt;/li&gt;
&lt;li&gt;Create API documentation&lt;/li&gt;
&lt;li&gt;Produce architecture summaries&lt;/li&gt;
&lt;li&gt;Suggest security improvements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This improves software reliability and reduces manual effort.&lt;/p&gt;




&lt;h1&gt;
  
  
  Benefits of AWS Kiro
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Faster Development
&lt;/h2&gt;

&lt;p&gt;AI-powered automation significantly reduces coding time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better Software Quality
&lt;/h2&gt;

&lt;p&gt;Structured specifications and automated testing improve reliability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reduced Technical Debt
&lt;/h2&gt;

&lt;p&gt;Spec-driven workflows encourage better architecture and planning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Improved Collaboration
&lt;/h2&gt;

&lt;p&gt;Teams can work from shared specifications and generated documentation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ideal for DevOps and Cloud Engineers
&lt;/h2&gt;

&lt;p&gt;Kiro is especially powerful for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes workflows&lt;/li&gt;
&lt;li&gt;AWS deployments&lt;/li&gt;
&lt;li&gt;Infrastructure automation&lt;/li&gt;
&lt;li&gt;CI/CD pipelines&lt;/li&gt;
&lt;li&gt;DevSecOps practices&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For students learning cloud and DevOps, Kiro can act as an intelligent learning assistant.&lt;/p&gt;




&lt;h1&gt;
  
  
  Challenges and Limitations
&lt;/h1&gt;

&lt;p&gt;Despite its capabilities, Kiro still has limitations.&lt;/p&gt;

&lt;p&gt;Some developers reported issues such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incorrect implementations&lt;/li&gt;
&lt;li&gt;Hallucinated code&lt;/li&gt;
&lt;li&gt;Context confusion&lt;/li&gt;
&lt;li&gt;Over-automation risks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI-generated code still requires:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Human review&lt;/li&gt;
&lt;li&gt;Security validation&lt;/li&gt;
&lt;li&gt;Architecture oversight&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This means Kiro should be treated as an intelligent assistant rather than a complete replacement for software engineers.&lt;/p&gt;




&lt;h1&gt;
  
  
  AWS Kiro vs Traditional AI Coding Tools
&lt;/h1&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;AWS Kiro&lt;/th&gt;
&lt;th&gt;Traditional AI Coding Assistants&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Development Style&lt;/td&gt;
&lt;td&gt;Spec-driven&lt;/td&gt;
&lt;td&gt;Prompt-driven&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;td&gt;Automatic&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testing&lt;/td&gt;
&lt;td&gt;Integrated&lt;/td&gt;
&lt;td&gt;Partial&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Integration&lt;/td&gt;
&lt;td&gt;Deep AWS support&lt;/td&gt;
&lt;td&gt;Basic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Autonomous Agents&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Limited&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Project Planning&lt;/td&gt;
&lt;td&gt;Built-in&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise Focus&lt;/td&gt;
&lt;td&gt;Strong&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h1&gt;
  
  
  Future of AI Development
&lt;/h1&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%2Fimages.openai.com%2Fstatic-rsc-4%2FS7eYHPhhXSAxBHFoJtCqPYnBTTrn5HMnhxYEI_nugAtrNkFMfkFGpVI9vzcr6Q87UMfzoJIOsptBZyIejpP_k03RiFsT8OdD4hU4ZX4BECJxctEmMV1G21Y-oYYnsv9PGgFXVLexGkb82gg848BuvU5yPoNG5G-yjoKUGYD_Ss1lgQpPYi8gZCklAeHoGNae%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FS7eYHPhhXSAxBHFoJtCqPYnBTTrn5HMnhxYEI_nugAtrNkFMfkFGpVI9vzcr6Q87UMfzoJIOsptBZyIejpP_k03RiFsT8OdD4hU4ZX4BECJxctEmMV1G21Y-oYYnsv9PGgFXVLexGkb82gg848BuvU5yPoNG5G-yjoKUGYD_Ss1lgQpPYi8gZCklAeHoGNae%3Fpurpose%3Dfullsize" alt="Image" width="705" height="441"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FCBTYvzOSsgIwmVLaK3iFp-wuLAx-UIIQy-LGP5XsXgkx6k_J0ffd8t0CKlv4goMfaf_FM6ZDXd0UQQQ2rOR8Pwtb_hay2QEdy6Prf48Ym4uRzkzdI0EpeDyL0bYQRXMvjsu6CX9oyjIBcMnvBRaVTPQRN0Nl0bErc2k4wPLuq4V1c2T6MbFVvmsSsXA-HzRi%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FCBTYvzOSsgIwmVLaK3iFp-wuLAx-UIIQy-LGP5XsXgkx6k_J0ffd8t0CKlv4goMfaf_FM6ZDXd0UQQQ2rOR8Pwtb_hay2QEdy6Prf48Ym4uRzkzdI0EpeDyL0bYQRXMvjsu6CX9oyjIBcMnvBRaVTPQRN0Nl0bErc2k4wPLuq4V1c2T6MbFVvmsSsXA-HzRi%3Fpurpose%3Dfullsize" alt="Image" width="2048" height="1152"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FLA_v8Fj3zYH5rffX30hy0AJPrC7XCxomJqhjq5AVl6EDG4Y7Mlz9Tvj4n8FBYggVNdeLIBC7jFl8-yZes0fObqmT0TIb92MPDh7sIfTLBWWgA4iYWK-fRPnaCO5EArSmcItoQfgFNW3jqG3BRU7YdXwmnfBzkYghfxwFh8pzQcl6xzKKHv31cxZ5dVRrbxGC%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FLA_v8Fj3zYH5rffX30hy0AJPrC7XCxomJqhjq5AVl6EDG4Y7Mlz9Tvj4n8FBYggVNdeLIBC7jFl8-yZes0fObqmT0TIb92MPDh7sIfTLBWWgA4iYWK-fRPnaCO5EArSmcItoQfgFNW3jqG3BRU7YdXwmnfBzkYghfxwFh8pzQcl6xzKKHv31cxZ5dVRrbxGC%3Fpurpose%3Dfullsize" alt="Image" width="1536" height="1024"&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%2Fimages.openai.com%2Fstatic-rsc-4%2F6Mr1ZN_VogFuCutCjOFfwG5KcDpzBieowgqKsX_8HywVhuSecrB8msRf0zvtUcp4mocg6SJvBaWKx1rZnmvbGQhM1-X8EJ5XDqk2QMdaRAnnVAACITY2Why8wuYO5xvk-_3aw4rnMlERI0hzLY_GJUd8i-i_1JLPTz4CzmfCuzJ2wyw53TW5lHd_HIWyRgW2%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2F6Mr1ZN_VogFuCutCjOFfwG5KcDpzBieowgqKsX_8HywVhuSecrB8msRf0zvtUcp4mocg6SJvBaWKx1rZnmvbGQhM1-X8EJ5XDqk2QMdaRAnnVAACITY2Why8wuYO5xvk-_3aw4rnMlERI0hzLY_GJUd8i-i_1JLPTz4CzmfCuzJ2wyw53TW5lHd_HIWyRgW2%3Fpurpose%3Dfullsize" alt="Image" width="2140" height="1401"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FXLJuRlnqfkZEE_yHlMFo6hZKkdafgKVJ9U_-obBkMdCa8cSqKztBIPsJK1Sa9S4u5rFZf_2r4DedEaDbEuwqRFMTNOZtWSr4zL1lbJ67ok5D04WmzZSOk1qawt1nTv7KAUwf3TyELS0rd6UQ6ZDn2Xq6OIbDavMqIB5mu7AV9e4Z8y7OkzRLNL90Wa0rMeLQ%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FXLJuRlnqfkZEE_yHlMFo6hZKkdafgKVJ9U_-obBkMdCa8cSqKztBIPsJK1Sa9S4u5rFZf_2r4DedEaDbEuwqRFMTNOZtWSr4zL1lbJ67ok5D04WmzZSOk1qawt1nTv7KAUwf3TyELS0rd6UQ6ZDn2Xq6OIbDavMqIB5mu7AV9e4Z8y7OkzRLNL90Wa0rMeLQ%3Fpurpose%3Dfullsize" alt="Image" width="848" height="604"&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%2Fimages.openai.com%2Fstatic-rsc-4%2FqdYDGuX-KWHgwSp7AGuW-47GyKpXI3-oXsPA1FyNvW6C7A9udgZNyL50SZltrpZGN4TDBTc3htbHI0GkFUgUDTdBy41mRcb3sNNHzpevcPrRxxKKtTqSO02OHy0R7S_5C2yzNLhXQhIvmfo8Pp-5D4DJByQ5ac6OGAruSkfgGrsw8VPViqm15EvlwH1QVx1G%3Fpurpose%3Dfullsize" 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%2Fimages.openai.com%2Fstatic-rsc-4%2FqdYDGuX-KWHgwSp7AGuW-47GyKpXI3-oXsPA1FyNvW6C7A9udgZNyL50SZltrpZGN4TDBTc3htbHI0GkFUgUDTdBy41mRcb3sNNHzpevcPrRxxKKtTqSO02OHy0R7S_5C2yzNLhXQhIvmfo8Pp-5D4DJByQ5ac6OGAruSkfgGrsw8VPViqm15EvlwH1QVx1G%3Fpurpose%3Dfullsize" alt="Image" width="1686" height="2044"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Kiro represents a shift toward autonomous software engineering, where AI systems assist developers throughout the entire development lifecycle.&lt;/p&gt;

&lt;p&gt;In the future, tools like Kiro may become central to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud-native engineering&lt;/li&gt;
&lt;li&gt;DevSecOps automation&lt;/li&gt;
&lt;li&gt;AI-assisted infrastructure management&lt;/li&gt;
&lt;li&gt;Enterprise software delivery&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As AI technology evolves, developers who understand both cloud computing and AI-assisted development tools will likely have a strong advantage in the industry.&lt;/p&gt;




&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/kiro/?utm_source=chatgpt.com" rel="noopener noreferrer"&gt;AWS Kiro&lt;/a&gt; is more than just another coding assistant. It introduces a structured, AI-driven approach to software engineering that combines planning, coding, testing, and documentation into a unified workflow.&lt;/p&gt;

&lt;p&gt;By focusing on specification-driven development and autonomous AI agents, Kiro aims to improve software quality, reduce technical debt, and accelerate cloud-native development.&lt;/p&gt;

&lt;p&gt;For developers, DevOps engineers, and students interested in cloud computing and AI-powered development, AWS Kiro represents an exciting glimpse into the future of software engineering.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How I Built an AI-Powered Cloud Security Guardian using AWS — From Idea to Docker in 30 Days</title>
      <dc:creator>Disha Gupta</dc:creator>
      <pubDate>Thu, 14 May 2026 19:03:31 +0000</pubDate>
      <link>https://dev.to/disha_gupta_91e4b27a012a4/how-i-built-an-ai-powered-cloud-security-guardian-using-aws-from-idea-to-docker-in-30-days-7f4</link>
      <guid>https://dev.to/disha_gupta_91e4b27a012a4/how-i-built-an-ai-powered-cloud-security-guardian-using-aws-from-idea-to-docker-in-30-days-7f4</guid>
      <description>&lt;p&gt;How I Built an AI-Powered Cloud Security Guardian — From Idea to Docker in 30 Days&lt;br&gt;
By Disha Gupta |(Cloud Security &amp;amp; GRC) |&lt;a href="https://www.linkedin.com/in/disha-gupta-6588102b9/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/disha-gupta-6588102b9/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Problem That Kept Me Up at Night&lt;/p&gt;

&lt;p&gt;Every week I read another breach report. Misconfigured S3 bucket. IAM user with Administrator Access left active. SSH port 22 open to &lt;code&gt;0.0.0.0/0&lt;/code&gt;. Security groups that nobody audited in six months.&lt;/p&gt;

&lt;p&gt;The frustrating part? These aren't sophisticated zero-days. They're checklist failures. Things that should have been caught automatically.&lt;/p&gt;

&lt;p&gt;So I decided to build the tool I wished existed — one that could scan any AWS account on demand, apply machine learning to risk-score every resource, detect anomalies in CloudTrail logs, and surface remediation advice in real time. I called it "AI Cloud Security Guardian".&lt;/p&gt;

&lt;p&gt;Here's exactly how I built it, what each AWS service does in the architecture, and what I learned the hard way.&lt;/p&gt;

&lt;p&gt;What the Platform Does&lt;/p&gt;

&lt;p&gt;Before getting into the technical stack, here's what Guardian actually does when you use it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You log into the SOC-themed dashboard&lt;/li&gt;
&lt;li&gt;You enter your AWS IAM credentials — they're never stored, only used for that session&lt;/li&gt;
&lt;li&gt;Guardian connects to your AWS account via boto3 and discovers every EC2 instance, S3 bucket, IAM user, IAM role, and security group&lt;/li&gt;
&lt;li&gt;A rule engine runs 9 misconfiguration checks against every resource&lt;/li&gt;
&lt;li&gt;A Random Forest ML model scores each resource from 0.0 to 1.0 based on 6 security features&lt;/li&gt;
&lt;li&gt;An Isolation Forest model runs anomaly detection on CloudTrail logs&lt;/li&gt;
&lt;li&gt;Alerts are generated, prioritized by severity, and surfaced in the dashboard with AI-generated remediation steps&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The entire backend is FastAPI + Python. The frontend is React + TypeScript + Tailwind. Everything runs in Docker. And it connects to real AWS accounts — not mocked data.&lt;/p&gt;

&lt;p&gt;AWS Services Used and Why&lt;/p&gt;

&lt;p&gt;AWS STS — GetCallerIdentity&lt;/p&gt;

&lt;p&gt;The very first AWS API call Guardian makes is &lt;code&gt;sts:GetCallerIdentity&lt;/code&gt;. Before scanning anything, it verifies that your credentials are valid and tells you exactly which account and IAM identity you're using.&lt;/p&gt;

&lt;p&gt;sts = session.client("sts")&lt;br&gt;
identity = sts.get_caller_identity()&lt;/p&gt;

&lt;h1&gt;
  
  
  Returns: Account ID, ARN, UserId
&lt;/h1&gt;

&lt;p&gt;This is the cheapest possible AWS API call — it's always allowed for any valid credential, costs nothing, and gives us a fast-fail before running a 60-second full scan with bad keys. If this call fails, Guardian immediately tells you exactly why — invalid key, expired token, wrong region — instead of failing silently mid-scan.&lt;/p&gt;

&lt;p&gt;What I learned: Always validate credentials with STS before any other AWS operation. It saves enormous debugging time and gives users clear error messages.&lt;/p&gt;

&lt;p&gt;Amazon EC2 — DescribeInstances + DescribeSecurityGroups&lt;/p&gt;

&lt;p&gt;For EC2, Guardian uses two boto3 calls:&lt;/p&gt;

&lt;p&gt;DescribeInstances discovers every running instance and collects:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instance ID, type, and state&lt;/li&gt;
&lt;li&gt;Public IP (is it internet-exposed?)&lt;/li&gt;
&lt;li&gt;Associated security group IDs&lt;/li&gt;
&lt;li&gt;IAM instance profile (does it have proper permissions?)&lt;/li&gt;
&lt;li&gt;Key pair name (is access documented?)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DescribeSecurityGroups checks every inbound rule for the most dangerous misconfiguration in AWS — port exposure to &lt;code&gt;0.0.0.0/0&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;def _check_open_to_world(rules):&lt;br&gt;
    for rule in rules:&lt;br&gt;
        for ipv4 in rule.get("IpRanges", []):&lt;br&gt;
            if ipv4.get("CidrIp") == "0.0.0.0/0":&lt;br&gt;
                return True  # CRITICAL finding&lt;br&gt;
    return False&lt;/p&gt;

&lt;p&gt;When Guardian finds SSH (port 22) or RDP (port 3389) open to the entire internet, it fires a Critical alert immediately. This single check has caught the most serious findings in real account scans.&lt;/p&gt;

&lt;p&gt;Detection rules triggered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;SG_001&lt;/code&gt; — Open to 0.0.0.0/0 (Critical)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EC2_001&lt;/code&gt; — Public IP with no IAM instance profile (Medium)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;EC2_002&lt;/code&gt; — Running instance with no key pair (Low)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon S3 — Multi-API Bucket Analysis&lt;/p&gt;

&lt;p&gt;S3 is where most data breaches start. Guardian runs five separate API calls per bucket:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;API Call&lt;/th&gt;
&lt;th&gt;What We Check&lt;/th&gt;
&lt;th&gt;Severity if Missing&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_public_access_block&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;All 4 Block Public Access flags&lt;/td&gt;
&lt;td&gt;Critical&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_bucket_encryption&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;SSE-S3 or SSE-KMS enabled&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_bucket_logging&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Access logs configured&lt;/td&gt;
&lt;td&gt;Medium&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_bucket_versioning&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Object versioning enabled&lt;/td&gt;
&lt;td&gt;Info&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;get_bucket_location&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Region (for context)&lt;/td&gt;
&lt;td&gt;—&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;The public access check is the most important. AWS has four separate flags for blocking public access (&lt;code&gt;BlockPublicAcls&lt;/code&gt;, &lt;code&gt;IgnorePublicAcls&lt;/code&gt;, &lt;code&gt;BlockPublicPolicy&lt;/code&gt;, &lt;code&gt;RestrictPublicBuckets&lt;/code&gt;). Guardian checks that ALL four are enabled — if even one is &lt;code&gt;False&lt;/code&gt;, the bucket is marked as potentially public:&lt;/p&gt;

&lt;p&gt;fully_blocked = all([&lt;br&gt;
    cfg.get("BlockPublicAcls", False),&lt;br&gt;
    cfg.get("IgnorePublicAcls", False),&lt;br&gt;
    cfg.get("BlockPublicPolicy", False),&lt;br&gt;
    cfg.get("RestrictPublicBuckets", False),&lt;br&gt;
])&lt;br&gt;
data["is_public"] = not fully_blocked&lt;/p&gt;

&lt;p&gt;What I learned: The absence of a public access block configuration is different from having it set to False. If &lt;code&gt;get_public_access_block&lt;/code&gt; throws a &lt;code&gt;NoSuchPublicAccessBlockConfiguration&lt;/code&gt; exception, the bucket has no protection at all — Guardian treats that as &lt;code&gt;is_public = True&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;AWS IAM — Privilege and MFA Analysis&lt;/p&gt;

&lt;p&gt;IAM scanning is where Guardian finds the highest-severity issues. Three API calls cover the critical checks:&lt;/p&gt;

&lt;p&gt;ListAttachedUserPolicies — checks every user for &lt;code&gt;AdministratorAccess&lt;/code&gt;. One IAM user with full admin and no MFA is game over if their credentials leak.&lt;/p&gt;

&lt;p&gt;ListMFADevices — for any user with console access, Guardian checks if MFA is enabled. No MFA on a console user is an automatic High finding.&lt;/p&gt;

&lt;p&gt;GetLoginProfile — determines if a user has console access at all. Service accounts should never have console passwords.&lt;/p&gt;

&lt;h1&gt;
  
  
  The most dangerous combination in AWS:
&lt;/h1&gt;

&lt;h1&gt;
  
  
  Console access + AdministratorAccess + no MFA
&lt;/h1&gt;

&lt;p&gt;if user.has_console_access and user.is_admin and not user.has_mfa:&lt;br&gt;
    # This is a three-alarm fire&lt;br&gt;
    generate_critical_alert(user)&lt;/p&gt;

&lt;p&gt;The IAM scan also covers roles — any role with &lt;code&gt;AdministratorAccess&lt;/code&gt; attached gets flagged as High, because a compromised EC2 instance or Lambda function with that role has unlimited blast radius.&lt;/p&gt;

&lt;p&gt;Detection rules triggered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;IAM_001&lt;/code&gt; — User with AdministratorAccess (Critical)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;IAM_002&lt;/code&gt; — Console user without MFA (High)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;IAM_003&lt;/code&gt; — Role with AdministratorAccess (High)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AWS CloudTrail — Log Analysis for Anomaly Detection&lt;/p&gt;

&lt;p&gt;This is where the ML comes in. CloudTrail logs every API call made in your AWS account. Guardian ingests these events and runs them through an Isolation Forest — an unsupervised ML algorithm that identifies statistical outliers without needing labeled training data.&lt;/p&gt;

&lt;p&gt;The feature extraction aggregates per-user behavior across a time window:&lt;/p&gt;

&lt;p&gt;features = {&lt;br&gt;
    "api_call_count":    1,      # volume of API calls&lt;br&gt;
    "failed_logins":     1,      # AccessDenied errors&lt;br&gt;
    "hour_of_day":       3,      # off-hours = suspicious&lt;br&gt;
    "is_new_region":     True,   # never seen this region before&lt;br&gt;
    "bytes_transferred": 0,&lt;br&gt;
    "unique_resources":  1,&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Isolation Forest works by randomly partitioning the feature space. Anomalous data points — like a user suddenly making 5,000 API calls from a new region at 3 AM with 50 Access Denied errors — are isolated quickly because they're far from the normal distribution. The algorithm assigns an anomaly score where lower = more anomalous.&lt;/p&gt;

&lt;p&gt;What Guardian flags:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unusual API call volume (potential credential theft / cryptomining)&lt;/li&gt;
&lt;li&gt;Access from a previously unseen AWS region (potential account takeover)&lt;/li&gt;
&lt;li&gt;Off-hours access patterns (lateral movement)&lt;/li&gt;
&lt;li&gt;Repeated AccessDenied errors (brute force / privilege escalation attempt)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why Isolation Forest over supervised ML? Because you almost never have labeled "malicious" CloudTrail logs to train on. Isolation Forest requires no labels — it just learns what "normal" looks like and flags deviations. This is exactly how real SIEM tools work.&lt;/p&gt;

&lt;p&gt;The ML Risk Scoring Engine&lt;/p&gt;

&lt;p&gt;Beyond rule-based detection, every resource gets a continuous risk score from 0.0 to 1.0 using a "Random Forest classifier".&lt;/p&gt;

&lt;p&gt;The model uses 6 features derived from each resource:&lt;/p&gt;

&lt;p&gt;FEATURES = [&lt;br&gt;
    "public_access",        # 0/1 — internet-exposed?&lt;br&gt;
    "open_ports",           # count of world-open inbound rules&lt;br&gt;
    "encryption_enabled",   # 0/1 — data encrypted at rest?&lt;br&gt;
    "iam_privilege_level",  # 0=none, 1=read, 2=write, 3=admin&lt;br&gt;
    "mfa_enabled",          # 0/1 — MFA enforced?&lt;br&gt;
    "logging_enabled",      # 0/1 — audit trail active?&lt;br&gt;
]&lt;/p&gt;

&lt;p&gt;The model is trained on synthetic data at startup and saved to disk with &lt;code&gt;joblib&lt;/code&gt;. In a production deployment with real historical findings, you'd replace the synthetic training data with actual labeled security findings from past scans — making the model progressively more accurate with each scan.&lt;/p&gt;

&lt;p&gt;Risk levels:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Critical — score ≥ 0.75&lt;/li&gt;
&lt;li&gt;High — score ≥ 0.55&lt;/li&gt;
&lt;li&gt;Medium — score ≥ 0.35&lt;/li&gt;
&lt;li&gt;Low — score ≥ 0.15&lt;/li&gt;
&lt;li&gt;Minimal — score &amp;lt; 0.15&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security Architecture Decisions&lt;/p&gt;

&lt;p&gt;Building a tool that handles AWS credentials forced me to think carefully about security at every layer.&lt;/p&gt;

&lt;p&gt;Credentials Never Touch Storage&lt;/p&gt;

&lt;p&gt;The most important design decision: AWS credentials are never stored anywhere. Not in the database. Not in logs. Not in the browser's localStorage. They exist only in:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The user's browser state (React &lt;code&gt;useState&lt;/code&gt;) for the duration of the modal&lt;/li&gt;
&lt;li&gt;The HTTP request body while in transit&lt;/li&gt;
&lt;li&gt;Python function parameters during the scan&lt;/li&gt;
&lt;li&gt;Cleared immediately after the scan completes&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After scan completes — credentials go out of scope and are GC'd&lt;br&gt;
def run_full_scan_with_credentials(access_key_id, secret_access_key, ...):&lt;br&gt;
     ... scan happens ...&lt;br&gt;
    return result&lt;br&gt;
     access_key_id and secret_access_key are never written anywhere&lt;/p&gt;

&lt;p&gt;The backend logs only the key prefix (&lt;code&gt;AKIA...8chars...&lt;/code&gt;) for debugging — never the full key or secret.&lt;/p&gt;

&lt;p&gt;JWT in Memory, Not localStorage&lt;/p&gt;

&lt;p&gt;The dashboard JWT token lives in a module-level JavaScript variable — not &lt;code&gt;localStorage&lt;/code&gt; or &lt;code&gt;sessionStorage&lt;/code&gt;. This prevents XSS attacks from stealing the token, at the cost of losing the session on page refresh (acceptable for a security tool).&lt;/p&gt;

&lt;p&gt;// In-memory only — XSS cannot read this via document.cookie or localStorage&lt;br&gt;
let _accessToken: string | null = null&lt;/p&gt;

&lt;p&gt;An auto-logout timer is set from the JWT's &lt;code&gt;exp&lt;/code&gt; claim with a 30-second buffer. When the token is about to expire, the user is automatically logged out.&lt;/p&gt;

&lt;p&gt;Input Validation at Every Layer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Frontend: Regex validation on the Access Key ID format, length checks on all fields&lt;/li&gt;
&lt;li&gt;Backend: Pydantic &lt;code&gt;field_validator&lt;/code&gt; on every credential field before any AWS call&lt;/li&gt;
&lt;li&gt;JSON parsing: &lt;code&gt;safeJsonParse()&lt;/code&gt; blocks &lt;code&gt;__proto__&lt;/code&gt; and &lt;code&gt;constructor&lt;/code&gt; keys to prevent prototype pollution in user-submitted log data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The Tech Stack&lt;/p&gt;

&lt;p&gt;Backend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;FastAPI — async Python web framework, auto-generates OpenAPI docs&lt;/li&gt;
&lt;li&gt;SQLAlchemy + SQLite (dev) / PostgreSQL (prod) — ORM for findings storage&lt;/li&gt;
&lt;li&gt;boto3 — AWS SDK, all credential operations&lt;/li&gt;
&lt;li&gt;scikit-learn — Random Forest (risk scoring) + Isolation Forest (anomaly detection)&lt;/li&gt;
&lt;li&gt;Pydantic v2 — request validation and settings management&lt;/li&gt;
&lt;li&gt;JWT via &lt;code&gt;python-jose&lt;/code&gt; — stateless authentication&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frontend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;React 18 + TypeScript — component framework&lt;/li&gt;
&lt;li&gt;Tailwind CSS — utility-first styling with custom SOC terminal design tokens&lt;/li&gt;
&lt;li&gt;React Query (TanStack) — server state management with caching&lt;/li&gt;
&lt;li&gt;Recharts — risk score visualization (bar charts, donut charts, radar charts)&lt;/li&gt;
&lt;li&gt;Axios — HTTP client with request/response interceptors&lt;/li&gt;
&lt;li&gt;DOMPurify — XSS sanitization for any server-returned strings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;DevOps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Docker — multi-stage builds (builder → slim runtime) for both services&lt;/li&gt;
&lt;li&gt;Docker Compose — orchestrates PostgreSQL + FastAPI + Nginx as one stack&lt;/li&gt;
&lt;li&gt;Kubernetes — 7 manifests covering namespace, secrets, deployments, ingress, and HPA autoscaling&lt;/li&gt;
&lt;li&gt;Nginx — reverse proxy in the frontend container, eliminates CORS entirely in production&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Challenges and What I Actually Learned&lt;/p&gt;

&lt;p&gt;Challenge 1: The Variable Name Collision That Caused Every Scan to 500&lt;/p&gt;

&lt;p&gt;For days, every scan attempt returned a 500 Internal Server Error. The backend logs showed a &lt;code&gt;TypeError: 'bool' is not callable&lt;/code&gt;. After hours of debugging, I found it:&lt;/p&gt;

&lt;p&gt;BROKEN — parameter named scan_security_groups shadows the function&lt;br&gt;
def run_full_scan(scan_security_groups: bool = True):&lt;br&gt;
    ...&lt;br&gt;
    "security_groups": scan_security_groups(session)  # calling a bool!&lt;/p&gt;

&lt;p&gt;The function &lt;code&gt;scan_security_groups()&lt;/code&gt; and the boolean parameter &lt;code&gt;scan_security_groups&lt;/code&gt; had the same name. Python used the parameter, not the function. Fixed by prefixing all internal scanner functions with &lt;code&gt;_do_&lt;/code&gt;:&lt;/p&gt;

&lt;p&gt;"security_groups": _do_scan_security_groups(session) if scan_security_groups else []&lt;/p&gt;

&lt;p&gt;Lesson: In Python, function parameters shadow module-level names within their scope. Name your parameters explicitly to avoid conflicts with functions they might call.&lt;/p&gt;

&lt;p&gt;Challenge 2: CORS That Wasn't Actually CORS&lt;/p&gt;

&lt;p&gt;The frontend was getting blocked by CORS policy — but the backend had &lt;code&gt;allow_origins=["*"]&lt;/code&gt; set. After wasting an afternoon, I realized the issue: FastAPI's &lt;code&gt;CORSMiddleware&lt;/code&gt; with &lt;code&gt;allow_origins=["*"]&lt;/code&gt; is &lt;strong&gt;incompatible&lt;/strong&gt; with &lt;code&gt;allow_credentials=True&lt;/code&gt;. Setting both is illegal per the CORS spec and FastAPI silently breaks the middleware.&lt;/p&gt;

&lt;p&gt;The final fix wasn't even CORS middleware — it was switching to a Vite proxy in development. The browser calls &lt;code&gt;localhost:5173/api/scan/aws&lt;/code&gt;, Vite forwards it to &lt;code&gt;localhost:8000/scan/aws&lt;/code&gt; server-side. The browser never makes a cross-origin request. CORS doesn't apply.&lt;/p&gt;

&lt;p&gt;Lesson: The right fix for CORS in development is a proxy, not CORS headers. Save CORS configuration for production where you actually need it.&lt;/p&gt;

&lt;p&gt;Challenge 3: TypeScript Strict Mode vs Docker Build&lt;/p&gt;

&lt;p&gt;The code compiled fine locally with VS Code's TypeScript server being lenient. But the Docker build ran &lt;code&gt;tsc&lt;/code&gt; in strict mode and found 15 errors — unused parameters, &lt;code&gt;import.meta.env&lt;/code&gt; type issues, missing module declarations, type assertion errors.&lt;/p&gt;

&lt;p&gt;The fix was a combination of:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Setting &lt;code&gt;"strict": false&lt;/code&gt; and &lt;code&gt;"noUnusedLocals": false&lt;/code&gt; in &lt;code&gt;tsconfig.json&lt;/code&gt; for the build&lt;/li&gt;
&lt;li&gt;Accessing &lt;code&gt;import.meta.env&lt;/code&gt; via &lt;code&gt;(import.meta as any).env&lt;/code&gt; to bypass the strict type check&lt;/li&gt;
&lt;li&gt;Removing &lt;code&gt;"references"&lt;/code&gt; from &lt;code&gt;tsconfig.json&lt;/code&gt; so the build didn't look for &lt;code&gt;tsconfig.node.json&lt;/code&gt; inside the Docker container&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Lesson: Always test your Docker build on CI before you think you're done. Local TypeScript compilation and Docker-in-builder-stage compilation can behave very differently.&lt;/p&gt;

&lt;p&gt;The Minimum IAM Policy&lt;/p&gt;

&lt;p&gt;For anyone who wants to scan their own account, here's the exact minimum permission set needed:&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
  "Version": "2012-10-17",&lt;br&gt;
  "Statement": [&lt;br&gt;
    {&lt;br&gt;
      "Effect": "Allow",&lt;br&gt;
      "Action": [&lt;br&gt;
        "sts:GetCallerIdentity",&lt;br&gt;
        "ec2:DescribeInstances",&lt;br&gt;
        "ec2:DescribeSecurityGroups",&lt;br&gt;
        "s3:ListAllMyBuckets",&lt;br&gt;
        "s3:GetBucketPublicAccessBlock",&lt;br&gt;
        "s3:GetBucketEncryption",&lt;br&gt;
        "s3:GetBucketLogging",&lt;br&gt;
        "iam:ListUsers",&lt;br&gt;
        "iam:ListRoles",&lt;br&gt;
        "iam:ListMFADevices",&lt;br&gt;
        "iam:ListAttachedUserPolicies",&lt;br&gt;
        "iam:GetLoginProfile",&lt;br&gt;
        "cloudtrail:LookupEvents"&lt;br&gt;
      ],&lt;br&gt;
      "Resource": "*"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Create a dedicated IAM user with only this policy. Never use root credentials or your personal admin account.&lt;/p&gt;

&lt;p&gt;The full project — backend, frontend, Docker, and Kubernetes manifests — is on GitHub -&lt;a href="https://github.com/Dianger16/AWS-CLOUD-SOC.git" rel="noopener noreferrer"&gt;https://github.com/Dianger16/AWS-CLOUD-SOC.git&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stack summary: FastAPI · boto3 · scikit-learn · React · TypeScript · Tailwind · Docker · Kubernetes&lt;/p&gt;

&lt;p&gt;If you're working on cloud security, GRC, or DevSecOps and want to collaborate or discuss the architecture, I'm always open to connect.-"&lt;a href="https://www.linkedin.com/in/disha-gupta-6588102b9/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/disha-gupta-6588102b9/&lt;/a&gt;"&lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscommunitybuilders</category>
      <category>cloud</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
