Skip to main content

Topaz Policy Configuration Options

Once you've created a policy image, you'll need to configure Topaz to properly obtain it from your policy registry.

Config file location

The location of the Topaz configuration and data files created using topaz templates install or topaz config new can be found by issuing the command topaz config info config.

% topaz config info config
{
"topaz_certs_dir": "/Users/ogazitt/.local/share/topaz/certs",
"topaz_cfg_dir": "/Users/ogazitt/.config/topaz/cfg",
"topaz_db_dir": "/Users/ogazitt/.local/share/topaz/db",
"topaz_dir": "/Users/ogazitt/.config/topaz",
"topaz_tmpl_dir": "/Users/ogazitt/.local/share/topaz/tmpl"
}
tip

Unless you've set the $XDG_CONFIG_HOME or $XDG_DATA_HOME variables, the topaz_cfg_dir should be set to $HOME/.config/topaz/cfg on all OS's. The data and template files default to $HOME/.local/share/topaz/{db,tmpl} on Linux and Mac, and to $HOME\AppData\Local\{db,tmpl} on Windows.

By default, the config file will be named after your configuration name - e.g. todo.yaml for the Todo template.

When you edit this file, you'll find a section called opa:

opa:
instance_id: "-"
graceful_shutdown_period_seconds: 2
# max_plugin_wait_time_seconds: 30 set as default
local_bundles:
paths: []
skip_verification: true
config:
services:
ghcr:
url: https://ghcr.io
type: "oci"
response_header_timeout_seconds: 5
bundles:
todo:
service: ghcr
resource: "ghcr.io/aserto-policies/policy-todo:3.0.0"
persist: false
config:
polling:
min_delay_seconds: 60
max_delay_seconds: 120

You can change the resource to the custom policy image that you've created using the policy build / policy push lifecycle commands described here.

Configuring private registries

The configuration snippet above refers to the ghcr.io registry, and provides unauthenticated access. Below you'll find instructions on how to configure OPA to obtain a policy image from a private / authenticated registry.

GitHub Container Registry (GHCR)

To access a private image from GHCR, you'll need to create a Personal Access Token (PAT) here, with at least the scopes read:org and repo. If you want to be able to use policy push, you'll also need write:packages.

You'll use the PAT in the <TOKEN> placeholder below:

opa:
config:
services:
ghcr:
url: https://ghcr.io
type: oci
credentials:
bearer:
scheme: "Bearer"
token: "<TOKEN>"

Aserto Policy Container Registry (APCR)

To access a private image from APCR, you'll need to obtain your Aserto Policy Registry username and API key here.

You'll use these in the <username:APIkey> placeholder below. Note that the bundle should reference the service you created (apcr), and that the resource should have the prefix apcr.io.

opa:
config:
services:
apcr:
url: https://registry.prod.aserto.com
type: oci
credentials:
bearer:
scheme: "basic"
token: "<username:APIkey>"
bundles:
todo:
service: apcr
resource: registry.prod.aserto.com/<username>/<policy-image>:<policy-tag>

Other examples

For other examples, see the examples directory in the Topaz repo.