chore(deps): update dependency open-policy-agent/opa to v0.38.0 #29
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
v0.24.0
->v0.38.0
Release Notes
open-policy-agent/opa
v0.38.0
Compare Source
This release contains a number of fixes and enhancements.
It contains one backwards-incompatible change to the JSON representation
of metrics in Status API payloads, please see the section below.
Rich Metadata
It is now possible to annotate Rego policies in a way that can be
processed programmatically, using Rich Metadata.
METADATA
title: My rule
description: A rule that determines if x is allowed.
authors:
- Jane Austin jane@example.com
The available keys are:
Custom annotations can be used to annotate rules, packages, and
documents with whatever you specifically need, beyond the generic
keywords.
Annotations can be retrieved using the Golang library
or via the CLI,
opa inspect -a
.All the details can be found in the documentation on Annotations.
Every Keyword
A new keyword for explicit iteration is added to Rego:
every
.It comes in two forms, iterating values, or keys and values, of a
collection, and asserting that the body evaluates successfully for
each binding of key and value to the collection's elements:
To use it,
import future.keywords.every
orfuture.keywords
.For further information, please refer to the Every Keyword docs
and the new section on FOR SOME and FOR ALL in the Intro docs.
Tooling, SDK, and Runtime
disableInlining
option (#4357) reported and fixed by @srlkhttp_code
to response (#4259) reported and fixed by @jkbschmidopa deps
: Fix pretty printed output to show virtual documents (#4342)Rego and Topdown
Documentation and Website
WebAssembly
Miscellaneous
make build
now builds without errors (by disabling Wasm) on darwin/arm64 (M1)Backwards incompatible changes
The JSON representation of the Status API's payloads -- both for
GET /v1/status
responses and the metrics sent to a remote Status API endpoint -- have changed:
Previously, they had been serialized into JSON using the standard library "encoding/json"
methods. However, the metrics coming from the Prometheus integration are only available
in Golang structs generated from Protobuf definitions. For serializing these into JSON,
the standard library functions are unsuited:
snake_case
, notcamelCase
,Now, we're using the protobuf ecosystem's
jsonpb
package, to serialize the Prometheusmetrics into JSON in a way that is compliant with the Protobuf specification.
Concretely, what would before be
is now:
Note that
sample_count
is nowsampleCount
, and thetype
is using the enum'sstring representation,
"SUMMARY"
, not2
.Note: For compatibility reasons (the Prometheus golang client doesn't use the V2
protobuf API), this change uses
jsonpb
and notprotojson
.v0.37.2
Compare Source
This is a bugfix release addressing two bugs:
for patch bundles.
Miscellaneous
v0.37.1
Compare Source
This is a bug fix release that reverts the github.com/prometheus/client_golang
upgrade in v0.37.0. The upgrade exposed an issue in the serialization of Go
runtime metrics in the Status API
(#4319).
Miscellaneous
v0.37.0
Compare Source
This release contains a number of fixes and enhancements.
This is the first release that includes a binary and a docker image for
linux/arm64
,opa_linux_arm64_static
andopenpolicyagent/opa:0.37.0-static
.Thanks to @ngraef for contributing the build changes necessary.
Strict Mode
There have been numerous possible checks in the compiler that fall into this category:
We've thus far refrained from introducing them. Now, a new "strict mode"
allows you to opt-in to these checks, and we encourage you to do so!
With OPA 1.0, they will become the new default behaviour.
For more details, see the docs on Compiler Strict Mode.
Delta Bundles
Delta bundles provide a more efficient way to make data changes by containing
patches to data instead of snapshots.
Using them together with HTTP Long Polling,
you can propagate small changes to bundles without waiting for polling delays.
See the documentation
for more details.
Tooling and Runtime
Bundles bug fix: Roundtrip manifest before hashing to allow changing the manifest
and still using signature verification of bundles (#4233),
reported by @CristianJena
The test runner now also supports custom builtins, when invoked through the Golang
interface (authored by @MIA-Deltat1995)
The compile package and the
opa build
command support a new output format: "plan".It represents a query plan, steps needed to take to evaluate a query (with policies).
The plan format is a JSON encoding of the intermediate representation (IR) used for
compiling queries and policies into Wasm.
When calling
opa build -t plan ...
, the plan can be found inplan.json
at the top-level directory of the resulting bundle.tar.gz.
See the documentation for details..
Compiler+Bundles: Metadata to be added to a bundle's manifest can now be provided via
WithMetadata
(#4289), authored by @marensws, reported by @johanneslarsson
Plugins: failures in auth plugin resolution are now output, previously panicked, authored by @jcchavezs
Plugins: Fix error when initializing empty decision logging or status plugin (#4291)
Bundles: Persisted bundle activation failures are treated like failures with
non-persisted bundles (#3840), reported by @dsoguet
Server:
http.send
caching now works in system policysystem.authz
(#3946),reported by @amrap030.
Runtime: Apply credentials masking on
opa.runtime().config
(#4159)opa test
: removing deprecated code for--show-failure-line
(-l
), authored by @damienjburksopa eval
: add description to all output formatsopa inspect
: unhide command for bundle inspectionRego and Topdown
Built-in function enhancements and fixes:
object.union_n
: New built-in for creating the union of more than two objects (#4012),reported by @eliw00d
graph.reachable_paths
: New built-in to calculate the set of reachable paths in a graph (authored by @justinlindh-wf)indexof_n
: New built-in function to get all the indexes of a specific substring (or character) from a string (authored by @shuheiktgw)indexof
: Improved performance (authored by @shuheiktgw)object.get
: Support nested key array for deeper lookups with default (authored by @charlieegan3)json.is_valid
: Use Golang'sjson.Valid
to avoid unnecessary allocations (authored by @kristiansvalland)Strict-mode features:
any()
andall()
built-in functions (#2437)input
anddata
reserved keywords (#2600) reported by @jpeachMiscellaneous fixes and enhancements:
format
: don't group iterable when one has defaulted locationtopdown
: ability to retrieve input and plug bindings in theEvent
, authored by @istalker2print()
built-in: fix bug when used withwith
modifier and a function call value (#4227)ast
: don't error when future keyword import is redundant during parsingDocumentation
OPA CLI commands and their arguments (#3915)
(#4170), reported by @ekcs
WebAssembly
json.is_valid
built-in function(#4140), authored by @kristiansvalland
Miscellaneous
authored by @ngraef, reported by @povilasv
logging
: Remove loggerGetFields
function (#4114),authored by @viovanov
https://www.openpolicyagent.org/docs/v0.37.0/ and https://www.openpolicyagent.org/docs/latest
contain docs, and 0.37.0 can already be used for stable links to versioned docs pages.
make test
: fix "too many open files" issue on Mac OSv0.36.1
Compare Source
This release includes a number of documentation fixes.
It also includes the experimental binary for darwin/arm64.
There are no code changes.
Documentation
tls-cert-refresh-period
, authored by @mattmahnRelease
v0.36.0
Compare Source
This release contains a number of fixes and enhancements.
OpenTelemetry and opa exec
This release adds OpenTelemetry support to OPA. This makes it possible to emit spans to an OpenTelemetry collector via gRPC on both incoming and outgoing (i.e. http.send) calls in the server. See the updated docs on monitoring for more information and configuration options (#1469 authored by @rvalkenaers)
This release also adds a new
opa exec
command for doing one-off evaluations of policy against input similar toopa eval
, but using the full capabilities of the server (config file, plugins, etc). This is particularly useful in contexts such as CI/CD or when enforcing policy for infrastructure as code, where one might want to run OPA with remote bundles and decision logs but without having a running server. See the updated docs on Terraform for an example use case.(#3525)
Built-in Functions
crypto.hmac.md5
,crypto.hmac.sha1
,crypto.hmac.sha256
, andcrypto.hmac.sha512
) was added (#1740 reported by @jshaw86)array.reverse(array)
andstrings.reverse(string)
was added for reversing arrays and strings (#3736 authored by @kristiansvalland and @olamiko)http.send
built-in function now uses a metric for counting inter-query cache hits (#4023 authored by @mirayadav)time.*
built-in functions (#4098 reported by @morgante)Tooling
in
was fixed foropa fmt
(#4111, reported by @keshavprasadms)opa fmt
when refs contained operators was fixed (authored by @jaspervdj-luminal)opa build
(authored by @davidmarne-wf)allow_net
capability was added, allowing setting limits on what hosts can be reached in built-ins likehttp.send
andnet.lookup_ip_addr
(#3665)Server
--tls-cert-refresh-period
flag can now be provided toopa run
. If used with a positive duration, such as "5m" (5 minutes),"24h", etc, the server will track the certificate and key files' contents. When their content changes, the certificates will be
reloaded (#2500 reported by @patoarvizu)
v1/status
endpoint was added, providing the same data as the status plugin would send to a remote endpoint (#4089)print
now works in decision masking policiesRego
The error message raised when using
-
with a number and a set is now more specific (as opposed to the correct usage with two sets, or two numbers) (#1643)Fixed an edge case when using print and arrays in unification (#4078)
Improved performance of some array operations by caching an array's groundness bit (#3679)
This change will fail evaluation in some unusual cases where it previously would succeed, but these policies should be very uncommon.
An example policy that previously would succeed but no longer will (wrong arity):
SDK
opa.runtime()
built-in is now made available to the SDK (#4050 authored by @oren-zohar and @cmschuetz)print
output is now sent to the configured loggerWebsite and Documentation
opa exec
(#3965)CI
v0.35.0
Compare Source
This release contains a number of fixes and enhancements.
Early Exit Optimization
This release adds an early exit optimization to the evaluator. With this optimization, the evaluator stops evaluating rules when an answer has been found and subsequent evaluation would not yield any new answers. The optimization is automatically applied to complete rules and functions that meet specific requirements. For more information see the Early Exit in Rule Evaluation section in the docs. #2092
Built-in Functions
net.lookup_ip_addr
function was added to allow policies to resolve hostnames to IPv4/IPv6 addresses (#3993)http.send
function has been improved to close TCP connections quickly after receiving the HTTP response and avoid creating HTTP clients unnecessarily when a cached response exists (#4015). This change reduces the number of open file descriptors required in high-throughput environments and prevents OPA from encountering ulimit errors.Rego
print()
calls in the head of rules no longer cause runtime errors (#3967)rego.SkipPartialNamespace
option now correctly sets the flag on the partial evaluation queries (previously it would always set the value totrue
) (#3996) authored by @thomascoquetimport
alias parsing bug identified by fuzzer (#3988)WebAssembly
grow()
call if theinput
document exceeds the available memory space.malloc()
implementation will now callopa_abort
if thegrow()
call fails.Server
print()
calls from thesystem.authz
policy are now included in the logs (#4048)Tooling
opa fmt
command will not generate a line-break when there are generated variables in a function call (#4018) reported by @torsrexopa inspect
command no longer prints a blank namespace when a data.json file is included at the root (#4022)opa build
command will output debug messages if an optimized entrypoint is discarded.Website and Documentation
urlquery
built-in functions have been clarified (#1592) reported by @klaroseCI
Makefile
can now produce Docker images for other architectures. We do not yet publish binaries or images for non-amd64 architectures however if you want to build OPA yourself, theMakefile
does not prohibit it.Backwards Compatibility
v0.34.2
Compare Source
Fixes
v0.34.1
Compare Source
Fixes
v0.34.0
Compare Source
This release includes a number of enhancements and fixes. In particular, this
release adds a new keyword for membership and iteration (
in
) and a specializedbuilt-in function (
print
) for debugging.The
in
operatorThis release adds a new
in
operator that provides syntactic sugar forreferences that perform membership tests or iteration on collections (i.e.,
arrays, sets, and objects.) The following table shows common patterns for arrays
with the old and new syntax:
Pattern | Existing Syntax | New Syntax
--- | --- | ---
Check if 7 exists in array |
7 == arr[_]
|7 in arr
Check if 7 does not exist in array | n/a (requires helper rule) |
not 7 in arr
Iterate over the elements of array |
x := arr[_]
|some x in arr
For more information on the
in
operator see Membership and iteration:in
in the docs.
The
print
functionThis release adds a new
print
function for debugging purposes. Theprint
function can be used to output any value inside of the policy. The
print
function has special handling for undefined values so that execution does not
stop if any of the operands are undefined. Instead, a special marker is emitted
in the output. For example:
Given the policy above, we can see the output of the
print
function via STDERR when usingopa eval
:Output:
If the username, subject, or entire input document was undefined, the
print
function will still execute:Output:
The
print
function is integrated into theopa
subcommands, REPL, server, VSCode extension, and the playground. Library users must opt-in to
print
statements. For more information see the
Debugging
section in the docs.
Enhancements
opa test
: Change exit status when tests are skipped (#3773) authored by @kirk-pattonopa fmt
: Keep new lines in between function arguments (#3836) reported by @anbrsapopa inspect
: Add experimental subcommand for bundle inspection (#3754)Fixes
Bundles/API: When deleting a policy, the check determining if it's bundle-owned was using the path prefix, which would yield false positives under certain circumstances.
It now checks the path properly, piece-by-piece. (#3863 authored by @edpaget
CLI: Using
--set
with null value again translates to empty object (#3846)Rego: Forbid dynamic recursion with hidden (
system.*
) document (#3876Rego: Raise conflict errors in functions when output not captured (#3912)
This change has the potential to break policies that previously evaluated successfully!
See Backwards Compatibility notes below for details.
Experimental disk storage: React to "txn too big" errors (#3879), reported and authored by @floriangasc
Documentation
http.send
and extension docs about side-effects in other systems (#3922) (#3893)Miscellaneous
input
references (#3891)Backwards Compatibility
Function return values need to be well-defined: for a single input
x
, the function'soutput
f(x)
can only be one value. When evaluating policies, this condition had notbeen ensured for function calls that don't make use of their values, like
Before,
data.p.r
evaluated totrue
. Now, it will (correctly) return an error:In more realistic settings, this can be encountered when true/false return values
are captured and returned where they don't need to be:
In this example, any function input containing
"any"
would make the function yieldtwo different results:
true
, matching the"any"
argument.glob.match
call --false
.The fix here would be to not capture the return value in the function bodies:
The
github.com/open-policy-agent/opa/runtime#NewLoggingHandler
function nowrequires a logger instance. Requiring the logger avoids the need for the
logging handler to depend on the global logrus logger (which is useful for
test purposes.) This change is unlikely to affect users.
v0.33.1
Compare Source
This is a bugfix release addressing an issue in the formatting of rego code that contains
object literals. With the last release, those objects would under some conditions have their
keys re-ordered, with some of them put into a single line.
Thanks to @iainmcgin for reporting.
Fixes
v0.33.0
Compare Source
This release includes a number of improvements and fixes.
Built-in Functions
This release introduces
crypto.x509.parse_rsa_private_key
so that policy authors can decode RSA private keys and structure them as JWKs (#3765). Authored by @cris-he.Fixes
ast
package caused by sortingtypes.Any
instances in-place and shallow-copying module comments when a deep-copy should be performed (#3793). Reported by @markushinz.Server & Tooling
opa eval
sub-command supports a--timeout
option for limiting how long evaluation can run.Rego
print()
support as well as variadic arguments on all functions.CI & Dependencies
Documentation
Backwards Compatibility
github.com/open-policy-agent/opa/ast#ArgErrDetail
struct has beenmodified to use the new
types.FuncArgs
struct to represent the requiredarguments. Callers that depend on the exact structure of the error details
must update to use the
types.FuncArgs
struct.v0.32.1
Compare Source
This is a bugfix release to address a problem related to mismatching checksums in the official go mod proxy.
As a consequence, users with code depending on the OPA Go module that bypassed the proxy would see an error like
Be aware that Github's Dependabot feature makes use of that check, and will start to fail for projects using the OPA Go module version 0.32.0.
There workaround applied to OPA is to replace to flatbuffers dependency's version manually.
For more information, see
There are no functional changes in this bugfix release.
If you use the container images, or the published binaries, of OPA 0.32.0, you are not affected by this.
Many thanks to James Alseth for triaging this, and engaging with upstream to fix this.
v0.32.0
Compare Source
This release includes a number of improvements and fixes.
💾 Disk-based Storage (Experimental)
This release adds a disk-based storage implementation to OPA. The implementation can be found in github.com/open-policy-agent/storage/disk. There is also an example in the
rego
package that shows how policies can be evaluated with the disk-based store. The disk-based store is currently only available as a library (i.e., it is not integrated into the rest of OPA yet.) In the next few releases, we are planning to integrate the implementation into the OPA server and provide tooling to help leverage the disk-based store.Built-in Functions
This release includes a few improvements to existing built-in functions:
http.send
function now supports UNIX domain sockets (#3661) authored by @kirk-pattonunits.parse_bytes
function now supports E* and P* units (#2911)io.jwt.encode_sign
function uses the built-in context randomization source (which is helpful for replay purposes)Server
This release includes multiple improvements for OPA server deployments in serverless environments:
trigger
configuration that can be set tomanual
orperiodic
(which is the default). Whenmanual
triggering is enabled, the plugins WILL NOT perform any periodic/background operations. Instead, the plugins will only execute when theTrigger
API is invoked.exclude-plugin
parameter to control which plugins are checked. #3713 authored by @gshively11.Tooling
allow_net
field to control whether network operations can be performed (#3746). This field is only used to control schema fetching today. In future versions of OPA, theallow_net
parameter will be used to control other behaviour likehttp.send
.WebAssembly runtime not supported
error message has been improved #3739.Rego
anyOf
andallOf
keywords in JSON schema support in the type checker (#3592) authored by @jchen10500 and @juliafriedman8.rego
package.Allowed() bool
) to therego.ResultSet
API.ast.Value
results from the store so that unnecessary conversions can be avoided.rego
package to make the wasmtime-go dependency optional at build-time (#3545).WebAssembly
Documentation
This release includes a number of documentation improvements:
opa_eval
arguments have been clarified #3699Infrastructure
Backwards Compatibility
The
rego
package no longer relies on build constraints to enable the Wasm runtime. Instead, library users must opt-in to Wasm runtime support by adding an import statement in the Go code:This change ensures that (by default) the wasmtime-go blobs are not vendored in projects that embed OPA as a library. If you are currently relying on the Wasm runtime support in the
rego
package (via therego.Target("wasm")
option), please update you code to include the import above. See #3545 for more details.v0.31.0
Compare Source
This release contains performance improvements for evaluating partial sets and objects,
and introduces a new ABI call to OPA's Wasm modules to speed up Wasm evaluations.
It also comes with an improvement for checking policies -- unsafe declared variables are now caught at compile time.
This means that some policies that have been working fine with previous versions, because their unsafe variables
had not ever been queried, will fail to compile with OPA 0.31.0.
See below for details and what to do about that.
Spotlights
Partial Sets and Objects Performance
Resolving an issue (#822) created on July 4th 2018,
OPA can now cache the results of partial sets and partial objects.
A benchmark that accesses a partial set of increasing size twice shows a saving of more than 50%:
These numbers were gathered querying
fixture[i]; fixture[j]
with a policy ofwhere
n
is 10, 100, or 1000.There are multiple access patterns that are accounted for: if a ground scalar is used to
access a previously not-cached partial rule,
the evaluation algorithm will calculate the set membership of
input.user
only, and cache the result.If there is a query that requires evaluating the entire partial, however, the algorithm will also cache the entire partial:
thus avoiding extra evaluations later on.
The same is true if
managers
was used as a fully materialized set in an execution.This also means that the question about whether to write
or
q[x] { ... } # partial set rule
becomes much less important for policy evaluation performance.
WebAssembly Performance
OPA-generated Wasm modules have gotten a fast-path evaluation method:
By calling the one-off function
which returns a pointer to the serialized result set (in JSON if format is 0, "value" format if 1),
the number of VM calls needed for evaluating a policy via Wasm is drastically reduced.
The performance benefit is huge:
The added
opa_eval
export comes with an ABI bump to version 1.2.See #3627 for all details.
Along the same line, we've examined the processing of query evaluations that are Wasm-backed through the
rego
package.This allowed us to avoid unneccessary work (#3666).
Unsafe declared variables now cause a compile-time error
Before this release, local variables that had been declared, i.e. introduced via the
some
keyword, had been ableto slip through the safety checks unnoticed.
For example, a policy like
would have not caused any error if
data.demo.p
wasn't queried.Querying
data.demo.p
would return an "var requires evaluation" error.With this release, the erroneous rule no longer goes unnoticed, but is caught at compile time: "var x is unsafe".
The most likely fix is to remove the rule with the unsafe variable, since it cannot have contributed to a successful
evaluation in previous OPA versions.
See #3580 for details.
Topdown and Rego
New built-in function:
crypto.x509.parse_and_verify_certificates
(#3601), authored by @jalsethThis function enables you to verify that there is a chain from a leaf certificate back to the trusted root.
New built-in function:
rand.intn
generates a random number between0
andn
(#3615), authored by @base698The function takes a string argument to ensure that the same call, within one policy evaluation, returns the same random number.
http.send
enhancement: Newcaching_mode
parameter to configure if deserialized or serialized response bodies should be cached (#3599)Custom built-in function enhancement: let custom builtins halt evaluation (#3534)
Partial evaluation: Fix stack overflow on certain expressions (#3559)
Tooling
Query Profiling:
opa eval --profile
now supports a--count=#
flag to gather metrics and profiling data over multiple runs, and displays aggregate statistics for the results (#3651).This allows you to gather more robust numbers to assess policy performance.
Docker images: Publish static image (#3633)
As of this release, you can use the staticly-built Linux binary from a docker image:
openpolicyagent/opa:0.31.0-static
.It contains the same binary that has been pu
Configuration
📅 Schedule: At any time (no schedule defined).
🚦 Automerge: Enabled.
♻ Rebasing: Whenever PR is behind base branch, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR has been generated by WhiteSource Renovate. View repository job log here.