Autorizzazione SaaS multi-tenant e controllo dell'accesso alle API: opzioni di implementazione e best practice - AWS Guida prescrittiva

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Autorizzazione SaaS multi-tenant e controllo dell'accesso alle API: opzioni di implementazione e best practice

Tabby Ward, Thomas Davis, Gideon Landeman e Tomas Riha, Amazon Web Services ()AWS

Maggio 2024 (storia del documento)

L'autorizzazione e il controllo degli accessi alle API rappresentano una sfida per molte applicazioni software, in particolare per le applicazioni software as a service (SaaS) multi-tenant. Questa complessità è evidente se si considera la proliferazione di API di microservizi che devono essere protette e il gran numero di condizioni di accesso derivanti da tenant, caratteristiche utente e stati delle applicazioni diversi. Per affrontare questi problemi in modo efficace, una soluzione deve imporre il controllo degli accessi attraverso le numerose API presentate dai microservizi, dai livelli di Backend for Frontend (BFF) e altri componenti di un'applicazione SaaS multi-tenant. Questo approccio deve essere accompagnato da un meccanismo in grado di prendere decisioni di accesso complesse sulla base di molti fattori e attributi.

Tradizionalmente, il controllo e l'autorizzazione degli accessi alle API venivano gestiti mediante una logica personalizzata nel codice dell'applicazione. Questo approccio era soggetto a errori e non sicuro, in quanto gli sviluppatori che avevano accesso a questo codice potevano modificare accidentalmente o deliberatamente la logica di autorizzazione, con conseguente accesso non autorizzato. Il controllo delle decisioni prese mediante la logica personalizzata nel codice dell'applicazione era difficile, in quanto i revisori avrebbero dovuto immergersi nella logica personalizzata per determinarne l'efficacia nel rispetto di uno standard particolare. Inoltre, il controllo degli accessi alle API era generalmente superfluo, perché non c'erano così tante API da proteggere. Il cambio di paradigma nella progettazione delle applicazioni per favorire i microservizi e le architetture orientate ai servizi ha aumentato il numero di API che devono utilizzare una forma di autorizzazione e controllo degli accessi. Inoltre, la necessità di mantenere l'accesso basato sui tenant in un'applicazione SaaS multi-tenant presenta ulteriori sfide di autorizzazione per preservare la locazione. Le migliori pratiche descritte in questa guida offrono diversi vantaggi:

  • La logica di autorizzazione può essere centralizzata e scritta in un linguaggio dichiarativo di alto livello che non è specifico di alcun linguaggio di programmazione.

  • La logica di autorizzazione è astratta dal codice dell'applicazione e può essere applicata come modello ripetibile a tutte le API di un'applicazione.

  • L'astrazione impedisce modifiche accidentali da parte degli sviluppatori alla logica di autorizzazione.

  • L'integrazione in un'applicazione SaaS è semplice e coerente.

  • L'astrazione impedisce la necessità di scrivere una logica di autorizzazione personalizzata per ogni endpoint API.

  • Gli audit sono semplificati, poiché un revisore non deve più rivedere il codice per determinare le autorizzazioni.

  • L'approccio delineato in questa guida supporta l'uso di più paradigmi di controllo degli accessi a seconda dei requisiti di un'organizzazione.

  • Questo approccio di autorizzazione e controllo degli accessi offre un modo semplice e diretto per mantenere l'isolamento dei dati dei tenant a livello di API in un'applicazione SaaS.

  • Le migliori pratiche forniscono un approccio coerente all'onboarding e all'offboarding degli inquilini per quanto riguarda l'autorizzazione.

  • Questo approccio offre diversi modelli di implementazione delle autorizzazioni (in pool o in silo), che presentano vantaggi e svantaggi, come illustrato in questa guida.

Obiettivi aziendali specifici

Questa guida prescrittiva descrive modelli di progettazione ripetibili per i controlli di autorizzazione e accesso alle API che possono essere implementati per applicazioni SaaS multi-tenant. Questa guida è destinata a qualsiasi team che sviluppa applicazioni con requisiti di autorizzazione complessi o esigenze rigorose di controllo degli accessi alle API. L'architettura descrive in dettaglio la creazione di un punto di decisione delle politiche (PDP) o di un motore di politica e l'integrazione dei punti di applicazione delle politiche (PEP) nelle API. Vengono discusse due opzioni specifiche per la creazione di un PDP: utilizzare Amazon Verified Permissions con Cedar SDK e utilizzare Open Policy Agent (OPA) con il linguaggio di policy Rego. La guida illustra anche come prendere decisioni di accesso basate su un modello di controllo degli accessi basato sugli attributi (ABAC) o un modello di controllo degli accessi basato sui ruoli (RBAC) o una combinazione di entrambi i modelli. Ti consigliamo di utilizzare i modelli e i concetti di progettazione forniti in questa guida per informare e standardizzare l'implementazione dell'autorizzazione e del controllo dell'accesso alle API nelle applicazioni SaaS multi-tenant. Questa guida aiuta a raggiungere i seguenti risultati aziendali:

  • Architettura di autorizzazione API standardizzata per applicazioni SaaS multi-tenant: questa architettura distingue tra tre componenti: il punto di amministrazione delle politiche (PAP) in cui vengono archiviate e gestite le politiche, il punto decisionale delle politiche (PDP) in cui tali politiche vengono valutate per raggiungere una decisione di autorizzazione e il punto di applicazione delle politiche (PEP) che applica tale decisione. Il servizio di autorizzazione ospitato, Verified Permissions, funge sia da PAP che da PDP. In alternativa, puoi creare tu stesso il tuo PDP utilizzando un motore open source come Cedar o OPA.

  • Separazione della logica di autorizzazione dalle applicazioni: la logica di autorizzazione, se incorporata nel codice dell'applicazione o implementata tramite un meccanismo di applicazione ad hoc, può essere soggetta a modifiche accidentali o dolose che causano l'accesso involontario ai dati tra tenant o altre violazioni della sicurezza. Per contribuire a mitigare queste possibilità, è possibile utilizzare un PAP, ad esempio Verified Permissions, per archiviare le politiche di autorizzazione indipendentemente dal codice dell'applicazione e applicare una solida governance alla gestione di tali politiche. Le politiche possono essere gestite centralmente in un linguaggio dichiarativo di alto livello, il che rende la gestione della logica di autorizzazione molto più semplice rispetto a quando si incorporano le politiche in più sezioni del codice dell'applicazione. Questo approccio garantisce inoltre che gli aggiornamenti vengano applicati in modo coerente.

  • Approccio flessibile ai modelli di controllo degli accessi: il controllo degli accessi basato sui ruoli (RBAC), il controllo degli accessi basato sugli attributi (ABAC) o una combinazione di entrambi i modelli sono tutti approcci validi al controllo degli accessi. Questi modelli cercano di soddisfare i requisiti di autorizzazione di un'azienda utilizzando approcci diversi. Questa guida confronta e mette a confronto questi modelli per aiutarvi a scegliere un modello adatto alla vostra organizzazione. La guida illustra anche come questi modelli si applicano a diversi linguaggi di policy di autorizzazione, come OPA/Rego e Cedar. Le architetture illustrate in questa guida consentono di adottare con successo uno o entrambi i modelli.

  • Controllo rigoroso dell'accesso alle API: questa guida fornisce un metodo per proteggere le API in modo coerente e pervasivo in un'applicazione con il minimo sforzo. Ciò è particolarmente utile per le architetture applicative orientate ai servizi o ai microservizi che generalmente utilizzano un gran numero di API per facilitare le comunicazioni tra applicazioni. Il rigoroso controllo degli accessi alle API aiuta ad aumentare la sicurezza di un'applicazione e la rende meno vulnerabile agli attacchi o allo sfruttamento.

Isolamento dei tenant e autorizzazione multi-tenant

Questa guida fa riferimento ai concetti di isolamento dei tenant e di autorizzazione multi-tenant. L'isolamento dei tenant si riferisce ai meccanismi espliciti utilizzati in un sistema SaaS per garantire che le risorse di ciascun tenant, anche quando operano su un'infrastruttura condivisa, siano isolate. L'autorizzazione multi-tenant si riferisce all'autorizzazione delle azioni in entrata e alla prevenzione che vengano implementate sul tenant sbagliato. Un utente ipotetico potrebbe essere autenticato e autorizzato e continuare ad accedere alle risorse di un altro tenant. L'autenticazione e l'autorizzazione non bloccheranno questo accesso: è necessario implementare l'isolamento dei tenant per raggiungere questo obiettivo. Per una discussione più approfondita delle differenze tra questi due concetti, consulta la sezione sull'isolamento dei tenant del white paper SaaS Architecture Fundamentals.