Crittografia dei dati per Database di Azure per MySQL tramite l'interfaccia della riga di comando di Azure
SI APPLICA A: Database di Azure per MySQL - Server singolo
Importante
Il server singolo del Database di Azure per MySQL è in fase di ritiro. È consigliabile eseguire l'aggiornamento al server flessibile del Database di Azure per MySQL. Per altre informazioni sulla migrazione a Database di Azure per MySQL - Server flessibile, vedere Cosa succede a Database di Azure per MySQL - Server singolo?
Informazioni su come usare l'interfaccia della riga di comando di Azure per configurare e gestire la crittografia dei dati per il Database di Azure per MySQL.
Prerequisiti per l'interfaccia della riga di comando di Azure
È necessario disporre di una sottoscrizione di Azure e avere il ruolo di amministratore di tale sottoscrizione.
Creare un insieme di credenziali delle chiavi e una chiave da usare per una chiave gestita dal cliente. Abilitare anche la protezione dall'eliminazione e l'eliminazione temporanea nell'insieme di credenziali delle chiavi.
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
Nell'insieme di credenziali delle chiavi di Azure creato creare la chiave che verrà usata per la crittografia dei dati del Database di Azure per MySQL.
az keyvault key create --name <key_name> -p software --vault-name <vault_name>
Per usare un insieme di credenziali delle chiavi esistente, deve avere le proprietà seguenti da usare come chiave gestita dal cliente:
-
az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
-
az keyvault update --name <key_vault_name> --resource-group <resource_group_name> --enable-purge-protection true
Giorni di conservazione impostati su 90 giorni
az keyvault update --name <key_vault_name> --resource-group <resource_group_name> --retention-days 90
-
Per essere usata come chiave gestita dal cliente, la chiave deve disporre degli attributi seguenti:
- Nessuna data di scadenza
- Non disabilitato
- Eseguire operazioni get, wrap, unwrap
- Attributo recoverylevel impostato su Ripristinabile (questa operazione richiede l'eliminazione temporanea abilitata con il periodo di conservazione impostato su 90 giorni)
- È abilitata la protezione della rimozione
È possibile verificare gli attributi precedenti della chiave usando il comando seguente:
az keyvault key show --vault-name <key_vault_name> -n <key_name>
- Il Database di Azure per MySQL - Il server singolo deve essere nel piano tariffario Per utilizzo generico o Ottimizzato per la memoria e per l'archiviazione per utilizzo generico v2. Prima di continuare, vedere limitazioni per la crittografia dei dati con chiavi gestite dal cliente.
Impostare le autorizzazioni appropriate per le operazioni delle chiavi
Esistono due modi per ottenere l'identità gestita per il Database di Azure per MySQL.
Creare un nuovo server Database di Azure per MySQL con un'identità gestita.
az mysql server create --name -g <resource_group> --location <locations> --storage-size size> -u <user>-p <pwd> --backup-retention <7> --sku-name <sku name> -geo-redundant-backup <Enabled/Disabled> --assign-identity
Aggiornare un server Database di Azure per MySQL esistente per ottenere un'identità gestita.
az mysql server update --name <server name> -g <resource_group> --assign-identity
Impostare le autorizzazioni chiave (Get, Wrap, Unwrap) per l'entità, ovvero il nome del server MySQL.
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
Impostare la crittografia dei dati per Database di Azure per MySQL
Abilitare La crittografia dei dati per il Database di Azure per MySQL usando la chiave creata in Azure Key Vault.
az mysql server key create –name <server name> -g <resource_group> --kid <key url>
URL chiave:
https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Uso della crittografia dei dati per il ripristino o i server di replica
Una volta eseguita la crittografia di Database di Azure per MySQL con una chiave gestita dal cliente archiviata in Key Vault, viene crittografata anche qualsiasi nuova copia creata del server. È possibile eseguire questa nuova copia tramite un'operazione di ripristino locale o geografico oppure tramite un'operazione di replica (area locale/interarea). Pertanto, per un server MySQL crittografato, è possibile usare la procedura seguente per creare un server ripristinato crittografato.
Creazione di un server di replica o ripristinato
Dopo il ripristino del server, riconvalidare la crittografia dei dati del server ripristinato
- Assegnare l'identità per il server di replica
az mysql server update --name <server name> -g <resoure_group> --assign-identity
- Ottenere la chiave esistente che deve essere usata per il server ripristinato/di replica
az mysql server key list --name '<server_name>' -g '<resource_group_name>'
- Impostare i criteri per la nuova identità per il server ripristinato/di replica
az keyvault set-policy --name <keyvault> -g <resoure_group> --key-permissions get unwrapKey wrapKey --object-id <principl id of the server returned by the step 1>
- Convalidare nuovamente il server ripristinato/di replica con la chiave di crittografia
az mysql server key create –name <server name> -g <resource_group> --kid <key url>
Funzionalità aggiuntive per la chiave usata per il Database di Azure per MySQL
Ottenere la chiave usata
az mysql server key show --name <server name> -g <resource_group> --kid <key url>
URL chiave: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Elencare la chiave usata
az mysql server key list --name <server name> -g <resource_group>
Rilasciare la chiave usata
az mysql server key delete -g <resource_group> --kid <key url>
Uso di un modello di Azure Resource Manager per abilitare la crittografia dei dati
Oltre alla portale di Azure, è anche possibile abilitare la crittografia dei dati nel server Database di Azure per MySQL usando i modelli di Azure Resource Manager per i server nuovi ed esistenti.
Per un nuovo server
Usare uno dei modelli di Azure Resource Manager già creati per effettuare il provisioning del server con la crittografia dei dati abilitata: esempio con crittografia dei dati
Questo modello di Azure Resource Manager crea un server Database di Azure per MySQL e usa l'insieme di credenziali delle chiavi e la chiave passati come parametri per abilitare la crittografia dei dati nel server.
Per un server esistente
È anche possibile usare i modelli di Azure Resource Manager per abilitare la crittografia dei dati nei server di Database di Azure per MySQL esistenti.
Passare l'ID risorsa della chiave di Azure Key Vault copiata in precedenza nella
Uri
proprietà nell'oggetto properties.Usare 2020-01-01-preview come versione dell'API.
{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
},
"serverName": {
"type": "string"
},
"keyVaultName": {
"type": "string",
"metadata": {
"description": "Key vault name where the key to use is stored"
}
},
"keyVaultResourceGroupName": {
"type": "string",
"metadata": {
"description": "Key vault resource group name where it is stored"
}
},
"keyName": {
"type": "string",
"metadata": {
"description": "Key name in the key vault to use as encryption protector"
}
},
"keyVersion": {
"type": "string",
"metadata": {
"description": "Version of the key in the key vault to use as encryption protector"
}
}
},
"variables": {
"serverKeyName": "[concat(parameters('keyVaultName'), '_', parameters('keyName'), '_', parameters('keyVersion'))]"
},
"resources": [
{
"type": "Microsoft.DBforMySQL/servers",
"apiVersion": "2017-12-01",
"kind": "",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"name": "[parameters('serverName')]",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-05-01",
"name": "addAccessPolicy",
"resourceGroup": "[parameters('keyVaultResourceGroupName')]",
"dependsOn": [
"[resourceId('Microsoft.DBforMySQL/servers', parameters('serverName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('keyVaultName'), '/add')]",
"apiVersion": "2018-02-14-preview",
"properties": {
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(resourceId('Microsoft.DBforMySQL/servers/', parameters('serverName')), '2017-12-01', 'Full').identity.principalId]",
"permissions": {
"keys": [
"get",
"wrapKey",
"unwrapKey"
]
}
}
]
}
}
]
}
}
},
{
"name": "[concat(parameters('serverName'), '/', variables('serverKeyName'))]",
"type": "Microsoft.DBforMySQL/servers/keys",
"apiVersion": "2020-01-01-preview",
"dependsOn": [
"addAccessPolicy",
"[resourceId('Microsoft.DBforMySQL/servers', parameters('serverName'))]"
],
"properties": {
"serverKeyType": "AzureKeyVault",
"uri": "[concat(reference(resourceId(parameters('keyVaultResourceGroupName'), 'Microsoft.KeyVault/vaults/', parameters('keyVaultName')), '2018-02-14-preview', 'Full').properties.vaultUri, 'keys/', parameters('keyName'), '/', parameters('keyVersion'))]"
}
}
]
}