<?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: Pomerium</title>
    <description>The latest articles on DEV Community by Pomerium (@pomerium).</description>
    <link>https://dev.to/pomerium</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%2Forganization%2Fprofile_image%2F10304%2F0f1afec2-0e4c-48c2-9955-9f0afbba4de5.png</url>
      <title>DEV Community: Pomerium</title>
      <link>https://dev.to/pomerium</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pomerium"/>
    <language>en</language>
    <item>
      <title>Migrating from Ingress NGINX to Pomerium Ingress Controller</title>
      <dc:creator>Nick Taylor</dc:creator>
      <pubDate>Sat, 06 Dec 2025 01:57:00 +0000</pubDate>
      <link>https://dev.to/pomerium/migrating-from-ingress-nginx-to-pomerium-ingress-controller-47m6</link>
      <guid>https://dev.to/pomerium/migrating-from-ingress-nginx-to-pomerium-ingress-controller-47m6</guid>
      <description>&lt;p&gt;The Kubernetes community &lt;a href="https://kubernetes.io/blog/2025/11/11/ingress-nginx-retirement/" rel="noopener noreferrer"&gt;announced that Ingress NGINX will be retired&lt;/a&gt; in March 2026. After that, there won't be any more updates, bugfixes, or security patches. While your existing deployments will keep working, running without security updates is risky and there will be no further feature developments.&lt;/p&gt;

&lt;p&gt;Many Kubernetes operators are now evaluating alternatives to the community Ingress NGINX controller. The &lt;a href="https://github.com/pomerium/ingress-controller" rel="noopener noreferrer"&gt;Pomerium ingress controller&lt;/a&gt; offers a compelling migration path that provides the same reverse proxy functionality you're used to, with optional zero trust capabilities (what we do best) that you can adopt incrementally without requiring an immediate overhaul of your existing setup.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Consider Pomerium?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;While there are &lt;a href="https://kubernetes.io/docs/concepts/services-networking/ingress-controllers/" rel="noopener noreferrer"&gt;several good ingress controller alternatives&lt;/a&gt; available, the Pomerium ingress controller provides the same reverse proxy functionality you're used to with Ingress NGINX, but with built-in zero trust features that you can adopt incrementally. Since both Pomerium Core and the ingress controller are open source, you can evaluate and implement without vendor lock-in concerns.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Before You Start&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This guide assumes you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.pomerium.com/docs/deploy/k8s/install" rel="noopener noreferrer"&gt;Pomerium installed&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://www.pomerium.com/docs/deploy/k8s/install" rel="noopener noreferrer"&gt;Pomerium Ingress Controller installed&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;TLS certificates configured (Pomerium requires HTTPS for all routes)
&lt;/li&gt;
&lt;li&gt;Basic familiarity with Kubernetes ingress resources&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What's Different?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Unlike NGINX, Pomerium has two key requirements:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;HTTPS is mandatory - all routes must use TLS
&lt;/li&gt;
&lt;li&gt;Policies are required - you must specify an access policy (even if it's permissive)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;These requirements ensure security by default, but you can configure permissive policies that function exactly like traditional reverse proxies.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;A Simple Migration Example&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Let's look at a typical Ingress NGINX configuration and its Pomerium equivalent:&lt;/p&gt;

&lt;p&gt;Ingress NGINX to Pomerium Ingress Controller:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight diff"&gt;&lt;code&gt;&lt;span class="p"&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
&lt;/span&gt;  name: my-app
&lt;span class="gi"&gt;+  annotations:
+    ingress.pomerium.io/policy:
+      - allow:
+          any: true
&lt;/span&gt;&lt;span class="p"&gt;spec:
&lt;/span&gt;&lt;span class="gd"&gt;-  ingressClassName: nginx
&lt;/span&gt;&lt;span class="gi"&gt;+  ingressClassName: pomerium
&lt;/span&gt;  rules:
  - host: app.example.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-app-service
            port:
              number: 80
  tls:
  - hosts:
    - app.example.com
    secretName: app-tls-cert
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The configuration is nearly identical—just change the ingress class from &lt;code&gt;nginx&lt;/code&gt; to &lt;code&gt;pomerium&lt;/code&gt; and add a basic policy. The &lt;code&gt;any: true&lt;/code&gt; policy tells Pomerium to allow all requests through without applying access restrictions—essentially functioning as a traditional reverse proxy with no additional authentication or authorization layers. Your existing network security, firewall rules, and application-level authentication remain unchanged.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Policy Options for Basic Reverse Proxy Functionality&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For straightforward migration that matches Ingress NGINX's default behavior, you have several policy options:&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="c1"&gt;# Option 1: Allow any request (most similar to Ingress NGINX default)&lt;/span&gt;
&lt;span class="na"&gt;ingress.pomerium.io/policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
  &lt;span class="s"&gt;- allow:&lt;/span&gt;
      &lt;span class="s"&gt;any: true&lt;/span&gt;

&lt;span class="c1"&gt;# Option 2: Truly public access (annotation shortcut)&lt;/span&gt;
&lt;span class="na"&gt;ingress.pomerium.io/allow_public_unauthenticated_access&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;true'&lt;/span&gt;

&lt;span class="c1"&gt;# Option 3: Any authenticated user (if you want basic auth)&lt;/span&gt;
&lt;span class="na"&gt;ingress.pomerium.io/allow_any_authenticated_user&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;true'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;TLS Certificate Management&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Since Pomerium requires HTTPS, consider using &lt;a href="https://cert-manager.io/" rel="noopener noreferrer"&gt;cert-manager&lt;/a&gt; for automatic certificate provisioning. The Pomerium ingress controller integrates seamlessly with cert-manager:&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="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;networking.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Ingress&lt;/span&gt;
&lt;span class="na"&gt;metadata&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;my-app&lt;/span&gt;
  &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;cert-manager.io/cluster-issuer&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;letsencrypt-prod&lt;/span&gt;
    &lt;span class="na"&gt;ingress.pomerium.io/policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;- allow:&lt;/span&gt;
          &lt;span class="s"&gt;any: true&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ingressClassName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pomerium&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app.example.com&lt;/span&gt;
    &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
        &lt;span class="na"&gt;pathType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Prefix&lt;/span&gt;
        &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;service&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;my-app-service&lt;/span&gt;
            &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
  &lt;span class="na"&gt;tls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app.example.com&lt;/span&gt;
    &lt;span class="na"&gt;secretName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-tls-cert&lt;/span&gt; &lt;span class="c1"&gt;# cert-manager will create this&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Start Simple, Add Zero Trust When Ready&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So if you're looking to migrate from Ingress NGINX, migrating to Pomerium gives you immediate reverse proxy functionality identical to Ingress NGINX. Plus, if you decide to explore zero trust down the road, you can replace the permissive policy with fine-grained rules based on user identity, device status, request context, or other factors:&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="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;networking.k8s.io/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Ingress&lt;/span&gt;
&lt;span class="na"&gt;metadata&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;my-app&lt;/span&gt;
  &lt;span class="na"&gt;annotations&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;ingress.pomerium.io/policy&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|&lt;/span&gt;
      &lt;span class="s"&gt;- allow:&lt;/span&gt;
          &lt;span class="s"&gt;and:&lt;/span&gt;
            &lt;span class="s"&gt;- domain:&lt;/span&gt;
                &lt;span class="s"&gt;is: example.com&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;ingressClassName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pomerium&lt;/span&gt;
  &lt;span class="na"&gt;rules&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;host&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app.example.com&lt;/span&gt;
    &lt;span class="na"&gt;http&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;paths&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;path&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;/&lt;/span&gt;
        &lt;span class="na"&gt;pathType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Prefix&lt;/span&gt;
        &lt;span class="na"&gt;backend&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;service&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;my-app-service&lt;/span&gt;
            &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;number&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
  &lt;span class="na"&gt;tls&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;hosts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;app.example.com&lt;/span&gt;
    &lt;span class="na"&gt;secretName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app-tls-cert&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;With the March 2026 retirement deadline, you have time to plan your migration carefully. The Pomerium ingress controller installation is straightforward and well-documented. You can run both controllers side-by-side during migration, gradually moving services over as you validate functionality.&lt;/p&gt;

&lt;p&gt;Whether you're looking for a sustainable long-term solution or preparing for a zero trust future, the Pomerium ingress controller offers a natural evolution from traditional reverse proxy patterns. Start with the familiar, add security when you're ready.  &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Learn more about the Pomerium ingress controller at &lt;a href="https://github.com/pomerium/ingress-controller" rel="noopener noreferrer"&gt;github.com/pomerium/ingress-controller&lt;/a&gt; or check out the &lt;a href="https://www.pomerium.com/docs/deploy/k8s/ingress" rel="noopener noreferrer"&gt;deployment documentation&lt;/a&gt;.&lt;/em&gt;  &lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>zerotrust</category>
      <category>nginx</category>
      <category>ingresscontroller</category>
    </item>
    <item>
      <title>Self-Healing File-Based Databroker Without The Postgres Headaches</title>
      <dc:creator>Nick Taylor</dc:creator>
      <pubDate>Tue, 04 Nov 2025 15:17:46 +0000</pubDate>
      <link>https://dev.to/pomerium/self-healing-file-based-databroker-without-the-postgres-headaches-117k</link>
      <guid>https://dev.to/pomerium/self-healing-file-based-databroker-without-the-postgres-headaches-117k</guid>
      <description>&lt;p&gt;TL;DR We just released Pomerium v0.31 with a new file-based databroker backend. It eliminates the operational overhead of managing a separate data persistence layer by introducing a self-healing, infrastructure-agnostic storage mode that recovers in milliseconds and keeps sessions alive.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.pomerium.com/docs/reference/databroker?utm_source=pomerium&amp;amp;utm_medium=blog#how-to-configure-the-file-storage-type" rel="noopener noreferrer"&gt;Read the full release notes&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Scale and Performance Without the Overhead&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Few teams have a full-time DBA. And most Pomerium deployments don’t need the control, scale, and complexity of Postgres.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pomerium’s new file-based databroker backend removes the burden of managing a separate data persistence layer without sacrificing performance.  
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Meet the Self-Healing File-Based Databroker&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The new backend embeds &lt;a href="https://github.com/cockroachdb/pebble" rel="noopener noreferrer"&gt;Pebble&lt;/a&gt;, the storage engine behind CockRoachDB — a fast, embedded key-value store built for production workloads. It’s designed to cover 80% of real deployments without the overhead of Postgres.&lt;/p&gt;

&lt;p&gt;What you get:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Self-healing recovery. Raft handles clustering and leader election. If one node fails, another takes over in less than a second.
&lt;/li&gt;
&lt;li&gt;Infra-agnostic. Run anywhere — Kubernetes, VMs, bare metal, or air-gapped networks. No managed database required.
&lt;/li&gt;
&lt;li&gt;Persistent and safe. Sessions and data survive service restarts.
&lt;/li&gt;
&lt;li&gt;Built for scale. Pomerium’s databroker is optimized for Pebble’s key-value store.
&lt;/li&gt;
&lt;li&gt;Observability ready. Exposes metrics and traces for direct visibility in Grafana or your preferred tool.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;How Self-Healing Works with Optional Clustered Mode&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Teams can decide between clustered and non-clustered mode. We recommend clustered mode for teams required self-healing with automatic leader election in the event of a failure.&lt;/p&gt;

&lt;p&gt;When cluster mode is active:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The leader writes new data.
&lt;/li&gt;
&lt;li&gt;Followers replicate changes in real time.
&lt;/li&gt;
&lt;li&gt;If the leader fails, Raft based leader election promotes a follower to leader immediately.
&lt;/li&gt;
&lt;li&gt;The new leader already has the full state and resumes writes.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  No volume reattachment, or manual replay. Just automatic recovery.  
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Quick Start Example&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Enable file-based clustering with two simple lines:&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="na"&gt;databroker_storage_type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;file&lt;/span&gt;
&lt;span class="na"&gt;databroker_storage_connection_string&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;file:///var/pomerium/databroker&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  That’s it. Your sessions persist. Your data survives restarts. Failover happens automatically.  
&lt;/h2&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Right Default for Most Teams&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;For most deployments, the file-based databroker is the recommended choice: simple, self-healing, and ready for production.&lt;/p&gt;

&lt;p&gt;Pomerium now handles storage the way operators always wanted — quietly, reliably, and without additional operational overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Try Pomerium v0.31&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Upgrade to the latest version or deploy fresh today.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pomerium.com/contact" rel="noopener noreferrer"&gt;Request a demo&lt;/a&gt; or connect with your Pomerium team to see how v0.31 simplifies your setup.&lt;/p&gt;

&lt;p&gt;NB: Raft is available with Pomerium Core and Enterprise.&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@glencarrie?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Glen Carrie&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/a-first-aid-sign-on-a-brick-wall-6gx17HUt3Cg?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>databroker</category>
      <category>distributedsystems</category>
      <category>sre</category>
      <category>devops</category>
    </item>
    <item>
      <title>Smarter Health Checks for Zero-Downtime Deployments</title>
      <dc:creator>Nick Taylor</dc:creator>
      <pubDate>Tue, 21 Oct 2025 17:36:03 +0000</pubDate>
      <link>https://dev.to/pomerium/smarter-health-checks-for-zero-downtime-deployments-4h15</link>
      <guid>https://dev.to/pomerium/smarter-health-checks-for-zero-downtime-deployments-4h15</guid>
      <description>&lt;p&gt;TL;DR&lt;/p&gt;

&lt;p&gt;The latest Pomerium release introduces fine-grained and context-aware health checks for Kubernetes, AWS ECS, and systemd. These checks confirm that your routing and policy-enforcement layers are fully ready before handling traffic, giving operators reliable zero-downtime upgrades.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.pomerium.com/docs/internals/health-checks?utm_source=pomerium&amp;amp;utm_medium=devto" rel="noopener noreferrer"&gt;Read the full release notes here&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why Health Checks Matter&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Without proper health checks, services can often start before all dependencies are fully ready. Readiness checks should not only confirm network connectivity, but whether you are prepared to handle requests.&lt;/p&gt;

&lt;p&gt;The new health checks ensure that all critical components are initialized before traffic is accepted. This ensures smarter startups and improved reliability in automated environments like Kubernetes.&lt;/p&gt;

&lt;p&gt;This ensures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more “healthy” pods denying requests on startup
&lt;/li&gt;
&lt;li&gt;Graceful shutdowns that wait for all active connections to drain
&lt;/li&gt;
&lt;li&gt;Smooth autoscaling and rolling upgrades with zero downtime&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Kubernetes: Before and After&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Previous behavior&lt;/p&gt;

&lt;p&gt;When a new replica started in Kubernetes, it was marked ready immediately. The proxy could receive requests before configuration and policy sync completed. Some requests were denied until initialization finished.&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%2F0ylmre20gggvx3oaq3cg.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%2F0ylmre20gggvx3oaq3cg.png" alt="Previous Health checks behavior" width="480" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;New behavior&lt;/p&gt;

&lt;p&gt;Each replica now reports readiness only after it completes startup tasks and verifies configuration sync. Once the new replica signals it is ready, Kubernetes begins draining connections from the old one.&lt;/p&gt;

&lt;p&gt;This sequence enables rolling upgrades without downtime or failed requests.&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%2Fjhbn8tdyswxnegzly0w1.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%2Fjhbn8tdyswxnegzly0w1.png" alt="after Health checks behavior" width="480" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;ECS and systemd Support&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The new pomerium health command extends readiness logic to AWS ECS and systemd environments.&lt;/p&gt;

&lt;p&gt;You can use it to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integrate with ECS deployment health checks
&lt;/li&gt;
&lt;li&gt;Manage service restarts safely under systemd
&lt;/li&gt;
&lt;li&gt;Maintain uptime during scaling or repaving events&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Health reporting works consistently across orchestrators with no special configuration required.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Example Health Check Output&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before Pomerium handles traffic, it confirms that each core service is running:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"authenticate.service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"authorize.service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"config.databroker.build"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"databroker.sync.initial"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"envoy.server"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"proxy.service"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"storage.backend"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"attributes"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"Key"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"backend"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"Value"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"in-memory"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"xds.cluster"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"xds.listener"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"xds.route-configuration"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"RUNNING"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only when all components report RUNNING does Pomerium begin serving requests.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why You Should Care&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;These new health checks make Pomerium safer and more predictable during updates and scaling events.&lt;/p&gt;

&lt;p&gt;They ensure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each replica starts cleanly
&lt;/li&gt;
&lt;li&gt;Active connections drain fully
&lt;/li&gt;
&lt;li&gt;Autoscaling and rollouts complete without downtime&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Together with improved metrics and file-based databroker storage, this makes Pomerium self-healing and easier to operate in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Get Started&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Upgrade to Pomerium v0.31 to enable the new health checks automatically in your existing deployments.&lt;/p&gt;

&lt;p&gt;For detailed examples and configuration guidance, visit the &lt;a href="https://docs.pomerium.com/docs/internals/health-checks?utm_source=pomerium&amp;amp;utm_medium=devto" rel="noopener noreferrer"&gt;Health Checks documentation&lt;/a&gt;.  &lt;/p&gt;

</description>
      <category>zerotrust</category>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>Pomerium’s OpenTelemetry Tracing Support: Deeper Observability, Made Easy</title>
      <dc:creator>Nick Taylor</dc:creator>
      <pubDate>Thu, 01 May 2025 18:34:51 +0000</pubDate>
      <link>https://dev.to/pomerium/pomeriums-opentelemetry-tracing-support-deeper-observability-made-easy-4ibh</link>
      <guid>https://dev.to/pomerium/pomeriums-opentelemetry-tracing-support-deeper-observability-made-easy-4ibh</guid>
      <description>&lt;p&gt;Pomerium allows you to securely access Kubernetes APIs, internal apps, databases, and more—without a VPN. But even with faster, direct access, understanding performance issues or request failures in a distributed environment still requires the right observability to trace what’s happening behind the scenes.&lt;/p&gt;

&lt;p&gt;That’s why we’re excited to announce Pomerium’s &lt;a href="https://www.pomerium.com/changelog/v0290-opentelemetry-tracing" rel="noopener noreferrer"&gt;newly improved OpenTelemetry (OTEL) tracing support&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;With detailed, contextual tracing, following request flows across Pomerium and your apps just became far easier—and a lot more delightful.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is OpenTelemetry (OTEL)?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://opentelemetry.io/" rel="noopener noreferrer"&gt;OpenTelemetry&lt;/a&gt; is an open-source observability framework that standardizes how applications collect, process, and export telemetry data such as metrics, traces, and logs. It’s the successor to OpenCensus and OpenTracing, and is now the de facto industry standard for modern observability.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Move to OTEL?
&lt;/h2&gt;

&lt;p&gt;Previously, Pomerium used OpenCensus for tracing. However, OpenCensus has been deprecated, and upstream projects—including &lt;a href="https://www.envoyproxy.io/" rel="noopener noreferrer"&gt;Envoy Proxy&lt;/a&gt;—have removed support for it entirely.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If you haven’t run into it before: Pomerium is built on &lt;a href="https://www.envoyproxy.io/" rel="noopener noreferrer"&gt;Envoy Proxy&lt;/a&gt;, a modern, battle-tested Layer 7 proxy that powers huge production systems at companies like Lyft, Apple, and Shopify.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Key reasons for moving to OpenTelemetry:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Future-proofing&lt;/strong&gt;: OTLP (OpenTelemetry Protocol) is now the ubiquitous standard across most observability tools.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deeper tracing&lt;/strong&gt;: OpenCensus could not trace request flows end-to-end through Pomerium and Envoy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better integration&lt;/strong&gt;: OpenTelemetry support ensures broad compatibility with a wide range of collectors and backends like Jaeger, Tempo, and Honeycomb.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, Pomerium’s request tracing flows seamlessly from Envoy into Pomerium’s core services—and you can export it into any OTLP-compatible backend like Jaeger, Tempo, Honeycomb, or others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Are OTEL Traces Important?
&lt;/h2&gt;

&lt;p&gt;Traces capture the &lt;em&gt;full context&lt;/em&gt; of a request—from the moment it enters the system to all the internal services it touches.&lt;/p&gt;

&lt;p&gt;While logs and metrics show individual points of data, &lt;strong&gt;traces show the journey&lt;/strong&gt; of a request across systems.&lt;/p&gt;

&lt;p&gt;As a context- and identity-aware proxy, &lt;strong&gt;Pomerium often acts as the critical entrypoint&lt;/strong&gt; into your distributed systems, especially when handling:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authentication (OAuth/OIDC flows)&lt;/li&gt;
&lt;li&gt;Authorization decisions&lt;/li&gt;
&lt;li&gt;Secure routing to protected upstream services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without proper tracing, debugging complex workflows—like an OAuth login flow that fails after five redirects—becomes guesswork. With tracing, every step becomes visible.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Pomerium Implements OpenTelemetry Tracing
&lt;/h2&gt;

&lt;p&gt;Pomerium now uses the OpenTelemetry SDK to instrument key parts of its architecture:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Envoy&lt;/strong&gt;: Ingress traffic and HTTP request handling&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt;: Identity provider interactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authorization&lt;/strong&gt;: Policy evaluation and enforcement&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Proxy&lt;/strong&gt;: Secure traffic forwarding&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Broker&lt;/strong&gt;: Internal service communication&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Control Plane&lt;/strong&gt;: Configuration and service coordination&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even when running Pomerium in &lt;strong&gt;"all-in-one" mode&lt;/strong&gt;, traces are logically separated by component (via service names).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Custom Envoy span naming&lt;/strong&gt; ensures traces include meaningful names like host, path, and method.&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%2Fud1b8albwu67k8kqvjox.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%2Fud1b8albwu67k8kqvjox.png" alt="Jaeger trace showing a failed OIDC sign-in due to an issuer mismatch in Pomerium's authenticate service." width="800" height="977"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Full End-to-End Tracing Through Envoy
&lt;/h2&gt;

&lt;p&gt;Pomerium’s ability to offer full, detailed tracing starts with its foundation: Envoy Proxy.&lt;/p&gt;

&lt;p&gt;By building on Envoy, Pomerium inherits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scalability&lt;/strong&gt;: Envoy is designed for cloud-native, high-volume environments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Feature richness&lt;/strong&gt;: Native support for advanced protocols, observability, retries, load balancing, and OTEL tracing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reliability&lt;/strong&gt;: Used in production by companies like Lyft, Apple, and Shopify.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our close integration with Envoy means your access proxy is future-proofed.&lt;/p&gt;

&lt;p&gt;Pomerium didn’t just slap tracing on top. We contributed upstream fixes—like &lt;a href="https://github.com/envoyproxy/envoy/pull/37692" rel="noopener noreferrer"&gt;PR #37692&lt;/a&gt;—to ensure accuracy and completeness.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solving Redirects and Sampling in Tracing
&lt;/h2&gt;

&lt;p&gt;Distributed tracing isn’t just plug-and-play—especially when redirects are involved.&lt;/p&gt;

&lt;p&gt;Pomerium often handles OAuth flows with &lt;strong&gt;5+ redirects&lt;/strong&gt; across Identity Providers.&lt;/p&gt;

&lt;p&gt;However, &lt;strong&gt;HTTP redirects don't carry tracing headers&lt;/strong&gt;, so traces could become fragmented.&lt;/p&gt;

&lt;h2&gt;
  
  
  Our Solution
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Propagating trace context&lt;/strong&gt; in query parameters and OAuth state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ensuring sampling consistency&lt;/strong&gt; throughout redirects.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unified trace view&lt;/strong&gt; for complex auth flows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Use Cases for Tracing Pomerium Requests
&lt;/h2&gt;

&lt;p&gt;Real-world examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Understand user authentication flows&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Debug mysterious authentication failures&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Diagnose performance bottlenecks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Analyze network or external system slowness&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each trace provides detailed timing, metadata, and authorization decisions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set Up Tracing Today
&lt;/h2&gt;

&lt;p&gt;Tracing isn’t always easy, but we’ve made it &lt;strong&gt;as simple as possible&lt;/strong&gt; with Pomerium v0.29.0.&lt;/p&gt;

&lt;p&gt;We can’t wait to hear what you build and what insights you uncover!&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Get started today:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://main.docs.pomerium.com/docs/reference/tracing" rel="noopener noreferrer"&gt;Visit the Pomerium Tracing Documentation →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pomerium.com/blog/announcing-pomerium-v0290" rel="noopener noreferrer"&gt;Read more about what’s new in Pomerium v0.29.0 →&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pomerium.com/products/zero" rel="noopener noreferrer"&gt;Try Pomerium Zero →&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Places you can connect with us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pomerium" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/pomerium_io" rel="noopener noreferrer"&gt;X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/pomerium.io" rel="noopener noreferrer"&gt;Bluesky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pomerium.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pomerium.com/newsletter" rel="noopener noreferrer"&gt;Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>otel</category>
      <category>zerotrust</category>
      <category>o11y</category>
      <category>observability</category>
    </item>
    <item>
      <title>Rethinking Authorization in the Age of AI Agents</title>
      <dc:creator>Nick Taylor</dc:creator>
      <pubDate>Fri, 18 Apr 2025 13:56:33 +0000</pubDate>
      <link>https://dev.to/pomerium/rethinking-authorization-in-the-age-of-ai-agents-110c</link>
      <guid>https://dev.to/pomerium/rethinking-authorization-in-the-age-of-ai-agents-110c</guid>
      <description>&lt;p&gt;We’re entering the age of agentic AI — where software agents, not just users, are taking action on our behalf.&lt;/p&gt;

&lt;p&gt;With standards like the &lt;a href="https://modelcontextprotocol.io/introduction" rel="noopener noreferrer"&gt;Model Context Protocol&lt;/a&gt; (MCP) are making this more seamless by letting agents access tools and services in a structured, context-aware way. But here's the catch: most existing authorization models weren’t built for this kind of actor.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/OAuth" rel="noopener noreferrer"&gt;OAuth&lt;/a&gt;, &lt;a href="https://en.wikipedia.org/wiki/Role-based_access_control" rel="noopener noreferrer"&gt;role based access control&lt;/a&gt; (RBAC), and traditional session-based models assume a user is behind every request. With agentic systems, intent is often delegated, context can shift dynamically, and agents might act across boundaries we didn’t originally model. Who's responsible? What are they allowed to do? And how do we reason about trust when the actor isn't a person?&lt;/p&gt;

&lt;p&gt;We need to start thinking beyond human-centric auth — and my co-worker &lt;a href="https://www.linkedin.com/in/bobby-desimone/" rel="noopener noreferrer"&gt;Bobby&lt;/a&gt;’s post, "Agentic Access Is Here. Your Authorization Model Is Probably Broken.", makes a great case for why.&lt;/p&gt;

&lt;p&gt;Give it a read and let me know what you think!&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://thenewstack.io/agentic-access-is-here-your-authorization-model-is-probably-broken/" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fcdn.thenewstack.io%2Fmedia%2F2025%2F04%2Fd52252db-agentic-ai-authentication-1.jpg" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://thenewstack.io/agentic-access-is-here-your-authorization-model-is-probably-broken/" rel="noopener noreferrer" class="c-link"&gt;
            Agentic Access Is Here. Your Authorization Model Is Probably Broken. - The New Stack
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            The new MCP access control model fundamentally can’t measure up to the speed, scope and nondeterminism of AI agent-based access control.
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthenewstack.io%2Ffavicon.ico"&gt;
          thenewstack.io
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Places you can connect with us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pomerium" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/pomerium_io" rel="noopener noreferrer"&gt;X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/pomerium.io" rel="noopener noreferrer"&gt;Bluesky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pomerium.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pomerium.com/newsletter" rel="noopener noreferrer"&gt;Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@omilaev?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Igor Omilaev&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/two-hands-touching-each-other-in-front-of-a-pink-background-gVQLAbGVB6Q?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>agenticai</category>
      <category>ai</category>
    </item>
    <item>
      <title>Pomerium 0.29.0 is Here!</title>
      <dc:creator>Nick Taylor</dc:creator>
      <pubDate>Fri, 28 Mar 2025 11:11:46 +0000</pubDate>
      <link>https://dev.to/pomerium/pomerium-0290-is-here-2km4</link>
      <guid>https://dev.to/pomerium/pomerium-0290-is-here-2km4</guid>
      <description>&lt;p&gt;We're excited to announce version 0.29.0 of Pomerium. If you haven’t heard of us, we’re a zero-trust identity-aware proxy.&lt;/p&gt;

&lt;p&gt;In this release, there's a slick new Routes Portal that shows users exactly what they can access, UDP tunneling for protocols like DNS and VoIP, and HTTP/3 support for faster connections.&lt;/p&gt;

&lt;p&gt;We've completely revamped tracing with OpenTelemetry, added direct Azure AD token authentication, and made JWT handling smarter when dealing with large group memberships.&lt;/p&gt;

&lt;p&gt;Infrastructure fans: we now have a full Terraform provider for Enterprise!&lt;/p&gt;

&lt;p&gt;Check out our announcement post for all the details, and let us know what you think!&lt;/p&gt;


&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://www.pomerium.com/changelog/pomerium-v0290" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pomerium.com%2Fglide%2Fasset%2FYXNzZXRzL3YwLjI5LXRodW1ibmFpbC5wbmc%2Fv0.29-thumbnail.png%3Fp%3Dseo_pro_og%26s%3Da2ee9de088ba316de51c3c328ec72521" height="auto" class="m-0"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://www.pomerium.com/changelog/pomerium-v0290" rel="noopener noreferrer" class="c-link"&gt;
            Pomerium v0.29.0 | Pomerium
          &lt;/a&gt;
        &lt;/h2&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.pomerium.com%2Fstatic-img%2Ffavicon.svg"&gt;
          pomerium.com
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;Places you can connect with us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pomerium" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/pomerium_io" rel="noopener noreferrer"&gt;X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/pomerium.io" rel="noopener noreferrer"&gt;Bluesky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pomerium.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pomerium.com/newsletter" rel="noopener noreferrer"&gt;Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>zerotrust</category>
      <category>otel</category>
      <category>terraform</category>
      <category>devops</category>
    </item>
    <item>
      <title>Context-Based Access Control and Zero Trust: Key Insights from the CSA White Paper</title>
      <dc:creator>Eunjee Choi</dc:creator>
      <pubDate>Thu, 13 Mar 2025 01:35:06 +0000</pubDate>
      <link>https://dev.to/pomerium/context-based-access-control-and-zero-trust-key-insights-from-the-csa-white-paper-4he2</link>
      <guid>https://dev.to/pomerium/context-based-access-control-and-zero-trust-key-insights-from-the-csa-white-paper-4he2</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloudsecurityalliance.org/" rel="noopener noreferrer"&gt;Cloud Security Alliance (CSA)&lt;/a&gt;released a &lt;a href="https://cloudsecurityalliance.org/artifacts/context-based-access-control-for-zero-trust" rel="noopener noreferrer"&gt;white paper&lt;/a&gt; on Context-Based Access Control (CBAC) and its role in advancing Zero Trust security models. The paper underscores the necessity of shifting from static, trust-based access control to real-time, adaptive authentication that evaluates risk dynamically, and Pomerium was highlighted as a key player in the CBAC space. &lt;br&gt;
We’ll break down the white paper’s key findings and explore how Pomerium aligns with this modern security framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Traditional Access Controls Fall Short
&lt;/h2&gt;

&lt;p&gt;Historically, access control has been based on predefined roles and entitlements. The &lt;strong&gt;Role-Based Access Control (RBAC)&lt;/strong&gt; model assigns permissions to roles rather than individual users, simplifying management but failing to adapt to real-time threats. &lt;strong&gt;Attribute-Based Access Control (ABAC)&lt;/strong&gt; improves on RBAC by considering user attributes, but it still lacks dynamic risk assessment and real-time adaptability.&lt;br&gt;
The CSA paper highlights how modern identity-based attacks, such as credential theft and lateral movement, exploit these traditional models. Attackers can obtain valid credentials and operate within an organization undetected, as access decisions are based on static rules rather than continuous evaluation.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Context-Based Access Control (CBAC)?
&lt;/h2&gt;

&lt;p&gt;CBAC represents a paradigm shift in access control. Instead of granting access solely based on identity or static attributes, CBAC evaluates &lt;strong&gt;real-time contextual signals&lt;/strong&gt; to determine whether a request should be approved. These signals can include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User behavior&lt;/strong&gt;: Is the user accessing resources in a typical pattern?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Device health&lt;/strong&gt;: Is the device compliant with security policies?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Location &amp;amp; network conditions&lt;/strong&gt;: Is the request coming from a familiar or risky location?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time &amp;amp; frequency&lt;/strong&gt;: Is access being requested at an unusual time or with an abnormal frequency?
By continuously analyzing these factors, CBAC minimizes implicit trust and ensures that every access request is assessed based on current risk factors rather than static policies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Read more about CBAC vs. RBAC vs. ABAC, the CBAC Maturity Model, and Pomerium's role as a zero trust, context-aware access solution on our &lt;a href="https://www.pomerium.com/blog/context-based-access-control-and-zero-trust-key-insights-from-the-csa-white-paper" rel="noopener noreferrer"&gt;blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>zerotrust</category>
      <category>cybersecurity</category>
      <category>accesscontrol</category>
      <category>securityframework</category>
    </item>
    <item>
      <title>What You Need to Know From the 2024 ITRC Data Breach Report</title>
      <dc:creator>Eunjee Choi</dc:creator>
      <pubDate>Thu, 27 Feb 2025 00:34:43 +0000</pubDate>
      <link>https://dev.to/pomerium/what-you-need-to-know-from-the-2024-itrc-data-breach-report-5hb6</link>
      <guid>https://dev.to/pomerium/what-you-need-to-know-from-the-2024-itrc-data-breach-report-5hb6</guid>
      <description>&lt;p&gt;Every year, the Identity Theft Resource Center (ITRC) publishes its Data Breach Report, and every year, the numbers tell a familiar story: breaches are still rampant and personal data is still getting exposed. &lt;/p&gt;

&lt;p&gt;The statistics and trends revealed in the ITRC’s 2024’s Data Breach Report help us understand where we are, where things are headed, and—most importantly—what we can do about it.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;The Big Picture: 2024 Was a Year of Massive Exposure&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If there’s one number you take away from the report, it’s &lt;strong&gt;3,158&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;3,158 data compromises were recorded in 2024, just 44 short of the all-time high set in 2023. While the total number of breaches did not increase, the number of victim notices skyrocketed by 312%—meaning the scale of each breach is growing.&lt;br&gt;
In fact, six “mega-breaches” accounted for 85% of all victim notices in 2024.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Biggest Data Breaches of 2024&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ticketmaster – 560 million victim notices&lt;/li&gt;
&lt;li&gt;Advance Auto Parts – 380 million victim notices&lt;/li&gt;
&lt;li&gt;Change Healthcare – 190 million victim notices&lt;/li&gt;
&lt;li&gt;DemandScience – 121 million victim notices&lt;/li&gt;
&lt;li&gt;AT&amp;amp;T – 110 million victim notices&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Although these massive incidents were the stars of the show last year, the reality is that thousands of smaller breaches are happening constantly, many of which go unnoticed by the public.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;What’s Changing? Key Trends from the Report&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Companies Won’t Tell Us How They Got Hacked&lt;/strong&gt;&lt;br&gt;
70% of cyberattack-related breach notices in 2024 failed to disclose how the attack happened—a significant jump from 58% in 2023. This lack of transparency makes it more difficult for other companies to learn and strengthen defenses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Financial Services Overtakes Healthcare as the #1 Target&lt;/strong&gt;&lt;br&gt;
For the first time since 2018, the Financial Services sector suffered more breaches than Healthcare. Although this could indicate improvements in healthcare security, it’s more likely that there’s been a shift in attacker focus. Banks, insurance providers, and payment processors hold valuable data and may be more vulnerable than the healthcare sector that has endured innumerable attacks in the past years.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Credential-Based Attacks Are Still the Top Problem&lt;/strong&gt;&lt;br&gt;
Four of the six biggest breaches in 2024 were caused by stolen credentials—something that could have been prevented through Multi-Factor Authentication (MFA) and passkeys. According to the report, 94% of all devices now support passkeys, but adoption is slow, and companies continue to rely on passwords that attackers can guess or steal.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. AI is Helping Hackers—But Also Defenders&lt;/strong&gt;&lt;br&gt;
While no breaches were officially attributed to AI-powered attacks, it’s clear that AI is being used to enhance phishing attempts, automate attacks, and find vulnerabilities faster than ever. At the same time, AI-powered security tools are improving at detecting threats, creating an ongoing arms race between attackers and defenders.&lt;/p&gt;

&lt;p&gt;Read more on the historical context, what needs to change, and the importance of Zero Trust security models on &lt;a href="https://www.pomerium.com/blog/2024-itrc-data-breach-report" rel="noopener noreferrer"&gt;our blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>databreach</category>
      <category>identitytheft</category>
      <category>zerotrust</category>
    </item>
    <item>
      <title>What is Zero Trust Security?</title>
      <dc:creator>Nick Taylor</dc:creator>
      <pubDate>Fri, 07 Feb 2025 02:21:08 +0000</pubDate>
      <link>https://dev.to/pomerium/what-is-zero-trust-4ob9</link>
      <guid>https://dev.to/pomerium/what-is-zero-trust-4ob9</guid>
      <description>&lt;p&gt;What is zero trust? I like to use an airport analogy to convey the concept.&lt;/p&gt;

&lt;p&gt;Think about airport security. Traditional perimeter-based security, like a virtual private network (VPN), is like showing your ID to security, not your bags or anything else, and then you're in never to be checked again. You could walk to a gate and say you're the pilot. Not great, right?&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%2Fvmvp4n64n74jczvcda7f.gif" 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%2Fvmvp4n64n74jczvcda7f.gif" alt="The Foo Fighters as captains of an airplane" width="356" height="264"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.pomerium.com/docs/internals/zero-trust" rel="noopener noreferrer"&gt;Zero Trust security&lt;/a&gt; takes a different approach - more like how airports actually work. No boarding pass? You'll need to verify who you are at the ticket counter first. Got your pass? Great, but it isn't a free pass to wander - it only works for your specific flight, at your specific gate, at the right time. This matches how an &lt;a href="https://cloud.google.com/iap/docs/concepts-overview" rel="noopener noreferrer"&gt;identity aware proxy&lt;/a&gt; works in Zero Trust security.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/Rl79jcpt3mQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Let's take a look at a real world situation, production access. Just because you're an engineer doesn't mean you get 24/7 access to production. You might only get elevated permissions during your on-call shifts. So the context here isn't just who you are, but when you're allowed to access a resource.&lt;/p&gt;

&lt;p&gt;Here's the big difference: old-school perimeter security is binary - you're either in or out. Zero Trust keeps asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are you who you claim to be?&lt;/li&gt;
&lt;li&gt;Are you where you're supposed to be?&lt;/li&gt;
&lt;li&gt;Is this the right time for your access?&lt;/li&gt;
&lt;li&gt;Does your current context justify this access level?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Zero Trust doesn't mean no trust - it's about being precise with access. Right person, right access, right time, right context.&lt;/p&gt;

&lt;p&gt;Context matters and always be verifying.&lt;/p&gt;

&lt;p&gt;Places you can connect with us:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/pomerium" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://x.com/pomerium_io" rel="noopener noreferrer"&gt;X&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://bsky.app/profile/pomerium.io" rel="noopener noreferrer"&gt;Bluesky&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://pomerium.com" rel="noopener noreferrer"&gt;Website&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.pomerium.com/newsletter" rel="noopener noreferrer"&gt;Newsletter&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@encourline?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Icarus Chu&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/people-walking-on-white-floor-tiles-3lzOGN3qcJM?utm_content=creditCopyText&amp;amp;utm_medium=referral&amp;amp;utm_source=unsplash" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>zerotrust</category>
      <category>security</category>
    </item>
  </channel>
</rss>
