Criptografia de dados para o Banco de Dados do Azure para MySQL usando a CLI do Azure
APLICA-SE A: Banco de Dados do Azure para MySQL - Servidor Único
Importante
O servidor único do Banco de Dados do Azure para MySQL está no caminho de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?
Saiba como usar a CLI do Azure para configurar e gerenciar a criptografia de dados para seu Banco de Dados do Azure para MySQL.
Pré-requisitos para a CLI do Azure
Você deve ter uma assinatura do Azure e ser um administrador nessa assinatura.
Crie um cofre de chaves e uma chave para usar para uma chave gerenciada pelo cliente. Habilite também a proteção contra limpeza e a exclusão suave no cofre de chaves.
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
No Cofre da Chave do Azure criado, crie a chave que será usada para a criptografia de dados do Banco de Dados do Azure para MySQL.
az keyvault key create --name <key_name> -p software --vault-name <vault_name>
Para usar um cofre de chaves existente, ele 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 para a utilizar como uma chave gerida pelo cliente:
- Não tem uma data de validade
- Não está desativada
- Executar operações get, wrap, unwrap
- atributo recoverylevel definido como Recoverable (isso requer soft-delete habilitado com período de retenção definido para 90 dias)
- Tem a proteção de remoção ativada
Você pode verificar os atributos acima da chave usando o seguinte comando:
az keyvault key show --vault-name <key_vault_name> -n <key_name>
- O Banco de Dados do Azure para MySQL - Servidor Único deve estar na camada de preços de uso geral ou memória otimizada e no armazenamento de uso geral v2. Antes de prosseguir, consulte as limitações para criptografia de dados com chaves gerenciadas pelo cliente.
Definir as permissões certas para operações de chave
Há duas maneiras de obter a identidade gerenciada para seu Banco de Dados do Azure para MySQL.
Crie um novo Banco de Dados do Azure para o servidor MySQL com uma identidade gerenciada.
az mysql server create --name -g <resource_group> --location <locations> --storage-size size> -u <user>-p <pwd> --backup-retention <7> --sku-name <sku name> -geo-redundant-backup <Enabled/Disabled> --assign-identity
Atualize um Banco de Dados do Azure existente para o servidor MySQL para obter uma identidade gerenciada.
az mysql server update --name <server name> -g <resource_group> --assign-identity
Defina as permissões de chave (Get, Wrap, Unwrap) para o Principal, que é o nome do servidor MySQL.
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
Definir criptografia de dados para o Banco de Dados do Azure para MySQL
Habilite a criptografia de dados para o Banco de Dados do Azure para MySQL usando a chave criada no Cofre de Chaves do Azure.
az mysql server key create –name <server name> -g <resource_group> --kid <key url>
URL da chave:
https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Usando criptografia de dados para restaurar ou replicar servidores
Depois que o Banco de Dados do Azure para MySQL é criptografado com a chave gerenciada de um cliente armazenada no Cofre da Chave, qualquer cópia recém-criada do servidor também é criptografada. Você pode fazer essa nova cópia por meio de uma operação local ou de restauração geográfica, ou por meio de uma operação de réplica (local/entre regiões). Portanto, para um servidor MySQL criptografado, você pode usar as seguintes etapas para criar um servidor restaurado criptografado.
Criando um servidor restaurado/de réplica
Depois que o servidor for restaurado, revalide a criptografia de dados do servidor restaurado
- Atribuir identidade para o servidor de réplica
az mysql server update --name <server name> -g <resoure_group> --assign-identity
- Obtenha a chave existente que deve ser usada para o servidor restaurado/de réplica
az mysql server key list --name '<server_name>' -g '<resource_group_name>'
- Definir a política para a nova identidade para o servidor restaurado/de réplica
az keyvault set-policy --name <keyvault> -g <resoure_group> --key-permissions get unwrapKey wrapKey --object-id <principl id of the server returned by the step 1>
- Revalide o servidor restaurado/de réplica com a chave de criptografia
az mysql server key create –name <server name> -g <resource_group> --kid <key url>
Capacidade adicional para a chave que está sendo usada para o Banco de Dados do Azure para MySQL
Obter a chave usada
az mysql server key show --name <server name> -g <resource_group> --kid <key url>
URL da chave: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Listar a chave usada
az mysql server key list --name <server name> -g <resource_group>
Solte a chave que está sendo usada
az mysql server key delete -g <resource_group> --kid <key url>
Usando um modelo do Azure Resource Manager para habilitar a criptografia de dados
Além do portal do Azure, você também pode habilitar a criptografia de dados em seu Banco de Dados do Azure para o servidor MySQL usando modelos do Azure Resource Manager para servidores novos e existentes.
Para um novo servidor
Use um dos modelos pré-criados do Azure Resource Manager para provisionar o servidor com a criptografia de dados habilitada: Exemplo com criptografia de dados
Este modelo do Azure Resource Manager cria um Banco de Dados do Azure para o servidor MySQL e usa o KeyVault e a Chave passada como parâmetros para habilitar a criptografia de dados no servidor.
Para um servidor existente
Além disso, você pode usar modelos do Azure Resource Manager para habilitar a criptografia de dados em seu Banco de Dados do Azure existente para servidores MySQL.
Passe a ID do Recurso da chave do Cofre da Chave do Azure que você copiou anteriormente sob a
Uri
propriedade no objeto de propriedades.Use 2020-01-01-preview como a versão da API.
{
"$schema": "http://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"location": {
"type": "string"
},
"serverName": {
"type": "string"
},
"keyVaultName": {
"type": "string",
"metadata": {
"description": "Key vault name where the key to use is stored"
}
},
"keyVaultResourceGroupName": {
"type": "string",
"metadata": {
"description": "Key vault resource group name where it is stored"
}
},
"keyName": {
"type": "string",
"metadata": {
"description": "Key name in the key vault to use as encryption protector"
}
},
"keyVersion": {
"type": "string",
"metadata": {
"description": "Version of the key in the key vault to use as encryption protector"
}
}
},
"variables": {
"serverKeyName": "[concat(parameters('keyVaultName'), '_', parameters('keyName'), '_', parameters('keyVersion'))]"
},
"resources": [
{
"type": "Microsoft.DBforMySQL/servers",
"apiVersion": "2017-12-01",
"kind": "",
"location": "[parameters('location')]",
"identity": {
"type": "SystemAssigned"
},
"name": "[parameters('serverName')]",
"properties": {
}
},
{
"type": "Microsoft.Resources/deployments",
"apiVersion": "2019-05-01",
"name": "addAccessPolicy",
"resourceGroup": "[parameters('keyVaultResourceGroupName')]",
"dependsOn": [
"[resourceId('Microsoft.DBforMySQL/servers', parameters('serverName'))]"
],
"properties": {
"mode": "Incremental",
"template": {
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
"contentVersion": "1.0.0.0",
"resources": [
{
"type": "Microsoft.KeyVault/vaults/accessPolicies",
"name": "[concat(parameters('keyVaultName'), '/add')]",
"apiVersion": "2018-02-14-preview",
"properties": {
"accessPolicies": [
{
"tenantId": "[subscription().tenantId]",
"objectId": "[reference(resourceId('Microsoft.DBforMySQL/servers/', parameters('serverName')), '2017-12-01', 'Full').identity.principalId]",
"permissions": {
"keys": [
"get",
"wrapKey",
"unwrapKey"
]
}
}
]
}
}
]
}
}
},
{
"name": "[concat(parameters('serverName'), '/', variables('serverKeyName'))]",
"type": "Microsoft.DBforMySQL/servers/keys",
"apiVersion": "2020-01-01-preview",
"dependsOn": [
"addAccessPolicy",
"[resourceId('Microsoft.DBforMySQL/servers', parameters('serverName'))]"
],
"properties": {
"serverKeyType": "AzureKeyVault",
"uri": "[concat(reference(resourceId(parameters('keyVaultResourceGroupName'), 'Microsoft.KeyVault/vaults/', parameters('keyVaultName')), '2018-02-14-preview', 'Full').properties.vaultUri, 'keys/', parameters('keyName'), '/', parameters('keyVersion'))]"
}
}
]
}