Skip to content

Releases: open-policy-agent/opa

v0.70.0

31 Oct 20:03
Compare
Choose a tag to compare

This release contains a mix of features, performance improvements, and bugfixes.

Optimized read mode for OPA's in-memory store (#7125)

A new optimized read mode has been added to the default in-memory store, where data written to the store is eagerly converted
to AST values (the data format used during evaluation). This removes the time spent converting raw data values to AST
during policy evaluation, thereby improving performance.

The memory footprint of the store will increase, as processed AST values generally take up more space in memory than the
corresponding raw data values, but overall memory usage of OPA might remain more stable over time, as pre-converted data
is shared across evaluations and isn't recomputed for each evaluation, which can cause spikes in memory usage.

This mode can be enabled for opa run, opa eval, and opa bench by setting the --optimize-store-for-read-speed flag.

More information about this feature can be found here.

Co-authored by @johanfylling and @ashutosh-narkar.

Topdown and Rego

  • topdown: Use new Inter-Query Value Cache for json.match_schema built-in function (#7011) authored by @anderseknert reported by @lcarva
  • ast: Fix location text attribute for multi-value rules with generated body (#7128) authored by @anderseknert
  • ast: Fix regression in opa check where a file that referenced non-provided schemas failed validation (#7124) authored by @tjons
  • test/cases/testdata: Fix bug in test by replacing unification by explicit equality check (#7093) authored by @matajoh
  • ast: Replace use of yaml.v2 library with yaml.v3. The earlier version would parse yes/no values as boolean. The usage of yaml.v2 in the parser was unintentional and now has been updated to yaml.v3 (#7090) authored by @anderseknert

Runtime, Tooling, SDK

  • cmd: Make opa check respect --ignore when --bundle flag is set (#7136) authored by @anderseknert
  • server/writer: Properly handle result encoding errors which earlier on failure would emit logs such as superfluous call to WriteHeader() while still returning 200 HTTP status code. Now, errors encoding the payload properly lead to 500 HTTP status code, without extra logs. Also use Header().Set() not Header().Add() to avoid duplicate content-type headers (#7114) authored by @srenatus
  • cmd: Support file:// format for TLS key material file flags in opa run (#7094) authored by @alexrohozneanu
  • plugins/rest/azure: Support managed identity for App Service / Container Apps (#7085) reported and authored by @apc-kamezaki
  • debug: Fix step-over behaviour when exiting partial rules (#7096) authored by @johanfylling
  • util+plugins: Fix potential memory leaks with explicit timer cancellation (#7089) authored by @philipaconrad

Docs, Website, Ecosystem

  • docs: Fix OCI example with updated flag used by the ORAS CLI (#7130) authored by @b3n3d17
  • docs: Delete Atom editor from supported editor integrations (#7111) authored by @KaranbirSingh7
  • docs/website: Add Styra OPA ASP.NET Core SDK integration (#7073) authored by @philipaconrad
  • docs/website: Update compatibility information on the rego-cpp integration (#7078) authored by @matajoh

Miscellaneous

  • Dependency updates; notably:
    • build(deps): bump github.com/containerd/containerd from 1.7.22 to 1.7.23
    • build(deps): bump github.com/prometheus/client_golang from 1.20.4 to 1.20.5
    • build(deps): bump golang.org/x/net from 0.29.0 to 0.30.0
    • build(deps): bump golang.org/x/time from 0.6.0 to 0.7.0
    • build(deps): bump google.golang.org/grpc from 1.67.0 to 1.67.1

v0.69.0

30 Sep 13:32
4a3fd1a
Compare
Choose a tag to compare

This release contains a mix of features, bugfixes and necessary tooling and test changes required to support the upcoming OPA 1.0 release.

Inter-Query Value Cache (#6908)

OPA now has a new inter-query value cache added to the SDK. It is intended to be used for values that are expensive to compute and can be reused across multiple queries. The cache can be leveraged by built-in functions to store values that otherwise aren't appropriate for the existing inter-query cache; for instance when the entry size isn't an appropriate or primary limiting factor for cache eviction.

The default size of the inter-query value cache is unbounded, but can be configured via the caching.inter_query_builtin_value_cache.max_num_entries configuration field. OPA will drop random items from the cache if this limit is exceeded.

The cache is used by the regex and glob built-in functions, which previously had individual, non-configurable caches with a max entry size of 100 each.

Currently, the cache is only exercised when running OPA in server mode (ie. opa run -s). Also this feature is unsupported for WASM.

Authored by @ashutosh-narkar, reported by @amirsalarsafaei

Topdown and Rego

  • Future-proofing tests in the ast, topdown, rego etc. packages to be 1.0 compatible (authored by @johanfylling)
  • ast: Attach annotation to static part of rule ref (#7050) authored by @anderseknert
  • ast: Make Module.String() include if/contains for v1 modules (#6973) authored by @johanfylling reported by @nikpivkin
  • topdown/http: Stop http.send latency timer when an error is encountered (#7007) authored by @lukyer
  • ast/compile: Refactor local variable replacement and replace declared variables in with's target (#6979) authored by @srenatus reported by @bluebrown
  • ast: Update type checker to cache schema types (#6970) authored by @nikpivkin
  • test: Fix indentation in a YAML test case (#7039) authored by @matajoh
  • format: Bracketing keyword ref elements in formatter output (#7010) authored by @johanfylling

Runtime, Tooling, SDK

  • Future-proofing tests in the sdk, downlaod, server , cmd etc. packages to be 1.0 compatible (authored by @johanfylling)
  • cmd: Add --v0-compatible flag to make OPA behave as v0.x post v1.0 release (#7065) authored by @johanfylling
  • util: Strip UTF-8 BOM from input JSON when found (#6988) authored by @anderseknert reported by @adhilto
  • plugins/rest: Support reading AWS token from the filesystem for the AWS container credential provider (#6997) authored by @cmaddalozzo
  • debug: Add RegoOption launch option to debugger for setting custom Rego options (#7045) authored by @johanfylling
  • debug: Always include Input and Data variable scopes to ease discoverability of the scopes (#7074) authored by @johanfylling
  • wasm: Fix arithmetic comparison for large numbers, caused by an integer overflow (#6991) authored by @Ptroger

Docs, Website, Ecosystem

  • Add Marsh McLennan to adopters (#7060) authored by @anderseknert reported by @pratimsc
  • Add APIwiz to adopters (#7067) authored by @anderseknert
  • docs: Fix misnomer in OPA-Istio tutorial to document Istio's AuthorizationPolicy API (#6984) authored by @tjons
  • docs: Readme updates to highlight more up-to-date information about OPA (#7066) authored by @charlieegan3
  • docs: Update documentation to show Debug API uses (#7036) authored by @charlieegan3
  • docs: Simplify the OPA-Istio tutorial example policy (#7059) authored by @anderseknert
  • website: Update policy examples on the OPA home page to be 1.0 compatible (#7033) authored by @charlieegan3

Miscellaneous

  • build: Bump github.com/golang/glob, remove replace directive (#7024) authored by @srenatus reported by @mmannerm
  • Dependency updates; notably:
    • build(deps): bump github.com/containerd/containerd from 1.7.21 to 1.7.22
    • build(deps): bump github.com/prometheus/client_golang from 1.20.2 to 1.20.4
    • build(deps): bump go.uber.org/automaxprocs from 1.5.3 to 1.6.0
    • build(deps): bump golang.org/x/net from 0.28.0 to 0.29.0
    • build(deps): bump google.golang.org/grpc from 1.66.0 to 1.67.0
    • build(go): bump 1.22.5 to 1.23.1 (#7006) authored by @srenatus

v0.68.0

29 Aug 16:01
db53d77
Compare
Choose a tag to compare

This release contains a mix of features and bugfixes.

Breaking Changes

entrypoint annotation implies document scope (#6798)

The entrypoint annotation's scope requirement has changed from rule to document (https://github.com/open-policy-agent/opa/issues/6798). Furthermore, if no scope annotation is declared for a METADATA block preceding a rule, the presence of an entrypoint annotation with a true value will assign the block a document scope, where the rule scope is otherwise the default.

In practice, a rule entrypoint always point to the entire document and not a particular rule definition. The previous behavior was a bug, and one we've now addressed.

Authored by @anderseknert

Topdown and Rego

  • ast: Fixing nil-pointer dereference in compiler for partial rule edge case (#6930) authored by @johanfylling
  • ast+parser: Add hint to future-proof imports (6968) authored by @srenatus
  • topdown: Adding unification scope to virtual-cache key. Fixing issue where false positive cache hits can occur when unification "restricts" the scope of ref-head rule evaluation (#6926) authored by @johanfylling reported by @anderseknert
  • topdown: Marshal JWT encode sign inputs as JSON (#6934) authored by @charlieegan3

Runtime, Tooling, SDK

  • ast: Make type checker copy method copy all values (#6949) authored by @anderseknert
  • ast: Include term locations in rule heads when requested (#6860) authored by @anderseknert
  • debug: Adding experimental debugger SDK (#6876) authored by @johanfylling
  • distributedtracing: allow OpenTelemetry resource attributes to be configured under distributed_tracing config (#6942) authored and reported by @brettmc
  • download: Fixing issue when saving OCI bundles on disk (#6939) authored and reported by @Sergey-Kizimov
  • logging: Always include HTTP request context in incoming req context (#6951) authored by @ashutosh-narkar reported by @alvarogomez93
  • plugins/bundle: Avoid race-condition during bundle reconfiguration and activation (#6849) authored by @ashutosh-narkar reported by @Pushpalanka
  • plugins/bundle: Escape reserved chars used in persisted bundle directory name (#6915) authored by @ashutosh-narkar reported by @alvarogomez93
  • plugins/rest: Support AWS_CONTAINER_CREDENTIALS_FULL_URI metadata endpoint (#6893) authored and reported by @mbamber
  • util+server: Fix bug around chunked request handling. (#6904) authored by @philipaconrad reported by @David-Wobrock
  • opa exec: This command never supported "pretty" formatting (--format=pretty or -f pretty), only json. Passing pretty is now invalid. (#6923) authored by @srenatus
    Note that the flag is now unnecessary, but it's kept so existing calls like opa exec -fjson ... remain valid.

Security Fix: CVE-2024-8260 (#6933)

This release includes a fix where OPA would accept UNC locations on Windows. Reading those could leak NTLM hashes.
The attack vector would include an adversary tricking the user in passing an UNC path to OPA, e.g. opa eval -d $FILE.
UNC paths are now forbidden. If this is an issue for you, please reach out on Slack or GitHub issues.

Reported by Shelly Raban
Authored by @ashutosh-narkar

Docs, Website, Ecosystem

Miscellaneous

  • build: Make it possible to build only wasm testcases (#6920) authored by @andreaTP
  • Dependency updates; notably:
    • build(deps): bump github.com/containerd/containerd from 1.7.20 to 1.7.21
    • build(deps): bump github.com/prometheus/client_golang from 1.19.1 to 1.20.2
    • build(deps): bump golang.org/x/net from 0.27.0 to 0.28.0
    • build(deps): bump golang.org/x/time from 0.5.0 to 0.6.0
    • build(deps): bump google.golang.org/grpc from 1.65.0 to 1.66.0

v0.67.1

05 Aug 16:48
Compare
Choose a tag to compare

This is a bug fix release addressing the following issue:

  • util+server: Fix bug around chunked request handling (#6906) authored by @philipaconrad, reported by @David-Wobrock. A request handling bug was introduced in (#6868), which caused OPA to treat all incoming chunked requests as if they had zero-length request bodies.

v0.67.0

25 Jul 21:53
Compare
Choose a tag to compare

This release contains a mix of features, a new builtin function (strings.count), performance improvements, and bugfixes.

Breaking Change

Request Body Size Limits

OPA now automatically rejects very large requests (#6868) authored by @philipaconrad.
Requests with a Content-Length larger than 128 MB uncompressed, and gzipped requests with payloads that decompress to
larger than 256 MB will be rejected, as part of hardening OPA against denial-of-service attacks. Previously, a large
enough request could cause an OPA instance to run out of memory in low-memory sidecar deployment scenarios, just from
attempting to read the request body into memory.

These changes allow improvements in memory usage for the OPA HTTP server, and help OPA deployments avoid some accidental out-of-memory situations.

For most users, no changes will be needed to continue using OPA. However, to control this behavior, two new configuration
keys are available: server.decoding.max_length and server.decoding.gzip.max_length. These control the max size in
bytes to allow for an incoming request payload, and the maximum size in bytes to allow for a decompressed gzip request payload, respectively.

Here's an example OPA configuration using the new keys:

# Set max request size to 64 MB and max gzip size (decompressed) to be 128 MB.
server:
  decoding:
    max_length: 67108864
    gzip:
      max_length: 134217728

Topdown and Rego

  • topdown: New strings.count builtin which returns the number of non-overlapping instances of a substring in a string (#6827) authored by @Manish-Giri
  • format: Produce error when --rego-v1 formatted module has rule name conflicting with keyword (#6833) authored by @johanfylling
  • topdown: Add cap to caches for regex and glob built-in functions (#6828) authored by @johanfylling. This fixes possible memory leaks where caches grow uncontrollably when large amounts of regexes or globs are generated or originate from the input document.

Runtime, Tooling, SDK

  • repl: Add support for correctly loading bundle modules (#6872) authored by @ashutosh-narkar
  • plugins/discovery: Allow un-registration of discovery listener (#6851) authored by @mjungsbluth. The discovery plugin allows OPA to register a bundle download status listener but previously did not offer a method to unregister that listener
  • plugins/logs: Reduce amount of work performed inside global lock in decision log plugin (#6859) authored by @johanfylling
  • plugins/rest: Add a new client credential attribute to support Azure Workload Identity. This would allow workloads deployed on an Azure Kubernetes Services (AKS) cluster to authenticate and access Azure cloud resources (#6802) authored by @ledbutter
  • cmd/inspect: Add ability for opa inspect to inspect a single file outside of any bundle (#6873) authored by @tjons
  • cmd+bundle: Add --follow-symlinks flag to the opa build command to allow users to build directories with symlinked files, and have the contents of those symlinked files included in the built bundle (#6800) authored by @tjons
  • server: Add missing handling in the server for the explain=fails query value (#6886) authored by @acamatcisco

Docs, Website, Ecosystem

  • docs: Update bundle section with an example of a manifest with rego_version and file_rego_versions attributes (#6885) authored by @ashutosh-narkar
  • docs: Better link language SDKs to make them more discoverable (#6866) authored by @charlieegan3

Miscellaneous

  • ci: Add the OpenSSF Scorecard Github Action to help evaluate the OPA project's security posture (#6848) authored by @harshitasao
  • Dependency updates; notably:
    • build(go): bump golang from 1.22.4 to 1.22.5
    • build(deps): bump github.com/containerd/containerd from 1.7.18 to 1.7.20
    • build(deps): bump golang.org/x/net from 0.26.0 to 0.27.0
    • build(deps): bump google.golang.org/grpc from 1.64.0 to 1.65.0
    • build(deps): bump go.opentelemetry.io modules (#6847)

v0.66.0

27 Jun 14:35
91348a8
Compare
Choose a tag to compare

This release contains a mix of features, performance improvements, and bugfixes.

Improved Test Reports (#2546)

The opa test command now includes a new --var-values flag that enriches reporting of failed tests with the values and locations for variables in the failing expression.
E.g.:

FAILURES
--------------------------------------------------------------------------------
data.test.test_my_policy: FAIL (0ms)

  test.rego:8:
    	x == y + z
    	|    |   |
    	|    |   3
    	|    y + z: 5
    	|    y: 2
    	1

SUMMARY
--------------------------------------------------------------------------------
test.rego:
data.test.test_foo: FAIL (0ms)
--------------------------------------------------------------------------------
FAIL: 1/1

Authored by @johanfylling, reported by @grosser.

Reading stdin in opa exec (#6538)

The opa exec command now supports reading input documents from stdin with the --stdin-input (-I) flag.
E.g.:

$ echo '{"user": "alice"}' | opa exec --stdin-input --bundle my_bundle

Authored by @colinjlacy, reported by @humbertoc-silva.

Topdown and Rego

Runtime, Tooling, SDK

  • build: Use chainguard images from dockerhub (#6830) authored by @srenatus
  • bundle: Preallocate buffers for file contents. (#6818) authored by @philipaconrad
  • plugins: Reduce locks during decision logging (#6797) authored by @mjungsbluth
  • plugins/rest: Do local map modification in OAuth2 client credentials flow (#6769) authored and reported by @eubaranov
  • loader: Use a better error message when trying to merge non-objects (#6803) authored by @anderseknert
  • server/authorizer: Fix gzip payload handling (#6804) authored by @philipaconrad reported by @nevumx

Docs, Website, Ecosystem

Miscellaneous

  • Dependency updates; notably:
    • build(go): bump golang from 1.22.3 to 1.22.4
    • build(deps): bump github.com/containerd/containerd from 1.7.17 to 1.7.18
    • build(deps): bump golang.org/x/net from 0.25.0 to 0.26.0

v0.65.0

30 May 15:17
f054975
Compare
Choose a tag to compare

This release contains a mix of features and bugfixes.

Runtime, Tooling, SDK

Topdown and Rego

Miscellaneous

  • docs: Add arrays to composite values section (#6727) authored by @anderseknert reported by @SpecLad
  • docs: Add remainder operator to grammar (#6767) authored by @anderseknert
  • docs: Fix dynamic metadata object in docs (#6709) authored by @antonioberben
  • docs: Use best practice package name in test examples (#6731) authored by @asleire
  • docs: Update query API doc with details about overriding the def decision path (#6745) authored by @ashutosh-narkar
  • ci: pin GitHub Actions macos runner version and build for darwin/amd64 (#6720) reported and authored by @suzuki-shunsuke
  • Dependency updates; notably:
    • build(go): bump golang from 1.22.2 to 1.22.3
    • build(deps): bump github.com/containerd/containerd from 1.7.15 to 1.7.17
    • build(deps): bump github.com/prometheus/client_golang
    • build(deps): bump golang.org/x/net from 0.24.0 to 0.25.0
    • build(deps): bump google.golang.org/grpc from 1.63.2 to 1.64.0

Breaking changes

A new IsSetStmt statement has been added to the intermediate representation (IR).
This is a breaking change for custom IR evaluators, which must interpret this statement in IR plans generated by this OPA version and later.
No actions are required for Wasm users, as long as Wasm modules are built by this OPA version or later.

v0.64.1

26 Apr 18:43
Compare
Choose a tag to compare

This is a bug fix release addressing the following issues:

  • ci: Pin GitHub Actions macos runner version. The architecture of the GitHub Actions Runner macos-latest was changed from amd64 to arm64 and as a result darwin/amd64 binary wasn't released (#6720) authored by @suzuki-shunsuke
  • plugins/discovery: Update comparison logic used in the discovery plugin for handling overrides. This fixes a panic that resulted from the comparison of uncomparable types (#6723) authored by @ashutosh-narkar

v0.64.0

25 Apr 17:21
Compare
Choose a tag to compare

NOTES:

  • The minimum version of Go required to build the OPA module is 1.21

This release contains a mix of features, a new builtin function (json.marshal_with_options()), performance improvements, and bugfixes.

Breaking Change

Bootstrap configuration overrides Discovered configuration

Previously if Discovery was enabled, other features like bundle downloading and status reporting could not be configured manually.
The reason for this was to prevent OPAs being deployed that could not be controlled through discovery. It's possible that
the system serving the discovered config is unaware of all options locally available in OPA. Hence, we relax the configuration
check when discovery is enabled so that the bootstrap configuration can contain plugin configurations. In case of conflicts,
the bootstrap configuration for plugins wins. These local configuration overrides from the bootstrap configuration are included
in the Status API messages so that management systems can get visibility into the local overrides.

In general, the bootstrap configuration overrides the discovered configuration. Previously this was not the case for all
configuration fields. For example, if the discovered configuration changes the labels section, only labels that are
additional compared to the bootstrap configuration are used, all other changes are ignored. This implies labels in the
bootstrap configuration override those in the discovered configuration. But for fields such as default_decision, default_authorization_decision,
nd_builtin_cache, the discovered configuration would override the bootstrap configuration. Now the behavior is more consistent
for the entire configuration and helps to avoid accidental configuration errors. (#5722) authored by @ashutosh-narkar

Add rego_version attribute to the bundle manifest

A new global rego_version attribute is added to the bundle manifest, to inform the OPA runtime about what Rego version (v0/v1) to
use while parsing/compiling contained Rego files. There is also a new file_rego_versions attribute which allows individual
files to override the global Rego version specified by rego_version.

When the version of the contained Rego is advertised by the bundle through this attribute, it is not required to run OPA with the
--v1-compatible (or future --v0-compatible) flag in order to correctly parse, compile and evaluate the bundle's modules.

A bundle's rego_version attribute takes precedence over any applied --v1-compatible/--v0-compatible flag. (#6578) authored by @johanfylling

Runtime, Tooling, SDK

  • compile: Fix panic from CLI + metadata entrypoint overlaps. The panic occurs when opa build was provided an entrypoint from both a CLI flag, and via entrypoint metadata annotation. (#6661) authored by @philipaconrad
  • cmd/deps: Improve memory footprint and execution time of deps command for policies with high dependency connectivity (#6685) authored by @johanfylling
  • server: Keep default decision path in-sync with manager's config (#6697) authored by @ashutosh-narkar
  • server: Remove unnecessary AST-to-JSON conversions (#6665) and (#6669) authored by @koponen-styra
  • sdk: Allow customizations of the plugin manager via SDK (#6662) authored by @xico42
  • sdk: Fix issue where active parser options aren't propagated to module reload during bundle activation resulting in errors while activating bundles with v1 syntax (#6689) authored by @xico42
  • plugins/rest: Close response body in OAuth2 client credentials flow (#6708) authored by @johanneslarsson

Topdown and Rego

  • ast: Import rego.v1 in v0 support modules when applicable (#6450) authored by @johanfylling
  • rego: Set query Rego version from configured imports (#6701) authored by @johanfylling
  • topdown: New json.marshal_with_options() builtin for indented/"pretty-printed" and/or line-prefixed JSON (#6630) authored by @sean-r-williams

Docs, Website, Ecosystem

  • Add Raygun to ecosystem projects (#6712) authored by @johndbro1
  • Add env0 to ecosystem projects (#6658) authored by @yarivg
  • Add Rego Language Comparisons to ecosystem projects (#6663) authored by @charlieegan3
  • docs/configuration: Tidy up headers in Services section (#6695) authored by @tsandall
  • docs: Use cuboid rather than cube to explain concepts of sets and composite values in policy-language section of documentation (#6691) authored by @kd-labs

Miscellaneous

  • go.{mod,sum}: Update the go stanza of OPA's go.mod to go 1.21. OPA, used as Go dependency, requires at least go 1.21, and thus works with all officially supported Go versions (1.21.x and 1.22.x) (#6678) authored by @srenatus
  • ci: Update Github Actions for Node 20. This change updates the upload-artifact and download-artifact Github actions to the latest version (v4) (#6670) authored by @philipaconrad
  • build: Update WASM Rego test generation docker command to address CVE-2022-24765 in Git (#6703) authored by @ashutosh-narkar
  • Dependency updates; notably:
    • build(go): bump 1.22.1 -> 1.22.2 (#6672) authored by @srenatus
    • build(deps): bump aquasecurity/trivy-action from 0.18.0 to 0.19.0
    • build(deps): bump github.com/containerd/containerd from 1.7.14 to 1.7.15
    • build(deps): bump github.com/prometheus/client_model from 0.5.0 to 0.6.1
    • build(deps): bump golang.org/x/net from 0.22.0 to 0.24.0
    • build(deps): bump google.golang.org/grpc from 1.62.1 to 1.63.2

v0.63.0

28 Mar 16:33
bb30b15
Compare
Choose a tag to compare

This release contains a mix of features, performance improvements, and bugfixes.

Runtime, Tooling, SDK

Topdown and Rego

  • topdown: Adding a new crypto.x509.parse_and_verify_certificates_with_options built-in function. (#5882) authored by @yogisinha reported by @IxDay
  • format: Preserve brackets around set union operation (#6588) authored by @ashutosh-narkar reported by @HarshPathakhp
  • aws: Support for Unsigned Payload or provided content sha256 in AWS signing (#6581) authored by @prasanthj

Docs + Website + Ecosystem

Miscellaneous

  • chore: Remove repetitive words (#6644) authored by @occupyhabit
  • Dependency updates; notably:
    • build(deps): bump github.com/containerd/containerd from 1.7.13 to 1.7.14
    • build(deps): bump github.com/golang/protobuf from 1.5.3 to 1.5.4
    • build(deps): bump google.golang.org/grpc from 1.62.0 to 1.62.1