<?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: Bertin Fonge</title>
    <description>The latest articles on DEV Community by Bertin Fonge (@bertinfonge).</description>
    <link>https://dev.to/bertinfonge</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%2F669025%2Fa30be184-bb59-4309-8a15-368eb3b18d25.png</url>
      <title>DEV Community: Bertin Fonge</title>
      <link>https://dev.to/bertinfonge</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bertinfonge"/>
    <language>en</language>
    <item>
      <title>AWS Community Day Cameroon - Secure your code with Amazon Q Developer</title>
      <dc:creator>Bertin Fonge</dc:creator>
      <pubDate>Sat, 22 Nov 2025 15:03:47 +0000</pubDate>
      <link>https://dev.to/bertinfonge/aws-community-day-cameroon-secure-your-code-with-amazon-q-developer-49dm</link>
      <guid>https://dev.to/bertinfonge/aws-community-day-cameroon-secure-your-code-with-amazon-q-developer-49dm</guid>
      <description>&lt;h1&gt;
  
  
  Securing Your Code with Amazon Q Developer
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Complete Hands-On Workshop Guide&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;AWS Community Day Cameroon – Douala, 2025&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prepared and Presented by&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Bertin Fonge&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Lead Developer &amp;amp; DevOps Engineer @ Tangento Group&lt;br&gt;&lt;br&gt;
Founder &amp;amp; CEO @ Mbaniia Studio&lt;br&gt;&lt;br&gt;
AWS Community Builder | AWS User Group Douala Co-Organizer  &lt;/p&gt;


&lt;h3&gt;
  
  
  Welcome Message from the Presenter
&lt;/h3&gt;

&lt;p&gt;Hello everyone!&lt;br&gt;&lt;br&gt;
Welcome to the &lt;strong&gt;“Secure Your Code with Amazon Q Developer”&lt;/strong&gt; workshop at AWS Community Day Cameroon 2025!  &lt;/p&gt;

&lt;p&gt;My name is &lt;strong&gt;Bertin Fonge&lt;/strong&gt;, and I have been building production systems for over 8 years across fintech, e-commerce, and cloud-native startups. Security has always been close to my heart because I have personally dealt with the pain of fixing vulnerabilities in production — at 2 AM — when customers are already affected.&lt;/p&gt;

&lt;p&gt;Today, we are going to change that story for you.&lt;br&gt;&lt;br&gt;
You will learn how to catch critical vulnerabilities &lt;strong&gt;before&lt;/strong&gt; they ever reach production, using nothing but free tools and your favourite IDE.&lt;/p&gt;

&lt;p&gt;Let’s make security a natural part of your daily coding routine.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bertin Fonge&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Douala, Cameroon – November 2025&lt;/p&gt;


&lt;h2&gt;
  
  
  Workshop Agenda (Total Duration: ~2 hours 30 minutes)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Section&lt;/th&gt;
&lt;th&gt;Duration&lt;/th&gt;
&lt;th&gt;Notes&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Introduction &amp;amp; Amazon Q Overview&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment Setup (Pre-requisites)&lt;/td&gt;
&lt;td&gt;25 min&lt;/td&gt;
&lt;td&gt;Live demo + troubleshooting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Authentication with AWS Builder ID&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;Step-by-step&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understanding Security Scanning&lt;/td&gt;
&lt;td&gt;10 min&lt;/td&gt;
&lt;td&gt;How it works under the hood&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hands-On Labs (6 real vulnerabilities)&lt;/td&gt;
&lt;td&gt;70 min&lt;/td&gt;
&lt;td&gt;Main part – follow along&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Best Practices &amp;amp; Real-World Tips&lt;/td&gt;
&lt;td&gt;10 min&lt;/td&gt;
&lt;td&gt;Take-home advice&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Q&amp;amp;A and Wrap-up&lt;/td&gt;
&lt;td&gt;15 min&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  Part 1: What is Amazon Q Developer?
&lt;/h2&gt;

&lt;p&gt;Amazon Q Developer is a &lt;strong&gt;generative AI-powered assistant&lt;/strong&gt; built directly into your IDE. It can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Answer AWS questions in natural language
&lt;/li&gt;
&lt;li&gt;Generate code, documentation, unit tests
&lt;/li&gt;
&lt;li&gt;Perform &lt;strong&gt;inline code completion&lt;/strong&gt; (like GitHub Copilot)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scan your code for security vulnerabilities&lt;/strong&gt; (this is what we focus on today)
&lt;/li&gt;
&lt;li&gt;Upgrade code (Python 2 → 3, fix deprecated APIs, etc.)
&lt;/li&gt;
&lt;li&gt;Refactor, optimize, and explain complex code
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Today’s focus&lt;/strong&gt;: The &lt;strong&gt;Security Scanning&lt;/strong&gt; feature (also called &lt;code&gt;/review&lt;/code&gt;)&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Static Application Security Testing (SAST)
&lt;/li&gt;
&lt;li&gt;Secrets detection (hard-coded credentials, API keys)
&lt;/li&gt;
&lt;li&gt;Software Composition Analysis (SCA) for vulnerable dependencies
&lt;/li&gt;
&lt;li&gt;Infrastructure as Code (IaC) scanning (CloudFormation, Terraform)
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;All of this is FREE&lt;/strong&gt; for individual developers using the &lt;strong&gt;AWS Builder ID&lt;/strong&gt; (up to 50 security scans per month).&lt;/p&gt;


&lt;h2&gt;
  
  
  Part 2: Full Environment Setup (Do This Before Starting)
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1: Install Required Software
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Minimum Version&lt;/th&gt;
&lt;th&gt;Download Link&lt;/th&gt;
&lt;th&gt;Why we need it&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Visual Studio Code&lt;/td&gt;
&lt;td&gt;Latest&lt;/td&gt;
&lt;td&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Primary IDE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Python&lt;/td&gt;
&lt;td&gt;3.9 or higher&lt;/td&gt;
&lt;td&gt;&lt;a href="https://www.python.org/downloads/" rel="noopener noreferrer"&gt;https://www.python.org/downloads/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;To run and understand examples&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS CLI (optional)&lt;/td&gt;
&lt;td&gt;v2&lt;/td&gt;
&lt;td&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Verify AWS tools are working&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Git (optional but useful)&lt;/td&gt;
&lt;td&gt;Latest&lt;/td&gt;
&lt;td&gt;&lt;a href="https://git-scm.com/" rel="noopener noreferrer"&gt;https://git-scm.com/&lt;/a&gt;&lt;/td&gt;
&lt;td&gt;Clone repos in future workshops&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Windows: Open Start Menu → show VS Code, Python, and Git installed&lt;br&gt;&lt;br&gt;
macOS/Linux: Terminal screenshot of &lt;code&gt;code --version&lt;/code&gt;, &lt;code&gt;python3 --version&lt;/code&gt;, &lt;code&gt;aws --version&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3&gt;
  
  
  Step 2: Install VS Code Extensions
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Open VS Code
&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Ctrl + Shift + X&lt;/code&gt; → Extensions view
&lt;/li&gt;
&lt;li&gt;Install these two extensions &lt;strong&gt;exactly&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Q&lt;/strong&gt; (published by &lt;strong&gt;Amazon Web Services&lt;/strong&gt;)
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python&lt;/strong&gt; (published by &lt;strong&gt;Microsoft&lt;/strong&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Step 3: Download Workshop Materials
&lt;/h3&gt;

&lt;p&gt;Open a terminal &lt;strong&gt;outside&lt;/strong&gt; any project folder and run:&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;# Create a dedicated folder&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt; ~/aws-community-day-cameroon-2025
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/aws-community-day-cameroon-2025

&lt;span class="c"&gt;# Download the official lab files&lt;/span&gt;
curl &lt;span class="nt"&gt;-L&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; amazon-q-security-demo.zip &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="s2"&gt;"https://static.us-east-1.prod.workshops.aws/public/fa228c49-36a0-4354-bbeb-63c36918cdf7/assets/amazon-q-developer-security-scans-demo.zip"&lt;/span&gt;

&lt;span class="c"&gt;# Or on Windows PowerShell:&lt;/span&gt;
&lt;span class="c"&gt;# Invoke-WebRequest -Uri "https://static.us-east-1.prod.workshops.aws/public/fa228c49-36a0-4354-bbeb-63c36918cdf7/assets/amazon-q-developer-security-scans-demo.zip" -OutFile "amazon-q-security-demo.zip"&lt;/span&gt;

&lt;span class="c"&gt;# Extract&lt;/span&gt;
unzip amazon-q-security-demo.zip &lt;span class="nt"&gt;-d&lt;/span&gt; amazon-q-security-lab
&lt;span class="c"&gt;# Windows users can double-click the ZIP file&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Open the Lab in VS Code
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;code amazon-q-security-lab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should now see these files in the Explorer:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;redirect.py
sql.py
priv.py
path.py
OS.py
logging.py
requirements.txt
README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 3: Authenticate Amazon Q with AWS Builder ID (100% Free)
&lt;/h2&gt;

&lt;p&gt;This is the most important step — do it carefully.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;In VS Code, click the &lt;strong&gt;Amazon Q icon&lt;/strong&gt; on the left sidebar (looks like a glowing “Q”)
&lt;/li&gt;
&lt;li&gt;You will see a welcome screen → Click &lt;strong&gt;“Start using Amazon Q for free”&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;“Sign in with AWS Builder ID”&lt;/strong&gt; → &lt;strong&gt;Continue&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A dialog says “Confirm Code for AWS Builder ID” → Click &lt;strong&gt;Proceed to Browser&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Another dialog: “Do you want Code to open the external website?” → Click &lt;strong&gt;Open&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Your browser opens → the authorization code is &lt;strong&gt;already filled&lt;/strong&gt; → Click &lt;strong&gt;Confirm and continue&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;You are now on the &lt;strong&gt;Create AWS Builder ID&lt;/strong&gt; page:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Enter your &lt;strong&gt;personal email&lt;/strong&gt; (Gmail, Yahoo, Outlook, etc.)
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Next&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Enter your &lt;strong&gt;full name&lt;/strong&gt; → Next
&lt;/li&gt;
&lt;li&gt;Check your email → copy the 6-digit code → paste it → &lt;strong&gt;Verify&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Create a strong password → &lt;strong&gt;Create AWS Builder ID&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Final screen: “Allow Amazon Q extension to access your data?” → Click &lt;strong&gt;Allow&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go back to VS Code → wait 10–20 seconds&lt;br&gt;&lt;br&gt;
→ You should see: &lt;strong&gt;“Signed in as &lt;a href="mailto:bertin@example.com"&gt;bertin@example.com&lt;/a&gt;”&lt;/strong&gt; with a green check&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Congratulations!&lt;/strong&gt; You now have full access to Amazon Q Developer security scanning for free.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 4: How to Trigger a Security Scan
&lt;/h2&gt;

&lt;p&gt;Two ways (use whichever you prefer):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method A (Recommended)&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Right-click any file in Explorer → &lt;strong&gt;Amazon Q: Review File&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Method B&lt;/strong&gt;:&lt;br&gt;&lt;br&gt;
Open the file → Press &lt;code&gt;Ctrl + Shift + P&lt;/code&gt; → type &lt;strong&gt;Amazon Q: Review Current File&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Show yellow/orange squiggly lines under vulnerable code
&lt;/li&gt;
&lt;li&gt;Populate the &lt;strong&gt;“Code Issues”&lt;/strong&gt; tab at the bottom
&lt;/li&gt;
&lt;li&gt;Offer &lt;strong&gt;one-click fixes&lt;/strong&gt; in many cases&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  Hands-On Labs – 6 Real-World Vulnerabilities
&lt;/h2&gt;

&lt;p&gt;We will now go through &lt;strong&gt;each file&lt;/strong&gt;, trigger a scan, analyze the finding, apply the fix, and learn the secure pattern.&lt;/p&gt;
&lt;h3&gt;
  
  
  Lab 1: Open Redirect (&lt;code&gt;redirect.py&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;OWASP Category&lt;/strong&gt;: A01:2021 – Broken Access Control&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Risk&lt;/strong&gt;: Phishing attacks, malware distribution&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vulnerable Code&lt;/strong&gt;:&lt;br&gt;
&lt;/p&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;request&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;redirect&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;/redirect&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;redirect_url_noncompliant&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;endpoint&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;url&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="c1"&gt;# DANGER: Redirects to ANY URL the attacker provides
&lt;/span&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nf"&gt;redirect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;endpoint&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;What to do&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open &lt;code&gt;redirect.py&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Right-click → &lt;strong&gt;Amazon Q: Review File&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Wait ~10 seconds → yellow underline appears on &lt;code&gt;return redirect(endpoint)&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Hover → short tooltip appears
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;“View Details”&lt;/strong&gt; in the tooltip
&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Code Issues&lt;/strong&gt; tab, read the full explanation
&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;“Apply Fix”&lt;/strong&gt; → Amazon Q rewrites the code safely using &lt;code&gt;urlparse&lt;/code&gt; + whitelist&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Lab 2: SQL Injection (&lt;code&gt;sql.py&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;OWASP Category&lt;/strong&gt;: A03:2021 – Injection&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Risk&lt;/strong&gt;: Database compromise, data theft, RCE in some cases&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vulnerable Pattern&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;query&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM Users WHERE name = &lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;+&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;;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;query&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# Direct string concatenation
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Secure Pattern&lt;/strong&gt; (Amazon Q will suggest):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cursor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;execute&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;SELECT * FROM Users WHERE name = ?&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&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;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Lab 3: Improper Privilege Management (&lt;code&gt;priv.py&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;: Full system compromise if exploited&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# Switches process to root!
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Amazon Q will flag this immediately and suggest removing it entirely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lab 4: Path Traversal / Directory Traversal (&lt;code&gt;path.py&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Risk&lt;/strong&gt;: Arbitrary file disclosure (e.g., &lt;code&gt;/etc/passwd&lt;/code&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;file_path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;request&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;file&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;file_path&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;   &lt;span class="c1"&gt;# Attacker can use ../../etc/passwd
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Amazon Q suggests using &lt;code&gt;os.path.abspath()&lt;/code&gt; + &lt;code&gt;os.path.commonprefix()&lt;/code&gt; to restrict to a base directory.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lab 5: OS Command Injection (&lt;code&gt;OS.py&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;OWASP Category&lt;/strong&gt;: A03:2021 – Injection&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;cmd&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;ping -c 1 %s&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="o"&gt;%&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt;   &lt;span class="c1"&gt;# Attacker can inject ; rm -rf /
&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;exec_command&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cmd&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Amazon Q recommends using &lt;code&gt;subprocess.run()&lt;/code&gt; with a list argument (no shell).&lt;/p&gt;

&lt;h3&gt;
  
  
  Lab 6: Hard-Coded Credentials &amp;amp; Credential Logging (&lt;code&gt;logging.py&lt;/code&gt;)
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;OWASP Categories&lt;/strong&gt;: A02:2021 Cryptographic Failures + A08:2021 Security Misconfiguration&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Access key: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;access_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;logging&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;info&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;secret access key: &lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;secret_key&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Amazon Q will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detect hard-coded secrets
&lt;/li&gt;
&lt;li&gt;Warn about logging credentials
&lt;/li&gt;
&lt;li&gt;Recommend using &lt;strong&gt;IAM Roles&lt;/strong&gt; (for EC2/Lambda) or &lt;strong&gt;AWS SSM Parameter Store&lt;/strong&gt; / &lt;strong&gt;Secrets Manager&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Real-World Best Practices (Take These Home!)
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Practice&lt;/th&gt;
&lt;th&gt;How to Apply Daily&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Never concatenate user input into SQL&lt;/td&gt;
&lt;td&gt;Always use parameterized queries&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Never log credentials or tokens&lt;/td&gt;
&lt;td&gt;Use structured logging + mask sensitive fields&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Never run processes as root&lt;/td&gt;
&lt;td&gt;Principle of Least Privilege&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Never trust user-supplied URLs/paths&lt;/td&gt;
&lt;td&gt;Validate + whitelist&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Never use string formatting for shell commands&lt;/td&gt;
&lt;td&gt;Use &lt;code&gt;subprocess.run(["cmd", arg1, arg2])&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Use IAM Roles instead of access keys&lt;/td&gt;
&lt;td&gt;Especially on EC2, Lambda, ECS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Enable Amazon Q in every new project&lt;/td&gt;
&lt;td&gt;Make security scanning part of your workflow&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Summary – What You Achieved Today
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Achievement&lt;/th&gt;
&lt;th&gt;Value&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Installed &amp;amp; configured Amazon Q Developer (free tier)&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Connected using AWS Builder ID (no credit card)&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Scanned real vulnerable code&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Understood 6 critical vulnerability classes&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applied one-click AI-powered fixes&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learned secure coding patterns that last forever&lt;/td&gt;
&lt;td&gt;Done&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;You are now part of a new generation of developers who &lt;strong&gt;write secure code by default&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Resources &amp;amp; Further Learning
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Official Workshop Lab: &lt;a href="https://catalog.us-east-1.prod.workshops.aws/workshops/fe2c944b-f014-44d6-a243-1fc2e30b5f73/en-US/amazon-q-security-scans" rel="noopener noreferrer"&gt;https://catalog.us-east-1.prod.workshops.aws/workshops/fe2c944b-f014-44d6-a243-1fc2e30b5f73/en-US/amazon-q-security-scans&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Amazon Q Developer Documentation: &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/security-scanning.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/security-scanning.html&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AWS Builder ID: &lt;a href="https://builder-id.aws" rel="noopener noreferrer"&gt;https://builder-id.aws&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Amazon Q Pricing (Free Tier details): &lt;a href="https://aws.amazon.com/q/developer/pricing/" rel="noopener noreferrer"&gt;https://aws.amazon.com/q/developer/pricing/&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OWASP Top 10 2021: &lt;a href="https://owasp.org/Top10/" rel="noopener noreferrer"&gt;https://owasp.org/Top10/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Special Thanks &amp;amp; Acknowledgements
&lt;/h2&gt;

&lt;p&gt;This workshop would not have been possible without the amazing support of:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Amazon Web Services (AWS)&lt;/strong&gt; – for creating Amazon Q Developer and making the free tier available to everyone
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS User Group Douala&lt;/strong&gt; – the most vibrant AWS community in Central Africa
&lt;/li&gt;
&lt;li&gt;*&lt;em&gt;Veliswa *&lt;/em&gt; – for reviewing the lab content and providing invaluable support. &lt;/li&gt;
&lt;li&gt;The entire organizing team of &lt;strong&gt;AWS Community Day Cameroon 2025&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To every participant reading this guide — whether you were physically in Douala or following online — &lt;strong&gt;thank you&lt;/strong&gt; for investing your time in becoming a more secure developer.&lt;/p&gt;

&lt;p&gt;Keep practicing. Keep scanning. Keep shipping secure code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secure coding is not a destination — it’s a habit.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See you at the next workshop!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bertin Fonge&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Lead Developer &amp;amp; DevOps Engineer – Tangento Group&lt;br&gt;&lt;br&gt;
Founder – Mbaniia Studio&lt;br&gt;&lt;br&gt;
Email: &lt;a href="mailto:cloudtrainx@mbnstudio.site"&gt;cloudtrainx@mbnstudio.site&lt;/a&gt;&lt;br&gt;&lt;br&gt;
LinkedIn: &lt;a href="https://www.linkedin.com/in/bertin-fonge-30aa69212/" rel="noopener noreferrer"&gt;https://www.linkedin.com/in/bertin-fonge-30aa69212/&lt;/a&gt; &lt;br&gt;
Twitter/X: &lt;a href="https://x.com/fongebertin" rel="noopener noreferrer"&gt;https://x.com/fongebertin&lt;/a&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Douala, Cameroon – November 2025&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;#AWSCommunityDayCM&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>promptengineering</category>
      <category>awsworkshop</category>
    </item>
  </channel>
</rss>
