Some services rely on authorization information received during token validation
to construct database queries. This behavior often limits policy customization,
such as implementing a “global reader” role (i.e. when either the user has an
admin role and project_id is ignored, or the project_id must be explicitly
present in the scope). Integrating OPA helps solve this problem when OPA returns
not only an allow/deny decision but also information on whether the user can
list resources outside of the current project scope. This is already used in the
Keystone re-implementation and showed to be a very effective and flexible
solution.
OPA support for data bundles can be used to mitigate network latency. Keystone
can prepare signed JSON bundles containing user roles that are pulled by or
pushed to individual OPA instances used by services. Keystone can also manage
the OPA policies for different services through the bundle mechanism building an
authorization control plane.
SPIFFE enables mTLS communication between services whether they run on bare
metal, in the cloud, containers or Kubernetes. There might be, however, use
cases where it is not feasible or desired to introduce the SPIFFE
infrastructure. Adding a new dedicated authentication method using Kubernetes
Token Review allows workloads running in Kubernetes to authenticate to OpenStack
using service account tokens without hardcoding credentials. It can be used by
the OpenStack control plane itself running in Kubernetes and by cloud users to
authenticate with the cloud from the clusters they own.