<?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: neamanahmed</title>
    <description>The latest articles on DEV Community by neamanahmed (@neamanahmed).</description>
    <link>https://dev.to/neamanahmed</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%2F999914%2F5124849e-f1f2-424a-99fb-35f2f3d8ae12.jpeg</url>
      <title>DEV Community: neamanahmed</title>
      <link>https://dev.to/neamanahmed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/neamanahmed"/>
    <language>en</language>
    <item>
      <title>Project Warden: The End of "Innocent" Security in AWS</title>
      <dc:creator>neamanahmed</dc:creator>
      <pubDate>Wed, 21 Jan 2026 11:49:13 +0000</pubDate>
      <link>https://dev.to/neamanahmed/project-warden-the-end-of-innocent-security-in-aws-14k9</link>
      <guid>https://dev.to/neamanahmed/project-warden-the-end-of-innocent-security-in-aws-14k9</guid>
      <description>&lt;h1&gt;
  
  
  🛡️ Project Warden: The End of "Innocent" Security in AWS
&lt;/h1&gt;

&lt;p&gt;In the early days of cloud engineering, there was a sense of &lt;strong&gt;Innocent Trust&lt;/strong&gt;. We believed that if a Terraform plan was applied correctly, the infrastructure was "safe." We treated security as a destination—a state we reached once and then moved on to the next feature.&lt;/p&gt;

&lt;p&gt;But as any SRE or SecOps professional will tell you, the "rest period" is over. We now live in the era of &lt;strong&gt;Configuration Drift&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Whether it’s a "quick fix" by a developer in the console or an overlooked IAM policy, your private S3 buckets are always one mutation away from becoming public liabilities. Today, I’m sharing the framework I use to combat this: &lt;strong&gt;Project Warden.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Philosophy: Why "Warden"?
&lt;/h2&gt;

&lt;p&gt;Traditional security is often &lt;strong&gt;passive&lt;/strong&gt;. You run a scan once a week, get a 400-page PDF, and spend the next month manually fixing buckets.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Project Warden&lt;/strong&gt; is &lt;strong&gt;active&lt;/strong&gt;. It is an autonomous sentinel that treats every AWS region as a dynamic environment that must be constantly coerced back into a "Private" gold standard. It shifts the narrative from &lt;em&gt;detection&lt;/em&gt; to &lt;em&gt;enforced idempotency&lt;/em&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  🏛️ The Compliance Backbone (NCSC &amp;amp; NCA)
&lt;/h2&gt;

&lt;p&gt;We don't just secure for the sake of it; we secure to meet rigorous global standards. By using an automated "Heartbeat" (via GitHub Actions), this project maps directly to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;NCSC CAF (Objective B):&lt;/strong&gt; Protecting against attacks by enforcing rigid identity and access controls.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NCA ECC-1 (2-4-1):&lt;/strong&gt; Ensuring continuous data protection through technical enforcement rather than "best effort" policies.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  🛠️ The Code: Regional S3 Warden
&lt;/h2&gt;

&lt;p&gt;The heart of the Warden is a single, idempotent Ansible playbook. It doesn't care &lt;em&gt;why&lt;/em&gt; a bucket became public; it only cares that it &lt;em&gt;stops&lt;/em&gt; being public.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Regional&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;S3&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Warden&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(Heartbeat&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Sweep)"&lt;/span&gt;
  &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;localhost&lt;/span&gt;
  &lt;span class="na"&gt;connection&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;local&lt;/span&gt;
  &lt;span class="na"&gt;tasks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Step&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;1:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Regional&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Discovery"&lt;/span&gt;
      &lt;span class="na"&gt;amazon.aws.s3_bucket_info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;target_region&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
      &lt;span class="na"&gt;register&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;bucket_list&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Step&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;2:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;The&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Iron&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Fist&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;(Enforcement)"&lt;/span&gt;
      &lt;span class="na"&gt;amazon.aws.s3_bucket&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;item.name&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
        &lt;span class="na"&gt;region&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;target_region&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
        &lt;span class="na"&gt;public_access&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;block_public_acls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;block_public_policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;ignore_public_acls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
          &lt;span class="na"&gt;restrict_public_buckets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
        &lt;span class="na"&gt;state&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;present&lt;/span&gt;
      &lt;span class="na"&gt;loop&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;bucket_list.buckets&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
      &lt;span class="na"&gt;register&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;sweep_results&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Step&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;3:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Incident&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Capture"&lt;/span&gt;
      &lt;span class="na"&gt;set_fact&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;remediated_buckets&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;sweep_results.results&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;selectattr('changed',&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'equalto',&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;true)&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;map(attribute='item.name')&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;|&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;list&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;

    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Step&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;4:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Silent&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Vigilance&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;or&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Urgent&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Alert"&lt;/span&gt;
      &lt;span class="na"&gt;community.general.mail&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="c1"&gt;# ... SMTP Config ...&lt;/span&gt;
        &lt;span class="na"&gt;subject&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;REMEDIATED:&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Security&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Drift&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;Found&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;in&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;target_region&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
        &lt;span class="na"&gt;body&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;{{&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;lookup('template',&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;'templates/s3_report.html.j2')&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;}}"&lt;/span&gt;
      &lt;span class="na"&gt;when&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;remediated_buckets | length &amp;gt; &lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Idempotency is King:&lt;/strong&gt; If the bucket is already secure, Ansible does nothing. This reduces API noise and prevents unnecessary logs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The 5-Minute Window:&lt;/strong&gt; By running this on a GitHub Actions schedule, the maximum "Innocence Window" (the time a bucket stays public) is only 300 seconds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Signal Over Noise:&lt;/strong&gt; You only get an email when the Warden actually has to &lt;em&gt;fight&lt;/em&gt;. If your inbox is empty, your region is safe.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Moving Forward
&lt;/h2&gt;

&lt;p&gt;The "End of Innocence" doesn't mean we live in fear. It means we build smarter, more aggressive systems. We stop being the firemen and start building the automatic sprinkler systems.&lt;br&gt;
Project Repo: &lt;a href="https://github.com/neamanahmed/ncs3" rel="noopener noreferrer"&gt;https://github.com/neamanahmed/ncs3&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;What are you using to fight Configuration Drift in your stack? Let’s discuss in the comments.&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS #Ansible #CyberSecurity  #Governance
&lt;/h1&gt;

</description>
      <category>aws</category>
      <category>governance</category>
      <category>cloudsecurity</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Bridging Policy and Automation: Building a Compliant AWS Pipeline in a Regulated Environment</title>
      <dc:creator>neamanahmed</dc:creator>
      <pubDate>Tue, 18 Nov 2025 09:35:37 +0000</pubDate>
      <link>https://dev.to/neamanahmed/bridging-policy-and-automation-building-a-compliant-aws-pipeline-in-a-regulated-environment-37nm</link>
      <guid>https://dev.to/neamanahmed/bridging-policy-and-automation-building-a-compliant-aws-pipeline-in-a-regulated-environment-37nm</guid>
      <description>&lt;p&gt;&lt;strong&gt;Bridging Policy and Automation: Building a Compliant AWS Pipeline in a Regulated Environment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the highly  fast-paced financial and technology sectors, compliance isn’t a checkbox  it’s the backbone of trust. As cloud adoption accelerates, the tension between agility and regulatory assurance grows sharper. This week, I revisited a project that demonstrates how disciplined DevOps can uphold both innovation and compliance.&lt;/p&gt;

&lt;p&gt;A client had recently completed its first workload migration to AWS when an internal audit flagged a policy breach: source code residing in the cloud. Their policy required all intellectual property to remain within corporate premises. Instead of abandoning automation, we redesigned the pipeline around that constraint.&lt;/p&gt;

&lt;p&gt;Using &lt;strong&gt;Jenkins for local build automation&lt;/strong&gt; and &lt;strong&gt;AWS CodeDeploy for cloud deployment&lt;/strong&gt;, we maintained a fully automated CI/CD workflow — &lt;strong&gt;yet ensured no source code ever left the corporate network&lt;/strong&gt;. Only the compiled application package and deployment descriptors were transferred. CloudFormation handled the provisioning of hardened EC2 instances, ensuring consistent, auditable environments aligned with CIS 1 &amp;amp; 2 and NIST CM-2/3 controls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The outcome:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A compliant, auditable, and agile deployment pipeline that satisfied internal audit and security governance without compromising delivery velocity. It exemplifies what modern DevOps in  regulated sectors must achieve — automation with accountability.&lt;br&gt;
In an age when financial and fintech organizations face tightening oversight, integrating compliance directly into DevOps processes is not optional; it is strategic. Tools like Jenkins, AWS CodeDeploy, and CloudFormation — when used with a governance mindset — transform compliance from an obstacle into a competitive edge.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Compliance Alignment Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CIS Controls v8&lt;/strong&gt;&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%2Fknth0wo609gpr2zm2g0o.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%2Fknth0wo609gpr2zm2g0o.JPG" alt=" " width="800" height="150"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NIST SP 800-53 (Rev. 5)&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%2Fi2k83rcb04yvdf0ztr6p.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%2Fi2k83rcb04yvdf0ztr6p.JPG" alt=" " width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ISO 27001 / SOC 2 Mapping&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%2F25mh3tgij62exy0xfcip.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%2F25mh3tgij62exy0xfcip.JPG" alt=" " width="800" height="70"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Closing thought:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The next era of DevOps leadership in  regulated environments belongs to engineers who speak both languages code and compliance.&lt;/p&gt;

&lt;p&gt;Here is the original LinkeIn post &lt;a href="https://www.linkedin.com/posts/neaman-ahmed_compliance-audit-and-security-jenkins-aws-activity-7138056813517643776-ghE1?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAIssC0BuJgxKXrk1-xdzdyP6IZUHXsDaww" rel="noopener noreferrer"&gt;https://www.linkedin.com/posts/neaman-ahmed_compliance-audit-and-security-jenkins-aws-activity-7138056813517643776-ghE1?utm_source=share&amp;amp;utm_medium=member_desktop&amp;amp;rcm=ACoAAAIssC0BuJgxKXrk1-xdzdyP6IZUHXsDaww&lt;/a&gt; with document of use case.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>security</category>
      <category>compliance</category>
    </item>
    <item>
      <title>Automation of Multi-Cloud &amp; Hybrid Challenge with Multi-Tool – Part 2: Hybrid AWS RDS Deployment</title>
      <dc:creator>neamanahmed</dc:creator>
      <pubDate>Thu, 30 Oct 2025 17:57:12 +0000</pubDate>
      <link>https://dev.to/neamanahmed/automation-of-multi-cloud-hybrid-challenge-with-multi-tool-part-2-hybrid-aws-rds-deployment-1c9o</link>
      <guid>https://dev.to/neamanahmed/automation-of-multi-cloud-hybrid-challenge-with-multi-tool-part-2-hybrid-aws-rds-deployment-1c9o</guid>
      <description>&lt;p&gt;&lt;strong&gt;Part 2: Hybrid AWS RDS Deployments&lt;/strong&gt;&lt;br&gt;
In the first part of this series, we explored how Terraform and Ansible can together automate provisioning and configuration across multi-cloud and hybrid environments, creating a unified orchestration framework.&lt;br&gt;
This second part focuses on hybrid database automation, using AWS RDS as the cloud component while extending automation to on-premises systems. The implementation aligns with compliance and security baselines under the KSA National Cybersecurity Authority (NCA) Essential Cybersecurity Controls (ECC-1), which parallels the intent of CIS 1 and NIST CSF frameworks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Hybrid AWS RDS Matters&lt;/strong&gt;&lt;br&gt;
Why Hybrid AWS RDS Matters&lt;br&gt;
Most enterprises now operate within hybrid realities, data and applications distributed between on-premises infrastructure, private cloud, and public cloud. Databases remain among the hardest workloads to migrate and manage due to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data sovereignty and regulatory compliance requirements (especially in financial and government sectors).&lt;/li&gt;
&lt;li&gt;Secure connectivity between on-prem and cloud environments.&lt;/li&gt;
&lt;li&gt;Latency, replication, and backup alignment challenges.&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%2Fqp6zcnc5avxu93wfwkfk.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%2Fqp6zcnc5avxu93wfwkfk.png" alt=" " width="800" height="266"&gt;&lt;/a&gt;&lt;br&gt;
Maintaining consistent configuration and version control across different environments.&lt;/p&gt;

&lt;p&gt;By using Terraform and Ansible together, you can provision AWS RDS resources and configure on-prem integrations (applications, routing, bastion access) in one unified, compliant workflow.&lt;/p&gt;

&lt;p&gt;Repository Overview&lt;br&gt;
GitHub: &lt;a href="https://github.com/neamanahmed/hybrid_aws_rds" rel="noopener noreferrer"&gt;https://github.com/neamanahmed/hybrid_aws_rds&lt;/a&gt;&lt;br&gt;
Repository Structure&lt;br&gt;
.&lt;br&gt;
├── main.tf              # Terraform code for AWS RDS, networking, SGs&lt;br&gt;
├── var_dwc_rds.yml      # Variables for RDS and hybrid integration&lt;br&gt;
├── do_terra_rds.yml     # Ansible playbook invoking Terraform and post-config&lt;br&gt;
├── rds_mysql_conf.j2    # Jinja2 template for DB parameter configuration&lt;br&gt;
└── outputs.tf           # Terraform outputs consumed by Ansible&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Highlights&lt;/strong&gt;&lt;br&gt;
main.tf: Provisions RDS (MySQL) and related resources in AWS.&lt;/p&gt;

&lt;p&gt;do_terra_rds.yml: Executes Terraform and applies post-deployment configuration templates.&lt;/p&gt;

&lt;p&gt;rds_mysql_conf.j2: Ensures consistent database parameter settings for performance, logging, and encryption policies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;End-to-End Workflow&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Trigger: A CI/CD pipeline or operator launches the automation workflow.
&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%2Fol6llrns23ggsx00h7bk.JPG" alt=" " width="800" height="423"&gt;
&lt;/li&gt;
&lt;li&gt;Provisioning: Infrastructure is created through Infrastructure as Code (IaC).
&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%2F94dmkyvpyyne1fh5ix8b.JPG" alt=" " width="800" height="415"&gt;
&lt;/li&gt;
&lt;li&gt;Output Capture: Database endpoint, VPC, and security group details are recorded.&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%2Fpsutv1h29isnb34weiet.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%2Fpsutv1h29isnb34weiet.JPG" alt=" " width="800" height="425"&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%2Ftpy7ine1l1v9k9qe1nju.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%2Ftpy7ine1l1v9k9qe1nju.JPG" alt=" " width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Template Generation: Ansible applies configuration templates to ensure policy alignment.
&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%2Frwufwb99s6l9t30pw82i.JPG" alt=" " width="800" height="433"&gt;
&lt;/li&gt;
&lt;li&gt;Hybrid Configuration: On-prem systems are updated with connection details and security rules.&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%2Fqjxxvq1kcwghme0bwbam.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%2Fqjxxvq1kcwghme0bwbam.JPG" alt=" " width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Validation: Automated checks confirm database reachability, encryption, and performance settings.&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%2Fq1qbcvqpuoplx17hryhc.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%2Fq1qbcvqpuoplx17hryhc.JPG" alt=" " width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By embedding compliance directly into automation, security and governance become part of the delivery pipeline, rather than post-audit concerns.&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%2Fom35ria5ulu2e0glhvmv.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%2Fom35ria5ulu2e0glhvmv.JPG" alt=" " width="800" height="175"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Security and Networking Best Practices&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Deploy RDS in &lt;strong&gt;private subnets&lt;/strong&gt;, without public exposure.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Limit inbound access to defined CIDRs or bastion hosts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enforce &lt;strong&gt;TLS 1.2+&lt;/strong&gt; for all database connections.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable &lt;strong&gt;automated backups and snapshots&lt;/strong&gt; for recovery.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Integrate &lt;strong&gt;CloudWatch alarms&lt;/strong&gt; and metrics for monitoring.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use &lt;strong&gt;VPN or Direct Connect&lt;/strong&gt; for secure hybrid data flows.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Hybrid Architecture Value&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This setup demonstrates a true &lt;strong&gt;hybrid data plane&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Cloud:&lt;/strong&gt; AWS RDS provides scalability, resilience, and managed database services.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;On-Prem:&lt;/strong&gt; Legacy or compliance-bound systems consume the same RDS instance securely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automation Layer:&lt;/strong&gt; Ansible (with Terraform or other IaC) guarantees repeatable, compliant deployments.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Such hybrid architectures are essential for &lt;strong&gt;regulated industries&lt;/strong&gt; where complete public-cloud migration is not yet practical but modernization must progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Next: Multi-Cloud Hybrid GoldenGate Replication&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;In the upcoming &lt;strong&gt;Part 3&lt;/strong&gt;, we’ll extend this framework into &lt;strong&gt;multi-cloud hybrid replication using Oracle GoldenGate&lt;/strong&gt;, demonstrating:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automated GoldenGate setup and configuration via Ansible.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Real-time data synchronization across AWS, Azure, and on-prem Oracle databases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Latency-aware replication and monitoring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Governance alignment for hybrid continuity and audit readiness.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The &lt;strong&gt;Hybrid AWS RDS&lt;/strong&gt; solution merges Infrastructure as Code and Configuration Management into a unified, compliant automation model. By embedding &lt;strong&gt;NCA ECC-1&lt;/strong&gt; controls within automation, it transforms compliance into an operational capability    making hybrid deployments both secure and reproducible.&lt;/p&gt;

&lt;p&gt;Explore the full implementation here: 👉 &lt;a href="https://github.com/neamanahmed/hybrid_aws_rds" rel="noopener noreferrer"&gt;https://github.com/neamanahmed/hybrid_aws_rds&lt;/a&gt;&lt;br&gt;
For Site to Site VPN automated configuration : &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7117443569988071425/?originTrackingId=QSRRNg0bQOOWRnq7CM%2Bcbg%3D%3D" rel="noopener noreferrer"&gt;https://www.linkedin.com/feed/update/urn:li:activity:7117443569988071425/?originTrackingId=QSRRNg0bQOOWRnq7CM%2Bcbg%3D%3D&lt;/a&gt;&lt;br&gt;&lt;br&gt;
and GitHub repo : &lt;a href="https://github.com/neamanahmed/aws-vpn-autoamtion" rel="noopener noreferrer"&gt;https://github.com/neamanahmed/aws-vpn-autoamtion&lt;/a&gt;&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>security</category>
      <category>devops</category>
      <category>aws</category>
    </item>
    <item>
      <title>Automation of Multi-Cloud &amp; Hybrid Challenge with Multi Tool</title>
      <dc:creator>neamanahmed</dc:creator>
      <pubDate>Fri, 17 Oct 2025 14:30:49 +0000</pubDate>
      <link>https://dev.to/neamanahmed/automation-of-multi-cloud-hybrid-challenge-with-multi-tool-4f9j</link>
      <guid>https://dev.to/neamanahmed/automation-of-multi-cloud-hybrid-challenge-with-multi-tool-4f9j</guid>
      <description>&lt;p&gt;&lt;strong&gt;Ansiterra: Unifying Infrastructure as Code and Configuration Management with Ansible and Terraform&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In today’s multi-cloud and hybrid environments, Infrastructure as Code (IaC) and configuration management tools have become the foundation of scalable and secure IT operations. While Terraform excels at provisioning infrastructure resources, Ansible stands out for its agentless configuration management and orchestration capabilities. Although Ansible can also be IAC , and can provision resources on cloud and on prem. Let us see both siblings at IBM. &lt;/p&gt;

&lt;p&gt;This article demonstrates how combining both tools in a single workflow can deliver a powerful and flexible automation framework — using Ansible not just for configuration management, but also as the primary driver of Terraform based infrastructure provisioning.&lt;/p&gt;

&lt;p&gt;We use &lt;strong&gt;Terraform&lt;/strong&gt; and &lt;strong&gt;Ansible&lt;/strong&gt; to provision and configure infrastructure. Terraform provisions the cloud resources, and then Ansible configures those resources (for example, setting up a web server).&lt;/p&gt;

&lt;p&gt;However, a bigger challenge arises when provisioning resources in the AWS Cloud that must interact with other environments. The configuration information from those provisioned resources needs to be distributed and applied across &lt;strong&gt;multiple clouds&lt;/strong&gt;, &lt;strong&gt;on-premises systems&lt;/strong&gt;, &lt;strong&gt;industrial facilities&lt;/strong&gt;, or &lt;strong&gt;remote IoT sensors&lt;/strong&gt; spread across different locations.&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%2Fk7tyde9jc7cfl32z43a9.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%2Fk7tyde9jc7cfl32z43a9.JPG" alt=" " width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Concept: Multi-Tool IaC Integration&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The approach showcased in the Ansiterra project illustrates how to use Ansible as a unified automation controller that:&lt;/p&gt;

&lt;p&gt;Calls Terraform modules to provision infrastructure in AWS (e.g., VPCs, subnets, EC2 instances).&lt;/p&gt;

&lt;p&gt;Captures the Terraform outputs (such as VPC IDs, private IPs, route table information).&lt;/p&gt;

&lt;p&gt;Propagates that configuration to local data center or on-premises hosts (Host1, Host2, etc.), ensuring hybrid connectivity and consistency.&lt;/p&gt;

&lt;p&gt;This approach leverages the strengths of both tools:&lt;/p&gt;

&lt;p&gt;Terraform: State management, modular IaC, multi-cloud provisioning.&lt;/p&gt;

&lt;p&gt;Ansible: Idempotent configuration management, orchestration, and local/remote file handling.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Use Ansible as the Orchestrator&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While Terraform can manage resources efficiently, it lacks mature post-deployment configuration capabilities. Ansible fills that gap by:&lt;/p&gt;

&lt;p&gt;Managing runtime configurations after resources are provisioned.&lt;/p&gt;

&lt;p&gt;Creating configuration files dynamically on local or remote systems.&lt;/p&gt;

&lt;p&gt;Enforcing compliance and operational policies through playbooks.&lt;/p&gt;

&lt;p&gt;Providing a unified interface for both cloud and on-premises automation.&lt;/p&gt;

&lt;p&gt;In this project, Ansible wraps Terraform execution within its playbook logic. After Terraform creates AWS infrastructure, the same Ansible run generates configuration files on local data center servers — for instance, updating local route definitions or service endpoint mappings.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example Flow&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%2F6xx2ou6mznkun569tdi3.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%2F6xx2ou6mznkun569tdi3.png" alt=" " width="800" height="1200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Before Execution of Workflow&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%2Fcfxkncxtj9zt7oyckvej.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%2Fcfxkncxtj9zt7oyckvej.JPG" alt=" " width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Ansible Playbook Executes Terraform Module&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Uses community.general.terraform module to call a Terraform script.&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terraform provisions AWS infrastructure&lt;/strong&gt; (VPC, subnets, EC2, etc.).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;After Execution of Workflow&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%2Fv3mwawbfcijsq4sz4tgu.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%2Fv3mwawbfcijsq4sz4tgu.JPG" alt=" " width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Collects Terraform Output&lt;/strong&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%2F1tsnwlnoc5q5hb6wowmq.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%2F1tsnwlnoc5q5hb6wowmq.JPG" alt=" " width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;VPC and and it component created&lt;/strong&gt;&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%2Fmv692r1ek3gx1xgsndxz.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%2Fmv692r1ek3gx1xgsndxz.JPG" alt=" " width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Outputs&lt;/strong&gt; (like VPC ID, subnet CIDR, private IPs) are registered as Ansible variables.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Propagates Configuration to Local Hosts&lt;/strong&gt;&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%2Fhymtov9b0isdcn8e81w6.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%2Fhymtov9b0isdcn8e81w6.JPG" alt=" " width="800" height="127"&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%2Fqqst8e9yamc78xm3gv7n.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%2Fqqst8e9yamc78xm3gv7n.JPG" alt=" " width="800" height="133"&gt;&lt;/a&gt;&lt;br&gt;
( &lt;em&gt;Ansible templates generate configuration files using Jinja2. in coming article of this series&lt;/em&gt;)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Files are deployed to host1, host2, and other LAN nodes for integration with cloud resources.&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt; Unified automation workflow — no need for separate tooling pipelines.&lt;/li&gt;
&lt;li&gt; Single source of truth for both provisioning and configuration.&lt;/li&gt;
&lt;li&gt; Supports hybrid and multi-cloud environments.&lt;/li&gt;
&lt;li&gt;Reduces operational complexity and on-boarding time.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;The Ansiterra approach illustrates the evolving role of Ansible as not only a configuration management tool but also a multi-purpose automation orchestrator. By integrating Terraform seamlessly, DevOps teams can achieve greater agility, maintain consistent environments, and ensure faster infrastructure-to-application readiness.&lt;br&gt;
&lt;strong&gt;Project Repo&lt;/strong&gt; &lt;a href="https://github.com/neamanahmed/ansiterra" rel="noopener noreferrer"&gt;https://github.com/neamanahmed/ansiterra&lt;/a&gt; &lt;/p&gt;

</description>
      <category>automation</category>
      <category>cloud</category>
      <category>devops</category>
      <category>terraform</category>
    </item>
  </channel>
</rss>
