Hello!

I wanted to continue discussion that had started during review of the
initial Catalog Federation API spec (
https://github.com/apache/polaris/pull/1026) regarding how we want to
handle secrets.

I drafted this document describing how secrets management fits in to
Catalog Federation, while extrapolating some interfaces that can define
Polaris management of "user secrets" in a general way beyond federation as
well:

https://docs.google.com/document/d/1JPNx5vL4vM8DqwRwnBIPiQxwN4MXOdGx4Ki0j7vgwSM/edit?tab=t.0

One aspect incorporated in the design is the idea of independent trust
boundaries between each of:

- Secrets Manager (e.g. Vault, KMS, etc)
- Persistence Database (e.g. Postgres, MongoDB, etc)
- Service runtime (e.g. JVM running in k8s in a VM in cloud)

The gist of it is that regardless of how users specify secrets attached to
Polaris objects (such as an ExternalCatalog that is a federation facade),
we canonicalize an internal "UserSecretReference" to be used in internal
persistence objects (and internal persistence objects never contain a
member holding a plaintext secret).

The extensible UserSecretReference allows things like layered security and
encryption such that neither the external secrets manager nor the
persistence database alone store plaintext secrets in case either one is
compromised independently.

This PR is an end-to-end working MVP of Catalog Federation that includes an
in-memory implementation of the UserSecretsManager exercising the
layered-security flow; it may be helpful to see the secrets management in
the full context of the working feature to see how its pieces fit together:
https://github.com/apache/polaris/pull/1305

Would love to hear everyone's thoughts! Feel free to also comment in the
document directly.

Cheers,
Dennis

Reply via email to