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 des données pour le serveur flexible Azure Database pour MySQL à l’aide d’Azure CLI.

Dans ce tutoriel, vous allez apprendre à :

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

Prerequisites

az login
  • Si vous avez plusieurs abonnements, choisissez l’abonnement approprié dans lequel vous souhaitez 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é et une clé. Le coffre de clés ou le HSM managé doit avoir les propriétés suivantes à utiliser en tant que clé gérée par le client :

Suppression temporaire :

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

Jours de rétention définis 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 comme clé gérée par le client :

  • Aucune date d’expiration
  • Non désactivé
  • Effectuer List, Get, Wrap, Unwrap opérations
  • Suppression douce activée
  • Protection de vidage activée avec la période de rétention définie sur 90 jours
  • recoverylevel attribut défini sur Recoverable

Vous pouvez vérifier les attributs ci-dessus de la clé à l’aide de 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 des 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 des 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 des 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 par 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"
        }
    ]
}