Condividi tramite


Proteggere l'accesso ai dati in Azure Cosmos DB

SI APPLICA A: NoSQL

Questo articolo presenta una panoramica del controllo di accesso ai dati in Azure Cosmos DB.

Azure Cosmos DB offre tre modi per controllare l'accesso ai dati.

Tipo di controllo di accesso Caratteristiche
Chiavi primarie/secondarie Segreto condiviso che consente qualsiasi operazione di gestione o sui dati. È disponibile in due varianti: lettura/scrittura e sola lettura.
Controllo degli accessi in base al ruolo Modello di autorizzazione basato sui ruoli con granularità fine che usa le identità di Microsoft Entra per l'autenticazione.
Token delle risorse Modello di autorizzazione con granularità fine basato su autorizzazioni e utenti nativi di Azure Cosmos DB.

Chiavi primarie/secondarie

Le chiavi primarie e secondarie consentono di accedere a tutte le risorse amministrative per l'account di database. Ogni account è costituito da due chiavi: una chiave primaria e una chiave secondaria. Lo scopo delle due chiavi è consentire la rigenerazione o la rotazione delle chiavi mantenendo l'accesso continuo ai dati e all'account. Per altre informazioni sulle chiavi primarie/secondarie, vedere Panoramica della sicurezza del database in Azure Cosmos DB.

Per visualizzare le chiavi dell'account, nel menu a sinistra selezionare Chiavi. Selezionare quindi l'icona Visualizza a destra di ogni chiave. Selezionare il pulsante Copia per copiare la chiave selezionata. In seguito, è possibile nasconderle selezionando la stessa icona per ogni chiave, che aggiorna l'icona a un pulsante Nascondi.

Screenshot di Visualizza chiave dell'account per Azure Cosmos DB.

Rotazione e rigenerazione delle chiavi

Nota

Nella sezione seguente viene descritta la procedura per ruotare e rigenerare chiavi per l'API per NoSQL. Se si usa un'API diversa, vedere API per MongoDB, API per Cassandra, API per Gremlin o API per Table.

Per monitorare l'account per gli aggiornamenti e la rigenerazione delle chiavi, vedere Monitorare l'account Azure Cosmos DB per gli aggiornamenti delle chiavi e la rigenerazione delle chiavi.

Il processo di rotazione e rigenerazione delle chiavi è semplice. Assicurarsi prima di tutto che l'applicazione usi in modo coerente la chiave primaria o la chiave secondaria per accedere all'account Azure Cosmos DB. Seguire quindi la procedura descritta nella sezione successiva.

  1. Passare all'account Azure Cosmos DB nel portale di Azure.

  2. Selezionare Chiavi nel menu a sinistra e quindi selezionare Rigenera chiave secondaria dai puntini di sospensione a destra della chiave secondaria.

    Screenshot che mostra il portale di Azure che mostra come rigenerare la chiave secondaria.

  3. Verificare che la nuova chiave secondaria funzioni in modo coerente con l'account Azure Cosmos DB. La rigenerazione delle chiavi può richiedere da un minuto a più ore a seconda delle dimensioni dell'account Azure Cosmos DB.

  4. Sostituire la chiave primaria con la chiave secondaria nell'applicazione.

  5. Tornare al portale di Azure e attivare la rigenerazione della chiave primaria.

    Screenshot che mostra il portale di Azure che mostra come rigenerare la chiave primaria.

Esempio di codice per l'uso di una chiave primaria

L'esempio di codice seguente illustra come usare un endpoint dell'account Azure Cosmos DB e la chiave primaria per creare un'istanza di CosmosClient:

// Read the Azure Cosmos DB endpointUrl and authorization keys from config.
// These values are available from the Azure portal on the Azure Cosmos DB account blade under "Keys".
// Keep these values in a safe and secure location. Together they provide Administrative access to your Azure Cosmos DB account.

private static readonly string endpointUrl = ConfigurationManager.AppSettings["EndPointUrl"];
private static readonly string authorizationKey = ConfigurationManager.AppSettings["AuthorizationKey"];

CosmosClient client = new CosmosClient(endpointUrl, authorizationKey);

Controllo degli accessi in base al ruolo

Azure Cosmos DB espone un sistema di controllo degli accessi in base al ruolo predefinito che consente di:

  • Autenticare le richieste di dati con un'identità di Microsoft Entra.
  • Autorizzare le richieste di dati con un modello di autorizzazione basato su ruoli con granularità fine.

Il controllo degli accessi in base al ruolo di Azure Cosmos DB è il metodo di controllo di accesso ideale nelle situazioni in cui:

  • Non si vuole usare un segreto condiviso come la chiave primaria e si preferisce invece ricorrere a un meccanismo di autenticazione basato su token.
  • Si vogliono usare le identità di Microsoft Entra per autenticare le richieste.
  • È necessario un modello di autorizzazione con granularità fine per limitare rigorosamente le operazioni di database che possono eseguire le identità.
  • Si vogliono materializzare i criteri di controllo di accesso in "ruoli", che è possibile assegnare a più identità.

Per altre informazioni sul controllo degli accessi in base al ruolo di Azure Cosmos DB, vedere Configurare il controllo degli accessi in base al ruolo per l'account Azure Cosmos DB.

Per informazioni e codice di esempio per configurare il controllo degli accessi in base al ruolo per Azure Cosmos DB for MongoDB, vedere Configurare il controllo degli accessi in base al ruolo per Azure Cosmos DB for MongoDB.

Token delle risorse

I token delle risorse consentono di accedere alle risorse dell'applicazione all'interno di un database. Token delle risorse:

  • Consentono di accedere a contenitori, chiavi di partizioni, documenti e allegati specifici.
  • Vengono creati quando a un utente vengono concesse autorizzazioni per una risorsa specifica.
  • Vengono ricreati quando si interviene su una risorsa di autorizzazione tramite chiamata POST, GET o PUT.
  • Usano un token di risorsa hash costruito specificamente per l'utente, la risorsa e l'autorizzazione.
  • Hanno un limite di tempo con un periodo di validità personalizzabile. L'intervallo di tempo valido predefinito è un'ora. La durata del token, tuttavia, può essere specificata in modo esplicito, fino a un massimo di 24 ore.
  • Rappresentano un'alternativa sicura alla divulgazione della chiave primaria.
  • Consentono ai client di leggere, scrivere ed eliminare risorse nell'account Azure Cosmos DB in base alle autorizzazioni concesse.

È possibile usare un token delle risorse (creando utenti e autorizzazioni di Azure Cosmos DB) quando si vuole fornire l'accesso alle risorse dell'account Azure Cosmos DB a un client non attendibile con la chiave primaria.

I token delle risorse di Azure Cosmos DB costituiscono un'alternativa sicura che consente ai client di leggere, scrivere ed eliminare risorse nell'account Azure Cosmos DB sulla base delle autorizzazioni concesse e senza richiedere la chiave primaria o di sola lettura.

Di seguito è riportato un tipico schema progettuale in cui i token delle risorse possono essere richiesti, generati e forniti ai client:

  1. Un servizio di livello intermedio viene configurato per gestire un'applicazione per dispositivi mobili per condividere le foto dell'utente.

  2. Il servizio di livello intermedio dispone della chiave primaria dell'account Azure Cosmos DB.

  3. L'app per le foto viene installata nei dispositivi mobili dell'utente.

  4. All'accesso, l'app per le foto stabilisce l'identità dell'utente con il servizio di livello intermedio. Questo meccanismo per stabilire l'identità dipende completamente dall'applicazione.

  5. Una volta stabilita l'identità, il servizio di livello intermedio richiede le autorizzazioni in base all'identità.

  6. Il servizio di livello intermedio invia di nuovo un token delle risorse all'app per il telefono.

  7. L'app per il telefono può continuare a usare il token delle risorse per accedere direttamente alle risorse di Azure Cosmos DB con le autorizzazioni definite dal token delle risorse e per l'intervallo consentito dal token delle risorse.

  8. Quando il token delle risorse scade, le richieste successive ricevono un'eccezione 401 Non autorizzato. A questo punto, l'app per il telefono ristabilisce l'identità e richiede un nuovo token delle risorse.

    Screenshot che mostra un flusso di lavoro dei token delle risorse di Azure Cosmos DB.

La generazione e la gestione dei token delle risorse vengono gestite dalle librerie client native di Azure Cosmos DB. Se tuttavia si usa REST, è necessario creare le intestazioni di richiesta/autenticazione. Per altre informazioni sulla creazione di intestazioni di autenticazione per REST, vedere Controllo di accesso nelle risorse di Azure Cosmos DB oppure il codice sorgente per .NET SDK o Node.js SDK.

Per un esempio di servizio di livello intermedio usato per generare o negoziare i token delle risorse, vedere l'app ResourceTokenBroker.

Utenti

Gli utenti di Azure Cosmos DB sono associati a un database Azure Cosmos DB. Ogni database può contenere zero o più utenti di Azure Cosmos DB. L'esempio di codice seguente illustra come creare un utente di Azure Cosmos DB usando Azure Cosmos DB .NET SDK v3.

// Create a user.
Database database = client.GetDatabase("SalesDatabase");
User user = await database.CreateUserAsync("User 1");

Nota

Ogni utente di Azure Cosmos DB dispone di un metodo ReadAsync() che può usare per recuperare l'elenco di autorizzazioni a cui è associato.

Autorizzazioni

Una risorsa di autorizzazione è associata a un utente e assegnata a una risorsa specifica. Ogni utente può contenere zero o più autorizzazioni. Una risorsa di autorizzazione fornisce l'accesso a un token di sicurezza di cui l'utente ha bisogno quando tenta di accedere a un contenitore o a dati specifici in una chiave di partizione specifica. Sono disponibili due livelli di accesso che possono essere forniti da una risorsa di autorizzazione:

  • Tutto: l'utente ha l'autorizzazione completa per la risorsa.
  • Lettura: l'utente può solo leggere i contenuti della risorsa, ma non può eseguire operazioni di scrittura, aggiornamento o eliminazione sulla risorsa.

Nota

Per eseguire stored procedure, l'utente deve disporre dell'autorizzazione completa per i contenitori in cui verrà eseguita la stored procedure.

Se si abilitano i log di diagnostica sulle richieste del piano dati, vengono registrate le due seguenti proprietà corrispondenti all'autorizzazione:

  • resourceTokenPermissionId: questa proprietà indica l'ID di autorizzazione del token della risorsa specificato.

  • resourceTokenPermissionMode: questa proprietà indica la modalità di autorizzazione impostata al momento della creazione del token della risorsa. La modalità di autorizzazione può avere valori come Tutto o Lettura.

Esempio di codice per la creazione dell'autorizzazione

L'esempio di codice seguente illustra come creare una risorsa di autorizzazione, leggere il token delle risorse dell'autorizzazione e associare le autorizzazioni all'utente creato in precedenza.

// Create a permission on a container and specific partition key value
Container container = client.GetContainer("SalesDatabase", "OrdersContainer");
await user.CreatePermissionAsync(
    new PermissionProperties(
        id: "permissionUser1Orders", 
        permissionMode: PermissionMode.All, 
        container: container,
        resourcePartitionKey: new PartitionKey("012345")));

Codice di esempio per leggere l'autorizzazione per un utente

Il frammento di codice seguente illustra come recuperare l'autorizzazione associata all'utente creato in precedenza e creare un'istanza di un nuovo CosmosClient per l'utente nell'ambito di una singola chiave di partizione.

// Read a permission, create user client session.
Permission permission = await user.GetPermission("permissionUser1Orders").ReadAsync();

CosmosClient client = new CosmosClient(accountEndpoint: "MyEndpoint", authKeyOrResourceToken: permission.Resource.Token);

Differenze tra il controllo degli accessi in base al ruolo e i token delle risorse

Oggetto RBAC Token delle risorse
Autenticazione Con Microsoft Entra ID. Basato sugli utenti nativi di Azure Cosmos DB.
L'integrazione di token delle risorse con Microsoft Entra ID richiede operazioni aggiuntive per collegare le identità di Microsoft Entra agli utenti di Azure Cosmos DB.
Autorizzazione Basato sui ruoli. Le definizioni dei ruoli eseguono il mapping delle azioni consentite e possono essere assegnate a più identità. Basato sulle autorizzazioni. Per ogni utente di Azure Cosmos DB è necessario assegnare autorizzazioni di accesso ai dati.
Ambito del token Un token di Microsoft Entra contiene l'identità del richiedente, che viene confrontata con tutte le definizioni di ruolo assegnate per poter concedere l'autorizzazione. Un token di risorsa contiene l'autorizzazione concessa a uno specifico utente di Azure Cosmos DB in una specifica risorsa di Azure Cosmos DB. È possibile che richieste di autorizzazione per risorse diverse richiedano token diversi.
Aggiornamento del token Il token di Microsoft Entra viene aggiornato automaticamente dagli SDK di Azure Cosmos DB nel momento in cui scade. L'aggiornamento di un token di risorsa non è supportato. Quando un token di risorsa scade, deve esserne emesso uno nuovo.

Aggiungere utenti e assegnare ruoli

Per aggiungere l'accesso in lettura dell'account Azure Cosmos DB al proprio account utente, è necessario che il proprietario di una sottoscrizione esegua la procedura seguente nel portale di Azure.

  1. Aprire il portale di Azure e selezionare l'account Azure Cosmos DB.

  2. Seleziona Controllo di accesso (IAM).

  3. Selezionare Aggiungi>Aggiungi assegnazione di ruolo per aprire la pagina Aggiungi assegnazione di ruolo.

  4. Assegnare il ruolo seguente. Per la procedura dettagliata, vedere Assegnare ruoli di Azure usando il portale di Azure.

    Impostazione Valore
    Ruolo Lettore dell'account Cosmos DB.
    Assegna accesso a Utente, gruppo o entità servizio.
    Membri L'utente, il gruppo o l'applicazione nella directory a cui si vuole concedere l'accesso.

    Screenshot che mostra la pagina Aggiungi assegnazione di ruolo nel portale di Azure.

L'entità può ora leggere le risorse di Azure Cosmos DB.

Eliminare o esportare i dati utente

In qualità di servizio di database, Azure Cosmos DB consente di eseguire la ricerca, selezionare, modificare ed eliminare tutti i dati presenti nel database o nei contenitori. È responsabilità dell'utente usare le API fornite e definire la logica necessaria per trovare e cancellare eventuali dati personali, se necessario.

Ogni API multimodello (SQL, MongoDB, Gremlin, Cassandra o Table) fornisce SDK per linguaggi diversi che contengono metodi per cercare ed eliminare i dati in base a predicati personalizzati. È inoltre possibile abilitare la funzionalità TTL (Time-To Live) per eliminare automaticamente i dati dopo un periodo specificato, senza incorrere in costi aggiuntivi.

Nota

Per informazioni su come visualizzare o eliminare dati personali, vedere Richieste del soggetto dei dati per il GDPR in Azure. Per altre informazioni sul Regolamento generale sulla protezione dei dati (GDPR), vedere la sezione del GDPR del Centro protezione di Microsoft e la sezione del GDPR del Service Trust Portal.

Passaggi successivi