diff --git a/content/docs/deploy/enterprise/configure-metrics.mdx b/content/docs/deploy/enterprise/configure-metrics.mdx index c9025ad5c..655fdf5a0 100644 --- a/content/docs/deploy/enterprise/configure-metrics.mdx +++ b/content/docs/deploy/enterprise/configure-metrics.mdx @@ -1,124 +1,122 @@ --- -# cSpell:ignore XPOST tsdb +# cSpell:ignore tsdb title: Configure Metrics in Pomerium Enterprise sidebar_label: Metrics -description: Learn how to configure Prometheus to power metrics in the Pomerium Enterprise Console. +description: Configure Prometheus metrics for the Pomerium Enterprise Console. +sidebar_position: 4 lang: en-US keywords: [pomerium, enterprise pomerium, telemetry, metrics, prometheus] --- -Learn how to configure [Prometheus](https://prometheus.io/) as a metrics collection backend in Pomerium Enterprise. +# Configure Metrics in Pomerium Enterprise -## Overview +Pomerium Enterprise uses Prometheus data to show traffic and monitoring views in the Console. You can either connect Enterprise to an external Prometheus instance or let Enterprise run an embedded Prometheus instance. -Pomerium Enterprise uses Prometheus to collect observability and monitoring metrics from your Pomerium deployment. To set up Pomerium to work with Prometheus, you must configure either an external or embedded Prometheus instance. - -This guide explains what the [external](#external-prometheus) and [embedded](#embedded-prometheus) Prometheus options are, and how to configure them. - -## Before you start +## Before You Start To complete this guide, you need: -- [Pomerium Enterprise](/docs/deploy/enterprise) -- [Pomerium Core](/docs/deploy/core) - -This guide runs both Pomerium instances on localhost (`127.0.0.1`). +- A working [Pomerium Enterprise](/docs/deploy/enterprise) deployment +- A working [Pomerium Core](/docs/deploy/core) deployment +- Network access from Prometheus or the Enterprise Console to the metrics endpoints you configure -## Configure Pomerium +## Metrics Settings -In your Pomerium Enterprise configuration file, define the `metrics_addr` key to a network interface or port: +Enterprise metrics use two different settings: -```yaml title="pomerium-enterprise.yaml" -metrics_addr: 127.0.0.1:9092 -``` +| Component | Setting | Purpose | +| :-- | :-- | :-- | +| Pomerium Core | [`metrics_address`](/docs/reference/metrics#metrics-address) / `METRICS_ADDRESS` | Exposes Core metrics for Prometheus to scrape. | +| Enterprise Console | [`metrics_addr`](/docs/deploy/enterprise/configure#metrics-addr) / `METRICS_ADDR` | Exposes Console metrics for Prometheus to scrape. | -This setting exposes internal metrics within the Enterprise Console. If not defined, Pomerium will expose `127.0.0.1` on port `:9092` by default. +For production deployments, expose metrics only on private network interfaces reachable by Prometheus or the Enterprise Console. These endpoints can include operational data you should not expose publicly. -## Configure Prometheus +## External Prometheus -### External Prometheus +Use external Prometheus when you already operate Prometheus or want to manage retention, alerting, and scraping yourself. -An external Prometheus instance runs as its own process separate from Pomerium. Use this option if you prefer to configure and maintain Prometheus yourself. +The example values below (`10.0.0.10`, `10.0.0.20`, `prometheus.example.com`) are placeholder hosts; substitute the private network addresses or DNS names that Prometheus reaches Core and the Console on. `metrics_address` and `metrics_addr` take a listen `host:port`; `prometheus_url` takes a Prometheus base URL. -The steps below show you how to connect Prometheus to Pomerium Core and Pomerium Enterprise. +1. In your Core configuration, set Core to listen for metrics on a private interface Prometheus can reach: -:::tip + ```yaml title="pomerium.yaml" + metrics_address: 10.0.0.10:9091 + ``` -For production deployments, we suggest using a dedicated Prometheus instance. +1. In your Enterprise Console configuration, set the Console to listen for metrics on a private interface Prometheus can reach: -::: + ```yaml title="pomerium-enterprise.yaml" + metrics_addr: 10.0.0.20:9092 + ``` -1. In your Prometheus configuration file, add [instances](https://prometheus.io/docs/concepts/jobs_instances/#jobs-and-instances) for Pomerium and Pomerium Enterprise: +1. Add both targets to Prometheus: ```yaml title="prometheus.yaml" - - job_name: 'Pomerium' - scrape_interval: 30s - scrape_timeout: 5s - static_configs: - - targets: ['127.0.0.1:9091'] - - job_name: 'Pomerium Enterprise' - scrape_interval: 30s - scrape_timeout: 5s - static_configs: - - targets: ['127.0.0.1:9092'] - + scrape_configs: + - job_name: 'pomerium-core' + scrape_interval: 30s + scrape_timeout: 5s + static_configs: + - targets: ['10.0.0.10:9091'] + + - job_name: 'pomerium-enterprise' + scrape_interval: 30s + scrape_timeout: 5s + static_configs: + - targets: ['10.0.0.20:9092'] ``` -1. [Reload](https://prometheus.io/docs/prometheus/latest/configuration/configuration/#configuration) the Prometheus configuration: +1. Reload Prometheus. The `/-/reload` endpoint requires Prometheus to be started with the `--web.enable-lifecycle` flag; without it the request returns `Lifecycle API is not enabled`. Restart Prometheus instead if you cannot enable the lifecycle API. ```bash - curl -i -XPOST path.to.prometheus:port/-/reload + curl -i -XPOST http://prometheus.example.com:9090/-/reload ``` -1. In your Pomerium Enterprise configuration file, define the [`prometheus_url`](/docs/deploy/enterprise/configure#prometheus-url) key to point to your Prometheus instance. The example below uses port 9090, the default [Prometheus port](https://prometheus.io/docs/introduction/first_steps/). +1. Point the Enterprise Console at Prometheus: ```yaml title="pomerium-enterprise.yaml" - prometheus_url: http://192.168.122.50:9090 + prometheus_url: http://prometheus.example.com:9090 ``` -1. In your Pomerium configuration file, define the [`metrics_address`](/docs/reference/metrics#metrics-address) key to a network interface or port. In the example below, Pomerium provides metrics at port `9091` on an IP address reachable by Pomerium Enterprise: - - ```yaml title="pomerium.yaml" - metrics_address: 127.0.0.1:9091 - ``` +## Embedded Prometheus - :::note +Use embedded Prometheus when you want Enterprise to manage a local Prometheus process for a small deployment or test environment. - If you're running Pomerium Enterprise in a distributed environment where the IP address is unknown at the time of deployment, you can use the resolvable fully qualified domain name (FQDN) of the Pomerium host (for example, `pomerium0.internal.example.com`). Or, you can override this key with the [`METRICS_ADDRESS`](/docs/reference/metrics#metrics-address) environment variable. +1. In your Core configuration, expose the Core metrics endpoint on a private address reachable by the Enterprise Console: - We do not recommend exposing this endpoint to public traffic as it can contain potentially sensitive information. - - ::: - -### Embedded Prometheus - -Pomerium Enterprise supports an embedded Prometheus instance that you configure only in Pomerium. Use this option if you don't want to maintain an external Prometheus instance, or if you're testing metrics. + ```yaml title="pomerium.yaml" + metrics_address: 10.0.0.10:9091 + ``` -To configure an embedded Prometheus instance, add the [`prometheus_data_dir`](/docs/deploy/enterprise/configure#prometheus-data-dir) key and file path in your Pomerium Enterprise configuration file: +1. In your Enterprise Console configuration, set a Prometheus data directory: -```yaml title="pomerium-enterprise.yaml" -prometheus_data_dir: /var/lib/pomerium-console/tsdb -``` + ```yaml title="pomerium-enterprise.yaml" + prometheus_data_dir: /var/lib/pomerium-console/tsdb + ``` -:::note + The directory can be any absolute path the Console process can write to. Do not set `prometheus_url` when you use `prometheus_data_dir`; the embedded and external Prometheus modes are mutually exclusive. If you installed with OS packages, `/var/lib/pomerium-console/tsdb` matches the default service layout. -The directory path can be any location that you have permissions to write to. This example uses the default location created if you install Pomerium Enterprise with the [OS Packages](/docs/deploy/enterprise/install#install-pomerium-enterprise) option. +1. Optionally expose the embedded Prometheus server: -::: + ```yaml title="pomerium-enterprise.yaml" + prometheus_listen_addr: 127.0.0.1:9090 + ``` -## Test the configuration +## Verify Metrics -To view metrics collected by Prometheus, you must restart the Pomerium and Pomerium Enterprise services. +Restart Pomerium Core, the Enterprise Console, and Prometheus if you changed their configuration. In the Enterprise Console, select **Traffic**. You should see route traffic metrics collected from your Pomerium deployment: - ![Traffic Data in Pomerium Enterprise](./img/metrics/traffic-dashboard.png) +![Traffic Data in Pomerium Enterprise](./img/metrics/traffic-dashboard.png) To view monitoring metrics for an external data source: 1. Select **External Data**. 1. Select an external data source. -1. Select the **Metrics** tab. You should see monitoring data collected from the external data source record: +1. Select the **Metrics** tab. + +You should see monitoring data collected from the external data source record: - ![External Data Source in Pomerium Enterprise](./img/metrics/external-data-sources-dashboard.png) +![External Data Source in Pomerium Enterprise](./img/metrics/external-data-sources-dashboard.png) diff --git a/content/docs/deploy/enterprise/configure.mdx b/content/docs/deploy/enterprise/configure.mdx index 92e4c9d00..094852914 100644 --- a/content/docs/deploy/enterprise/configure.mdx +++ b/content/docs/deploy/enterprise/configure.mdx @@ -1,5 +1,6 @@ --- title: Configuration +sidebar_position: 3 lang: en-US keywords: [ @@ -18,7 +19,21 @@ keywords: import TabItem from '@theme/TabItem'; import Tabs from '@theme/Tabs'; -The **Configure** section of the Pomerium Enterprise Console houses settings that affect the entirety of the Console environment (across all Namespaces). Adjust these settings with care. +The Enterprise Console accepts runtime settings from a configuration file or environment variables. These settings control the Console process itself: licensing, database access, Databroker access, bootstrap administrators, TLS, metrics, and diagnostics. + +Core settings, route settings, and policy settings are still managed through Pomerium Core configuration, the Enterprise Console UI, the Enterprise API, or Terraform. For example, Core uses [`metrics_address`](/docs/reference/metrics#metrics-address), while the Console uses `metrics_addr` / `METRICS_ADDR` for its own metrics endpoint. + +## Metrics Endpoint {#metrics-addr} + +The Console exposes its own Prometheus metrics endpoint with `metrics_addr` or `METRICS_ADDR`. This is separate from Pomerium Core's [`metrics_address`](/docs/reference/metrics#metrics-address) setting. + +## Feedback Widget {#disable-feedback-widget} + +Use `disable_feedback_widget` or `DISABLE_FEEDBACK_WIDGET` to remove the third-party feedback widget from the Enterprise Console. + +## Validation Mode {#validation-mode} + +Use `validation_mode` or `VALIDATION_MODE` to control how strictly the Console validates configuration changes before applying them. ## Outbound network requirements @@ -35,39 +50,44 @@ The keys listed below can be applied in Pomerium Console's `config.yaml` file or All values are case sensitive unless otherwise noted. +The tables below cover the customer-facing settings the binary accepts. Operator-only flags (`--debug-addr`, `--dangerously-disable-all-namespace-checks`) are intentionally omitted. Hidden flags surfaced for Pomerium Support guidance, like `DEBUG_CONFIG_DUMP`, are documented here but do not appear in `pomerium-console serve --help`. + | Name | Description | Default Value | | :-- | :-- | --- | | #ADMINISTRATORS | A list of user ids, names or emails to make administrators. Useful for bootstrapping. | none | -| #AUDIENCE | A list of audiences for verifying the signing key. | `[]` | +| #AUDIENCE | Required: A list of audiences for verifying the signing key. The Console refuses to start if unset. | none | | #AUTHENTICATE_SERVICE_URL | (deprecated) Authenticate service URL is not required in the Console configuration. For Device Enrollment, use the [external route URL](/docs/reference/routes/from). | none | | #BIND_ADDR | The address the Pomerium Console will listen on. | `:8701` | | #BOOTSTRAP_SERVICE_ACCOUNT | Enable the bootstrap service account. | `false` | | #CACHE_DIR | Directory to use for caching. | Cache only in memory. | +| #CHANGESET_REQUIRED_APPROVAL_COUNT | How many approvals are required to deploy a changeset. Setting to `0` disables changesets entirely; any value `> 0` enables changesets and requires that many approvals. | `0` | | #CUSTOMER_ID | The customer ID | none | -| #DATABASE_ENCRYPTION_KEY | The base64-encoded encryption key for encrypting sensitive data in the database. | none | +| #DATABASE_ENCRYPTION_KEY | Required: The base64-encoded encryption key for encrypting sensitive data in the database. The Console refuses to start if unset (or use a `*_FILE` / `*_RAW_FILE` variant). | none | | #DATABASE_ENCRYPTION_KEY_FILE | Loads base64-encoded `database-encryption-key` secret from a file. | none | | #DATABASE_ENCRYPTION_KEY_RAW_FILE | Loads `database-encryption-key` secret from a raw file. Setting this option from a raw file does not require base64 encoding. | none | | #DATABASE_URL | The database Pomerium Enterprise Console will use. | `postgresql://pomerium:pomerium`
`@localhost:5432/dashboard?sslmode=disable` | | #DATABROKER_SERVICE_URL | Databroker service URL for Console to reach Core. Leave unset in the default single-process deployment (Console uses `http://localhost:5443`). Set only when the databroker runs on another host/port or Core is split/remote. | `http://localhost:5443` | +| #DATABROKER_SERVICE_URLS | Comma-separated list of databroker service URLs for highly-available Core deployments. Use instead of `DATABROKER_SERVICE_URL` when Core runs more than one databroker replica. | none | | #DEBUG_CONFIG_DUMP | Dumps the Databroker configuration. This is a debug option to be used only when specified by Pomerium Support. | `false` | -| #DISABLE_FEEDBACK_WIDGET | Disables third-party feedback widget and removes it from the Enterprise Console. | `false` | -| #DISABLE_REMOTE_DIAGNOSTICS | Disable remote diagnostics. | `true` | +| #DISABLE_FEEDBACK_WIDGET | Disables third-party feedback widget and removes it from the Enterprise Console. | `false` | +| #DISABLE_REMOTE_DIAGNOSTICS | Disable remote diagnostics. Setting `true` requires a license entitlement; the Console exits with `your license does not permit disabling remote diagnostics` if the entitlement is absent. | `false` | | #DISABLE_VALIDATION | (deprecated, please update your configuration to set `VALIDATION_MODE=none` instead) Disable config validation. | `false` | | #GRPC_ADDR | The address to listen for gRPC on. | `:8702` | -| #HELP | help for serve | `false` | | #LICENSE_KEY | Required: Provide the license key issued by your account team. | none | +| #LICENSE_KEY_VALIDATE_OFFLINE | Validate the license key offline, without contacting the Pomerium license server. Required for air-gapped deployments; the license must be issued with offline validation enabled. | `false` | +| #METRICS_ADDR | Address where the Console exposes its `/metrics` endpoint in Prometheus format. | `127.0.0.1:9092` | | #OVERRIDE_CERTIFICATE_NAME | Overrides the certificate name used for the databroker connection. | none | -| #PROMETHEUS_DATA_DIR | The path to Prometheus data | none | +| #PROMETHEUS_DATA_DIR | Absolute path for embedded Prometheus data. Do not set with `PROMETHEUS_URL`; embedded and external Prometheus modes are mutually exclusive. | none | | #PROMETHEUS_LISTEN_ADDR | When set, embedded Prometheus listens at this address. Set as `host:port` | `127.0.0.1:9090` | | #PROMETHEUS_SCRAPE_INTERVAL | The Prometheus scrape frequency | `10s` | -| #PROMETHEUS_URL | The URL to access the Prometheus metrics server. | none | -| #SHARED_SECRET | The base64-encoded secret for signing JWTs, shared with OSS Pomerium. | none | +| #PROMETHEUS_URL | URL for an external Prometheus server. Do not set with `PROMETHEUS_DATA_DIR`; external and embedded Prometheus modes are mutually exclusive. | none | +| #SHARED_SECRET | Required: The base64-encoded secret for signing JWTs, shared with OSS Pomerium. The Console refuses to start if unset (or use a `*_FILE` / `*_RAW_FILE` variant). | none | | #SHARED_SECRET_FILE | Loads base64-encoded `shared-secret` from a file. | none | | #SHARED_SECRET_RAW_FILE | Loads `shared-secret` from a raw file. Setting this option from a raw file does not require base64 encoding. | none | -| #SIGNING_KEY | (deprecated) base64-encoded signing key (public or private) for verifying JWTs. This option is no longer required in the Console config. | none | +| #SIGNING_KEY | (deprecated) base64-encoded signing key (public or private) for verifying JWTs. Usually omitted when the Console can verify identity headers from Pomerium's JWKS endpoint; local self-signed examples may set it to match Core. | none | | #SIGNING_KEY_FILE | Loads base64-encoded `signing-key` secret from a file. | none | | #SIGNING_KEY_RAW_FILE | Loads `signing-key` secret from a raw file. Setting this option from a raw file does not require base64 encoding. | none | | #TLS_CA | base64-encoded string of tls-ca | none | @@ -79,53 +99,56 @@ All values are case sensitive unless otherwise noted. | #TLS_KEY | base64-encoded string of tls-key | none | | #TLS_KEY_FILE | file storing tls-key | none | | #USE_STATIC_ASSETS | When false, forward static requests to `localhost:3000`. | `true` | -| #VALIDATION_MODE | Validates config based on the specified mode: `full` (The default config validation mode), `static` (A "light" validation mode that catches most config issues), or `none` (Disables config validation). | `full` | +| #VALIDATION_MODE | Validates config based on the specified mode: `full` (The default config validation mode), `static` (A "light" validation mode that catches most config issues), or `none` (Disables config validation). | `full` |
| Name | Description | Default Value | | :-- | :-- | --- | -| #administrators | A list of user ids, names or emails to make administrators. Useful for bootstrapping. | none | -| #audience | A list of audiences for verifying the signing key. | `[]` | -| #authenticate_service_url | (deprecated) Authenticate service URL is not required in the Console configuration. For Device Enrollment, use the [external route URL](/docs/reference/routes/from). | none | -| #bind_addr | The address the Pomerium Console will listen on. | `:8701` | -| #bootstrap_service_account | Enable the bootstrap service account. | `false` | -| #cache_dir | Directory to use for caching. | Cache only in memory. | -| #customer_id | The customer ID | none | -| #database_encryption_key | The base64-encoded encryption key for encrypting sensitive data in the database. | none | -| #database_encryption_key_file | Loads base64-encoded `database-encryption-key` secret from a file. | none | -| #database_encryption_key_raw_file | Loads `database-encryption-key` secret from a raw file. Setting this option from a raw file does not require base64 encoding. | none | -| #database_url | The database Pomerium Enterprise Console will use. | `postgresql://pomerium:pomerium`
`@localhost:5432/dashboard?sslmode=disable` | -| #databroker_service_url | Databroker service URL for Console to reach Core. Leave unset in the default single-process deployment (Console uses `http://localhost:5443`). Set only when the databroker runs on another host/port or Core is split/remote. | `http://localhost:5443` | -| #debug_config_dump | Dumps the Databroker configuration. This is a debug option to be used only when specified by Pomerium Support. | `false` | -| #disable_feedback_widget | Disables third-party feedback widget and removes it from the Enterprise Console. | `false` | -| #disable_remote_diagnostics | Disable remote diagnostics. | `true` | -| #disable_validation | (deprecated, please update your configuration to set `validation_mode=none` instead) Disable config validation. | `false` | -| #grpc_addr | The address to listen for gRPC on. | `:8702` | -| #help | help for serve | `false` | -| #license_key | Required: Provide the license key issued by your account team. | none | -| #override_certificate_name | Overrides the certificate name used for the databroker connection. | none | -| #prometheus_data_dir | The path to Prometheus data | none | -| #prometheus_listen_addr | When set, embedded Prometheus listens at this address. Set as `host:port` | `127.0.0.1:9090` | -| #prometheus_scrape_interval | The Prometheus scrape frequency | `10s` | -| #prometheus_url | The URL to access the Prometheus metrics server. | none | -| #shared_secret | The base64-encoded secret for signing JWTs, shared with OSS Pomerium. | none | -| #shared_secret_file | Loads base64-encoded `shared-secret` from a file. | none | -| #shared_secret_raw_file | Loads `shared-secret` from a raw file. Setting this option from a raw file does not require base64 encoding. | none | -| #signing_key | (deprecated) base64-encoded signing key (public or private) for verifying JWTs. This option is no longer required in the Console config. | none | -| #signing_key_file | Loads base64-encoded `signing-key` secret from a file. | none | -| #signing_key_raw_file | Loads `signing-key` secret from a raw file. Setting this option from a raw file does not require base64 encoding. | none | -| #tls_ca | base64-encoded string of tls-ca | none | -| #tls_ca_file | file storing tls-ca | none | -| #tls_cert | base64-encoded string of tls-cert | none | -| #tls_cert_file | file storing tls-cert | none | -| #tls_derive | Derives TLS server certificate for the console HTTPS and gRPC endpoints for the host specified by this option, using the CA derived from the shared key. Uses this CA to verify the server certificate presented by the Databroker gRPC TLS when the [`tls_derive`](/docs/reference/tls-derive) option is set in the Pomerium Core. | none | -| #tls_insecure_skip_verify | Disable remote hosts TLS certificate chain and hostname checks. | `false` | -| #tls_key | base64-encoded string of tls-key | none | -| #tls_key_file | file storing tls-key | none | -| #use_static_assets | When false, forward static requests to `localhost:3000`. | `true` | -| #validation_mode | Validates config based on the specified mode: `full` (The default config validation mode), `static` (A "light" validation mode that catches most config issues), or `none` (Disables config validation). | `full` | +| #administrators | A list of user ids, names or emails to make administrators. Useful for bootstrapping. | none | +| #audience | Required: A list of audiences for verifying the signing key. The Console refuses to start if unset. | none | +| #authenticate_service_url | (deprecated) Authenticate service URL is not required in the Console configuration. For Device Enrollment, use the [external route URL](/docs/reference/routes/from). | none | +| #bind_addr | The address the Pomerium Console will listen on. | `:8701` | +| #bootstrap_service_account | Enable the bootstrap service account. | `false` | +| #cache_dir | Directory to use for caching. | Cache only in memory. | +| #changeset_required_approval_count | How many approvals are required to deploy a changeset. Setting to `0` disables changesets entirely; any value `> 0` enables changesets and requires that many approvals. | `0` | +| #customer_id | The customer ID | none | +| #database_encryption_key | Required: The base64-encoded encryption key for encrypting sensitive data in the database. The Console refuses to start if unset (or use a `*_file` / `*_raw_file` variant). | none | +| #database_encryption_key_file | Loads base64-encoded `database-encryption-key` secret from a file. | none | +| #database_encryption_key_raw_file | Loads `database-encryption-key` secret from a raw file. Setting this option from a raw file does not require base64 encoding. | none | +| #database_url | The database Pomerium Enterprise Console will use. | `postgresql://pomerium:pomerium`
`@localhost:5432/dashboard?sslmode=disable` | +| #databroker_service_url | Databroker service URL for Console to reach Core. Leave unset in the default single-process deployment (Console uses `http://localhost:5443`). Set only when the databroker runs on another host/port or Core is split/remote. | `http://localhost:5443` | +| #databroker_service_urls | List of databroker service URLs for highly-available Core deployments. Use instead of `databroker_service_url` when Core runs more than one databroker replica. | none | +| #debug_config_dump | Dumps the Databroker configuration. This is a debug option to be used only when specified by Pomerium Support. | `false` | +| #disable_feedback_widget | Disables third-party feedback widget and removes it from the Enterprise Console. | `false` | +| #disable_remote_diagnostics | Disable remote diagnostics. Setting `true` requires a license entitlement; the Console exits with `your license does not permit disabling remote diagnostics` if the entitlement is absent. | `false` | +| #disable_validation | (deprecated, please update your configuration to set `validation_mode=none` instead) Disable config validation. | `false` | +| #grpc_addr | The address to listen for gRPC on. | `:8702` | +| #license_key | Required: Provide the license key issued by your account team. | none | +| #license_key_validate_offline | Validate the license key offline, without contacting the Pomerium license server. Required for air-gapped deployments; the license must be issued with offline validation enabled. | `false` | +| #metrics_addr | Address where the Console exposes its `/metrics` endpoint in Prometheus format. | `127.0.0.1:9092` | +| #override_certificate_name | Overrides the certificate name used for the databroker connection. | none | +| #prometheus_data_dir | Absolute path for embedded Prometheus data. Do not set with `prometheus_url`; embedded and external Prometheus modes are mutually exclusive. | none | +| #prometheus_listen_addr | When set, embedded Prometheus listens at this address. Set as `host:port` | `127.0.0.1:9090` | +| #prometheus_scrape_interval | The Prometheus scrape frequency | `10s` | +| #prometheus_url | URL for an external Prometheus server. Do not set with `prometheus_data_dir`; external and embedded Prometheus modes are mutually exclusive. | none | +| #shared_secret | Required: The base64-encoded secret for signing JWTs, shared with OSS Pomerium. The Console refuses to start if unset (or use a `*_file` / `*_raw_file` variant). | none | +| #shared_secret_file | Loads base64-encoded `shared-secret` from a file. | none | +| #shared_secret_raw_file | Loads `shared-secret` from a raw file. Setting this option from a raw file does not require base64 encoding. | none | +| #signing_key | (deprecated) base64-encoded signing key (public or private) for verifying JWTs. Usually omitted when the Console can verify identity headers from Pomerium's JWKS endpoint; local self-signed examples may set it to match Core. | none | +| #signing_key_file | Loads base64-encoded `signing-key` secret from a file. | none | +| #signing_key_raw_file | Loads `signing-key` secret from a raw file. Setting this option from a raw file does not require base64 encoding. | none | +| #tls_ca | base64-encoded string of tls-ca | none | +| #tls_ca_file | file storing tls-ca | none | +| #tls_cert | base64-encoded string of tls-cert | none | +| #tls_cert_file | file storing tls-cert | none | +| #tls_derive | Derives TLS server certificate for the console HTTPS and gRPC endpoints for the host specified by this option, using the CA derived from the shared key. Uses this CA to verify the server certificate presented by the Databroker gRPC TLS when the [`tls_derive`](/docs/reference/tls-derive) option is set in the Pomerium Core. | none | +| #tls_insecure_skip_verify | Disable remote hosts TLS certificate chain and hostname checks. | `false` | +| #tls_key | base64-encoded string of tls-key | none | +| #tls_key_file | file storing tls-key | none | +| #use_static_assets | When false, forward static requests to `localhost:3000`. | `true` | +| #validation_mode | Validates config based on the specified mode: `full` (The default config validation mode), `static` (A "light" validation mode that catches most config issues), or `none` (Disables config validation). | `full` |
diff --git a/content/docs/deploy/enterprise/enterprise.md b/content/docs/deploy/enterprise/enterprise.md index b668edc20..bcbb950de 100644 --- a/content/docs/deploy/enterprise/enterprise.md +++ b/content/docs/deploy/enterprise/enterprise.md @@ -1,113 +1,71 @@ --- title: Pomerium Enterprise -description: Learn what features come with Pomerium Enterprise, including a Console GUI where you can manage your policies, namespaces, groups, routes, and more. +description: Install, configure, and operate the self-hosted Pomerium Enterprise control plane for Pomerium Core clusters. +sidebar_position: 3 keywords: [ Pomerium Enterprise, - PPL Builder, - Console GUI, + Enterprise Console, + Enterprise API, + self-hosted control plane, namespaces, directory sync, - device management, - groups, - programmatic api, - branding, + service accounts, + metrics, + terraform, ] --- -import ClearIcon from '@mui/icons-material/Clear'; - # Pomerium Enterprise -Pomerium Enterprise is built on our open-source Pomerium Core offering. Pomerium Enterprise makes Pomerium easier to manage at scale, and adds additional functionality aimed at organizations with auditing, compliance, governance, and risk management needs. - -## Pomerium Enterprise Features - -Pomerium Enterprise comes with all the capabilities in Pomerium Core, plus the following features: +Pomerium Enterprise is the self-hosted control plane for Pomerium Core clusters. Core still runs in your environment and proxies traffic to your applications. Enterprise adds the Console, API, centralized configuration, governance, audit history, and operational visibility for teams that need to manage Pomerium at scale. -### Enterprise Console +## Enterprise Console -The **Enterprise Console** provides a dashboard where you can view traffic and logs, manage routes and policies, import external data, configure global and namespaced settings, and more. +The Enterprise Console is the browser-based management UI and API surface for Enterprise deployments. Use it to manage global settings, namespaces, routes, policies, certificates, external data, directory sync, sessions, service accounts, deployment history, and operational dashboards. -![An overview animation of the Pomerium Enterprise Console](./img/enterprise-console-overview.gif) +## Start Here -### Enterprise API - -The **Enterprise API** helps you manage your configuration with your preferred programming language or infrastructure management tool. +| Goal | Page | Use it for | +| :-- | :-- | :-- | +| Try Enterprise locally | [Quickstart](/docs/deploy/enterprise/quickstart) | Run Core, the Enterprise Console, PostgreSQL, and a test app with Docker Compose. | +| Install Enterprise | [Install](/docs/deploy/enterprise/install) | Choose Docker, OS packages, Kubernetes with Kustomize, or Kubernetes with Terraform. | +| Set Console options | [Configuration](/docs/deploy/enterprise/configure) | Configure bootstrap admins, licensing, database access, Databroker access, TLS, and runtime flags. | +| Enable traffic metrics | [Metrics](/docs/deploy/enterprise/configure-metrics) | Connect Enterprise to external Prometheus or use the embedded Prometheus mode. | +| Manage resources as code | [Terraform](/docs/deploy/terraform) | Configure Core, Enterprise, or Zero resources with the Pomerium Terraform provider. | +| Upgrade safely | [Upgrading](/docs/deploy/upgrading) | Review version-specific Core and Enterprise upgrade notes. | -Everything that is manageable in the Enterprise Console can also be driven programmatically through the [Enterprise API](/docs/internals/management-api-enterprise). +## How Enterprise Fits With Core -### Session Management +An Enterprise deployment has three required pieces: -The **Sessions** dashboard allows you to view and manage sessions within your organization. Admin members can export session data and revoke sessions in real time. +1. **Pomerium Core** is the data plane. It authenticates users, authorizes requests, proxies traffic, stores Databroker state, and protects the Console route. +1. **Pomerium Enterprise Console** is the self-hosted management plane. It stores its own data in PostgreSQL, connects to the Core Databroker, and exposes the Console UI and Enterprise API. +1. **A protected Console route** in Core sends authenticated users to the Console and passes identity headers so Enterprise can authorize administrators and namespace members. -![View and manage sessions in the Enterprise Console's Sessions dashboard](./img/manage-sessions.png) +Keep Core and Enterprise Console on the same minor version. For example, Core `v0.32.x` with Enterprise Console `v0.32.x` is supported; Core `v0.32.x` with Enterprise Console `v0.31.x` is not. The Docker examples in these docs use Pomerium Core `v0.32.6` and Enterprise Console `v0.32.1`. -:::enterprise +:::caution -Ready to upgrade to Pomerium Enterprise? [**Contact us**](https://www.pomerium.com/enterprise-sales/) today to get started. +For the v0.32 upgrade path, upgrade the Enterprise Console before upgrading Core. See [Upgrading Pomerium Enterprise](/docs/deploy/upgrading#upgrading-pomerium-enterprise). ::: -### Namespaces and Self-Service - -The **Namespaces** dashboard is where you configure user roles and permissions for routes, policies, and the Enterprise Console itself. Once you've configured a [Namespace](/docs/internals/namespacing), members of that namespace can self-manage access to the infrastructure they build from or depend on. - -Pomerium Enterprise allows you to import groups defined by your identity provider. This allows you to build stable policies that don't require adjustments as your company changes. - -![Manage Namespaces in the Enterprise Console's Namespaces dashboard](./img/manage-namespaces.gif) - -### Clusters - -In the **Namespaces** dashboard you can also add [**Clusters**](/docs/internals/clusters-for-enterprise) — independent installations of [Pomerium Core](/docs/deploy/core), each with their own set of routes, certificates, and policies. +## Enterprise Capabilities -![Add Cluster](../../internals/img/clusters/enterprise-add-cluster.png) +| Area | Enterprise adds | +| :-- | :-- | +| Central management | The [Enterprise Console](/docs/deploy/enterprise/install) and [Enterprise API](/docs/internals/management-api-enterprise) for managing routes, policies, certificates, settings, and namespaces. | +| Delegated administration | [Namespaces](/docs/internals/namespacing) for RBAC and self-service management across teams. | +| Identity context | [Directory Sync](/docs/integrations/user-standing/directory-sync), [Device Identity](/docs/integrations/device-context/device-identity), and [External Data Sources](/docs/capabilities/integrations) for richer policy context. | +| Automation | [Service accounts](/docs/capabilities/service-accounts), the Enterprise API, and [Terraform](/docs/deploy/terraform) for infrastructure-as-code workflows. | +| Operations | [Session management](/docs/internals/sessions), [audit logs](/docs/capabilities/audit-logs), deployment history, and [metrics](/docs/deploy/enterprise/configure-metrics). | +| User experience | [Custom branding](/docs/capabilities/branding), [user impersonation](/docs/capabilities/impersonation), and self-service access workflows. | -### Deployment History and Audit Logs +## Setup Sequence -The **Deployments** dashboard allows you to view and export change logs from the Enterprise Console. Select a change to review which user applied it and when. - -![View deployments in the Enterprise Console's Deployments dashboard](./img/deployments-dashboard.gif) - -### Directory Sync - -Pomerium Enterprise's [**Directory Sync**](/docs/integrations/user-standing/directory-sync) feature allows you to import your identity provider's directory data. After a successful sync, you can use your internal groups and teams data when building policies. ![Viewing the Identity Providers settings for a directory sync in the Enterprise Console](./img/directory-sync-2.png) - -### External Data Sources - -In the **External Data** dashboard, you can import, view, and manage [external data sources](/docs/capabilities/integrations). After a successful sync, you can use data unique to your organization to serve as context in your authorization policies. ![Using the External Data Source Record type in a policy](./img/external-data-as-context.gif) - -## Pomerium Enterprise features comparison - -| Features | Pomerium Core | Pomerium Enterprise | -| :-- | :-- | :-- | -| Identity-based Access | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| SSO Support | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| Declarative Authorization Policy | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| TCP Support | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| Enterprise Console | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Enterprise API](/docs/internals/management-api-enterprise) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Session Management](/docs/internals/metrics) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Namespaces](/docs/internals/namespacing) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Directory Sync](/docs/integrations/user-standing/directory-sync) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [User Impersonation](/docs/capabilities/impersonation) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Deployment History](/docs/internals/metrics) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Device Identity](/docs/integrations/device-context/device-identity) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Custom Branding](/docs/capabilities/branding) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Service Accounts](/docs/capabilities/service-accounts) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [Metrics](/docs/internals/metrics) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | -| [External Data Sources](/docs/capabilities/integrations) | | ![Pomerium checkmark](./img/pomerium-checkmark.svg) | - -## Next Steps - -:::enterprise - -Already upgraded to Pomerium Enterprise, but need some help setting up the Enterprise Console? - -The following docs can help: - -- [**Install Pomerium Enterprise**](/docs/deploy/enterprise/install) -- [**Pomerium Enterprise Configuration**](/docs/deploy/enterprise/configure) -- [**Pomerium Enterprise Quickstart**](/docs/deploy/enterprise/quickstart) - -::: +1. Install or confirm a working [Pomerium Core](/docs/deploy/core) deployment. +1. Install the Enterprise Console with [Docker, OS packages, Kubernetes, or Terraform](/docs/deploy/enterprise/install). +1. Configure the Console database, license key, shared secret, Databroker connection, and initial administrators. +1. Protect the Console route with Core and enable identity headers. +1. Add optional operations features such as [metrics](/docs/deploy/enterprise/configure-metrics), [Terraform configuration](/docs/deploy/terraform), directory sync, external data, and service accounts. diff --git a/content/docs/deploy/enterprise/install.mdx b/content/docs/deploy/enterprise/install.mdx index 169cd6bd9..852d1d2db 100644 --- a/content/docs/deploy/enterprise/install.mdx +++ b/content/docs/deploy/enterprise/install.mdx @@ -1,6 +1,10 @@ --- -title: Install -description: Install Pomerium Enterprise Console alongside Pomerium Core using Docker, Kubernetes, or system packages. +# cSpell:ignore makecache disablerepo enablerepo lsb tfvars + +title: Install Pomerium Enterprise +sidebar_label: Install +description: Install the Pomerium Enterprise Console with Docker, OS packages, Kubernetes Kustomize, or Kubernetes Terraform. +sidebar_position: 2 lang: en-US keywords: [ @@ -18,132 +22,128 @@ keywords: ] --- +import CodeBlock from '@theme/CodeBlock'; import TabItem from '@theme/TabItem'; import Tabs from '@theme/Tabs'; -Pomerium offers several ways to install the Enterprise Console to suit your organization's needs. Watch the video below for a quick primer on deploying Pomerium Core and Enterprise, or view the sections below for specific installation instructions. +import Config from '!!raw-loader!@site/k8s/config-template/config.yaml'; +import Ingress from '!!raw-loader!@site/k8s/config-template/ingress-console.yaml'; +import Kustomization from '!!raw-loader!@site/k8s/config-template/kustomization.yaml'; +import Secret from '!!raw-loader!@site/k8s/config-template/secret.yaml'; + +# Install Pomerium Enterprise + +Install the Enterprise Console alongside a working Pomerium Core deployment. Use the [quickstart](/docs/deploy/enterprise/quickstart) for a local Docker Compose trial; use this page when you are choosing a production install method. + +Before installing Enterprise, make sure you have: -