Partager via


Chiffrement des données pour Azure Database pour MySQL - Serveur flexible avec Azure CLI

Ce tutoriel vous montre comment configurer et gérer le chiffrement de données pour le serveur flexible Azure Database pour MySQL en utilisant Azure CLI.

Dans ce tutoriel, vous allez apprendre à :

  • Créer une instance de serveur flexible Azure Database pour MySQL avec chiffrement de données
  • Mettre à jour une instance de serveur flexible Azure Database pour MySQL existante avec chiffrement de données
  • Utilisation d’un modèle Azure Resource Manager pour activer le chiffrement des données

Prérequis

az login
  • Si vous avez plusieurs abonnements, choisissez l’abonnement approprié dans lequel vous voulez créer le serveur à l’aide de la commande az account set :
az account set --subscription \<subscription id\>
  • Dans Azure Key Vault, créez un coffre de clés ou un HSM managé ainsi qu’une clé. Le coffre de clés ou le HSM managé doivent disposer des propriétés suivantes pour être utilisés en tant que clés gérées par le client :

Suppression réversible :

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

Protégé contre le vidage :

az keyvault update --name \<key\_vault\_name\> --resource-group \<resource\_group\_name\> --enable-purge-protection true

Durée de rétention définie sur 90 jours :

az keyvault update --name \<key\_vault\_name\> --resource-group \<resource\_group\_name\> --retention-days 90

La clé doit avoir les attributs suivants à utiliser en tant que clé gérée par le client :

  • Aucune date d'expiration
  • Non activée
  • Effectuer les opérations List, Get, Wrap et Unwrap
  • Attribut recoverylevel défini sur Récupérable (cela nécessite l’activation de la suppression réversible avec la période de rétention définie sur 90 jours)
  • Protection contre le vidage activée

Vous pouvez vérifier les attributs de la clé ci-dessus avec la commande suivante :

az keyvault key show --vault-name \<key\_vault\_name\> -n \<key\_name\>

Mettre à jour une instance de serveur flexible Azure Database pour MySQL existante avec chiffrement de données

Définissez ou modifiez la clé et l’identité pour le chiffrement des données :

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

Désactivez le chiffrement de données pour le serveur flexible Azure Database pour MySQL :

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

Créer une instance de serveur flexible Azure Database pour MySQL avec la sauvegarde géoredondante et le chiffrement de données activés

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

Définissez ou modifiez la clé, l’identité, la clé de sauvegarde et l’identité de sauvegarde pour le chiffrement des données avec une sauvegarde géoredondante :

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

Utiliser un modèle Azure Resource Manager pour activer le chiffrement des données

Les paramètres identityUri et primaryKeyUri sont respectivement l’ID de ressource de l’identité managée de l’utilisateur et la clé gérée par l’utilisateur.

    "$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"
        }
    ]
}