Condividi tramite


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:

    • Eliminazione temporanea

      az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
      
    • Ripulitura protetta

      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

  1. 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
    
  2. 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

  1. 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'))]"
      }
    }
  ]
}

Passaggi successivi