Skip to content

SSO and Identities (Kanidm)

Kanidm 🡕 is the network’s identity provider: a single identity unlocks all services (SSO). The idm service runs on the HCS (and, optionally, as a replica in each zone).

Accounts and groups are provisioned in Kanidm from etc/config.yaml:

etc/config.yaml
users:
alice:
profile: "nix-admin"
groups: ["idm-admins", "idm-devs", "global"]
  • Groups control access to services.
  • Two special groups: idm-admins (administration), idm-devs (development).

OIDC-compatible services are linked to SSO automatically: Kanidm provisions an OAuth2 client per service, and its secret is managed by sops. Nothing to configure manually.

A service without its own authentication (homepage, static site) can be protected by placing a Kanidm login page in front of it (oauth2-proxy + Caddy). For the homepage, two settings on the gateway host (usr/machines/<gateway>/):

darkone.service.homepage.protect = true; # requires a Kanidm session
darkone.service.homepage.protectExternalOnly = true; # internal free, external authenticated
OptionDefaultEffect
protecttrueHomepage restricted to Kanidm users (users group)
protectExternalOnlyfalseLAN/VPN without login, login required from outside

The mode is inferred from where idm is declared:

  1. idm on the HCS only → single instance, no replication.
  2. idm on a gateway without HCS → standalone instance in the zone.
  3. idm on the HCS and gateways → replication: the HCS provides, each gateway is a read-only replica.
Diagram

Administration is done via the command line on the HCS:

Fenêtre de terminal
just enter hcs
kanidm person credential create-reset-token <login> --name idm_admin

See Create a user account and Reset a password.