<?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: José Lorenzana</title>
    <description>The latest articles on DEV Community by José Lorenzana (@joselorenzana272).</description>
    <link>https://dev.to/joselorenzana272</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%2F3860187%2Fb1e215fa-c35f-4a38-9c50-125c2b4fba7d.jpg</url>
      <title>DEV Community: José Lorenzana</title>
      <link>https://dev.to/joselorenzana272</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/joselorenzana272"/>
    <language>en</language>
    <item>
      <title>Fortress in a Box: Kubernetes Security for the Organizations That Can't Afford It</title>
      <dc:creator>José Lorenzana</dc:creator>
      <pubDate>Mon, 06 Apr 2026 14:00:00 +0000</pubDate>
      <link>https://dev.to/joselorenzana272/fortress-in-a-box-kubernetes-security-for-the-organizations-that-cant-afford-it-206e</link>
      <guid>https://dev.to/joselorenzana272/fortress-in-a-box-kubernetes-security-for-the-organizations-that-cant-afford-it-206e</guid>
      <description>&lt;p&gt;In January, a tweet stopped me mid-scroll.&lt;/p&gt;

&lt;p&gt;Someone was remembering a breach from 2022. The Red Cross. 515,000 people — refugees, missing persons, families trying to find each other after conflict. Their data, exposed. The program built to reunite them, shut down.&lt;/p&gt;

&lt;p&gt;I closed my phone. And I thought: &lt;em&gt;why doesn't something exist to prevent this?&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The problem nobody talks about
&lt;/h2&gt;

&lt;p&gt;NGOs and human rights organizations are among the most targeted entities on the internet. Not because they're careless, because they're valuable. They hold sensitive data on vulnerable people. They document atrocities. They protect dissidents.&lt;/p&gt;

&lt;p&gt;And most of them have little to no security budget.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The Red Cross (2022):&lt;/strong&gt; 515,000 records from the "Restoring Family Links" program stolen. The program was shut down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Amnesty International (2022):&lt;/strong&gt; Breached by state-sponsored attackers. An organization that protects human rights, being surveilled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bellingcat (ongoing):&lt;/strong&gt; The investigative group that exposed war crimes is constantly targeted by state actors trying to destroy evidence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These aren't edge cases. This is the reality for organizations that can't afford a security team.&lt;/p&gt;




&lt;h2&gt;
  
  
  "Someone must have already built this"
&lt;/h2&gt;

&lt;p&gt;I researched. I found the tools: Kyverno, Falco, ArgoCD, Grafana. All open source. All free. All powerful.&lt;/p&gt;

&lt;p&gt;But nobody had packaged them for an organization with no Kubernetes expert on staff.&lt;/p&gt;

&lt;p&gt;So I told myself: &lt;em&gt;someone smarter is probably already building this.&lt;/em&gt; Weeks passed. Nothing appeared.&lt;/p&gt;

&lt;p&gt;In mid-February, I opened a new GitHub repo. Then deleted it. Opened another one. Deleted that too.&lt;/p&gt;

&lt;p&gt;Eventually one of them stuck.&lt;/p&gt;




&lt;h2&gt;
  
  
  What I built: Fortress in a Box
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Fortress in a Box&lt;/strong&gt; is a one-command Kubernetes security platform built specifically for NGOs, journalists, and human rights organizations. It deploys four layers of defense-in-depth — fully configured, zero expertise required.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/JoseLorenzana272/fortress-in-a-box.git
&lt;span class="nb"&gt;cd &lt;/span&gt;fortress-in-a-box
&lt;span class="nb"&gt;chmod&lt;/span&gt; +x install.sh
./install.sh
      ↓
╔════════════════════════════════════════════╗
║         FORTRESS IS ACTIVE :D              ║
╚════════════════════════════════════════════╝
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's it. Here's what you get:&lt;/p&gt;




&lt;h3&gt;
  
  
  Layer 1 — CI/CD Scanning (Trivy)
&lt;/h3&gt;

&lt;p&gt;Every container image is scanned for known CVEs before it ever reaches your cluster. The pipeline fails automatically if vulnerabilities are found. Vulnerable code never ships.&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="s"&gt;Run Trivy scanner&lt;/span&gt;
  &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;aquasecurity/trivy-action@0.35.0&lt;/span&gt;
  &lt;span class="na"&gt;with&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image-ref&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;${{ env.IMAGE_NAME }}:${{ github.sha }}&lt;/span&gt;
    &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;table&lt;/span&gt;
    &lt;span class="na"&gt;exit-code&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;1'&lt;/span&gt;
    &lt;span class="na"&gt;vuln-type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;os,library&lt;/span&gt;
    &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;CRITICAL,HIGH&lt;/span&gt;
    &lt;span class="na"&gt;ignore-unfixed&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Layer 2 — Admission Control (Kyverno)
&lt;/h3&gt;

&lt;p&gt;Six security policies enforced at the Kubernetes API level. If a deployment doesn't comply, it's blocked before it starts, no human intervention required.&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="nn"&gt;...&lt;/span&gt;
  &lt;span class="na"&gt;matchConditions&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="s"&gt;exclude-namespaces&lt;/span&gt;
      &lt;span class="na"&gt;expression&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;request.namespace&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;'falco'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;request.namespace&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;'monitoring'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;request.namespace&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;'kyverno'&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;&amp;amp;&amp;amp;&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;request.namespace&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;'argocd'"&lt;/span&gt;
  &lt;span class="na"&gt;validations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;FORTRESS&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;Running&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;as&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;root&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;is&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;not&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;allowed!"&lt;/span&gt;
      &lt;span class="na"&gt;expression&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="s"&gt;object.spec.securityContext.runAsNonRoot == true &amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="s"&gt;object.spec.containers.all(c,&lt;/span&gt;
          &lt;span class="s"&gt;has(c.securityContext) &amp;amp;&amp;amp;&lt;/span&gt;
          &lt;span class="s"&gt;c.securityContext.runAsNonRoot == true&lt;/span&gt;
        &lt;span class="s"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The six policies cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No root users&lt;/li&gt;
&lt;li&gt;No privileged containers
&lt;/li&gt;
&lt;li&gt;No &lt;code&gt;:latest&lt;/code&gt; image tags (supply chain attacks)&lt;/li&gt;
&lt;li&gt;Resource limits required (prevent DoS)&lt;/li&gt;
&lt;li&gt;Read-only root filesystem (prevent malware installation)&lt;/li&gt;
&lt;li&gt;No host network access&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Layer 3 — Runtime Detection (Falco + Falcosidekick)
&lt;/h3&gt;

&lt;p&gt;Falco monitors every system call from every running container. The moment an attacker opens a shell inside a container — which no legitimate app should ever do — you get an alert. Not in hours. In seconds.&lt;/p&gt;

&lt;p&gt;Falcosidekick routes those alerts straight to Discord:&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="s"&gt;--set falcosidekick.config.discord.webhookurl="$DISCORD_WEBHOOK" \&lt;/span&gt;
&lt;span class="s"&gt;--set falcosidekick.config.discord.minimumpriority="warning"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No SIEM required. No security team watching dashboards. Just an alert in the channel where your team already lives.&lt;/p&gt;




&lt;h3&gt;
  
  
  Layer 4 — GitOps Recovery (ArgoCD)
&lt;/h3&gt;

&lt;p&gt;What if an attacker gets in and deletes your security policies?&lt;/p&gt;

&lt;p&gt;With ArgoCD, it doesn't matter. Git is the source of truth. Every 3 minutes, ArgoCD compares your cluster state to your repo. Any drift, deleted policy, modified deployment, gets restored automatically.&lt;/p&gt;

&lt;p&gt;The attacker's changes don't survive.&lt;/p&gt;




&lt;h2&gt;
  
  
  The gap nobody solved
&lt;/h2&gt;

&lt;p&gt;The tools I used are the same ones protecting Fortune 500 companies. They're open source. They're free. They're available to anyone.&lt;/p&gt;

&lt;p&gt;The problem was never the technology.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The problem was packaging.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;An NGO with one overworked developer doesn't have time to learn Kubernetes internals, configure Kyverno from scratch, wire up Falco with custom rules, and set up ArgoCD GitOps workflows. They need something that works on day one.&lt;/p&gt;

&lt;p&gt;That's what Fortress in a Box is.&lt;/p&gt;




&lt;h2&gt;
  
  
  Try it yourself
&lt;/h2&gt;

&lt;p&gt;Everything is open source and live:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; &lt;a href="https://github.com/JoseLorenzana272/fortress-in-a-box" rel="noopener noreferrer"&gt;github.com/JoseLorenzana272/fortress-in-a-box&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docs:&lt;/strong&gt; &lt;a href="https://joselorenzana272.github.io/fortress-in-a-box" rel="noopener noreferrer"&gt;joselorenzana272.github.io/fortress-in-a-box&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're a developer, try it.&lt;br&gt;
If you work with NGOs, deploy it.&lt;br&gt;
If you believe security shouldn't be a luxury, share it.&lt;br&gt;
If you want to contribute, PRs are open.&lt;br&gt;
If you run a small organization and want help deploying this, reach out.&lt;/p&gt;

&lt;p&gt;The people who protect others deserve to be protected too.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by a computer science student from Guatemala City. Because the gap between "enterprise security" and "accessible security" shouldn't exist.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>opensource</category>
      <category>security</category>
    </item>
  </channel>
</rss>
