Crittografia dei dati per Database di Azure per MySQL server flessibile con interfaccia della riga di comando di Azure

Questa esercitazione illustra come configurare e gestire la crittografia dei dati per il server flessibile di Database di Azure per MySQL usando l'interfaccia della riga di comando di Azure.

In questa esercitazione apprenderai a:

  • Creare un'istanza di server flessibile di Database di Azure per MySQL con crittografia dei dati
  • Aggiorna un'istanza esistente di Database di Azure per MySQL - Server flessibile usando la crittografia dei dati
  • Usare un modello di Azure Resource Manager per abilitare la crittografia dei dati

Prerequisiti

  • Un account Azure con una sottoscrizione attiva.

  • Se non hai un abbonamento di Azure, crea un account Azure gratuito prima di iniziare.

    Note

    Con un account gratuito di Azure, è ora possibile provare il server flessibile di Database di Azure per MySQL gratuitamente per 12 mesi. Per altre informazioni, vedere Usare un account gratuito di Azure per provare gratuitamente Database di Azure per MySQL - Server flessibile.

  • Installare o aggiornare l'interfaccia della riga di comando di Azure alla versione più recente. Vedi Installare interfaccia della riga di comando di Azure.

  • Accedere all'account Azure usando il comando az login . Si noti la proprietà ID, che fa riferimento all'ID della sottoscrizione per l'account Azure.

az login
  • Se si hanno più sottoscrizioni, scegliere la sottoscrizione appropriata in cui si vuole creare il server usando il comando az account set:
az account set --subscription \<subscription id\>
  • In Azure Key Vault creare un insieme di credenziali delle chiavi o un HSM gestito e una chiave. L'insieme di credenziali delle chiavi o l'HSM gestito deve avere le seguenti proprietà per l'uso 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

Protezione da eliminazione:

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 disattivato
  • Eseguire List, Get, Wrap, Unwrap operazioni
  • Eliminazione temporanea abilitata
  • Protezione da eliminazione abilitata con il periodo di conservazione impostato su 90 giorni.
  • recoverylevel attributo impostato su Recoverable

È possibile verificare gli attributi precedenti della chiave usando il comando seguente:

  • Per Azure Key Vault:
az keyvault key show --vault-name \<key\_vault\_name\> -n \<key\_name\>
  • Per HSM gestito di Azure Key Vault
az keyvault key show --hsm-name \<key\_vault\_name\> -n \<key\_name\>

Aggiornare un'istanza esistente di Database di Azure per MySQL a server flessibile con la crittografia dei dati

Impostare o modificare la chiave e l'identità per la crittografia dei dati:

az mysql flexible-server update --resource-group testGroup --name testserver \\ --key \<key identifier of newKey\> --identity newIdentity

Disabilitare la crittografia dei dati per il server flessibile di Database di Azure per MySQL:

az mysql flexible-server update --resource-group testGroup --name testserver --disable-data-encryption

Creare un'istanza del server flessibile di Database di Azure per MySQL con backup con ridondanza geografica e crittografia dei dati abilitata

az mysql flexible-server create -g testGroup -n testServer --location testLocation \\
--geo-redundant-backup Enabled \\
--key <key identifier of testKey> --identity testIdentity \\
--backup-key <key identifier of testBackupKey> --backup-identity testBackupIdentity

Impostare o modificare la chiave, l'identità, la chiave di backup e l'identità di backup per la crittografia dei dati con backup con ridondanza geografica:

az mysql flexible-server update --resource-group testGroup --name testserver \\ --key \<key identifier of newKey\> --identity newIdentity \\  --backup-key \<key identifier of newBackupKey\> --backup-identity newBackupIdentity

Usare un modello di Azure Resource Manager per abilitare la crittografia dei dati

I parametri identityUri e primaryKeyUri sono rispettivamente l'ID risorsa dell'identità gestita dall'utente e la chiave gestita dall'utente.

    "$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "administratorLogin": {
            "type": "string"
        },
        "administratorLoginPassword": {
            "type": "securestring"
        },
        "location": {
            "type": "string"
        },
        "serverName": {
            "type": "string"
        },
        "serverEdition": {
            "type": "string"
        },
        "vCores": {
            "type": "int",
            "defaultValue": 4
        },
        "storageSizeGB": {
            "type": "int"
        },
        "haEnabled": {
            "type": "string",
            "defaultValue": "Disabled"
        },
        "availabilityZone": {
            "type": "string"
        },
        "standbyAvailabilityZone": {
            "type": "string"
        },
        "version": {
            "type": "string"
        },
        "tags": {
            "type": "object",
            "defaultValue": {}
        },
        "backupRetentionDays": {
            "type": "int"
        },
        "geoRedundantBackup": {
            "type": "string"
        },
        "vmName": {
            "type": "string",
            "defaultValue": "Standard_B1ms"
        },
        "storageIops": {
            "type": "int"
        },
        "storageAutogrow": {
            "type": "string",
            "defaultValue": "Enabled"
        },
        "autoIoScaling": {
            "type": "string",
            "defaultValue": "Disabled"
        },
        "vnetData": {
            "type": "object",
            "metadata": {
                "description": "Vnet data is an object which contains all parameters pertaining to vnet and subnet"
            },
            "defaultValue": {
                "virtualNetworkName": "testVnet",
                "subnetName": "testSubnet",
                "virtualNetworkAddressPrefix": "10.0.0.0/16",
                "virtualNetworkResourceGroupName": "[resourceGroup().name]",
                "location": "eastus2",
                "subscriptionId": "[subscription().subscriptionId]",
                "subnetProperties": {},
                "isNewVnet": false,
                "subnetNeedsUpdate": false,
                "Network": {}
            }
        },
        "identityUri": {
            "type": "string",
            "metadata": {
                "description": "The resource ID of the identity used for data encryption"
            }
        },
        "primaryKeyUri": {
            "type": "string",
            "metadata": {
                "description": "The resource ID of the key used for data encryption"
            }
        }
    },
    "variables": {
        "api": "2021-05-01",
        "identityData": "[if(empty(parameters('identityUri')), json('null'), createObject('type', 'UserAssigned', 'UserAssignedIdentities', createObject(parameters('identityUri'), createObject())))]",
        "dataEncryptionData": "[if(or(empty(parameters('identityUri')), empty(parameters('primaryKeyUri'))), json('null'), createObject('type', 'AzureKeyVault', 'primaryUserAssignedIdentityId', parameters('identityUri'), 'primaryKeyUri', parameters('primaryKeyUri')))]"
    },
    "resources": [
        {
            "apiVersion": "[variables('api')]",
            "location": "[parameters('location')]",
            "name": "[parameters('serverName')]",
            "identity": "[variables('identityData')]",
            "properties": {
                "version": "[parameters('version')]",
                "administratorLogin": "[parameters('administratorLogin')]",
                "administratorLoginPassword": "[parameters('administratorLoginPassword')]",
                "Network": "[if(empty(parameters('vnetData').Network), json('null'), parameters('vnetData').Network)]",
                "Storage": {
                    "StorageSizeGB": "[parameters('storageSizeGB')]",
                    "Iops": "[parameters('storageIops')]",
                    "Autogrow": "[parameters('storageAutogrow')]",
                    "AutoIoScaling": "[parameters('autoIoScaling')]"
                },
                "Backup": {
                    "backupRetentionDays": "[parameters('backupRetentionDays')]",
                    "geoRedundantBackup": "[parameters('geoRedundantBackup')]"
                },
                "availabilityZone": "[parameters('availabilityZone')]",
                "highAvailability": {
                    "mode": "[parameters('haEnabled')]",
                    "standbyAvailabilityZone": "[parameters('standbyAvailabilityZone')]"
                },
                "dataEncryption": "[variables('dataEncryptionData')]"
            },
            "sku": {
                "name": "[parameters('vmName')]",
                "tier": "[parameters('serverEdition')]",
                "capacity": "[parameters('vCores')]"
            },
            "tags": "[parameters('tags')]",
            "type": "Microsoft.DBforMySQL/flexibleServers"
        }
    ]
}