RBAC vs Isolamento dei Tenant: Due Confini di Sicurezza Diversi

RBAC e isolamento dei tenant risolvono due problemi di sicurezza diversi nei sistemi multi-tenant. Il controllo degli accessi basato sui ruoli (RBAC) determina cosa è consentito fare a un principal autenticato, come leggere ordini, modificare prodotti o gestire utenti. L'isolamento dei tenant determina a quali dati, risorse e contesto di esecuzione di quale tenant quel principal è autorizzato ad accedere. Un utente può essere correttamente autenticato e correttamente assegnato a un ruolo RBAC e tuttavia subire un fallimento di sicurezza se l'applicazione consente a quel ruolo di operare sulle risorse di un altro tenant.
Cosa controlla realmente RBAC
RBAC è un modello di autorizzazione in cui i permessi sono associati ai ruoli e gli utenti sono assegnati a tali ruoli. Il ruolo funge da astrazione amministrativa tra identità e permessi.
Il lavoro classico di NIST su RBAC formalizza questo concetto attorno a utenti, ruoli, permessi, operazioni e oggetti. Il vantaggio pratico è che un'organizzazione può gestire l'autorizzazione attraverso ruoli relativamente stabili basati su mansioni o responsabilità, invece di collegare ogni permesso direttamente a ogni utente.
Un ruolo come EDITOR può quindi significare: può leggere contenuti, scrivere contenuti e pubblicare contenuti. Un ruolo come ACCOUNTANT può significare: può leggere dati di fatturazione, riconciliare fatture e approvare regolamenti.
Cosa controlla realmente l'isolamento dei tenant
L'isolamento dei tenant è l'insieme dei meccanismi che impediscono a un tenant di leggere, modificare, influenzare o ricevere accidentalmente le risorse di un altro tenant in un sistema condiviso.
Il confine protetto è più ampio delle righe del database. Lo stato specifico di un tenant può esistere in tabelle relazionali, object storage, indici vettoriali, cache, indici di ricerca, messaggi in coda, file, artefatti temporanei, job in background, analisi, limiti di velocità e risorse infrastrutturali.
Le linee guida AWS per SaaS rendono esplicita la distinzione: l'autorizzazione concede l'accesso alle risorse, mentre l'isolamento dei tenant garantisce che tali risorse non possano attraversare il confine del tenant sbagliato anche quando l'infrastruttura è condivisa.
L'esempio più semplice
Supponiamo che Alice sia un'amministratrice del Tenant A e Bob sia un amministratore del Tenant B. Entrambi gli utenti possiedono legittimamente lo stesso ruolo ADMIN.
RBAC può correttamente concludere che entrambi gli utenti possono eseguire un'operazione come users.read. Ma quando Alice richiede l'ID utente 847, l'applicazione deve comunque verificare che l'utente 847 appartenga al Tenant A.
Se l'API controlla solo "Alice ha ADMIN" e poi esegue SELECT * FROM users WHERE id = 847, RBAC ha avuto successo mentre l'isolamento dei tenant ha fallito.
Una decisione di autorizzazione multi-tenant corretta
Dove si ferma l'esempio semplice
I sistemi reali spesso contengono diverse classi di identità: utenti tenant, amministratori di piattaforma, worker in background, integrazioni, agenti e servizi operativi cross-tenant. Alcune di queste attraversano legittimamente i confini dei tenant.
Ciò non elimina la necessità di isolamento. Significa che l'autorità cross-tenant deve essere esplicita, ristretta e verificabile separatamente, invece di emergere accidentalmente da un ruolo globale o da una connessione al database senza scope.
L'isolamento dei tenant può anche variare a seconda del livello. Un prodotto può condividere i server applicativi separando i database, oppure utilizzare un database condiviso con policy a livello di riga, offrendo al contempo ai tenant premium storage o capacità di calcolo isolati. Non esiste un'unica topologia di isolamento universale.
RBAC vs isolamento dei tenant
Due diverse dimensioni di sicurezza
| RBAC | Isolamento dei tenant | |
|---|---|---|
| Domanda principale | ||
| Unità tipica | ||
| Esempio | ||
| Errore tipico | ||
| Implementazione tipica | ||
| Può esistere da solo? |
Autenticazione, autorizzazione e isolamento sono tre controlli diversi
| Livello | Domanda | Esempio di errore |
|---|---|---|
| Autenticazione | Chi è questo principale? | L'attaccante si spaccia per Alice |
| Autorizzazione / RBAC | Questo principale può eseguire questa operazione? | Un visualizzatore può eliminare utenti |
| Isolamento dei tenant | Questa operazione può raggiungere questo confine di tenant/risorsa? | L'amministratore del Tenant A legge l'ordine del Tenant B |
Questi controlli sono correlati ma non sostituibili. L'autenticazione può essere perfetta mentre l'autorizzazione fallisce. L'autorizzazione può essere corretta mentre l'isolamento dei tenant fallisce. Un percorso di richiesta SaaS sicuro necessita di tutti i confini applicabili.
I ruoli necessitano di uno scope
La parola ADMIN è incompleta senza scope. Può significare amministratore di piattaforma, amministratore di tenant, amministratore di progetto, amministratore di workspace o amministratore di un sottosistema.
Nei sistemi multi-tenant, l'assegnazione dei ruoli dovrebbe normalmente essere associata all'appartenenza al tenant o a un altro scope esplicito della risorsa. Lo stesso utente può legittimamente essere ADMIN nel Tenant A e VIEWER nel Tenant B.
Un modello di ruoli globale che ignora questa distinzione può creare una fuga di privilegi anche quando la mappa dei permessi stessa è corretta.
Il contesto del tenant deve provenire da un percorso attendibile
Un ID tenant fornito dal client è utile come selettore, ma non è prova di autorità. Il server deve derivare o verificare l'appartenenza al tenant rispetto all'identità autenticata e ai dati di autorizzazione correnti.
Le attuali linee guida multi-tenant di OWASP raccomandano di stabilire il contesto del tenant all'inizio del ciclo di vita della richiesta e mettono esplicitamente in guardia dal trattare header del client o parametri della richiesta come prova di autorizzazione.
Questo è importante perché una banale modifica della richiesta da tenant=A a tenant=B non deve essere sufficiente per superare il confine di isolamento.
Lo scope del tenant appartiene alla ricerca della risorsa
Un modello comune di isolamento a livello applicativo consiste nell'includere lo scope del tenant nella stessa query che risolve la risorsa.
| Ricerca debole | Ricerca più robusta con scope del tenant |
|---|---|
| findFirst({ where: { id } }) | findFirst({ where: { id, tenantId } }) |
| UPDATE orders SET ... WHERE id = ? | UPDATE orders SET ... WHERE id = ? AND tenant_id = ? |
| cache.get('user:' + id) | cache.get('tenant:' + tenantId + ':user:' + id) |
Questo modello non è l'unico meccanismo di isolamento possibile, ma mantiene la proprietà del tenant vicina all'operazione di accesso ai dati e impedisce che un ID oggetto diventi una capability cross-tenant.
I controlli applicativi sono utili, ma l'isolamento non dovrebbe dipendere da un comportamento perfetto degli sviluppatori
Le linee guida sull'isolamento di AWS mettono esplicitamente in guardia dal lasciare l'applicazione dell'isolamento solo agli sviluppatori dei servizi. In una grande codebase, prima o poi una query, una chiave di cache o un percorso di un worker potrebbe omettere lo scope del tenant.
La difesa in profondità può quindi spostare l'isolamento in middleware condiviso, livelli repository/service, motori di policy, Row-Level Security del database, credenziali dedicate, schemi separati o database separati a seconda del rischio e dell'architettura.
Strategie di isolamento del database
| Strategia | Confine | Forza / compromesso |
|---|---|---|
| Tabelle condivise + chiave tenant | Policy a livello di riga/applicazione | Efficiente dal punto di vista operativo; richiede uno scoping esaustivo del tenant e test solidi |
| Tabelle condivise + RLS del database | Confine della policy del database | Riduce la dipendenza da ogni query applicativa; richiede ruoli corretti, contesto tenant di sessione/transazione e copertura delle policy |
| Schemi separati | Confine di namespace / ruolo DB | Separazione logica più forte; maggiore complessità operativa |
| Database separati | Confine di database / credenziali | Isolamento forte e gestione del blast radius più semplice; costi di provisioning e operativi più elevati |
| Infrastruttura/account separati | Confine infrastrutturale | Separazione a grana grossa più forte; costi e overhead operativo più elevati |
| Ibrido | Per carico di lavoro/classe di dati | Consente un isolamento più forte solo dove rischio/conformità lo giustificano |
L'attuale Multi-Tenant Security Cheat Sheet di OWASP elenca database separati, schemi separati, tabelle condivise con controlli a livello di riga e modelli ibridi. Il modello corretto dipende dal livello di minaccia, dalla conformità, dalle prestazioni e dal costo operativo.
PostgreSQL Row-Level Security può fornire difesa in profondità
Con tabelle condivise, PostgreSQL Row-Level Security può applicare un predicato tenant a livello di database, così le query ordinarie non possono vedere righe al di fuori della policy del tenant attivo.
Tuttavia, RLS non è magia. I superuser di PostgreSQL e i ruoli con BYPASSRLS possono bypassare le policy a livello di riga. OWASP raccomanda quindi di utilizzare un ruolo con privilegi minimi per il percorso di richiesta e di testare la stessa modalità di connessione/pooling usata in produzione.
Il riutilizzo delle connessioni è un altro caso limite importante: il contesto del tenant deve essere impostato e reimpostato in modo sicuro per ogni transazione/richiesta, così una connessione in pool non può far trapelare lo stato di un tenant precedente.
L'isolamento del tenant deve includere le cache
Una query al database può avere uno scope perfetto e comunque far trapelare dati attraverso una chiave di cache condivisa.
Se user:42 esiste sia nel Tenant A sia nel Tenant B, una chiave di cache globale può restituire il valore del tenant sbagliato. Le chiavi di cache sensibili al tenant dovrebbero includere ogni attributo che modifica la visibilità o la semantica del risultato, comunemente tenant, utente, locale, set di funzionalità o versione dei permessi.
La partizione della cache è difesa in profondità, non un sostituto dell'autorizzazione. La richiesta deve comunque essere autorizzata prima che venga restituito il contenuto protetto memorizzato in cache.
File e object storage necessitano di un proprio confine di tenant
L'object storage dovrebbe distinguere oggetti globali, con ambito tenant e con ambito utente. Un prefisso di cartella da solo è solo una convenzione di denominazione, a meno che la policy di accesso non vincoli effettivamente letture e scritture.
Progettazioni più robuste possono utilizzare chiavi oggetto tenant-aware, policy di bucket, bucket/account separati o chiavi di cifratura specifiche per tenant, laddove il rischio o la conformità richiedano un isolamento più forte.
Gli URL firmati devono essere autorizzati prima dell'emissione e limitati all'oggetto e all'operazione esatti. Il possesso di un identificatore di oggetto non dovrebbe di per sé concedere accesso cross-tenant.
I job in background e le code possono rompere l'isolamento
I job asincroni spesso abbandonano il contesto della richiesta HTTP originale, il che rende facile gestire male la propagazione del tenant. Un messaggio in coda che contiene tenantId non è prova sufficiente che il produttore fosse autorizzato.
Il worker dovrebbe portare un'identità di servizio/utente verificata o una busta di job attendibile, ristabilire il contesto del tenant e riautorizzare le operazioni consequenziali al confine del consumatore.
L'isolamento del tenant include anche la disponibilità. Un tenant non dovrebbe essere in grado di monopolizzare worker, code, pool di connessioni o risorse di calcolo condivise in modi che degradino materialmente gli altri tenant.
Ricerca e RAG necessitano di retrieval tenant-aware
L'AI multi-tenant introduce un'altra copia del problema di isolamento. I documenti possono essere suddivisi in chunk, incorporati e memorizzati in un indice vettoriale dopo l'ingestione.
L'attuale guida alla sicurezza RAG di OWASP afferma che il controllo degli accessi deve essere applicato al momento del retrieval e che i chunk del Tenant A non devono essere recuperati da query del Tenant B. Non si può semplicemente presumere che i permessi a livello di documento sopravvivano automaticamente alla suddivisione in chunk.
L'indice vettoriale necessita quindi di metadati di tenant/accesso o di collezioni fisicamente/logicamente separate in base al design di isolamento. I filtri di retrieval dovrebbero essere applicati prima che contenuti non autorizzati possano entrare nel contesto del modello.
I dati derivati ereditano la sensibilità del tenant
Embedding, indici di ricerca, miniature, riepiloghi generati, cache, righe di analytics e risposte AI derivano dai dati di origine. Il loro ambito di tenant dovrebbe seguire la fonte, a meno che una trasformazione esplicita crei un artefatto condiviso/globale legittimo.
La cancellazione e l'offboarding devono quindi propagarsi oltre la riga canonica. Rimuovere un documento del tenant lasciando chunk ricercabili o riepiloghi in cache può mantenere un'esposizione cross-tenant o successiva alla conservazione.
Non tutto appartiene a un tenant
Le piattaforme multi-tenant hanno spesso risorse intenzionalmente globali: tassonomie di prodotto, template pubblici, permessi di sistema, definizioni di funzionalità o contenuti pubblici.
Il modello più sicuro è la classificazione esplicita: globale, con ambito tenant, con ambito utente o esplicitamente cross-tenant. Le risorse ambigue sono il punto in cui inizia una fuga di dati accidentale.
Un oggetto condiviso intenzionalmente dovrebbe avere una motivazione documentata per essere globale, invece di mancare semplicemente di un'associazione a un tenant.
Gli amministratori della piattaforma richiedono un modello di autorità diverso
Un operatore della piattaforma potrebbe aver bisogno di ispezionare più tenant per supporto, conformità o operazioni infrastrutturali. Modellare questo come un normale ADMIN di tenant con accesso accidentale al database globale indebolisce sia la sicurezza che l'auditabilità.
Un design migliore utilizza un'identità di piattaforma distinta o un permesso cross-tenant esplicito, autenticazione più forte, limitazione dello scopo, audit dettagliato e, ove appropriato, controlli di approvazione o break-glass.
L'accesso cross-tenant dovrebbe quindi essere una capacità denominata, non l'assenza di un filtro tenant.
RBAC può essere combinato con gli attributi
Alcune decisioni dipendono da più del ruolo. L'appartenenza al tenant, la regione, il proprietario della risorsa, il livello di abbonamento, il tempo, l'appartenenza al progetto o la classificazione dei dati possono tutti influenzare l'accesso.
RBAC e ABAC non si escludono a vicenda. Le attuali linee guida di AWS sull'autorizzazione multi-tenant discutono modelli RBAC, ABAC e ibridi. Un ruolo può definire una responsabilità ampia mentre gli attributi limitano quale istanza concreta di risorsa può essere accessibile.
La regola architetturale chiave rimane: non codificare l'isolamento del tenant solo come un nome di ruolo incidentale se l'identità del tenant è un confine di risorsa di prima classe.
Le decisioni di autorizzazione sono almeno bidimensionali
| Principale | Permesso del ruolo | Relazione con il tenant | Decisione |
|---|---|---|---|
| Alice | orders.read | L'ordine appartiene al tenant di Alice | Consenti |
| Alice | orders.read | L'ordine appartiene a un altro tenant | Nega |
| Alice | orders.write | L'ordine appartiene al tenant di Alice | Consenti se il ruolo include la scrittura |
| Alice | orders.write | L'ordine appartiene a un altro tenant | Nega |
| Supporto piattaforma | support.cross_tenant.read | Ambito di supporto esplicito + tenant di destinazione verificato | Potenzialmente consenti secondo la policy della piattaforma |
| Worker in background | orders.process | Ambito di servizio attendibile per il tenant del job | Consenti solo per il tenant del job verificato |
Evidenza dell'implementazione originale: Aaasaasa AI CMS
Il servizio RBAC definisce codici di permesso tipizzati come cms.content.read, shop.orders.write, billing.reconcile e users.roles. I ruoli di sistema mappano quei permessi in insiemi di responsabilità denominati.
I record dei ruoli vengono creati e risolti con un tenantId. I ruoli di sistema vengono inseriti o aggiornati utilizzando un'identità composita tenant/codice, e l'elenco dei ruoli è filtrato per tenant.
L'aggiornamento e l'eliminazione dei ruoli risolvono prima il ruolo utilizzando sia l'ID del ruolo che l'ID del tenant. Anche le assegnazioni utente-ruolo vengono memorizzate e sostituite nel contesto del tenant corrente.
La risoluzione dei permessi legge le assegnazioni esplicite utente-ruolo con ambito sia tenantId che userId. Questo impedisce che l'assegnazione di ruolo di un tenant diventi automaticamente l'assegnazione di ruolo di un altro tenant.
A livello API, le route RBAC amministrative risolvono un contesto tenant prima di creare o modificare ruoli. Questa è la direzione corretta: l'amministrazione dei permessi stessa deve rispettare la tenancy.
| Pattern di implementazione osservato | Significato di sicurezza |
|---|---|
| Codici di permesso tipizzati | Il vocabolario delle operazioni RBAC è esplicito |
| Mappe ruolo di sistema → permessi | I ruoli aggregano permessi invece di codificare direttamente gli utenti |
| Identità del ruolo tenantId_code | Lo stesso ruolo logico può esistere separatamente per tenant |
| La ricerca del ruolo usa id + tenantId | La modifica del ruolo è limitata al tenant |
| La relazione utente-ruolo memorizza tenantId | L'appartenenza non è inferita globalmente dal solo ruolo |
| La risoluzione dei permessi usa tenantId + userId | L'autorizzazione è valutata all'interno del contesto tenant |
Perché questa distinzione conta ancora di più per gli agenti AI
Gli agenti AI possono trasformare un errore di permesso in una sequenza di azioni. Se a un agente viene fornito uno strumento ampio orders.read senza applicazione con ambito tenant, un errore di ragionamento o di prompt-injection può causare letture cross-tenant alla velocità della macchina.
Le descrizioni degli strumenti dell'agente possono menzionare vincoli tenant, ma l'applicazione deve comunque avvenire nel runtime/servizio/strato dati attendibile. Le istruzioni in linguaggio naturale non sono un confine di autorizzazione.
Lo stesso vale per RAG: un agente può avere il permesso di usare lo strumento di ricerca mentre il backend di ricerca deve comunque impedire che la query del Tenant A restituisca i chunk del Tenant B.
Testare RBAC e isolamento tenant separatamente
| Famiglia di test | Cosa dovrebbe provare |
|---|---|
| Test di retrocessione del ruolo | Un utente senza un permesso non può eseguire l'operazione nemmeno all'interno del proprio tenant |
| Test oggetto cross-tenant | Un utente con il ruolo corretto non può comunque accedere allo stesso tipo di risorsa in un altro tenant |
| Manomissione dell'identificatore | La modifica degli ID oggetto/tenant non attraversa l'ambito |
| Test endpoint di elenco/in blocco | Le query ampie restituiscono solo dati tenant autorizzati |
| Test riutilizzo cache | Due tenant che utilizzano processi/connessioni riutilizzati non ricevono mai lo stato in cache dell'altro |
| Test ruolo richiesta RLS | Il ruolo di richiesta di produzione non può bypassare le politiche di riga |
| Test worker asincrono | Il contesto tenant sopravvive all'accodamento e viene rivalidato al consumo |
| Test recupero vettoriale | La query del Tenant A non recupera mai i chunk del Tenant B |
| Test amministratore piattaforma | La capacità cross-tenant è esplicita, ristretta e verificabile |
| Test offboarding | I dati del tenant e gli indici/cache derivati vengono rimossi secondo la politica |
La guida OWASP sui test di regressione dell'autorizzazione menziona specificamente i test sui confini cross-tenant perché modifiche al codice in caching, query o servizi condivisi possono rompere silenziosamente l'isolamento anche quando i test dei ruoli continuano a passare.
Modalità di errore comuni
| Modalità di errore | Perché fallisce |
|---|---|
| Controlla il ruolo ma non il tenant | Un ruolo valido diventa autorità cross-tenant |
| Fidarsi dell'ID tenant dalla richiesta | Il client controlla il selettore di isolamento |
| Limitare l'interfaccia utente ma non l'API | I pulsanti nascosti non proteggono le risorse backend |
| Endpoint di dettaglio tenant-aware, endpoint di elenco senza ambito | Le letture in blocco fanno trapelare altri tenant |
| Filtro tenant nella maggior parte delle query | Un percorso dimenticato rompe il confine |
| Chiavi cache globali | L'isolamento corretto del database viene bypassato dai dati in cache |
| Indice vettoriale condiviso senza filtri di metadati applicati | RAG recupera i chunk di un altro tenant |
| ID tenant del messaggio in coda trattato come autorizzazione | Un job falsificato o prodotto erroneamente può attraversare il confine tenant |
| Amministratore piattaforma modellato come ADMIN ordinario | Il potere cross-tenant diventa implicito e difficile da verificare |
| Ruolo copiato globalmente tra appartenenze tenant | L'utente riceve permessi in tenant in cui non è mai stato assegnato |
| Database separati ma credenziale privilegiata condivisa | L'applicazione può comunque attraversare i database se la sua credenziale è troppo ampia |
| RLS con ruolo di richiesta BYPASSRLS | La politica del database esiste ma non protegge il percorso di richiesta effettivo |
| UUID casuali trattati come isolamento | Gli identificatori difficili da indovinare riducono l'enumerazione ma non autorizzano l'accesso |
Idee sbagliate comuni
| Idea sbagliata | Correzione |
|---|---|
| “RBAC fornisce l'isolamento tenant.” | RBAC controlla i permessi; l'isolamento richiede anche l'ambito tenant/risorsa. |
| “Se l'utente è un amministratore, i controlli tenant sono superflui.” | L'autorità di amministratore deve comunque avere un ambito esplicito. |
| “L'ID tenant nel JWT è sufficiente.” | Può essere un input attendibile solo se validato e applicato in modo coerente a ogni percorso di risorsa protetto. |
| “Database separati rimuovono i requisiti di autorizzazione.” | Gli utenti hanno comunque bisogno di permessi a livello di operazione all'interno del loro tenant. |
| “Una colonna tenant_id significa che il sistema è isolato.” | Il campo aiuta solo se i percorsi di accesso lo applicano. |
| “Gli UUID impediscono l'accesso cross-tenant.” | Gli identificatori imprevedibili sono difesa in profondità, non autorizzazione. |
| “RLS significa che il codice dell'applicazione non ha bisogno di controlli di sicurezza.” | L'autorizzazione dell'applicazione, i ruoli DB corretti e la copertura delle politiche contano ancora. |
| “Un unico database vettoriale condiviso è insicuro.” | Può essere sicuro se l'isolamento è applicabile e verificato; la separazione fisica è un'opzione, non l'unica. |
| “Il supporto piattaforma ha bisogno di ADMIN globale.” | Il supporto cross-tenant dovrebbe essere un'autorità distinta, vincolata e verificabile. |
| “I servizi interni possono saltare i controlli tenant.” | I percorsi interni possono comunque essere compromessi o mal configurati e devono preservare il contesto tenant. |
Una sequenza di progettazione pratica
Progettare permessi e isolamento come dimensioni separate
Checklist RBAC + isolamento tenant
| Domanda | Risposta attesa |
|---|---|
| Chi è il principale? | Identità utente/servizio/agente autenticata |
| Quale contesto tenant si applica? | Appartenenza verificata dal server o ambito di servizio |
| Quale operazione è richiesta? | Permesso tipizzato o azione di policy |
| Il principale ha quel permesso? | Decisione ruolo/policy |
| Chi possiede la risorsa target? | Classificazione esplicita tenant/globale/utente |
| L'ambito della risorsa corrisponde all'autorità? | Ricerca/policy tenant-aware |
| Lo storage può bypassare i controlli dell'applicazione? | Decisione di difesa in profondità documentata |
| Le cache sono sicure per il tenant? | Chiavi/namespace e autorizzazione preservano l'ambito tenant |
| File/blob sono sicuri per il tenant? | La policy degli oggetti e l'emissione di URL firmati applicano l'ambito |
| I job asincroni sono sicuri per il tenant? | Il contesto verificato si propaga e viene rivalidato |
| RAG/ricerca è sicuro per il tenant? | Isolamento di metadati/collezioni applicato prima del contesto del modello |
| Gli amministratori cross-tenant sono espliciti? | Autorità, controlli e audit separati |
| Le credenziali ordinarie possono bypassare l'isolamento? | No, o percorso eccezionale strettamente documentato |
| I test negativi cross-tenant sono automatizzati? | Sì per ogni strato di accesso rilevante |
Casi limite e limitazioni
Un utente può appartenere a più tenant. Il tenant corrente dovrebbe quindi essere un contesto di esecuzione esplicito, non dedotto permanentemente dall'account utente.
Alcune risorse sono intenzionalmente condivise tra tenant selezionati, come spazi di collaborazione o dati di consorzio. Ciò richiede un modello di condivisione esplicito; fingere che la risorsa appartenga a un tenant e aggiungere eccezioni in seguito di solito crea autorizzazioni ambigue.
L'isolamento da vicini rumorosi è correlato ma diverso dall'isolamento di riservatezza. Un tenant potrebbe non vedere mai i dati di un altro tenant e tuttavia esaurire CPU condivisa, capacità di coda o connessioni al database. I limiti di velocità e le quote di risorse possono quindi essere tenant-aware come confine di disponibilità.
L'isolamento fisico non è automaticamente sicuro se le credenziali del piano di controllo o i percorsi amministrativi possono attraversare i confini. L'isolamento logico non è automaticamente debole se le politiche sono applicate centralmente, con privilegi minimi e testate a fondo.
I requisiti di isolamento dei tenant possono differire per classe di dati. Dati di catalogo pubblici, record di fatturazione e documenti AI privati possono giustificare confini di archiviazione e crittografia diversi all'interno dello stesso prodotto SaaS.
Cosa cambierebbe questa risposta?
L'implementazione esatta cambia con l'architettura: API serverless, Kubernetes, PostgreSQL, object storage, database vettoriali e motori di policy espongono primitive di isolamento diverse.
La forza richiesta cambia anche con la regolamentazione, i contratti dei clienti, la sensibilità dei dati, il modello di minaccia e la scala operativa. Alcuni tenant possono giustificare database o infrastrutture siloed mentre altri condividono risorse in pool.
La distinzione concettuale non cambia: il permesso di eseguire un'operazione non è la stessa cosa del permesso di attraversare un confine di tenant.
Conoscenza canonica correlata
S01 è un prerequisito di confine di sicurezza per Enterprise AI Architecture e AI Governance. Una volta che strumenti AI, RAG o agenti operano su dati multi-tenant, l'identità del tenant deve viaggiare attraverso il recupero, l'esecuzione degli strumenti, la memoria, le cache e le tracce di audit.
Si collega anche direttamente ad Agentic AI: la capacità degli strumenti e il permesso del ruolo devono comunque essere vincolati dalla proprietà del tenant prima che un agente possa leggere o modificare risorse aziendali.
Per RAG, l'isolamento dei tenant deve essere applicato prima che i chunk protetti raggiungano il contesto del modello.
Domande frequenti
FAQ su RBAC vs isolamento dei tenant
Qual è la differenza tra RBAC e isolamento dei tenant?
Un ruolo ADMIN consente automaticamente l'accesso a tutti i tenant?
L'autenticazione è sufficiente per l'isolamento dei tenant?
Il tenantId dovrebbe essere memorizzato nel JWT?
Ho bisogno di un database separato per tenant?
PostgreSQL RLS può sostituire i filtri tenant nel codice dell'applicazione?
Come dovrebbe RAG applicare l'isolamento dei tenant?
Un utente può avere ruoli diversi in tenant diversi?
Qual è il miglior test per l'isolamento dei tenant?
Glossario
Termini chiave di sicurezza multi-tenant
- RBAC
- Role-Based Access Control: un modello di autorizzazione che associa i permessi ai ruoli e assegna utenti o principal a tali ruoli.
- Tenant
- Un cliente, organizzazione, workspace o altro consumatore logico isolato di un sistema multi-tenant condiviso.
- Isolamento del tenant
- Meccanismi che impediscono a un tenant di accedere, modificare o ricevere le risorse di un altro tenant in un sistema condiviso.
- Autenticazione
- Verifica dell'identità di un utente, servizio o altro principal.
- Permesso
- Un'operazione o capacità consentita e definita, come orders.read o users.write.
- Ruolo
- Un raggruppamento denominato di permessi associato a una responsabilità o funzione.
- ABAC
- Attribute-Based Access Control: autorizzazione basata su attributi del principal, della risorsa, dell'azione o dell'ambiente.
- Sicurezza a livello di riga
- Meccanismo di policy del database che limita quali righe un ruolo o una sessione del database può leggere o modificare.
- Accesso cross-tenant
- Qualsiasi percorso di accesso in cui un principal che opera in un contesto tenant raggiunge risorse appartenenti a un altro tenant.
- Amministratore della piattaforma
- Un'identità operativa privilegiata con autorità esplicitamente modellata che può estendersi su più tenant.
- Contesto del tenant
- L'ambito del tenant verificato sotto il quale viene eseguita la richiesta, il job o l'operazione dell'agente corrente.
Conclusione
RBAC e isolamento del tenant sono meccanismi di sicurezza complementari, non in competizione. RBAC struttura il permesso operativo; l'isolamento del tenant vincola il confine delle risorse entro cui tale permesso può essere applicato.
Una richiesta multi-tenant robusta necessita quindi di più di "l'utente ha il ruolo ADMIN". Richiede un principal verificato, un contesto tenant verificato, un'operazione consentita, un target con ambito tenant e l'applicazione a ogni livello di risorsa che può contenere dati di proprietà del tenant.
La regola affidabile più breve è: autorizza l'azione, poi isola l'ambito — e non presumere mai che una dimostri l'altra.
Fonti primarie e linee guida attuali
Le fonti seguenti supportano la definizione di RBAC e le linee guida attuali sull'isolamento del tenant. La sezione Aaasaasa AI CMS è una prova di implementazione originale ed è intenzionalmente limitata ai pattern di codice che sono stati verificati.
NIST — Role Based Access ControlPanoramica NIST dei modelli RBAC e dello standard INCITS RBAC, inclusi utenti, ruoli, permessi, operazioni e oggetti.
NIST CSRC — Glossario RBACDefinizioni attuali del glossario NIST del controllo di accesso basato sui ruoli come assegnazione di permessi tramite ruoli.
AWS — La mentalità dell'isolamentoLinee guida AWS SaaS che distinguono esplicitamente autenticazione/autorizzazione dall'isolamento del tenant e raccomandano meccanismi di isolamento condivisi.
AWS — FAQ sull'autorizzazione multi-tenantLinee guida attuali che spiegano la differenza tra autorizzazione e isolamento del tenant nelle applicazioni SaaS.
AWS — Considerazioni di progettazione multi-tenantLinee guida SaaS attuali che distinguono l'isolamento del tenant dall'autorizzazione e discutono modelli di policy di autorizzazione pooled/siloed.
OWASP — Cheat Sheet sulla sicurezza delle applicazioni multi-tenantLinee guida pratiche attuali per contesto tenant, isolamento del database, cache, storage, code, test e prevenzione dell'accesso cross-tenant.
OWASP — Cheat Sheet sulla sicurezza RAGLinee guida attuali che richiedono il controllo di accesso al momento del recupero e l'isolamento del tenant per i vector store multi-tenant.
OWASP — Test di regressione dell'autorizzazioneLinee guida attuali per i test, inclusi test di retrocessione del ruolo e di confine cross-tenant.
Related Articles

MCP vs A2A vs UCP vs AP2 vs A2UI: Lo stack di protocolli degli agenti spiegato
MCP, A2A, UCP, AP2 e A2UI sono spesso presentati come standard per agenti concorrenti. Per lo più risolvono problemi di interoperabilità diversi. Questa guida mappa ciascun protocollo sul confine che effettivamente standardizza—e mostra come possano lavorare insieme in un unico sistema di produzione.

L'IA generativa spiegata: modelli, recupero, strumenti e applicazioni non sono la stessa cosa
L'IA generativa è più di un modello. Scopri come modelli, recupero, strumenti, contesto, runtime e applicazioni si integrano nei sistemi di IA in produzione.

Come sapere se un agente IA ha effettivamente usato le prove giuste
Un agente IA può citare fonti e comunque utilizzare le prove sbagliate. Questo articolo introduce un metodo pratico per verificare il supporto delle affermazioni, l'autorevolezza della fonte, l'applicabilità, la provenienza e se le prove abbiano effettivamente influenzato la risposta.

Che cos'è l'ingegneria del contesto? Ciò che il modello riceve prima di rispondere
L'ingegneria del contesto progetta quali informazioni un modello di IA riceve prima dell'inferenza, inclusi prompt, recupero, memoria, stato dell'applicazione, risultati degli strumenti e cronologia delle conversazioni.

La memoria dell'agente IA non è RAG: come separare memoria, recupero, stato e contesto
Memoria dell'agente, RAG, stato e contesto vengono spesso usati come se fossero intercambiabili. Non lo sono. Questo pratico modello architetturale separa i quattro livelli, mostra dove si colloca ciascuno e spiega cosa si rompe quando i sistemi li fanno collassare in uno solo.

Il confine della validità della risposta: il livello mancante tra rilevanza e risposte AI affidabili
Una fonte può essere pertinente, autorevole e comunque errata per la domanda posta. Il livello mancante è l'applicabilità: le condizioni alle quali una risposta è valida e i cambiamenti che ne impongono una riconsiderazione. Questo articolo introduce l'Answer Validity Boundary come modello di progettazione delle fonti per esseri umani, ricerca AI e sistemi RAG.

Sviluppo Front-end e Backend
Lo sviluppo front-end e back-end è una parte essenziale dello sviluppo web e comporta la creazione di applicazioni web e siti web. Lo sviluppo front-end si concentra sull'interfaccia utente, mentre lo sviluppo back-end è responsabile della programmazione e della gestione del lato server.

Che cos'è un architetto di piattaforme AI? Modelli, dati, runtime, sicurezza e operazioni
Un Architetto di Piattaforme AI progetta fondamenta AI riutilizzabili attraverso modelli, fornitori, recupero, agenti, identità, sicurezza, valutazione, osservabilità e operazioni.

Che cos'è un AI Solution Architect? Confini del sistema, responsabilità e compromessi
Un Solution Architect AI trasforma i requisiti aziendali in un sistema AI pronto per la produzione, attraverso dati, modelli, strumenti, sicurezza, runtime, valutazione e operazioni.

IA agentica spiegata: quando un sistema di IA può pianificare, usare strumenti e agire
L'IA agentica utilizza modelli all'interno di cicli di esecuzione a più passaggi, in cui possono scegliere strumenti, osservare i risultati, aggiornare lo stato e adattare l'azione successiva entro limiti espliciti di runtime e di autorizzazione.

Database vettoriali, embedding e reranking: tre parti diverse del recupero
Gli embedding rappresentano il significato, i database vettoriali recuperano i candidati e i reranker affinano i risultati. Scopri come questi tre livelli di recupero si differenziano e collaborano nel RAG.

Perché più contesto può peggiorare le risposte dell'IA
Una finestra di contesto più ampia non garantisce una risposta migliore. Questo articolo spiega come la diluizione del segnale, le prove contrastanti, lo stato obsoleto, la sensibilità alla posizione e la compressione con perdita possano ridurre l'affidabilità dell'IA—e introduce un pratico Context Pressure Test.