Share via


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:

    • Exclusão suave

      az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
      
    • Proteção contra purga

      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

  1. 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
    
  2. 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

  1. 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'))]"
      }
    }
  ]
}

Próximos passos