Criptografia de dados para Banco de Dados do Azure para MySQL – Servidor Flexível com a CLI do Azure
Este tutorial mostra como configurar e gerenciar a criptografia de dados para o Servidor Flexível do Banco de Dados do Azure para MySQL usando a CLI do Azure.
Neste tutorial, você aprenderá a:
- Criar uma instância Servidor Flexível do Banco de Dados do Azure para MySQL com criptografia de dados
- Atualizar uma instância Servidor Flexível do Banco de Dados do Azure para MySQL existente com criptografia de dados
- Usar um modelo do Azure Resource Manager para habilitar a criptografia de dados
Pré-requisitos
Uma conta do Azure com uma assinatura ativa.
Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.
Observação
Com uma conta gratuita do Azure, você já pode experimentar o Servidor Flexível do Banco de Dados do Azure para MySQL gratuitamente por 12 meses. Para mais informações, consulte Usar uma conta gratuita do Azure para experimentar o Banco de Dados do Azure para MySQL – servidor flexível gratuito.
Instale ou atualize CLI do Azure para a versão mais recente. Consulte Instalar a CLI do Azure.
Entre na conta do Azure usando o comando az login. Observe a propriedade ID, que se refere à ID da Assinatura da sua conta do Azure:
az login
- Se você tiver várias assinaturas, escolha a assinatura apropriada na qual deseja criar o servidor usando o comando az account set:
az account set --subscription \<subscription id\>
- No Azure Key Vault, crie um cofre de chaves ou HSM gerenciado e uma chave. O cofre de chaves ou HSM gerenciado deve ter as seguintes propriedades para usar como uma chave gerenciada pelo cliente:
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
Dias de retenção definidos para 90 dias:
az keyvault update --name \<key\_vault\_name\> --resource-group \<resource\_group\_name\> --retention-days 90
A chave deve ter os seguintes atributos a serem usados como chave gerenciada pelo cliente:
- Sem datas de validade
- Não desabilitado
- Executar as operações List, Get, Wrap, Unwrap
- Atributo recoverylevel definido como Recuperável (isso exige exclusão temporária habilitada com período de retenção definido como 90 dias)
- Limpeza protegida habilitada
Você pode verificar os atributos acima da chave usando o seguinte comando:
az keyvault key show --vault-name \<key\_vault\_name\> -n \<key\_name\>
Atualizar uma instância Servidor Flexível do Banco de Dados do Azure para MySQL existente com criptografia de dados
Definir ou alterar a chave e a identidade para criptografia de dados:
az mysql flexible-server update --resource-group testGroup --name testserver \\ --key \<key identifier of newKey\> --identity newIdentity
Desabilitar a criptografia de dados para o Servidor Flexível do Banco de Dados do Azure para MySQL:
az mysql flexible-server update --resource-group testGroup --name testserver --disable-data-encryption
Criar uma instância Servidor Flexível do Banco de Dados do Azure para MySQL que inclua backup com redundância geográfica e criptografia de dados habilitada
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
Definir ou alterar a chave, a identidade, a chave de backup e a identidade de backup para criptografia de dados com backup com redundância geográfica:
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
Usar um modelo do Azure Resource Manager para habilitar a criptografia de dados
Os parâmetros identityUri e primaryKeyUri são a ID do recurso da identidade gerenciada pelo usuário e da chave gerenciada pelo usuário, respectivamente.
"$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"
}
]
}