Übersicht

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

Identity Entity Relationship Diagram


Kernkonzepte

Kontext

Ein Kontext (context-…) ist der Container für Ihre Anwendungen, Dienste und Abrechnung. Der Ersteller wird automatisch zum Context Admin ernannt, und eine Service-Identität wie admin@{context_id}.dtz.rocks wird zur Automatisierung bereitgestellt.

Identitäten

Eine Identität ist ein Principal (menschlicher Benutzer oder Service-Konto). Rollen-Zuweisungen werden an Identitäten gebunden.

Rollen (Abstrakt vs. Konkret)

  • Abstrakte Rollen sind wiederverwendbare Berechtigungssätze, die von jedem DTZ-Dienst definiert werden (z. B. „containers admin“, „objectstore admin“, „billing admin“).
  • Konkrete Rollen sind abstrakte Rollen, die an einen Scope gebunden sind (entweder ein Kontext oder eine Identität) und als Role URI ausgedrückt werden. Diese weisen Sie tatsächlich zu.

Beispiele für konkrete Role-URIs:

  • Kontext-bezogen: https://dtz.rocks/containers/admin/{context_id}
  • Identitäts-bezogen: https://dtz.rocks/identity/admin/{identity_id}

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


Rollenscopes

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).

Typische 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 Kontextes (Deployments, Logs, Object Store usw.).

Typische 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 eigene Rollennamen und Scopes definieren; die obigen URIs sind repräsentativ.


Wie Berechtigungen ausgewertet werden

  1. Authentifizieren (wer Sie sind).
  2. Konkrete Rollen auflösen für den Aufrufer (Role-URIs zur Identität).
  3. Autorisieren basierend darauf, ob ein erforderlicher Role-URI zum Zielscope (Kontext oder Identität) und zur Aktion passt.

Beispiel: Zuweisen und Verwenden einer Rolle

  1. Weisen Sie die abstrakte Rolle „containers admin“ einem spezifischen 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 der Role-URI überein und die Aktion wird autorisiert. Die gleiche Rolle erlaubt keine Rechte in anderen Kontexten.

Authentifizierung

DTZ unterstützt mehrere Authentifizierungsmethoden; verwenden Sie diejenige, 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 sie im Header:

X-API-KEY: YOUR_API_KEY

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

Bearer Tokens (Passwort-Login)

Erhalten Sie ein JWT durch POST von Benutzername/Passwort, und senden 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 zum Einstieg

  • Erstellen oder wählen Sie einen Kontext für Ihre App.
  • Entscheiden Sie, welche abstrakten Rollen Ihre App benötigt, und binden Sie sie in konkrete Rollen mit den richtigen Scopes (Kontext vs. Identität).
  • Weisen Sie diese konkreten Rollen den Identitäten (Benutzern/Service-Konten) zu, die sie benötigen.