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
Compte Azure avec un abonnement actif.
Si vous n’en avez pas, créez un compte gratuit Azure avant de commencer.
Remarque
Avec un compte gratuit Azure, vous pouvez maintenant essayer le serveur flexible Azure Database pour MySQL pendant 12 mois gratuitement. Pour plus d’informations, consultez Utilisez un compte gratuit Azure pour essayer gratuitement le serveur flexible Azure Database pour MySQL.
Installez ou mettez à niveau Azure CLI vers la dernière version. Consultez Installer Azure CLI.
Connectez-vous au compte Azure à l’aide de la commande az login. Notez la propriété ID, qui fait référence à l’ID d’abonnement de votre compte Azure :
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 :
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
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"
}
]
}