Datakryptering för Azure Database for MySQL med hjälp av Azure CLI

GÄLLER FÖR: Azure Database for MySQL – enskild server

Viktigt!

Azure Database for MySQL – enskild server är på väg att dras tillbaka. Vi rekommenderar starkt att du uppgraderar till en flexibel Azure Database for MySQL-server. Mer information om hur du migrerar till en flexibel Azure Database for MySQL-server finns i Vad händer med Azure Database for MySQL – enskild server?

Lär dig hur du använder Azure CLI för att konfigurera och hantera datakryptering för din Azure Database for MySQL.

Förutsättningar för Azure CLI

  • Du måste ha en Azure-prenumeration och vara administratör för den prenumerationen.

  • Skapa ett nyckelvalv och en nyckel som ska användas för en kundhanterad nyckel. Aktivera även rensningsskydd och mjuk borttagning i nyckelvalvet.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • I det skapade Azure Key Vault skapar du nyckeln som ska användas för datakryptering av Azure Database for MySQL.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • För att kunna använda ett befintligt nyckelvalv måste det ha följande egenskaper att använda som en kundhanterad nyckel:

    • Mjuk borttagning

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

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
    • Kvarhållningsdagar inställda på 90 dagar

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --retention-days 90
    
  • Nyckeln måste ha följande attribut för att användas som en kundhanterad nyckel:

    • Inget förfallodatum
    • Inte aktiverat
    • Utföra åtgärder för att hämta, omsluta och packa upp
    • recoverylevel-attribut inställt på Återställningsbar (detta kräver mjuk borttagning aktiverat med kvarhållningsperioden inställd på 90 dagar)
    • Rensningsskydd aktiverat

Du kan verifiera ovanstående attribut för nyckeln med hjälp av följande kommando:

az keyvault key show --vault-name <key_vault_name> -n <key_name>
  • Azure Database for MySQL – enskild server ska vara på prisnivån Generell användning eller Minnesoptimerad och på generell lagring v2. Innan du fortsätter läser du begränsningar för datakryptering med kundhanterade nycklar.

Ange rätt behörigheter för nyckelåtgärder

  1. Det finns två sätt att hämta den hanterade identiteten för din Azure Database for MySQL.

    Skapa en ny Azure Database for MySQL-server med en hanterad identitet.

    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
    

    Uppdatera en befintlig Azure Database for MySQL-server för att hämta en hanterad identitet.

    az mysql server update --name  <server name>  -g <resource_group> --assign-identity
    
  2. Ange nyckelbehörigheterna (Get, Wrap, Unwrap) för Principal, som är namnet på MySQL-servern.

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

Ange datakryptering för Azure Database for MySQL

  1. Aktivera datakryptering för Azure Database for MySQL med hjälp av nyckeln som skapades i Azure Key Vault.

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

    Nyckel-URL: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Använda datakryptering för återställnings- eller replikservrar

När Azure Database for MySQL har krypterats med en kunds hanterade nyckel som lagras i Key Vault krypteras även alla nyligen skapade kopior av servern. Du kan göra den här nya kopian antingen via en lokal eller geo-återställningsåtgärd eller genom en replikåtgärd (lokal/mellan region). Så för en krypterad MySQL-server kan du använda följande steg för att skapa en krypterad återställd server.

Skapa en återställd server/replikserver

När servern har återställts kan du återanvända datakryptering på den återställde servern

  • Tilldela identitet för replikservern
az mysql server update --name  <server name>  -g <resoure_group> --assign-identity
  • Hämta den befintliga nyckeln som måste användas för den återställde/replikservern
az mysql server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Ange principen för den nya identiteten för den återställde/replikservern
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>
  • Verifiera den återställde/replikservern igen med krypteringsnyckeln
az mysql server key create –name  <server name> -g <resource_group> --kid <key url>

Ytterligare kapacitet för nyckeln som används för Azure Database for MySQL

Hämta nyckeln som används

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

Nyckel-URL: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Visa en lista över den nyckel som används

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

Släpp den nyckel som används

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

Använda en Azure Resource Manager-mall för att aktivera datakryptering

Förutom Azure-portalen kan du även aktivera datakryptering på din Azure Database for MySQL-server med hjälp av Azure Resource Manager-mallar för nya och befintliga servrar.

För en ny server

Använd en av de i förväg skapade Azure Resource Manager-mallarna för att etablera servern med datakryptering aktiverat: Exempel med datakryptering

Den här Azure Resource Manager-mallen skapar en Azure Database for MySQL-server och använder KeyVault och key som skickas som parametrar för att aktivera datakryptering på servern.

För en befintlig server

Dessutom kan du använda Azure Resource Manager-mallar för att aktivera datakryptering på dina befintliga Azure Database for MySQL-servrar.

  • Skicka resurs-ID:t för Azure Key Vault-nyckeln som du kopierade tidigare under Uri egenskapen i egenskapsobjektet.

  • Använd 2020-01-01-preview som API-version.

{
  "$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'))]"
      }
    }
  ]
}

Nästa steg