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 da desativação. É altamente recomendável que você atualize para o servidor flexível do Banco de Dados do Azure para MySQL. Para obter mais informações sobre a migração para o servidor flexível do Banco de Dados do Azure para MySQL, confira O que está acontecendo com o Servidor Único do Banco de Dados do Azure para MySQL?
Saiba como usar a CLI do Azure para configurar e gerenciar a criptografia de dados para o Banco de Dados do Azure para MySQL.
Pré-requisitos para a CLI do Azure
É necessário ter uma assinatura do Azure e ser um administrador nessa assinatura.
Crie um cofre de chaves e uma chave para usar em uma chave gerenciada pelo cliente. Habilite também a proteção de limpeza e a exclusão temporária no cofre de chaves.
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
No Azure Key Vault 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 como 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 data de validade
- Não desabilitado
- Executar operações get, wrap e unwrap
- atributo recoverylevel definido como Recuperável (isso requer a exclusão temporária habilitada com o período de retenção definido como 90 dias)
- Proteção de limpeza 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>
- O Banco de Dados MySQL do Azure – Servidor Único deve estar no tipo de preço de Uso Geral ou Otimizado para Memória e no armazenamento de uso geral v2. Antes de prosseguir, veja as limitações de criptografia de dados com chaves gerenciadas pelo cliente.
Definir as permissões corretas para operações de chave
Há duas maneiras de obter a identidade gerenciada para seu Banco de Dados do Azure para MySQL.
Crie um servidor de Banco de Dados do Azure para 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 servidor de Banco de Dados do Azure para MySQL existente 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 a Entidade de segurança, 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 Azure Key Vault.
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>
Usar a criptografia de dados para servidores de restauração ou de réplica
Depois que o Banco de Dados do Azure para MySQL é criptografado com uma chave gerenciada pelo cliente armazenada no Key Vault, qualquer cópia recém-criada do servidor também é criptografada. Você pode fazer essa nova cópia por meio de uma operação de restauração local ou geográfica ou por meio de réplicas de leitura (local/entre regiões). Portanto, para um servidor MySQL criptografado, você pode usar as etapas a seguir para criar um servidor restaurado criptografado.
Criar um servidor restaurado/de réplica
Depois que o servidor for restaurado, revalidar a criptografia de dados do servidor restaurado
- Atribua a 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>'
- Defina 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>
- Valide novamente 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>
Funcionalidade 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>
Remova a chave que está sendo usada
az mysql server key delete -g <resource_group> --kid <key url>
Usar 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 no servidor do Banco de Dados do Azure para MySQL usando modelos do Azure Resource Manager para servidores novos e existentes.
Para um novo servidor
Use um dos modelos do Azure Resource Manager criados previamente para provisionar o servidor com a criptografia de dados habilitada: exemplo com criptografia de dados
Este modelo do Azure Resource Manager cria um servidor do Banco de Dados do Azure para MySQL e usa o KeyVault e a Chave passados como parâmetros para habilitar a criptografia de dados no servidor.
Para um servidor existente
Além disso, você pode usar os modelos do Azure Resource Manager para habilitar a criptografia de dados em seus servidores existentes do Banco de Dados do Azure para MySQL.
Passe a ID do recurso da chave do Azure Key Vault que você copiou anteriormente sob a propriedade
Uri
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'))]"
}
}
]
}