Panoramica

DTZ Identity gestisce tre elementi: Ruoli, Identità e Autenticazioni per ogni risorsa che risiede all’interno di un Contesto. I contesti sono le unità organizzative in DTZ; ogni entità appartiene a uno di essi e il controllo degli accessi fluisce attraverso di essi.

Identity Entity Relationship Diagram


Concetti principali

Contesto

Un Contesto (context-…) è il contenitore per le tue applicazioni, servizi e la fatturazione. Il creatore viene assegnato automaticamente come Context Admin, e viene fornita un’identità di servizio come admin@{context_id}.dtz.rocks per l’automazione.

Identità

Un’Identità è un principale (utente umano o account di servizio). Le assegnazioni di ruolo vengono associate alle identità.

Ruoli (Astratti vs. Concreti)

  • I ruoli astratti sono insiemi di permessi riutilizzabili definiti da ciascun servizio DTZ (ad es., “containers admin”, “objectstore admin”, “billing admin”).
  • I ruoli concreti sono ruoli astratti vincolati a uno scope (o a un Contesto o a un’Identità) ed espressi come una URI di ruolo. Questi sono quelli che assegni effettivamente.

Esempi di URI di ruolo concreti:

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

Questa separazione mantiene la logica dei permessi coerente rendendo le assegnazioni consapevoli del contesto.


Ambiti dei ruoli

Ruoli con ambito identità

Influenzano azioni sull’identità stessa (ad es., chi può impostare una password o creare chiavi API per un’identità).

Esempi comuni:

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

Ruoli con ambito contesto

Influenzano azioni all’interno di un contesto (distribuzioni, log, object store, ecc.).

Esempi comuni:

  • 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}

Ogni servizio DTZ può definire i propri nomi di ruolo e ambiti; gli URI sopra sono rappresentativi.


Come vengono valutati i permessi

  1. Autenticazione (chi sei).
  2. Risolvi i ruoli concreti per il chiamante (URI di ruolo sull’identità).
  3. Autorizza basandosi sul fatto che un URI di ruolo richiesto corrisponda allo scope di destinazione (contesto o identità) e all’azione.

Esempio: assegnare e usare un ruolo

  1. Assegna il ruolo astratto “containers admin” a uno specifico contesto → ottieni un ruolo concreto:

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

  1. Associa quel ruolo all’identità alice@example.com.
  2. Quando Alice invoca le API dei Containers all’interno di context-abc123, l’URI del ruolo corrisponde e l’azione è autorizzata. Lo stesso ruolo non concede diritti in altri contesti.

Autenticazione

DTZ supporta più metodi di autenticazione; usa quello che si adatta al tuo client e all’ambiente.

Chiavi API

  • Le chiavi vengono create nell’interfaccia Identity e sono vincolate a un contesto e a un’identità.
  • Inviare tramite header:

X-API-KEY: YOUR_API_KEY

  • Alcune integrazioni di terze parti che non possono impostare header possono passare apiKey come parametro di query (usare solo quando inevitabile).

Token Bearer (accesso con password)

Ottieni un JWT facendo POST di username/password, poi invia Authorization: Bearer ….

Request token:

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

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

Use token:

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

Puoi anche usare il JWT come cookie chiamato dtz-auth. L’autenticazione Basic è supportata per alcuni endpoint (apikey:apikey-1234).

Checklist per iniziare

  • Crea o seleziona un Contesto per la tua app.
  • Decidi quali ruoli astratti servono alla tua app e vincolali in ruoli concreti agli ambiti giusti (Contesto vs. Identità).
  • Assegna quei ruoli concreti alle identità (utenti/account di servizio) che ne hanno bisogno.