Skip to content

RFC: Extend Admin API to support multiple personas #926

@fitzthum

Description

@fitzthum

Today the admin configuration of Trustee is very basic. It only has two fields; a path to a public key representing a singular Trustee admin, and a flag to disable checking the admin private key.

Enterprise use cases will require more sophisticated admin configurations with multiple personas, roles, identities, etc. I have some ideas about how we can introduce these features.

Decoupled Admin Backend

Today what few admin configurations we have come from the Trustee config file. In the future, admin information could be specified in the config file, but it could also come from some other service such as LDAP. In many parts of Trustee we already have a modular backend pattern. We should adopt something similar for admin. The default can be a local admin provider where the admin config comes directly from the Trustee config. Other admin providers can use the Trustee config to store information about connecting to an external admin service.

The exact API of the admin backend isn't yet clear, but the next sections will help to understand some of the requirements.

Multiple Admin Personas, Roles, and Identities

There are a lot of things we could do with a more sophisticated admin config. Some things would require significant changes to other parts of Trustee, but some would not.

The simplest possible change would be to support multiple admins, which all have the same capabilities. As soon as we have multiple admins, we probably want to have some kind of admin ID so that we can track (at least in the logs) who did what.

We should probably introduce some kind of admin roles. In the short term these roles can simply allow access to combinations of API endpoints. There can be a role for resources, a role for policies, etc. In the longterm we can think about deeper integrations for roles and maybe even try to figure out some form of multi-tenancy.

Authentication Modes

Today, authenticating to Trustee with the KBS client is a somewhat annoying. You must provide the admin private key to the KBS-Client. It can be annoying to specify this path every time and although it is secure, some people get a little bit scared by dealing with the private key.

In the short term, we could hide this by creating some local kbs-client config that stores your login information (like with Docker) . We should also think about how a modular admin backend would work with logging in. Authenticating a user will probably be delegated to the backend, meaning that the information required to login could be different for different backends. We'll need to make our authentication mechanism flexible enough to handle this.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    Status

    We have a plan

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions