Skip to content

Commit d6373dd

Browse files
committed
Refactor documentation for clarity and consistency
- Updated sidebar links to correct paths, ensuring accurate navigation to Kubernetes deployment references. - Standardized formatting across multiple files, including titles and descriptions, for improved readability. - Enhanced documentation by correcting typos and ensuring consistent terminology, particularly in the context of device identity and Kubernetes configurations. - Consolidated and improved the organization of documentation related to Pomerium's capabilities and integrations, including the introduction of new sections for WebAuthn device identity. These changes enhance the overall usability and clarity of the documentation, ensuring users have access to a more coherent and organized resource for managing Pomerium.
1 parent 87737fd commit d6373dd

33 files changed

+290
-219
lines changed

.pre-commit-config.yaml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ repos:
66
additional_dependencies:
77
88
files: ^content\/.*$
9-
exclude: content/docs/deploy/k8s//reference.md
9+
exclude: content/docs/deploy/k8s/reference.md
1010
- repo: https://github.com/streetsidesoftware/cspell-cli
1111
rev: v6.2.0
1212
hooks:

content/docs/capabilities/audit-logs.mdx

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Auditing & Privelege Access Management
33
description: Learn how to read Pomerium authorization logs.
44
lang: en-US
5-
sidebar_label: 'Audit logs'
5+
sidebar_label: 'Audit logging'
66
keywords: [pomerium, troubleshooting, auth, authorization, logs]
77
sidebar_class_name: enterprise
88
---

content/docs/capabilities/authorization.mdx

+8-10
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,14 @@ import Tabs from '@theme/Tabs';
2121
import TabItem from '@theme/TabItem';
2222
import SelfSignedCertWarning from '@site/content/docs/admonitions/_handle-self-signed-certificate-warning.mdx';
2323

24-
# Pomerium's Authorization and Policy Enforcement
24+
<iframe
25+
width="100%"
26+
height="600"
27+
src="https://www.youtube.com/embed/3MJrNvQ7aIE"
28+
title="Pomerium authorization video"
29+
frameborder="0"
30+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
31+
allowfullscreen></iframe>
2532

2633
Pomerium enforces dynamic, context-aware authorization on every request. This capability extends across deployments of any size or complexity, from single-route use cases to multi-namespace or multi-cluster enterprise environments.
2734

@@ -35,15 +42,6 @@ Pomerium's approach to authorization is continuous and context-aware, integratin
3542
- **Namespace-based** and **cluster-based** organization in Enterprise and Zero
3643
- **Policy languages**: [PPL](#pomerium-policy-language-ppl) for most use cases, [Rego](#rego-policies) for advanced logic
3744

38-
<iframe
39-
width="100%"
40-
height="600"
41-
src="https://www.youtube.com/embed/3MJrNvQ7aIE"
42-
title="Pomerium authorization video"
43-
frameborder="0"
44-
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
45-
allowfullscreen></iframe>
46-
4745
## Where Policies Live
4846

4947
1. **Routes**

content/docs/capabilities/getting-users-identity.mdx

+10-10
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33

44
title: Identity & Context Verification with JWTs
55
description: Learn how Pomerium uses JWTs for identity and context verification, how it fits into a zero trust environment, and four ways to validate the JWT in your upstream service.
6-
sidebar_label: Identity & Context Verification
6+
sidebar_label: Continious Identity Verification
77
keywords:
88
- jwt
99
- jwt authentication
@@ -28,6 +28,15 @@ import ExpressApp from '/content/examples/js-sdk/express-server.md';
2828

2929
# Identity & Context Verification with JWT
3030

31+
<iframe
32+
width="100%"
33+
height="600"
34+
src="https://www.youtube.com/embed/mc9USXDiCmk"
35+
title="YouTube video player"
36+
frameborder="0"
37+
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
38+
allowfullscreen></iframe>
39+
3140
Pomerium uses JSON Web Tokens (JWTs) to help your upstream services verify a user's identity and additional context (like group membership) at the **application layer**. In a zero trust environment, verifying that **both** the client and server are who they say they are is crucial. Pomerium handles user authentication, then mints a **signed JWT** for every verified and authorized request.
3241

3342
By validating that JWT, your application or service confirms:
@@ -43,15 +52,6 @@ This article explains **why** identity & context verification at the application
4352
3. **Custom application** (using an existing JWT library or Pomerium's SDK)
4453
4. **Sidecar** (no code changes, e.g. Envoy proxy)
4554

46-
<iframe
47-
width="100%"
48-
height="415"
49-
src="https://www.youtube.com/embed/mc9USXDiCmk"
50-
title="YouTube video player"
51-
frameborder="0"
52-
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share"
53-
allowfullscreen></iframe>
54-
5555
## JWT Authentication Flow
5656

5757
![A diagram that shows how Pomerium forwards JWTs to an upstream application](./img/jwt-authn/jwt-authentication.svg)

content/docs/capabilities/routing.mdx

+4-6
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
# cSpell:ignore cm9vdDpodW50ZXI0Mg
33

4-
title: Routing, Proxying, and Load Balancing
4+
title: Routing, Proxying, and Load Balancing with Pomerium
55
lang: en-US
66
sidebar_label: 'Proxying & Routing'
77
description: How to get Pomerium's CLI which be used to proxy TCP services and kubernetes commands
@@ -20,19 +20,17 @@ keywords:
2020
]
2121
---
2222

23-
# Routing, Proxying, and Load Balancing
24-
25-
## Routes
26-
2723
<iframe
2824
width="100%"
29-
height="500"
25+
height="600"
3026
src="https://www.youtube.com/embed/-wAKnj_cY-E"
3127
frameborder="0"
3228
webkitallowfullscreen="true"
3329
mozallowfullscreen="true"
3430
allowfullscreen="true"></iframe>
3531

32+
## Routing
33+
3634
A **Route** defines how to access a service running behind Pomerium. This includes authentication (both for Pomerium and passed through to the service), rewrites, header management, load balancing, etc.
3735

3836
When first installing Pomerium Enterprise, users may want to import existing routes from the open-source Pomerium core. The **Migrate Routes** button accepts the open-source `config.yaml` file and imports routes from it to Pomerium Enterprise.

content/docs/deploy/enterprise/install.mdx

+1-1
Original file line numberDiff line numberDiff line change
@@ -207,7 +207,7 @@ kubectl apply -k ./config
207207

208208
```
209209

210-
[pomerium kustomize]: /docs/deploy/k8s//install
210+
[pomerium kustomize]: /docs/deploy/k8s/install
211211
[environment variables]: /docs/deploy/enterprise/configure
212212
[ingress]: /docs/deploy/k8s/ingress
213213

content/docs/deploy/k8s/configure.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ Integration with your Identity Provider is configured using [`identityProvider`]
4848

4949
### Authenticate endpoint
5050

51-
Each Pomerium installation has a special route that unauthenticated users are redirected to that handles sign-in via your Identity Provider. It is configured via the [`authenticate`](/docs/deploy/k8s//reference#authenticate) parameter of the [CRD](./reference#authenticate).
51+
Each Pomerium installation has a special route that unauthenticated users are redirected to that handles sign-in via your Identity Provider. It is configured via the [`authenticate`](/docs/deploy/k8s/reference#authenticate) parameter of the [CRD](./reference#authenticate).
5252

5353
The authenticate endpoint DNS address should resolve to an external IP address assigned by your Kubernetes Load Balancer to the `pomerium-proxy` service. If you use `external-dns`, that may be [done automatically](#external-dns).
5454

content/docs/deploy/k8s/gateway-api.mdx

+1-1
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ To install the Pomerium Ingress Controller with support for Gateway API:
7474

7575
This installs and configures the Ingress Controller, and adds a [GatewayClass](https://gateway-api.sigs.k8s.io/concepts/api-overview/#gatewayclass) named `pomerium-gateway` for use with the Gateway API.
7676

77-
1. You will also need to set up a [global Pomerium configuration](/docs/deploy/k8s//configure). This is a minimal example for use with Gateway API:
77+
1. You will also need to set up a [global Pomerium configuration](/docs/deploy/k8s/configure). This is a minimal example for use with Gateway API:
7878

7979
```yaml title="pomerium-global.yaml"
8080
apiVersion: ingress.pomerium.io/v1

content/docs/deploy/k8s/ingress.md

+5-5
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ This document shows you how to configure an Ingress resource that's compatible w
2929

3030
**Before you start:**
3131

32-
This document assumes you've installed the Pomerium Ingress Controller and added global configuration settings with the [Pomerium CRD](/docs/deploy/k8s//configure).
32+
This document assumes you've installed the Pomerium Ingress Controller and added global configuration settings with the [Pomerium CRD](/docs/deploy/k8s/configure).
3333

3434
If you haven't completed these steps, see the following docs:
3535

36-
- [Install Pomerium Ingress Controller](/docs/deploy/k8s//install)
37-
- [Global Configuration](/docs/deploy/k8s//configure)
36+
- [Install Pomerium Ingress Controller](/docs/deploy/k8s/install)
37+
- [Global Configuration](/docs/deploy/k8s/configure)
3838

3939
## Configure an Ingress resource
4040

@@ -87,7 +87,7 @@ spec:
8787
8888
The default installation adds `pomerium` [IngressClass](https://kubernetes.io/docs/concepts/services-networking/ingress/#ingress-class) to your cluster. In order for Pomerium to service your Ingress objects, please set `spec.ingressClassName` to `pomerium`.
8989

90-
It is also possible to [set Pomerium to be a default ingress controller](/docs/deploy/k8s//install#set-pomerium-as-default-ingressclass) cluster-wide.
90+
It is also possible to [set Pomerium to be a default ingress controller](/docs/deploy/k8s/install#set-pomerium-as-default-ingressclass) cluster-wide.
9191

9292
### Set Ingress annotations
9393

@@ -544,7 +544,7 @@ spec:
544544

545545
## Metrics
546546

547-
Pomerium [exposes](/docs/deploy/k8s//install#metrics) a number of Prometheus style metrics that you may use to monitor your Ingress.
547+
Pomerium [exposes](/docs/deploy/k8s/install#metrics) a number of Prometheus style metrics that you may use to monitor your Ingress.
548548

549549
In order to filter out metrics for a particular Ingress, use `envoy_cluster_name` metric label, that has a `ingressnamespace-ingressname-host-domain-com` format.
550550

content/docs/guides/cockpit.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ This guide assumes you already have Pomerium installed and connected to your [Id
2525
- Install Pomerium
2626
- [Binaries](/docs/core) if installing Pomerium as a system-level service.
2727
- [Pomerium using Docker](/docs/get-started/quickstart) if installing Pomerium as a Docker container
28-
- [Install Pomerium using Kubernetes](/docs/deploy/k8s//quickstart) for Kubernetes environments.
28+
- [Install Pomerium using Kubernetes](/docs/deploy/k8s/quickstart) for Kubernetes environments.
2929
- Connect to an IdP - See [Identity Provider Configuration](/docs/identity-providers) and find the article for your identity provider.
3030

3131
## Install & Configure Cockpit

content/docs/guides/helm.mdx

+1-1
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ This guide will show you how to deploy Pomerium with [Helm] on [Kubernetes].
2525

2626
:::warning
2727

28-
After re-evaluating the complexity required to both use and manage Helm for Pomerium, we've opted not to continue updating our Helm chart. Instead we've created a simpler deployment method, which you can read about on our [Kubernetes Quickstart](/docs/deploy/k8s//quickstart) page.
28+
After re-evaluating the complexity required to both use and manage Helm for Pomerium, we've opted not to continue updating our Helm chart. Instead we've created a simpler deployment method, which you can read about on our [Kubernetes Quickstart](/docs/deploy/k8s/quickstart) page.
2929

3030
:::
3131

content/docs/guides/istio.mdx

+1-1
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ Follow [Install Pomerium using Helm] to set up the Pomerium Ingress Controller a
112112
headless: false # send traffic to the Pomerium Databroker through the Istio service rather than to individual pods
113113
```
114114
115-
1. When [defining a test service](/docs/deploy/k8s//quickstart#test-service), you should now see two containers for the service pod:
115+
1. When [defining a test service](/docs/deploy/k8s/quickstart#test-service), you should now see two containers for the service pod:
116116
117117
```shell-session
118118
$ kubectl get pods

content/docs/integrations/device-context/device-identity.mdx

-133
Original file line numberDiff line numberDiff line change
@@ -67,139 +67,6 @@ The nature of cross-platform keys mean they are not associated with a single end
6767

6868
Device identity is the unique ID associated with a device. In the context of zero trust, device identity can be used to authenticate and authorize users and to determine if a device can be trusted before granting a user access to a protected application or service.
6969

70-
<iframe
71-
width="100%"
72-
height="500"
73-
src="https://www.youtube.com/embed/aJzgnaXEpLo?rel=0"
74-
frameBorder="0"
75-
allow="accelerometer; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
76-
allowFullScreen
77-
/>
78-
79-
## Device identity with Pomerium
80-
81-
Pomerium versions [0.16.0](/docs/core/upgrading#policy-for-device-identity) and up support the use of device identity as a criteria in authorization policies. Pomerium uses the [Web Authentication](https://www.w3.org/TR/webauthn-2/#registration-extension) (WebAuthn) API to bring authentication and authorization based on device identity into your security framework. With Pomerium's device identity support, users can register devices and administrators can limit access to devices they trust.
82-
83-
## Device identity features
84-
85-
Pomerium Enterprise and Core both support device identity, but Enterprise users can enroll and manage devices in the Enterprise Console.
86-
87-
| Features (Enterprise) | Device Identity |
88-
| --- | :-: |
89-
| **Pre-approved device enrollment** | Administrators can enroll a new device and generate a registration link for a specific user. |
90-
| **Device management** | Administrators can view and manage approved and pending devices in the Enterprise Console. |
91-
| **User-initiated device enrollment** | Users can register their device if a route requires device identity authentication, but can only access the route if their device is approved in the Enterprise Console. |
92-
| **Features (Core)** | **Device Identity** |
93-
| **User-initiated device enrollment** | Users can register their device if a route requires device identity authentication and access the route without device approval. |
94-
95-
## New enrollment (Enterprise)
96-
97-
Device identity with Pomerium relies on a [trust on first use](https://en.wikipedia.org/wiki/Trust_on_first_use) (TOFU) authentication scheme:
98-
99-
- Administrators can enroll a device and generate a custom registration link for a specific user. (Registration links are only valid for the selected user.)
100-
- When a user registers their device with a registration link, the device will automatically be approved following the TOFU authentication scheme.
101-
102-
## Manage devices (Enterprise)
103-
104-
When an administrator enrolls a device, the Enterprise Console displays the device's status as **Pending Enrollment**.
105-
106-
When a user visits the registration link and registers their device, the Enterprise Console updates the device's status to **Approved**.
107-
108-
If an administrator deletes a device, the device will be revoked and the link becomes invalid.
109-
110-
## Enroll devices as an administrator (Enterprise)
111-
112-
Enterprise users can build policies that only grant access to a route if a user's device is approved in the Enterprise Console. (See [Device Matcher](/docs/capabilities/ppl#device-matcher) for more information.)
113-
114-
The Enterprise Console's **Manage Devices** GUI provides a dashboard where administrators can enroll devices and generate custom registration links for users in their directory.
115-
116-
:::enterprise
117-
118-
Before you can generate device registration links for users within your directory, you must sync your directory data first.
119-
120-
See [**Directory Sync**](/docs/capabilities/directory-sync) for more information.
121-
122-
:::
123-
124-
To enroll a new device:
125-
126-
1. In the Console sidebar, select **Devices**
127-
128-
2. Select **NEW ENROLLMENT**
129-
130-
![Enroll devices](./img/webauthn/admin-enroll-1.png)
131-
132-
3. In the **New Enrollment** window:
133-
134-
**Select Users**: Select a user to send a registration link (the link is only valid for the selected user) <br /> **Route**: Enter a pre-configured route from your Console; Pomerium will use this route to create the custom registration link <br /> **Redirect URL** (optional): Enter a route that users will redirect to after registering their device <br /> **Enrollment Type**:
135-
136-
- Select **Any** to allow a user to register any device
137-
- Select **Secure Enclave Only** to restrict the user to secure enclaves
138-
139-
![Select new enrollment](./img/webauthn/new-enrollment.png)
140-
141-
4. Select **SUBMIT** to get the registration link
142-
143-
![Enrollment created](./img/webauthn/enrollment-created.png)
144-
145-
Give the link to the user.
146-
147-
## Enroll device as a user
148-
149-
If a Pomerium route [requires device authentication](/docs/capabilities/ppl#device-matcher), the user must register a [trusted execution environment](/docs/concepts/device-identity#authenticated-device-types) (**TEE**) device before accessing the route. Registration differs depending on the device.
150-
151-
The steps below cover enrollment of a device by a user. This is available for both Pomerium Core and [Pomerium Enterprise](/docs/deploy/enterprise/install) installations. However, Enterprise users may also receive registration links [generated by their administrators](/docs/integrations/device-context/device-identit), which will mark the newly enrolled device as approved in the Enterprise Console.
152-
153-
1. Users are prompted to register a new device when accessing a route that requires device authentication:
154-
155-
![The WebAuthn Registration page with no devices registered](img/webauthn/no-device.png)
156-
157-
Users can also access the registration page from the special `.pomerium` endpoint available on any route at the bottom of the page:
158-
159-
![The Device Credentials section of the .pomerium endpoint with the WebAuthn link highlighted](img/webauthn/device-credentials-empty-highlight.png)
160-
161-
1. Select **Register New Device**. Your browser will prompt you to provide access to a device. This will look different depending on the browser, operating system, and device type:
162-
163-
<Tabs>
164-
165-
<TabItem value="Windows" label="Windows">
166-
167-
![The device authentication prompt on Windows](img/webauthn/security-key-windows.png)
168-
169-
</TabItem>
170-
171-
<TabItem value="Chrome" label="Chrome">
172-
173-
![The device authentication prompt in Google Chrome](img/webauthn/security-key-google.png)
174-
175-
</TabItem>
176-
177-
<TabItem value="Firefox" label="Firefox">
178-
179-
![The device authentication prompt in Firefox](img/webauthn/security-key-firefox.png)
180-
181-
</TabItem>
182-
183-
<TabItem value="ChromeOS" label="ChromeOS">
184-
185-
![The device authentication prompt on ChromeOS](img/webauthn/security-key-chromebook.png)
186-
187-
</TabItem>
188-
189-
</Tabs>
190-
191-
### Find the device ID
192-
193-
If a route's policy is configured to only allow specific device IDs, you will see a `450` error even after registering:
194-
195-
![450 device not authorized error screen](img/webauthn/450-error.png)
196-
197-
From the `.pomerium` endpoint you can copy your device ID to provide to your Pomerium administrator.
198-
199-
![Device ID list at /.pomerium](img/webauthn/device-id-list.png)
200-
201-
You can also delete the ID for devices that should no longer be associated with your account.
202-
20370
[android-keystore]: https://source.android.com/security/keystore
20471
[apple-enclave]: https://support.apple.com/guide/security/secure-enclave-sec59b0b31ff/web
20572
[apple-passkeys]: https://developer.apple.com/documentation/authenticationservices/public-private_key_authentication/supporting_passkeys

0 commit comments

Comments
 (0)