Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Kerberos

A project-local MIT Kerberos KDC runs as a devenv process. Naming follows the ZNDX host taxonomy, with the environment segment in the realm (not only in DNS).

Expectation: users and services in this repo are expected to use Kerberos. Impala, Kudu, Postgres GSSAPI, and impala_fdw are designed around it. Full org-wide end-to-end security (including a future gRPC engine federation) is not required to land every feature, but components here should not invent a parallel long-term identity path. CI may use trust/nosasl for bootstrap only.

Federation adopters (Ægir, Atelier, Gaius, Hermes/ACP, …) follow the cross-project procedures in components/signals-protocol/specification/operations/kerberos_and_secretspec.md (SecretSpec allowlists, engine/agent principals, Ranger). This page remains the lab KDC / Signals-host reference.

Naming model

LayerValue
Org TLDzndx.org
Locationvista
Environment / posturedev → realm segment DEV
Host short nametinybox
Cloudflare / FQDNtinybox.dev.vista.zndx.org
Kerberos realmDEV.VISTA.ZNDX.ORG = {ENV}.{LOCATION}.ZNDX.ORG
User principalsignals@DEV.VISTA.ZNDX.ORG
PostgreSQL rolesignals (primary only; realm stripped via pg_ident)

Pattern:

  • FQDN: {host}.{env}.{location}.zndx.org
  • Realm: {ENV}.{LOCATION}.ZNDX.ORG (uppercase)
  • PG / app role: Kerberos primary only — env lives in the realm, not the role name

Examples:

PrincipalPG role
signals@DEV.VISTA.ZNDX.ORGsignals
signals@STAGE.VISTA.ZNDX.ORGsignals (different realm / KDC)
analyst@DEV.VISTA.ZNDX.ORGanalyst

Configuration

SettingValue
RealmDEV.VISTA.ZNDX.ORG
Principal instance (FQDN)tinybox.dev.vista.zndx.org
KDC port8848 (127.0.0.1)
Data directory.devenv/kdc/ (gitignored)
Env overridesKRB5_REALM, SIGNALS_KRB_ENV, SIGNALS_KRB_LOCATION, SIGNALS_KRB_HOST, KRB5_KDC_PORT
Keytab paths (secrets)SecretSpec: SIGNALS_KRB_USER_KEYTAB, POSTGRES_KRB_KEYTAB, … — see Secrets

kdc-init.sh builds the default realm from SIGNALS_KRB_ENV + SIGNALS_KRB_LOCATION unless KRB5_REALM is set explicitly. It also writes signals.keytab for headless/FDW use (optional SecretSpec path).

Local DNS

echo '127.0.0.1 tinybox.dev.vista.zndx.org' | sudo tee -a /etc/hosts

Principals

PrincipalTypeCredentials
postgres/tinybox.dev.vista.zndx.org@DEV.VISTA.ZNDX.ORGService (PG GSSAPI).devenv/kdc/postgres.keytab
impala/tinybox.dev.vista.zndx.org@DEV.VISTA.ZNDX.ORGService (Impala HS2).devenv/kdc/impala.keytab
HTTP/tinybox.dev.vista.zndx.org@DEV.VISTA.ZNDX.ORGService (Atlas/Ranger SPNEGO).devenv/kdc/http.keytab
kudu/tinybox.dev.vista.zndx.org@DEV.VISTA.ZNDX.ORGService (Kudu).devenv/kdc/kudu.keytab
signals@DEV.VISTA.ZNDX.ORGService principal for the Signals project (PG role + FDW outbound)Password: signals; .devenv/kdc/signals.keytab
signals/admin@DEV.VISTA.ZNDX.ORGAdmin (optional)Password: signals
zndx@DEV.VISTA.ZNDX.ORGUser principal. Semantica web login; the username is zndxPassword: zndx
semantica@DEV.VISTA.ZNDX.ORGService principal for the Semantica warehouse FDW.devenv/kdc/semantica.keytab (randkey)

End-to-end identity (impala_fdw)

Target: authenticate to Postgres with GSSAPI as signals@DEV.VISTA.ZNDX.ORG, map to PG role signals, then have impala_fdw use that same principal for Impala HS2 and Kudu. See components/impala_fdw/docs/SPEC.md §11.3.

Example pg_ident idea (also written to .devenv/kdc/pg_ident.map.example on init):

# signals@DEV.VISTA.ZNDX.ORG → signals
krb_map  /^(.*)@DEV\.VISTA\.ZNDX\.ORG$  \1

Usage

kinit signals          # default_realm is DEV.VISTA.ZNDX.ORG
# or: kinit signals@DEV.VISTA.ZNDX.ORG
klist
kdestroy

Management

devenv tasks run signals:kdc-init    # Initialize/verify KDC
devenv tasks run signals:kdc-reset   # Reset KDC database (required after realm renames)
# or: just kdc-reset

Migration from older realms

Prior checkouts used KRBTEST.COM or location-only VISTA.ZNDX.ORG. After pulling env-in-realm naming (DEV.VISTA.ZNDX.ORG):

devenv tasks run signals:kdc-reset
kdestroy   # discard old tickets