stackabletech / stackabletech/secret-operator

Allow injecting `searchBase` and `searchFilter` via a SecretClass in ldap AuthenticationClass

Open
#448 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

customer-request
Dominant language
Rust
Stars
13
Forks
8
Avg merge
1d 8h
Merged PRs (30d)
10

Description

A customer reached out about enabling dynamic searchBase and searchFilter configuration of AuthenticationClasses for LDAP.

They are currently deploying NiFi clusters per team, that use a central ldap provider for authentication. Every team has an individual bind user that is only allowed to access ldap structures which are relevant for that team - which means that every team needs an individual 'searchBase' setting.

For the bindUser setting, we allow to configure that per namespace via a secretclass, so this is not an issue.

For the searchBase, this is hardcoded in the AuthenticationClass as a String, which at the moment means that the user has to have a dedicated authenticationclass per group that targets the same ldap.

One possible solution could be to allow specifying the searchBase and searchFilter via a SecretClass as well, this would allow the admininstrator in charge of maintaining the SecretClass to optionally delegate the searchBase (and searchFilter) to the users of this AuthenticationClass. Since these SecretClasses can be scoped to look in the namespace of a pod starting up, this would allow configuring a different searchBase per namespace, instead of just one global one.

An idea for how this could look in the CRDs is shown below, but this would most probably be breaking..

---
apiVersion: authentication.stackable.tech/v1alpha1
kind: AuthenticationClass
metadata:
  name: ldap-simple
spec:
  provider:
    ldap:
      hostname: my.ldap.server
      port: 389
      searchBase:
        secretClass: openldap-searchbase
      bindCredentials:
        secretClass: openldap-bind-credentials
---
apiVersion: secrets.stackable.tech/v1alpha1
kind: SecretClass
metadata:
  name: openldap-searchbase
spec:
  backend:
    k8sSearch:
      searchNamespace:
        pod: {}
---
apiVersion: v1
kind: Secret
metadata:
  name: my-admin-credentials
  namespace: userns1
  labels:
    secrets.stackable.tech/class: openldap-searchbase
stringData:
  searchBase: blablabla

The need for this in this specific case arises out of the organizational practice of not having a global ldap bind user but rather "team specific" bind users that cannot access user objects from different teams.
An organizational solution for this issue would be to change this - but that is not always possible, so the question would be if making this configurable is something we want to add.

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

The payload names no implementation files or tests. Start by locating the AuthenticationClass LDAP CRD and the SecretClass resolution path; compare existing bindCredentials handling with the proposed searchBase and searchFilter fields, then define CRD compatibility and tests proving namespace-scoped values are used.

Written by the indexing model from the issue text.

Assessment

Tech stack
kubernetes, rust
Domain
authentication, infrastructure, security
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.