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. È disponibile sia in 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 Azure Active Directory (Azure AD) 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 delle chiavi doppie è quello di consentire la rigenerazione o il rollback delle chiavi, fornendo l'accesso continuo all'account e ai dati. Per altre informazioni sulle chiavi primarie/secondarie, vedere l'articolo Sicurezza del database .

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 l'articolo Monitorare gli aggiornamenti delle chiavi con metriche e avvisi .

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 descritti di seguito.

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

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

    Screenshot del 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. Indietro al portale di Azure e attivare la rigenerazione della chiave primaria.

    Screenshot del 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 una 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 Azure Active Directory.
  • 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 ideale per il controllo di accesso 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 Azure AD 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à.

Vedere Configurare il controllo degli accessi in base al ruolo per l'account Azure Cosmos DB per altre informazioni sul controllo degli accessi in base al ruolo di 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:

  • Consentono di accedere a contenitori, chiavi di partizioni, documenti, allegati, stored procedure, trigger e funzioni definite dall'utente.
  • 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 è di un'ora. La durata del token, tuttavia, può 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 le 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.

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 possiede la chiave primaria dell'account Azure Cosmos DB.

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

  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 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 ristabilisce l'identità e richiede un nuovo token delle risorse.

    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; 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 nel 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 ha un metodo ReadAsync() che può essere usato 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. 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 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 token della risorsa specificato.

  • resourceTokenPermissionMode : questa proprietà indica la modalità di autorizzazione impostata durante la creazione del token della 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 delle risorse della risorsa di 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")));

Esempio di codice per leggere l'autorizzazione per l'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 conto dell'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 Controllo degli accessi in base al ruolo Token delle risorse
Authentication Con Azure Active Directory (Azure AD). Basato sugli utenti nativi di Azure Cosmos DB
L'integrazione di token di risorse con Azure AD richiede un lavoro aggiuntivo per collegare le identità di Azure AD 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 su autorizzazioni: per ogni utente di Azure Cosmos DB è necessario assegnare le autorizzazioni di accesso ai dati.
Ambito del token Un token di Azure AD contiene 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 specifica di Azure Cosmos DB. Le richieste di autorizzazione su risorse diverse possono richiedere token diversi.
Aggiornamento dei token Il token di Azure AD 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. Selezionare 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 Utente, gruppo o applicazione nella directory a cui si vuole concedere l'accesso.

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

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 i dati presenti nel database o nei contenitori. È tuttavia responsabilità dell'utente usare le API fornite e definire la logica necessaria per trovare e cancellare eventuali dati personali, se necessario. Ogni API multimodella (SQL, MongoDB, Gremlin, Cassandra, Table) offre SDK del linguaggio diversi che contengono metodi per eseguire ricerche ed eliminare dati in base a predicati personalizzati. È inoltre possibile abilitare la funzionalità time-to live (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 di Microsoft e la sezione GDPR del portale Service Trust.

Passaggi successivi