chore(deps): update module github.com/open-policy-agent/opa to v0.35.0 #11
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.12.0
->v0.35.0
Release Notes
open-policy-agent/opa
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 published since release v0.29.4, statically linked to musl, with evaluating Wasm disabled.
Fixes
http.send
: ignoretls_use_system_certs
setting on Windows. Having this set to true (the default as of v0.29.0) would always return an error on Windows.This is achieved by putting the stack first -- stack overflows now become "out of bounds" memory access traps.
Before, it would silently corrupt the static data.
Server and Runtime
New configuration for Management APIs: using
resource
, the request path for sending decision logs can be configured now (#3618), authored by @cbuto/logs
is still the default, but can now be overridden.With this change, the
partition_name
config becomes deprecated, since its functionality is subsumed by this new configurable.Documentation
Note
events for debugging via explanations (#3628) authored by @enorix["y"]
is necessary becausex.y
isn't valid (#3638) authored by @Hongbo-Miaotype_name
builtin is natively implemented in Wasmv0.30.2
Compare Source
This is a bugfix release that modifies the AWS credential provider to use POST
instead of GET for retrieving AWS STS tokens. The GET method can leak
credentials into the debug log if the AWS STS endpoint is unavailable.
v0.30.1
Compare Source
This is a bugfix release to correct the behaviour of the
indexof
builtin (#3606).In v0.30.0, it only checked the first character of the substring to be found:
indexof("foo", "fox")
erroneously returned 0 instead of -1.Miscellaneous
v0.30.0
Compare Source
This release contains a number of enhancements and fixes.
Server and Runtime
Support listening on abstract Unix Domain Sockets (#3533) authored by @amanymous-net
Support minimum TLS version configuration, default to 1.2 (#3226) authored by @kale-amruta
Enhancement in REST Plugin: You can now specify a CA cert for remote services implementing the management APIs (bundles, status, decision logs, discovery) (#1954)
Bugfix: treat missing/empty roots as owning all paths (#3521)
Before, it would have been possible to overwrite a policy that was supplied by a bundle (with an empty manifest, or a manifest without declared roots), due to an erroneous check.
This will now be forbidden, and return a 400 HTTP status, in accordance with the documentation.
Extend POST v1/query endpoint to accept input, refactor index.html to use fetch()
Bundle download: In case of download or activation errors, the cached Etag is reset to the last successful activation. Previously OPA would reset the cached Etag entirely, which could trigger unnecessary bundle downloads in edge-case scenarios.
Tooling
opa build
: Do not write manifest if empty (#3480). Under the hood, the manifest metadata is now included in the Equal() function's checks.opa fmt
: Fix incorrect help text (#3518) authored by @andrehalandopa bench
: Do not print nil errors (#3530)Rego
ast.InterfaceToValue
to handle non-native typeswith
statement (#3420)indexof
when using UTF-8 charactershttp.send
flaky testWasm
Miscellaneous
make check
now uses golangci-lint via docker, authored by @willbeasonDocumentation
concat
arguments in metadata discovery method (#3543, @iggbom)opa_linux_amd64_static
v0.29.4
Compare Source
🚨 Upgrade Notice: Use
opa_linux_amd64_static
instead ofopa_linux_amd64
🚨What changed and why?
The v0.29 release changes the pre-built
opa_linux_amd64
binary to better support wasm-based policy execution. The change requires glibc 2.18+ as well as libgcc.Who is affected by this change?
This change affects users running alpine-based Docker images, CentOS 7, etc.
What should affected users do?
If you currently deploy the pre-built OPA binaries to one of these systems, update your automation to download
opa_linux_amd64_static
instead ofopa_linux_amd64
. Going forward, theopa_linux_amd64_static
binary is recommended for systems that do not have the required system libraries.If you currently build OPA from source and deploy to one of these systems, update your build to produce a statically linked executable by setting the CGO_ENABLED and WASM_ENABLED flags (e.g.,
make build WASM_ENABLED=0 CGO_ENABLED=0
).Related issues
#3499
#3532
#3528
Miscellaneous
v0.29.3
Compare Source
This bugfix release addresses another edge case in function evaluation (#3505).
v0.29.2
Compare Source
This is a bugfix release to resolve an issue in topdown's function output caching (#3501)
v0.29.1
Compare Source
This release contains a number of enhancements and fixes.
SDK
github.com/open-policy-agent/opa/sdk
. Users that want to integrate OPA as a library in Go and expose features like bundles and decision logging should use this package. The package is controlled by specifying an OPA configuration file. Hot reloading is supported out-of-the-box. See the GoDoc for the package docs for more details.Server
github.com/open-policy-agent/opa/runtime#Params
struct now supports a router parameter to enable custom routes on the HTTP server.metadata
key where arbitrary key-value pairs can be stored. Authored by @viovanovresource
field for test purposes.resource
configuration field like the bundle plugin. Similarly, theresource
is treated as the canonical setting to identify the discovery bundle.Tooling
opa test
timeout as been increased to 30 seconds when benchmarking (#3107)opa eval --schema
flag has been fixed to correctly set the schema when a single schema file is passedopa build --debug
flag output has been improved for readabilityarray.items
JSON schema value is now supported by the type checkeropa fmt
subcommand can now exit with a non-zero status when a diff is detected (by passing--fail
)opa test
subcommand no longer emits bogus file paths when fed a file:// urlBuilt-in Functions
http.send
built-in function falls back to the system certificate pool when thetls_ca_cert
ortls_ca_cert_env_variable
options are not specified (#2271) authored by @olamikoEvaluation
WebAssembly
wasm
target no longer panics if the OPA binary does not include a wasm runtime (#3264)Documentation
Infrastructure
v0.29.0
Compare Source
v0.28.0
Compare Source
This release includes a number of features, enhancements, and fixes. The default
branch for the Git repository has also been updated to
main
.Schema Annotations
This release adds support for annotations. Annotations allow users to declare metadata on rules and packages. Currently, OPA supports one form of metadata: schema declarations. For example:
Users can include schema annotations in their policies to tell OPA about the structure of external data loaded under
input
ordata
. By learning the schema of base documents, OPA can surface mistakes in the policy at authoring time (e.g., referring to a non-existent field in a JSON object or calling a built-in function with an invalid value.) For more information on the annotations and schema support see the Type Checking page in the documentation. In the future, annotations will be expanded to support other kinds of metadata and additional tooling will be added to leverage them.Server
token
authentication mode without a corresponding authorization policy. (#3380) authored by @kale-amrutaGET /v1/config
endpoint that returns OPA's active configuration. This API is useful if you need to debug the running configuration in an OPA configured via Discovery. (#2020)?pretty
option in the v0 API (#3332) authored by @clarshadplugins.Logger
option when creating the plugin manager.Tooling
opa refactor move
subcommand was added to support package renaming use cases (#3290)opa check
subcommand now supports a-s
/--schema
flag like theopa eval
subcommand.Documentation
Security
Evaluation
time.diff
function was added to support calculating differences between date/time values (#3348) authored by @andrehalandunits.parse_bytes
function now supports floating-point values (#3297) authored by @andy-painehttp.send
function no longer errors out on invalid Expires headers. (#3284)glob.match
usage (#3293)WebAssembly
opa eval
subcommand now correctly returns the set of all variable bindings and expression values when thewasm
target is enabled. Previously it returned only set of variable bindings. (#3281)glob.match
function now handles the default delimiter correctly. (#3294)opa build
subcommand no longer requires a capabilities file when thewasm
target is enabled. If capabilities are not provided, OPA will use the capabilities for its own version. (#3270)opa build
subcommand now dumps the IR emitted by the planner when--debug
is specified.opa eval
subcommand no longer panics when a policy fails to type check and thewasm
target is enabled.false
instead of either beingtrue
orundefined
. (#3271)CancelErr
to indicate cancellation errors (instead ofBuiltinErr
which it returned previously.)data
(#3279) and (#3305)rego
package no longer panics when thewasm
target is enabled and undefined functions are encountered (#3251)Build
make image
target now uses the CI image for building the Go binary. This avoids platform-specific build issues by building the Go binary inside of Docker.v0.27.1
Compare Source
This release contains a fix for crashes experienced when configuring OPA to use S3 signing as service credentials (#3255).
In addition to that, we have a small number of enhancements and fixes:
Tooling
eval
subcommand now allows using--import
without using--package
. Authored by @onelittlenightmusic, #3240.Compiler
ast
package now exports another method for JSON conversion,ast.JSONWithOpts
, that allows further options to be set (#3244.Server
s3_signing
as credentials method can now include the specified service in the signature (SigV4). Authored by @cogwirrel, #3210.Documentation
any
andall
from the Policy Reference (#3241) -- see also #2437.discovery.service
field to Discovery configuration table (#3237).WebAssembly
Configuration
📅 Schedule: At any time (no schedule defined).
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, 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 Renovate Bot.