Skip to main content

Configurations

Look up the environment variables that configure an Edge PDP, the permitio/pdp-v2 policy decision point (PDP) container you run in your network. This page is for operators who deploy and tune Edge PDPs. The Cloud PDP is managed by Permit and doesn't read these variables.

How PDP configuration works​

  • Pass variables to the container. Set each variable with --env NAME=value in docker run, or in the env section of your Kubernetes deployment. See Run an Edge PDP with Docker for a docker run command that sets PDP_API_KEY and PDP_DEBUG.
  • PDP_ prefix: settings of the PDP itself.
  • OPAL_ prefix: settings of the Open Policy Administration Layer (OPAL) client inside the PDP. Every OPAL client configuration is available with the OPAL_ prefix.
  • Settings controlled by Permit: at startup, the PDP fetches part of its configuration from the Permit control plane. Variables marked "controlled by Permit" below are set that way. Changing them can stop the PDP from connecting to Permit.
PDP versions follow Semantic Versioning

PDP versions follow Semantic Versioning. A patch release, for example from 1.2.3 to 1.2.4, doesn't introduce breaking changes.

Required and common settings​

VariableDefaultSet it to
PDP_API_KEYNone (required)Your environment API key
PDP_DEBUGUnsetTrue to add debug information to decision logs from this PDP
PDP_CACHE_STOREnonein-memory or redis to cache decisions
PDP_ENABLE_MONITORINGFalseTrue to enable Datadog APM tracing
ALL_PROXYUnsetYour HTTP proxy URL, when the PDP reaches Permit through a proxy

Connection to Permit​

PDP_API_KEY​

Default: none. This variable is required.

The API key the PDP uses to authenticate to Permit.io. Use an environment-level API key. See API keys.

PDP_CONTROL_PLANE​

Default: https://api.permit.io

The URL of the Permit.io control plane.

PDP_CONTROL_PLANE_TIMEOUT​

Default: 75

Timeout in seconds for requests to the control plane. The timeout also applies to requests the PDP proxies for the Send Consistent Updates APIs.

PDP_SHARD_ID​

Default: None

The shard ID of this PDP. The control plane uses the shard ID to identify the PDP.

PDP_PING_INTERVAL​

Default: 10

The interval, in seconds, between pings to the control plane.

PDP_CONTROL_PLANE_PDP_DELTAS_API​

Default: controlled by Permit.

The URL of the Permit.io PDP deltas API.

PDP_CONTROL_PLANE_RELAY_API​

Default: controlled by Permit.

The URL of the Permit.io relay API.

PDP_CONTROL_PLANE_RELAY_JWT_TIER​

Default: controlled by Permit.

The URL of the Permit.io service that issues relay API JSON Web Tokens (JWTs).

PDP_BACKEND_SERVICE_URL​

Default: {PDP_CONTROL_PLANE}/v1 (https://api.permit.io/v1)

The Permit.io API URL that the PDP sends proxied API requests to. Controlled by Permit: changing the value can stop proxied requests from working.

PDP_BACKEND_LEGACY_URL​

Default: {PDP_CONTROL_PLANE}/sdk (https://api.permit.io/sdk)

The legacy Permit.io API URL that the PDP sends proxied requests to. Controlled by Permit: changing the value can stop proxied requests from working.

PDP_REMOTE_CONFIG_ENDPOINT​

Default: /v2/pdps/me/config

The control plane route the PDP calls at startup to fetch its configuration and policy data topics.

PDP_REMOTE_STATE_ENDPOINT​

Default: /v2/pdps/me/state

The control plane route the PDP calls to report state changes.

PDP server and health checks​

PDP_HOST​

Default: 0.0.0.0

The address the PDP server listens on. Set :: to listen on IPv6.

PDP_PORT​

Default: 7000 in the permitio/pdp-v2 image

The port the PDP server listens on inside the container. Map it to a host port with docker run -p, for example -p 7766:7000.

Added in PDP v0.9.0. PDP versions before v0.9.0 use UVICORN_PORT instead.

PDP_HEALTHCHECK_TIMEOUT​

Default: 3

Timeout in seconds for health checks. A health check response that takes longer fails.

PDP_USE_NEW_AUTHORIZED_USERS​

Default: false

Feature flag that enables the new implementation of the authorized users API.

Added in PDP v0.9.0.

PDP_ALLOW_METRICS_UNAUTHENTICATED​

Default: False

When True, the /metrics endpoint is accessible without authentication.

Debug mode and logging​

PDP_DEBUG​

Default: unset

Enables Debug Mode, which adds debug attributes to Open Policy Agent (OPA) policy queries and to decision logs:

ValueBehavior
Unset (None)The PDP uses the Debug Mode setting from the Permit environment configuration.
TrueDebug Mode is on for this PDP.
FalseDebug Mode is off for this PDP.
Debug Mode adds latency

Debug Mode increases policy evaluation latency. Turn off Debug Mode for PDPs that serve production traffic.

See Debug Mode for how to configure Debug Mode for a whole environment.

PDP_DECISION_LOG_DEBUG_INFO​

Default: True

When True, the PDP logs more data for each allow decision.

PDP_PRINT_CONFIG_ON_STARTUP​

Default: False

When True, the PDP prints its full configuration at startup.

PDP_ENABLE_MONITORING​

Default: False

When True, the PDP sends Datadog APM traces.

PDP_TEMP_LOG_FORMAT​

Default: <green>{time}</green> | {process} | <blue>{name: <40}</blue>|<level>{level:^6} | {message}</level>

The log format the PDP uses until it receives its configuration from Permit. Change the format to remove colors, for example.

PDP_CENTRAL_LOG_DRAIN_URL​

Default: https://listener.logz.io:8071

The URL for centralized logging.

PDP_CENTRAL_LOG_DRAIN_TIMEOUT​

Default: 5

Timeout in seconds for the centralized log drain.

PDP_CENTRAL_LOG_TOKEN​

Default: None

The token for centralized logging.

OPA client​

PDP_OPA_URL​

Default: http://localhost:8181

The URL of the OPA process inside the PDP.

Added in PDP v0.9.0.

PDP_OPA_CLIENT_QUERY_TIMEOUT​

Default: 1

Timeout in seconds for querying OPA for an allow decision. The meaning of 0 depends on the PDP version:

PDP version0 means
0.8.x and earlierNo timeout
0.9.0 and laterA timeout of 0 seconds

PDP_OPA_CLIENT_FAILURE_THRESHOLD​

Default: 0.1

The fraction of failed OPA requests that fails the PDP health check.

PDP_OPA_CLIENT_FAILURE_THRESHOLD_INTERVAL​

Default: 60

The interval, in seconds, over which the PDP calculates the failure threshold.

PDP_OPA_CONFIG_FILE_PATH​

Default: ~/opa/config.yaml

The path of the OPA configuration file in the container.

PDP_OPA_AUTH_POLICY_FILE_PATH​

Default: ~/opa/basic-authz.rego

The path of the OPA authorization policy (a Rego file) in the container.

PDP_OPA_BEARER_TOKEN_REQUIRED​

Default: True

When True, every API call to OPA must include a bearer token (the value of CLIENT_TOKEN).

Decision logs​

PDP_OPA_DECISION_LOG_ENABLED​

Default: True

When True, the PDP uploads OPA decision logs to Permit.io, where they appear in the audit log.

PDP_OPA_DECISION_LOG_CONSOLE​

Default: False

When True, the PDP also prints OPA decision logs to the console. Applies only when PDP_OPA_DECISION_LOG_ENABLED is True.

PDP_OPA_DECISION_LOG_INGRESS_ROUTE​

Default: /v1/decision_logs/ingress

The route on Permit.io that decision logs are uploaded to.

PDP_OPA_DECISION_LOG_INGRESS_BACKEND_TIER_URL​

Default: None. Controlled by Permit.

The URL that decision logs are uploaded to.

PDP_OPA_DECISION_LOG_MIN_DELAY​

Default: 1

The minimum time, in seconds, between decision log uploads. When an upload fails, the PDP retries with exponential backoff up to PDP_OPA_DECISION_LOG_MAX_DELAY.

PDP_OPA_DECISION_LOG_MAX_DELAY​

Default: 10

The maximum time, in seconds, between decision log uploads.

PDP_OPA_DECISION_LOG_UPLOAD_SIZE_LIMIT​

Default: 65536

The size limit, in bytes, of one decision log upload. OPA splits uploads into chunks that fit the limit.

Trino authorization​

PDP_ALLOW_UNAUTHENTICATED_TRINO​

Default: False

When True, the PDP serves its Trino authorization routes without authentication, so clients can call them without an API key.

Unauthenticated Trino routes

Trino doesn't support passing an API key or credentials to external authorization endpoints. To use the PDP with Trino, you must set PDP_ALLOW_UNAUTHENTICATED_TRINO=True, which exposes the PDP's Trino routes (such as /trino/allowed, /trino/row-filter, and /trino/batch-column-masking) without authentication.

Anyone who can reach those routes can query your authorization decisions. Deploy the PDP behind a firewall or in a trusted network that only the Trino cluster can reach, and never expose the PDP to the public internet. Follow the Trino issue for API key support in Trino.

PDP_TRINO_AUTHZ_CONFIG_PATH​

Default: /app/config/trino-authz.yaml

The absolute path of the YAML file that defines Trino row filters and column masking policies. If the file is missing or fails to parse, the PDP starts without Trino row filter and column masking rules.

See the Trino integration.

Local facts and data updates​

PDP_LOCAL_FACTS_WAIT_TIMEOUT​

Default: 10

When the SDK sends facts through the PDP (Send Consistent Updates), the time in seconds the PDP waits for the facts to apply.

PDP_LOCAL_FACTS_TIMEOUT_POLICY​

Default: ignore

What the PDP does when a data update doesn't apply within PDP_LOCAL_FACTS_WAIT_TIMEOUT:

ValueBehavior
ignoreRespond immediately.
failRespond with HTTP status 424.

PDP_DATA_UPDATE_CALLBACKS​

Default: []

A JSON list of callbacks the PDP calls when its data is updated. Each entry has a url, an optional key, and an optional config with the HTTP method, headers, and body. For example:

[
{
"url": "http://example.com/callback",
"key": "example",
"config": {
"headers": {
"Authorization": "Bearer token"
},
"method": "GET",
"data": {
"key": "value"
}
}
}
]

When an entry has no config, the PDP sends a POST request with a JSON content type. The variable must be valid JSON.

For the full schema, see the CallbackEntry model in OPAL.

Callbacks add sync latency

The PDP calls each callback as part of a data update, so a slow callback endpoint delays data synchronization. Size the callback endpoint for your data update rate.

Cache​

PDP_CACHE_STORE​

Default: none

The cache store for PDP decisions: none, in-memory, or redis. See PDP caching mechanism.

Added in PDP v0.9.0.

PDP_CACHE_TTL​

Default: 3600

Time to live, in seconds, of cached items.

Added in PDP v0.9.0.

PDP_CACHE_MEMORY_CAPACITY​

Default: 128

Memory capacity, in MiB, of the in-memory cache. Applies when PDP_CACHE_STORE is in-memory.

Added in PDP v0.9.0.

PDP_CACHE_REDIS_URL​

Default: "" (empty string)

The Redis connection URL. Applies when PDP_CACHE_STORE is redis.

Added in PDP v0.9.0.

Horizon service​

Horizon is the internal Python service in the PDP. The PDP server starts Horizon, checks its health, and restarts it after repeated health check failures.

PDP_HORIZON_PORT​

Default: 7001

The port of the Horizon service inside the container.

Added in PDP v0.9.0.

PDP_HORIZON_CLIENT_TIMEOUT​

Default: 60

Timeout in seconds for requests from the PDP server to Horizon.

Added in PDP v0.9.0.

PDP_HORIZON_NICENESS​

Default: 10

The process niceness of Horizon. Values range from -20 (highest priority) to 19 (lowest priority), and 0 is neutral. A higher value makes Horizon yield CPU to other processes, such as OPA, sooner.

Added in PDP v0.9.0.

PDP_HORIZON_HEALTH_CHECK_TIMEOUT​

Default: 1

Timeout in seconds for one Horizon health check. A health check that takes longer fails.

Added in PDP v0.9.0.

PDP_HORIZON_HEALTH_CHECK_INTERVAL​

Default: 5

The interval, in seconds, between Horizon health checks.

Added in PDP v0.9.0.

PDP_HORIZON_HEALTH_CHECK_FAILURE_THRESHOLD​

Default: 12

The number of consecutive failed health checks after which the PDP restarts Horizon.

Added in PDP v0.9.0.

PDP_HORIZON_STARTUP_DELAY​

Default: 5

The delay, in seconds, after startup before the PDP starts Horizon health checks.

Added in PDP v0.9.0.

PDP_HORIZON_RESTART_INTERVAL​

Default: 1

The interval, in seconds, between Horizon restart attempts.

Added in PDP v0.9.0.

PDP_HORIZON_TERMINATION_TIMEOUT​

Default: 30

The time, in seconds, the PDP waits for Horizon to shut down during a stop or restart. After this timeout, the PDP terminates Horizon forcefully.

Added in PDP v0.9.0.

OPAL configurations​

These are the OPAL client settings you are most likely to change. The OPAL documentation lists the rest.

OPAL_SERVER_URL​

Default: controlled by Permit.

The URL of the OPAL server.

OPAL_SERVER_WS_URL​

Default: OPAL_SERVER_URL with https replaced by wss. Controlled by Permit.

The WebSocket URL of the OPAL server.

OPAL_CLIENT_TOKEN​

Default: controlled by Permit. The PDP fetches the token from the control plane at startup.

The token the PDP uses to authenticate to the OPAL server.

OPAL_INLINE_OPA_ENABLED​

Default: True

When True, OPAL runs OPA inside the PDP container. Controlled by Permit.

OPAL_INLINE_OPA_LOG_FORMAT​

Default: http in the permitio/pdp-v2 image

The format of OPA logs:

ValueLogs
noneNo OPA logs
minimalThe event name only
httpThe HTTP method, path, and status code
fullThe entire data returned

OPAL_INLINE_CEDAR_ENABLED​

Default: True

When True, OPAL runs the Cedar agent inside the PDP container. Controlled by Permit.

OPAL_INLINE_CEDAR_LOG_FORMAT​

Default: none

The format of Cedar logs. Accepts the same values as OPAL_INLINE_OPA_LOG_FORMAT.

OPAL_FETCHING_WORKER_COUNT​

Default: 6

The number of workers that fetch data concurrently.

OPAL_FETCHING_CALLBACK_TIMEOUT​

Default: 10

The time, in seconds, to wait for a queued fetch task.

OPAL_FETCHING_ENQUEUE_TIMEOUT​

Default: 10

The time, in seconds, to wait to queue a new fetch task when the queue is full.

OPAL_ENABLE_DATADOG_APM​

Default: False

When True, OPAL sends Datadog APM traces.

OPAL_LOG_DIAGNOSE​

Default: False

When True, OPAL includes diagnosis information, including local variable values, in log tracebacks.

Secrets in logs

When OPAL_LOG_DIAGNOSE is True, logs can include sensitive values, such as authentication headers and tokens. Keep the setting off in production.

OPAL_LOG_SERIALIZE​

Default: False

When True, OPAL writes log records as JSON to standard error, for log aggregation services.

Additional configurations​

ALL_PROXY​

Default: unset

Set ALL_PROXY when the PDP runs in an isolated network and reaches Permit through an HTTP proxy:

# Proxy for all protocols (i.e. HTTPS, WSS)
ALL_PROXY=http://proxy.example.com:8080

Proxy requirements:

  • HTTP proxy address only. The PDP opens TLS connections to Permit for both HTTP and WebSocket traffic, and TLS inside TLS is not supported, so the proxy address must use http://. See the aiohttp proxy documentation.
  • HTTP/2 and WebSocket support. A proxy that doesn't support HTTP/2 and WebSocket connections breaks the PDP's connection to Permit. See the OPAL proxy tutorial.

Added in PDP v0.9.4.

Settings for PDP versions before v0.9.0​

PDP v0.9.0 and later start the Horizon service with Uvicorn directly, without Gunicorn, so UVICORN_NUM_WORKERS and GUNICORN_TIMEOUT apply only to earlier PDP versions.

UVICORN_NUM_WORKERS​

Default: 1

The number of parallel workers that run the PDP server.

GUNICORN_TIMEOUT​

Default: 600

The time, in seconds, a worker can be idle or unresponsive before Gunicorn stops it. See the Gunicorn timeout setting.

Contents

Edit this page