Pomerium Documentation
website·Indexed 35 days ago
https://www.pomerium.com/docs/Documentation for Pomerium, a zero-trust access solution. Covers Pomerium Core (self-managed) and Pomerium Zero (managed), including authentication via Identity Providers (IdP), Single Sign-On (SSO), and the Pomerium Policy Language (PPL). Includes detailed guides on Model Context Protocol (MCP) support for securing AI agents, native SSH access, non-HTTP protocol tunneling, and configuration for routes, timeouts, and identity headers.
What's inside Pomerium
- Pomerium acts as a native SSH reverse proxy that adds OAuth authentication and policy enforcement to standard SSH connections. It is protocol-aware, meaning it does not require custom clients, tunnels, or specialized server software. SSH traffic flows through the Pomerium data plane on a configurable port, separate from HTTP traffic. When a user connects, Pomerium validates their identity via an IdP, evaluates policies, and generates a short-lived SSH certificate to authenticate the user to the upstream server.
Overview of MCP App Architecture
MCP Apps use the
@modelcontextprotocol/ext-appsSDK to render interactive UI components (widgets) inside MCP hosts like ChatGPT, Claude, VS Code, and Goose. The architecture consists of two main components:- MCP Server: Handles tool execution and returns structured data. It must be reachable via a public URL and is typically auth-gated (requiring a Bearer token for tool calls).
- Widget Assets: React-based UI components rendered in a sandboxed iframe by the host. These must be publicly accessible because MCP hosts cannot forward authentication credentials to the iframe.
Overview of Pomerium Policy Language (PPL)
Pomerium Policy Language (PPL) is a YAML-based declarative notation used to create fine-grained authorization policies for routes. A policy consists of rules that determine whether to
allowordenyaccess based on specific conditions.Key evaluation logic:
denyalways takes precedence overallow.- Access is granted if at least one
allowrule matches AND nodenyrules match.
Overview of MCP Upstream OAuth
Upstream OAuth in Pomerium allows MCP clients to interact with servers that require third-party authentication (e.g., Notion, Linear, Google) without the client ever seeing upstream credentials. Pomerium handles the OAuth flow and proxies requests to the MCP server with a valid upstream access token in the
Authorization: Bearerheader.Clients hold a Pomerium-issued External Token (TE), while Pomerium manages the Internal Token (TI) used for the upstream provider.
Use Pomerium as a Secure MCP Gateway
Pomerium acts as a secure gateway for Model Context Protocol (MCP) servers. By placing an internal MCP server behind Pomerium, external clients (such as Claude, ChatGPT, or VS Code) can access the server securely. Pomerium manages TLS termination, authentication, and authorization, allowing the internal server to remain isolated from the public internet and focus solely on business logic.Implement Zero Trust with Pomerium
Pomerium implements a Zero Trust security model, which assumes the network perimeter is compromised. Instead of relying on a firewall, it protects every connection on a per-request basis by continuously verifying identity, device posture, and context before granting access.Understand Pomerium's continuous request validation
Pomerium implements a zero-trust security model where every single request is re-validated. This validation is based on three primary factors: user identity, device posture, and other contextual factors. This continuous re-checking ensures that resources remain protected even if the network perimeter has been compromised.Secure non-HTTP protocols using Pomerium tunneling
Pomerium allows you to secure and authenticate TCP- and UDP-based services by tunneling them over HTTP. This enables the use of an identity provider to control access to services that do not natively support HTTP authentication. Common use cases include administrative connections (SSH, RDP), data services (Redis, MySQL, Postgres), and UDP-based protocols (e.g., time servers, game servers).Understand Pomerium's Authentication (AuthN) and Authorization (AuthZ) flow
Pomerium separates identity verification from permission enforcement:
- Authentication (AuthN): Confirms the user's or device's identity. Pomerium delegates this to external Identity Providers (IdPs) like Google or Okta, which issue a JSON Web Token (JWT).
- Authorization (AuthZ): Determines if the authenticated user has permission to access a specific resource. Pomerium compares the claims within the JWT against policies defined using the Pomerium Policy Language (PPL).
Install Pomerium Core via standalone binary
Pomerium Core can be installed by downloading the official tarball for the target operating system and architecture from GitHub Releases. Once extracted, thepomeriumbinary can be executed with a configuration file.ARCH=[amd64 or arm64] OS=[linux or darwin] VERSION=[desired version] curl -L https://github.com/pomerium/pomerium/releases/download/${VERSION}/pomerium-${OS}-${ARCH}.tar.gz | tar -z -x ./pomerium -config config.yamlUse Pomerium for Kubernetes API Server Access
Pomerium can act as a proxy for requests to the Kubernetes API server, allowing any supported IdP to be used for authentication regardless of the environment. This provides centralized access policy, consistent group membership support, and a global audit trail without requiring a VPN.Understand Pomerium Multi-Cluster Architecture
Pomerium supports a multi-cluster architecture to ensure redundancy and independent scaling. In this setup, a Load Balancer distributes incoming client traffic across multiple independent Pomerium clusters. Each cluster is self-contained, consisting of its own Proxy, Authorize, Authenticate, and Databroker services, as well as its own dedicated Postgres instance (typically configured with a Master and Replica for data durability).