OpenInfra Summit Europe 2025
oslo.policy plugin for OPAoslo.policy common libraryadminmemberreaderpolicy.yamlpolicy.yaml requires a service redeploy (and
restart for older oslo.policy)oslo.policy has basic support for http
checks - but it's broken in practiceoslo.policy.opaoslo.policy.opa also provides a Rego generatoropa:Before:
Policy:
package publicize_image
# PATCH /v2/images/{image_id}
#"publicize_image": "role:admin or (role:image_admin and project_id:%(owner)s)"
allow if {
#role:admin
"admin" in input.credentials.roles
}
allow if {
image_admin_and_creds_project_id_eq_input_owner
}
#(role:image_admin and project_id:%(owner)s)
image_admin_and_creds_project_id_eq_input_owner if {
"image_admin" in input.credentials.roles
input.credentials.project_id == input.target.owner
}
Tests:
import data.publicize_image
test_admin_or_image_admin_and_creds_project_id_eq_input_owner_0 if publicize_image.allow with input as {"credentials": {"roles": ["admin"]}}
test_admin_or_image_admin_and_creds_project_id_eq_input_owner_1 if publicize_image.allow with input as {"credentials": {"roles": ["image_admin"], "project_id": "foo"}, "target": {"owner": "foo"}}
upstream branch vs our branchpersist: true)neutron-db-proxy
opa-decisions-exporteropa-decisions-exporteropa-decisions-exporter writes logs, exports additional
Prometheus metrics
oslo.policy.opa connection to OPA (on
localhost!) sometimes timing outoslo.policy
pluginoslo.policy documentation: https://docs.openstack.org/oslo.policy/latest/oslo.policy.opa plugin: https://github.com/gtema/oslo.policy.opaThanks to our colleagues:
Thank you!
Reach us at:
Questions?