Cifrado de datos para Azure Database for MySQL mediante la CLI de Azure

SE APLICA A: Azure Database for MySQL: Servidor único

Importante

El servidor único de Azure Database for MySQL está en la ruta de retirada. Se recomienda encarecidamente actualizar al servidor flexible de Azure Database for MySQL. Para más información sobre la migración al servidor flexible de Azure Database for MySQL, consulte ¿Qué ocurre con Azure Database for MySQL con servidor único?

Aprenda a usar la CLI de Azure para configurar y administrar el cifrado de datos de Azure Database for MySQL.

Requisitos previos de la CLI de Azure

  • Debe tener una suscripción de Azure y ser un administrador en esa suscripción.

  • Cree un almacén de claves y una clave que se usará como clave administrada por el cliente. Habilite también la protección de purga y la eliminación temporal en el almacén de claves.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • En la instancia de Azure Key Vault creada, cree la clave que se usará para el cifrado de datos de Azure Database for MySQL.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Para usar un almacén de claves existente, este debe tener las siguientes propiedades para usarse como una clave administrada por el cliente:

    • Eliminación temporal

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

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
    • Los días de retención se han establecido en 90 días

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --retention-days 90
    
  • La clave debe tener los siguientes atributos para que se pueda usar como clave administrada por el cliente:

    • Sin fecha de expiración
    • No deshabilitado
    • Poder realizar las operaciones get, wrap y unwrap
    • El atributo recoverylevel debe estar establecido en Recoverable (requiere habilitar la eliminación temporal con el período de retención establecido en 90 días).
    • Habilitación de la protección de purgas

Puede comprobar los atributos de la clave con el siguiente comando:

az keyvault key show --vault-name <key_vault_name> -n <key_name>

Establecer los permisos adecuados para las operaciones de clave

  1. Hay dos maneras de obtener la identidad administrada para Azure Database for MySQL.

    Cree un servidor de Azure Database for MySQL con una identidad administrada.

    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
    

    Actualice un servidor de Azure Database for MySQL existente para obtener una identidad administrada.

    az mysql server update --name  <server name>  -g <resource_group> --assign-identity
    
  2. Establezca los Permisos de clave (Get, Wrap y Unwrap) para la Entidad de seguridad, que es el nombre del servidor MySQL.

    az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
    

Establecimiento del cifrado de datos para Azure Database for MySQL

  1. Permita el cifrado de datos para Azure Database for MySQL mediante la clave creada en Azure Key Vault.

    az mysql server key create –name  <server name>  -g <resource_group> --kid <key url>
    

    Dirección URL de la clave: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Uso del cifrado de datos con servidores de restauración o réplica

Después de cifrar Azure Database for MySQL con la clave administrada de un cliente almacenada en Key Vault, también se cifra cualquier copia recién creada del servidor. Puede crear esta nueva copia mediante una operación de restauración local o geográfica, o por medio de una operación de réplica (local o entre regiones). De modo que, con un servidor MySQL cifrado, puede usar los siguientes pasos para crear un servidor restaurado cifrado.

Creación de un servidor restaurado o de réplica

Una vez restaurado el servidor, vuelva a validar el cifrado de datos del servidor restaurado.

  • Asignación de identidades para el servidor Réplica
az mysql server update --name  <server name>  -g <resoure_group> --assign-identity
  • Obtenga la clave existente que se debe usar para el servidor restaurado o el servidor Réplica.
az mysql server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Establezca la directiva de la nueva identidad del servidor restaurado o el servidor 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>
  • Vuelva a validar el servidor restaurado o el servidor Réplica con la clave de cifrado
az mysql server key create –name  <server name> -g <resource_group> --kid <key url>

Funcionalidad adicional para la clave que usará para Azure Database for MySQL

Obtención de la clave usada

az mysql server key show --name  <server name>  -g <resource_group> --kid <key url>

Dirección URL de la clave: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Enumeración de la clave usada

az mysql server key list --name  <server name>  -g <resource_group>

Eliminación de la clave usada

az mysql server key delete -g <resource_group> --kid <key url>

Uso de una plantilla de Azure Resource Manager para habilitar el cifrado de datos

Además de en Azure Portal, también puede habilitar el cifrado de datos en el servidor de Azure Database for MySQL mediante plantillas de Azure Resource Manager para los servidores nuevos o ya existentes.

Para un nuevo servidor

Use una de las plantillas de Azure Resource Manager creadas anteriormente para aprovisionar el servidor con el cifrado de datos habilitado: Ejemplo con cifrado de datos

Esta plantilla de Azure Resource Manager crea un servidor de Azure Database for MySQL y usa KeyVault y Key como parámetros para habilitar el cifrado de datos en el servidor.

Para un servidor existente

Además, puede usar plantillas de Azure Resource Manager para habilitar el cifrado de datos en los servidores existentes de Azure Database for MySQL.

  • Pase el id. de recurso de la clave de Azure Key Vault que copió anteriormente en la propiedad Uri en el objeto properties.

  • Use 2020-01-01-preview como la versión de 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'))]"
      }
    }
  ]
}

Pasos siguientes