Übersicht

DTZ Identity verwaltet drei Dinge: Roles, Identities, und Authentifizierungen für jede Ressource, die sich innerhalb eines Context befindet. Kontexte sind die organisatorischen Einheiten in DTZ; jede Entität gehört zu einem, und die Zugriffskontrolle läuft darüber.

Entity-Relationship-Diagramm der Identität


Kernkonzepte

Kontext

Ein Context (context-…) ist der Container für Ihre Anwendungen, Dienste und Abrechnung. Der Ersteller wird automatisch als Context Admin zugewiesen, und eine Service-Identität wie admin@{context_id}.dtz.rocks wird für die Automation provisioniert.

Identitäten

Eine Identity ist ein Principal (menschlicher Benutzer oder Dienstkonto). Sie binden Rollenzuweisungen an Identitäten.

Rollen (abstrakt vs. konkret)

  • Abstrakte Rollen sind wiederverwendbare Berechtigungssets, die von jedem DTZ-Dienst definiert werden (z. B. „containers admin“, „objectstore admin“, „billing admin“).
  • Konkrete Rollen sind abstrakte Rollen, an einen Scope gebunden (entweder ein Context oder eine Identity) und als role URI ausgedrückt. Diese sind das, was Sie tatsächlich zuweisen.

Beispiele für konkrete Role-URIs:

  • Context-scoped: https://dtz.rocks/containers/admin/{context_id}
  • Identity-scoped: https://dtz.rocks/identity/admin/{identity_id}

Diese Trennung hält die Berechtigungslogik konsistent und macht Zuweisungen kontextbewusst.


Rollenbereiche

Identitätsbezogene Rollen

Betreffen Aktionen an der Identität selbst (z. B. wer ein Passwort setzen oder API-Schlüssel für eine Identität erstellen kann).

Gängige Beispiele:

  • https://dtz.rocks/identity/admin/{identity_id}
  • https://dtz.rocks/billing/admin/{identity_id}
  • https://dtz.rocks/identity/assume/{identity_id}

Kontextbezogene Rollen

Betreffen Aktionen innerhalb eines Kontexts (Deployments, Logs, Object Store, usw.).

Gängige Beispiele:

  • https://dtz.rocks/context/admin/{context_id}
  • https://dtz.rocks/containers/admin/{context_id}
  • https://dtz.rocks/objectstore/admin/{context_id}
  • https://dtz.rocks/observability/admin/{context_id}
  • https://dtz.rocks/containerregistry/admin/{context_id}
  • https://dtz.rocks/rss2email/admin/{context_id}

Jeder DTZ-Dienst kann seine eigenen Rollennamen und -bereiche definieren; die obenstehenden URIs sind beispielhaft.


Wie Berechtigungen bewertet werden

  1. Authentifizieren (wer Sie sind).
  2. Konkrete Rollen auflösen für den Aufrufer (Rollen-URIs auf der Identität).
  3. Autorisieren basierend darauf, ob ein erforderlicher Rollen-URI mit dem Zielbereich (Kontext oder Identität) und der Aktion übereinstimmt.

Beispiel: Zuweisen und Verwenden einer Rolle

  1. Weisen Sie der abstrakten Rolle „containers admin“ einen bestimmten Kontext zu → Sie erhalten eine konkrete Rolle:

https://dtz.rocks/containers/admin/context-abc123

  1. Binden Sie diese Rolle an die Identität alice@example.com.
  2. Wenn Alice die Containers-API innerhalb von context-abc123 aufruft, stimmt die Rollen-URI überein und die Aktion wird autorisiert. Dieselbe Rolle gewährt nicht Rechte in anderen Kontexten.

Authentifizierung

DTZ unterstützt mehrere Auth-Methoden; verwenden Sie die, die zu Ihrem Client und Ihrer Umgebung passt.

API-Schlüssel

  • Schlüssel werden in der Identity-UI erstellt und sind an einen Kontext und eine Identität gebunden.
  • Senden Sie über Header:

X-API-KEY: YOUR_API_KEY

  • Einige Drittanbieter-Integrationen, die keine Header setzen können, können apiKey als Query-Parameter übergeben (nur wenn unvermeidbar verwenden).

Bearer-Tokens (Passwort-Login)

Erhalten Sie ein JWT, indem Sie Benutzername/Passwort per POST senden, und schicken Sie dann Authorization: Bearer ….

Token anfordern:

POST https://identity.dtz.rocks/api/2021-02-21/token/auth
Content-Type: application/json

{
"username": "user",
"password": "password"
}

Token verwenden:

curl -H "Authorization: Bearer eyJhb..." \
  https://identity.dtz.rocks/api/2021-02-21/me

Sie können das JWT auch als Cookie mit dem Namen dtz-auth verwenden. Basic Auth wird für einige Endpunkte unterstützt (apikey:apikey-1234).

Checkliste für den Einstieg

  • Erstellen oder wählen Sie einen Context für Ihre App.
  • Entscheiden Sie, welche abstrakten Rollen Ihre App benötigt, und binden Sie sie in konkrete Rollen im richtigen Scope (Context vs. Identity).
  • Weisen Sie diese konkreten Rollen den Identitäten (Benutzer/Dienstkonten) zu, die sie benötigen.