<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Security on Landry Zetam - Tech Blog</title><link>https://blog.landryzetam.net/categories/security/</link><description>Recent content in Security on Landry Zetam - Tech Blog</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Thu, 11 Jun 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.landryzetam.net/categories/security/index.xml" rel="self" type="application/rss+xml"/><item><title>NetworkPolicy vs AuthorizationPolicy: One Decides If the Call Connects, the Other Decides If Anyone Answers</title><link>https://blog.landryzetam.net/posts/network-policy-vs-authorization-policy/</link><pubDate>Thu, 11 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/network-policy-vs-authorization-policy/</guid><description>&lt;p>Kubernetes gives you two resources that both look like &amp;ldquo;firewall rules for pods,&amp;rdquo; and most teams deploy one and assume they got the other for free. They didn&amp;rsquo;t. The two policies operate at different layers, speak different languages, and fail in completely different ways — and you almost certainly need both.&lt;/p>
&lt;h2 id="the-setup">The Setup&lt;/h2>
&lt;p>Picture a cluster running a service mesh (Istio, in my case) with a typical three-tier layout: an ingress gateway, a handful of API services, and a PostgreSQL database listening on port 5432. The security requirement sounds simple: only the API services should reach the database, and only the gateway should reach the APIs. The first instinct is to reach for &lt;em>a&lt;/em> policy — and Kubernetes hands you two that both claim to do this. &lt;code>NetworkPolicy&lt;/code> ships with Kubernetes itself (enforced by your CNI — Cilium, Calico). &lt;code>AuthorizationPolicy&lt;/code> ships with Istio (enforced by the Envoy sidecar). Same goal on paper, very different machinery underneath.&lt;/p></description></item><item><title>Lint Your Network Before It Exists: IaC Policy Scanning for VPCs</title><link>https://blog.landryzetam.net/posts/lint-your-network-before-it-exists/</link><pubDate>Tue, 02 Jun 2026 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/lint-your-network-before-it-exists/</guid><description>&lt;p>Most network security failures aren&amp;rsquo;t exotic. They&amp;rsquo;re a security group left open to the whole internet on port 22, a subnet that auto-assigns public IPs to everything you launch into it, or a virtual network with flow logs never turned on so you have no record of what happened. The surprise isn&amp;rsquo;t that these slip through — it&amp;rsquo;s that you can catch every one of them &lt;em>before a single resource exists&lt;/em>, by linting the infrastructure code the same way you lint application code.&lt;/p></description></item><item><title>Securing GitOps: SOPS Secret Management in k8s with FluxCD</title><link>https://blog.landryzetam.net/posts/secrets-management-with-sops-flux-gitops/</link><pubDate>Thu, 07 Aug 2025 00:00:00 +0000</pubDate><guid>https://blog.landryzetam.net/posts/secrets-management-with-sops-flux-gitops/</guid><description>&lt;h2 id="the-problem-secrets-in-gitops">The Problem: Secrets in GitOps&lt;/h2>
&lt;p>When I started my Kubernetes homelab journey, I quickly hit a wall that every GitOps practitioner faces: &lt;strong>How do you store secrets in Git without compromising security?&lt;/strong>&lt;/p>
&lt;p>The GitOps philosophy is beautifully simple - everything should be in Git. Your entire cluster state, all your applications, configurations, and yes, even secrets. But committing passwords, API keys, and certificates to a public (or even private) repository feels fundamentally wrong. It is wrong.&lt;/p></description></item></channel></rss>