Le chiavi gestite dal cliente per il TDE a livello di database sono disponibili per database SQL di Azure (tutte le edizioni database SQL). Non è disponibile per Istanza gestita di SQL di Azure, SQL Server locale, macchine virtuali di Azure e Azure Synapse Analytics (pool SQL dedicati (in precedenza SQL Data Warehouse)).
Microsoft Entra ID era noto in precedenza come Azure Active Directory (Azure AD).
Prerequisiti
Questa guida presuppone che siano presenti due tenant di Microsoft Entra.
Il primo è costituito dalla risorsa database SQL di Azure, da un'applicazione Microsoft Entra multi-tenant e da un'identità gestita assegnata dall'utente.
Il secondo tenant ospita Azure Key Vault.
Per istruzioni complete sulla configurazione delle chiavi gestite dal cliente tra tenant e le autorizzazioni di controllo degli accessi in base al ruolo necessarie per configurare le applicazioni Microsoft Entra e Azure Key Vault, vedere una delle guide seguenti:
Interfaccia della riga di comando di Azure versione 2.52.0 o successiva.
Modulo Az PowerShell versione 10.3.0 o successive.
Le autorizzazioni di controllo degli accessi in base al ruolo necessarie per le chiavi gestite dal cliente a livello di database sono le stesse autorizzazioni necessarie per le chiavi gestite dal cliente a livello di server. In particolare, le stesse autorizzazioni di controllo degli accessi in base al ruolo applicabili quando si usano Azure Key Vault, identità gestite e chiavi gestite dal cliente tra tenant per TDE a livello di server sono applicabili a livello di database. Per altre informazioni sulla gestione delle chiavi e sui criteri di accesso, vedere Gestione delle chiavi.
Risorse necessarie nel primo tenant
Ai fini di questa esercitazione, si presuppone che il primo tenant appartenga a un fornitore di software indipendente (ISV) e che il secondo tenant provenga dal client. Per altre informazioni su questo scenario, vedere Chiavi gestite dal cliente tra tenant con Transparent Data Encryption.
Prima di poter configurare TDE per database SQL di Azure con una chiave gestita dal cliente tra tenant, è necessario disporre di un'applicazione Microsoft Entra multi-tenant configurata con un'identità gestita assegnata dall'utente assegnata come credenziale di identità federata per l'applicazione. Seguire una delle guide riportate in Prerequisiti.
Registrare il nome dell'applicazione e l'ID applicazione. Per trovarlo, aprire Portale di Azure>Microsoft Entra ID>Applicazioni Enterprise e cercare l'applicazione creata.
Risorse necessarie nel secondo tenant
Nota
I moduli Azure AD e MSOnline PowerShell sono deprecati a partire dal 30 marzo 2024. Per maggiori informazioni, leggere l'aggiornamento sulla deprecazione. Dopo questa data, il supporto per questi moduli è limitato all'assistenza alla migrazione a Microsoft Graph PowerShell SDK e alle correzioni di sicurezza. I moduli deprecati continueranno a funzionare fino al 30 marzo 2025.
È consigliabile eseguire la migrazione a Microsoft Graph PowerShell per interagire con Microsoft Entra ID (in precedenza Azure AD). Per domande comuni sulla migrazione, consultare le Domande frequenti sulla migrazione. Nota: le versioni 1.0.x di MSOnline potrebbero subire interruzioni dopo il 30 giugno 2024.
Nel secondo tenant in cui risiede Azure Key Vault creare un'entità servizio (applicazione) usando l'ID applicazione dall'applicazione registrata dal primo tenant. Ecco alcuni esempi di come registrare l'applicazione multi-tenant. Sostituire <TenantID> e <ApplicationID> con l'ID tenant del client da Microsoft Entra ID e ID applicazione rispettivamente dall'applicazione multi-tenant:
Creare una nuova database SQL di Azure con chiavi gestite dal cliente a livello di database
Di seguito sono riportati alcuni esempi per la creazione di un database in database SQL di Azure con un'identità gestita assegnata dall'utente e come impostare una chiave gestita dal cliente tra tenant a livello di database. L'identità gestita assegnata dall'utente è necessaria per configurare una chiave gestita dal cliente per Transparent Data Encryption durante la fase di creazione del database.
Se non lo si è già fatto, eseguire l’accesso al portale di Azure quando richiesto.
In Database SQL lasciare l'opzione Tipo di risorsa impostata su Database singolo e selezionare Crea.
Nella scheda Informazioni di base del modulo Crea database SQL in Dettagli progetto, selezionare la Sottoscrizione, il Gruppo di risorse e il Server desiderati per il database. Usare un nome univoco come nome del database. Se non è stato creato un server logico per database SQL di Azure, consultare Creare un server configurato con TDE con chiave gestita dal cliente cross-tenant (CMK).
Quando si arriva alla scheda Sicurezza, selezionare Configura Transparent Data Encryption.
Nel menu Transparent Data Encryption selezionare Chiave gestita dal cliente a livello di database.
Per Identità gestita assegnata dall'utente selezionare Configura per abilitare un'identità del database e Aggiungere un'identità gestita assegnata dall'utente alla risorsa se un'identità desiderata non è presente nel menu Identità. Quindi seleziona Applica.
Nel menu Transparent Data Encryption selezionare Cambia chiave. Selezionare la sottoscrizione desiderata, l'insieme di credenziali delle chiavi, la chiave e la versione per la chiave gestita dal cliente da usare per TDE. Fare clic sul pulsante Seleziona. Dopo aver selezionato una chiave, è anche possibile aggiungere chiavi di database aggiuntive in base alle esigenze usando l'URI dell'insieme di Azure Key Vault (identificatore di oggetto) nel menu Transparent Data Encryption .
La rotazione automatica delle chiavi può essere abilitata anche a livello di database usando la casella di controllo Ruota automaticamente la chiave nel menu Transparent Data Encryption .
Selezionare Applica per continuare a creare il database.
Selezionare Rivedi e crea nella parte inferiore della pagina
Nella pagina Rivedi e crea, dopo aver rivisto le impostazioni, selezionare Crea.
Nota
Non sarà possibile creare il database avrà se l'identità gestita assegnata dall'utente non dispone delle autorizzazioni appropriate abilitate per l'insieme di credenziali delle chiavi. L'identità gestita assegnata dall'utente richiederà le autorizzazioni Get, wrapKey e unwrapKey nell'insieme di credenziali delle chiavi. Per altre informazioni, vedere Identità gestite per Transparent Data Encryption con chiave gestita dal cliente.
Creare un database configurato con identità gestita assegnata dall'utente e TDE multi-tenant gestito dal cliente usando il comando az sql db create. L'identificatore di chiave del secondo tenant può essere usato nel campo encryption-protector. L'ID applicazione dell'applicazione multi-tenant può essere usato nel campo federated-client-id. Il parametro --encryption-protector-auto-rotation può essere usato per abilitare la rotazione automatica delle chiavi a livello di database.
Per ottenere l'ID risorsa dell'identità gestita assegnata dall'utente, cercare Identità gestite nel portale di Azure. Trovare l'identità gestita e passare a Proprietà. Un esempio di ID risorsa UMI è simile a /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
Creare un database configurato con identità gestita assegnata dall'utente e TDE tra tenant gestito dal cliente a livello di database usando PowerShell.
Per ottenere l'ID risorsa dell'identità gestita assegnata dall'utente, cercare Identità gestite nel portale di Azure. Trovare l'identità gestita e passare a Proprietà. Un esempio di ID risorsa UMI è simile a /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>
# create a server with user-assigned managed identity and cross-tenant customer-managed TDE with automatic key rotation enabled
$params = @{
ResourceGroupName = '<ResourceGroupName>'
ServerName = '<ServerName>'
DatabaseName = '<DatabaseName>'
AssignIdentity = $true
UserAssignedIdentityId = '<UserAssignedIdentityId>'
EncryptionProtector = '<CustomerManagedKeyId>'
FederatedClientId = '<FederatedClientId>'
EncryptionProtectorAutoRotation = $true
}
New-AzSqlDatabase @params
Di seguito è riportato un esempio di modello di ARM che crea un database SQL di Azure con un'identità gestita assegnata dall'utente e un TDE gestito dal cliente a livello di database. Per una chiave gestita dal cliente multi-tenant, usare l'identificatore chiave del secondo insieme di credenziali delle chiavi del tenant e l'ID applicazione dell'applicazione multi-tenant.
Per ottenere l'ID della risorsa dell'identità gestita assegnata dall'utente, cercare Identità gestite nel portale di Azure. Trovare l'identità gestita e passare a Proprietà. Un esempio di ID risorsa UMI è simile a /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>.
Aggiornare un database SQL di Azure esistente con chiavi gestite dal cliente a livello di database
Di seguito sono riportati esempi di aggiornamento di un database esistente in database SQL di Azure con un'identità gestita assegnata dall'utente e come impostare una chiave gestita dal cliente tra tenant a livello di database. L'identità gestita assegnata dall'utente è necessaria per configurare una chiave gestita dal cliente per Transparent Data Encryption durante la fase di creazione del database.
Nel portale di Azure passare alla risorsa del database SQL che si vuole aggiornare con una chiave gestita dal cliente a livello di database.
In Sicurezza selezionare Identità. Aggiungere un'identità gestita assegnata dall'utente per questo database e quindi selezionare Salva
Passare ora al menu Crittografia dati in Sicurezza per il database. Selezionare Chiave gestita dal cliente a livello di database. L'identità del database per il database deve essere già abilitata perché l'identità è stata configurata nell'ultimo passaggio.
Selezionare Cambia chiave. Selezionare la sottoscrizione desiderata, l'insieme di credenziali delle chiavi, la chiave e la versione per la chiave gestita dal cliente da usare per TDE. Fare clic sul pulsante Seleziona. Dopo aver selezionato una chiave, è anche possibile aggiungere chiavi di database aggiuntive in base alle esigenze usando l'URI di Azure Key Vault (identificatore di oggetto) nel menu Crittografia dati.
Selezionare la casella di controllo Rotazione automatica della chiave se si vuole abilitare la rotazione automatica delle chiavi a livello di database.
Aggiornare un database configurato con l'identità gestita assegnata dall'utente e TDE multi-tenant gestito dal cliente usando il comando az sql db create. L'identificatore di chiave del secondo tenant può essere usato nel campo encryption-protector. L'ID applicazione dell'applicazione multi-tenant può essere usato nel campo federated-client-id.
Per ottenere l'ID risorsa dell'identità gestita assegnata dall'utente, cercare Identità gestite nel portale di Azure. Trovare l'identità gestita e passare a Proprietà. Un esempio di ID risorsa UMI è simile a /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>. Il parametro --encryption-protector-auto-rotation può essere usato per abilitare la rotazione automatica delle chiavi a livello di database.
L'elenco $keys è un elenco separato da spazi di chiavi che devono essere aggiunte nel database e $keysToRemove è un elenco separato da spazi di chiavi che devono essere rimosse dal database
Aggiornare un database configurato con identità gestita assegnata dall'utente e TDE multi-tenant gestito dal cliente a livello di database usando PowerShell.
Per ottenere l'ID risorsa dell'identità gestita assegnata dall'utente, cercare Identità gestite nel portale di Azure. Trovare l'identità gestita e passare a Proprietà. Un esempio di ID risorsa UMI è simile a /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>.
Di seguito è riportato un esempio di modello di ARM che aggiorna un database SQL di Azure con un'identità gestita assegnata dall'utente e un TDE gestito dal cliente a livello di database. Per una chiave gestita dal cliente multi-tenant, usare l'identificatore chiave del secondo insieme di credenziali delle chiavi del tenant e l'ID applicazione dell'applicazione multi-tenant.
Per ottenere l'ID della risorsa dell'identità gestita assegnata dall'utente, cercare Identità gestite nel portale di Azure. Trovare l'identità gestita e passare a Proprietà. Un esempio di ID risorsa UMI è simile a /subscriptions/<subscriptionId>/resourceGroups/<ResourceGroupName>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<managedIdentity>.
Per rimuovere una chiave dal database, il valore del dizionario chiavi di una chiave specifica deve essere passato come Null. Ad esempio: "https://yourvault.vault.azure.net/keys/yourkey1/fd021f84a0d94d43b8ef33154bca0000": null.
Visualizzare le impostazioni della chiave gestita dal cliente a livello di database in un database SQL di Azure
Di seguito sono riportati esempi di recupero delle chiavi gestite dal cliente a livello di database per un database. Per impostazione predefinita, la risorsa ARM Microsoft.Sql/servers/databases mostra solo la protezione TDE e l'identità gestita configurata nel database. Per espandere l'elenco completo delle chiavi, usare il parametro -ExpandKeyList. Inoltre, è possibile usare filtri come -KeysFilter "current" e un valore temporizzato (ad esempio 2023-01-01,) per recuperare le chiavi correnti usate e le chiavi usate in passato in un momento specifico. Questi filtri sono supportati solo per le singole query di database e non per le query a livello di server.
Per visualizzare le chiavi gestite dal cliente a livello di database nel portale di Azure, passare al menu Crittografia dei dati della risorsa del database SQL.
# Retrieve the basic database level customer-managed key settings from a database
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase
# Retrieve the basic database level customer-managed key settings from a database and all the keys ever added
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys
# Retrieve the basic database level customer-managed key settings from a database and the current keys in use
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter current
# Retrieve the basic database level customer-managed key settings from a database and the keys in use at a particular point in time
az sql db show --resource-group $resourceGroupName --server $serverName --name mySampleDatabase --expand-keys --keys-filter 01-01-2015
# Retrieve all the databases in a server to check which ones are configured with database level customer-managed keys
az sql db list --resource-group $resourceGroupName --server $serverName
# Retrieve the basic database level customer-managed key settings from a database
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName>
# Retrieve the basic database level customer-managed key settings from a database and all the keys ever added
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList
# Retrieve the basic database level customer-managed key settings from a database and the current keys in use
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList -KeysFilter "current"
# Retrieve the basic database level customer-managed key settings from a database and the keys in use at a particular point in time
Get-AzSqlDatabase -ResourceGroupName <ResourceGroupName> -ServerName <ServerName> -DatabaseName <DatabaseName> -ExpandKeyList -KeysFilter '2023-02-03 00:00:00'
# Retrieve all the databases in a server to check which ones are configured with database level customer-managed keys
Get-AzSqlDatabase -resourceGroupName <ResourceGroupName> -ServerName <ServerName> | Select DatabaseName, EncryptionProtector
Usare l'API REST 2022-08-01-preview per database SQL di Azure.
Recuperare le impostazioni della chiave gestita dal cliente a livello di database di base da un database.
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview
Recuperare le impostazioni della chiave gestita dal cliente a livello di database di base da un database e tutte le chiavi aggiunte
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys
Recuperare le impostazioni della chiave gestita dal cliente a livello di database di base da un database e dalle chiavi correnti in uso
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys($filter=pointInTime('current'))
Recuperare le impostazioni della chiave gestita dal cliente a livello di database di base da un database e dalle chiavi in uso in un determinato momento
GET https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}?api-version=2022-08-01-preview&$expand=keys($filter=pointInTime('2023-02-04T01:57:42.49Z'))
Elencare tutte le chiavi in un server logico
Per recuperare l'elenco di tutte le chiavi (e non solo la protezione primaria) usata da ogni database nel server, è necessario eseguire query singolarmente con i filtri delle chiavi. Di seguito è riportato un esempio di query di PowerShell per elencare ogni chiave nel server logico.
Riconvalidare la chiave gestita dal cliente a livello di database in un database SQL di Azure
In caso di protezione TDE inaccessibile, come descritto in Transparent Data Encryption (TDE) con chiave gestita dal cliente, una volta corretto l'accesso alla chiave, è possibile usare un'operazione di riconvalida della chiave per rendere accessibile il database. Per esempi, vedere le istruzioni o i comandi seguenti.
Trovare la risorsa Database SQL nel portale di Azure. Dopo aver selezionato la risorsa del database SQL, passare alla scheda Transparent Data Encryption del menu Crittografia dati nelle impostazioni di Sicurezza. Se il database ha perso l'accesso all’Azure Key Vault, verrà visualizzato il pulsante Convalida nuovamente la chiave e sarà possibile riconvalidare la chiave esistente selezionando Riprova chiave esistente o un'altra chiave selezionando Seleziona chiave di backup.
Usare l'API REST 2022-08-01-preview per database SQL di Azure.
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/encryptionProtector/current/revalidate?api-version=2022-08-01-preview
Ripristinare la chiave gestita dal cliente a livello di database in un database SQL di Azure
Un database configurato con chiave gestita dal cliente a livello di database può essere ripristinato alla crittografia a livello di server se il server è configurato con una chiave gestita dal servizio usando i comandi seguenti.
Per ripristinare l'impostazione della chiave gestita dal cliente a livello di database sulla chiave di crittografia a livello di server nel portale di Azure, passare alla scheda Transparent Data Encryption del menu Crittografia dati della risorsa del database SQL. Selezionare Chiave di crittografia a livello di server e selezionare Salva per salvare le impostazioni.
Nota
Per usare l'impostazione chiave di crittografia a livello di server per singoli database, il server logico per il database SQL di Azure deve essere configurato per l'uso della chiave gestita dal servizio per TDE.
Usare l'API REST 2022-08-01-preview per database SQL di Azure.
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Sql/servers/{serverName}/databases/{databaseName}/encryptionProtector/current/revert?api-version=2022-08-01-preview
Passaggi successivi
Vedere la documentazione seguente su varie operazioni della chiave gestita dal cliente a livello di database: