Proteggere l'accesso ai dati in Azure Cosmos DB

SI APPLICA A: NoSQL

Questo articolo offre 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 dati. Include sia varianti di lettura/scrittura che di sola lettura.
Controllo degli accessi in base al ruolo Modello di autorizzazione basato su ruoli con granularità fine usando le identità di Microsoft Entra per l'autenticazione.
Token delle risorse Modello di autorizzazione con granularità fine basato su utenti e autorizzazioni nativi di Azure Cosmos DB.

Chiavi primarie/secondarie

Le chiavi primarie/secondarie forniscono l'accesso a tutte le risorse amministrative per l'account del database. Ogni account è costituito da due chiavi: una chiave primaria e una chiave secondaria. Lo scopo di chiavi doppie è quello di consentire di rigenerare, o eseguire il roll, delle chiavi, fornendo l'accesso continuo all'account e ai dati. 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 tasto. Selezionare il pulsante Copia per copiare la chiave selezionata. È possibile nasconderli in seguito selezionando la stessa icona per ogni tasto, che aggiorna l'icona a un pulsante Nascondi .

Screenshot of the View account key for Azure Cosmos DB.

Rotazione e rigenerazione delle chiavi

Nota

La sezione seguente descrive i passaggi per ruotare e rigenerare le chiavi per l'API per NoSQL. Se si usa un'API diversa, vedere le sezioni API per MongoDB, API per Cassandra, API per Gremlin o API per tabelle .

Per monitorare l'account per gli aggiornamenti delle chiavi 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 innanzitutto che l'applicazione usi in modo coerente la chiave primaria o la chiave secondaria per accedere all'account Azure Cosmos DB. Seguire quindi i passaggi nella sezione successiva.

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

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

    Screenshot that shows the Azure portal showing how to regenerate the secondary key.

  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 that shows the Azure portal showing how to regenerate the primary key.

Esempio di codice per usare una chiave primaria

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

// 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 basarsi su 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 strettamente le operazioni del database che le identità possono eseguire.
  • Si vogliono materializzare i criteri di controllo di accesso come "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 per MongoDB, vedere Configurare il controllo degli accessi in base al ruolo per Azure Cosmos DB per MongoDB.

Token delle risorse

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

  • Fornire l'accesso a contenitori, chiavi di partizione, documenti e allegati specifici.
  • Vengono creati quando a un utente vengono concesse autorizzazioni per una risorsa specifica.
  • Vengono ricreati quando una risorsa di autorizzazione viene eseguita da una 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, potrebbe essere specificata in modo esplicito, fino a un massimo di 24 ore.
  • Fornire un'alternativa sicura alla distribuzione della chiave primaria.
  • Consentire ai client di leggere, scrivere ed eliminare risorse nell'account Azure Cosmos DB in base alle autorizzazioni concesse.

È possibile usare un token di risorsa (creando utenti e autorizzazioni di Azure Cosmos DB) quando si vuole fornire l'accesso alle risorse nell'account Azure Cosmos DB a un client che non può essere considerato attendibile con la chiave primaria.

I token delle risorse di Azure Cosmos DB offrono un'alternativa sicura che consente ai client di leggere, scrivere ed eliminare risorse nell'account Azure Cosmos DB in base alle autorizzazioni concesse e senza la necessità di una chiave primaria o di sola lettura.

Ecco un modello di progettazione tipico in cui i token di risorsa possono essere richiesti, generati e recapitati 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 possiede la chiave primaria dell'account Azure Cosmos DB.

  3. L'app foto viene installata nei dispositivi mobili degli utenti.

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

  5. Dopo aver stabilito 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 telefono può continuare a usare il token di risorsa per accedere direttamente alle risorse di Azure Cosmos DB con le autorizzazioni definite dal token della risorsa e per l'intervallo consentito dal token della risorsa.

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

    Screenshot that shows an Azure Cosmos DB resource tokens workflow.

La generazione e la gestione dei token di risorse vengono gestite dalle librerie client native di Azure Cosmos DB. Tuttavia, se si usa REST, è necessario costruire 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 o il codice sorgente per .NET SDK o Node.js SDK.

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

Gli utenti

Gli utenti di Azure Cosmos DB sono associati a un database di 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 ha un ReadAsync() metodo che è possibile usare per recuperare l'elenco di autorizzazioni associate all'utente.

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 necessario all'utente quando tenta di accedere a un contenitore o a dati specifici in una chiave di partizione specifica. Esistono due livelli di accesso disponibili che possono essere forniti da una risorsa di autorizzazione:

  • All: l'utente dispone dell'autorizzazione completa per la risorsa.
  • Lettura: l'utente può leggere solo il contenuto 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 All per il contenitore in cui verrà eseguita la stored procedure.

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

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

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

Esempio di codice per la creazione dell'autorizzazione

L'esempio di codice seguente illustra come creare una risorsa di autorizzazione, leggere il token di risorsa della risorsa di autorizzazione e associare le autorizzazioni all'utente appena creato.

// 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")));

Esempio di codice per leggere l'autorizzazione per l'utente

Il frammento di codice seguente illustra come recuperare l'autorizzazione associata all'utente creato e creare un'istanza di un nuovo CosmosClient oggetto per l'utente, con ambito a 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
Authentication Con Microsoft Entra ID. Basato sugli utenti nativi di Azure Cosmos DB.
L'integrazione di token di risorse con Microsoft Entra ID richiede un lavoro aggiuntivo per collegare le identità di Microsoft Entra e gli 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 Microsoft Entra porta l'identità del richiedente. Questa identità viene confrontata con tutte le definizioni di ruolo assegnate per eseguire l'autorizzazione. Un token di risorsa contiene l'autorizzazione concessa a un utente specifico di Azure Cosmos DB in una risorsa di Azure Cosmos DB specifica. Le richieste di autorizzazione su risorse diverse potrebbero richiedere token diversi.
Aggiornamento del token Il token Microsoft Entra viene aggiornato automaticamente dagli SDK di Azure Cosmos DB alla scadenza. L'aggiornamento del token di risorsa non è supportato. Quando scade un token di risorsa, è necessario rilasciare un nuovo token.

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 i passaggi dettagliati, vedere Assegnare ruoli di Azure usando il portale di Azure.

    Impostazione Valore
    Ruolo Lettore 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 that shows the Add role assignment page in the Azure portal.

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

Eliminare o esportare i dati utente

Come servizio di database, Azure Cosmos DB consente di cercare, 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 i dati personali, se necessario.

Ogni API multimodella (SQL, MongoDB, Gremlin, Cassandra o Table) offre SDK del linguaggio diversi che contengono metodi per eseguire ricerche ed eliminare dati in base a predicati personalizzati. È anche possibile abilitare la funzionalità durata (TTL) 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 GDPR, vedere la sezione GDPR del Centro protezione Microsoft e la sezione GDPR del portale Service Trust.

Passaggi successivi