Šifrování dat pro Službu Azure Database for MySQL pomocí Azure CLI

PLATÍ PRO: Jednoúčelový server Azure Database for MySQL

Důležité

Jednoúčelový server Azure Database for MySQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for MySQL. Další informace o migraci na flexibilní server Azure Database for MySQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for MySQL?

Zjistěte, jak pomocí Azure CLI nastavit a spravovat šifrování dat pro službu Azure Database for MySQL.

Požadavky pro Azure CLI

  • Musíte mít předplatné Azure a být správcem daného předplatného.

  • Vytvořte trezor klíčů a klíč, který se má použít pro klíč spravovaný zákazníkem. Povolte také ochranu před vymazáním a obnovitelné odstranění v trezoru klíčů.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • Ve vytvořené službě Azure Key Vault vytvořte klíč, který se použije k šifrování dat služby Azure Database for MySQL.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Aby bylo možné použít existující trezor klíčů, musí mít následující vlastnosti, které se mají použít jako klíč spravovaný zákazníkem:

    • Obnovitelné odstranění

      az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
      
    • Vyprázdnění chráněné

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
    • Dny uchovávání nastavené na 90 dnů

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --retention-days 90
    
  • Aby bylo možné klíč použít jako klíč spravovaný zákazníkem, musí mít následující atributy:

    • Nesmí mít žádné datum ukončení platnosti.
    • Nesmí být zakázaný.
    • Provádění operací get, wrap, unraprap
    • atribut recoverylevel nastavený na Obnovitelný (vyžaduje povolené obnovitelné odstranění s dobou uchovávání nastavenou na 90 dnů).
    • Musí mít povolenou ochranu před vymazáním.

Výše uvedené atributy klíče můžete ověřit pomocí následujícího příkazu:

az keyvault key show --vault-name <key_vault_name> -n <key_name>
  • Jednoúčelový server Azure Database for MySQL by měl být na cenové úrovni Pro obecné účely nebo Optimalizováno pro paměť a v úložišti pro obecné účely verze 2. Než budete pokračovat, projděte si omezení šifrování dat pomocí klíčů spravovaných zákazníkem.

Nastavení správných oprávnění pro operace s klíči

  1. Existují dva způsoby získání spravované identity pro službu Azure Database for MySQL.

    Vytvořte nový server Azure Database for MySQL se spravovanou identitou.

    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
    

    Aktualizujte existující server Azure Database for MySQL a získejte spravovanou identitu.

    az mysql server update --name  <server name>  -g <resource_group> --assign-identity
    
  2. Nastavte oprávnění ke klíči (Get, Wrap, Unwrap) pro objekt zabezpečení, což je název serveru MySQL.

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

Nastavení šifrování dat pro Službu Azure Database for MySQL

  1. Povolte šifrování dat pro Službu Azure Database for MySQL pomocí klíče vytvořeného ve službě Azure Key Vault.

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

    Adresa URL klíče: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Použití šifrování dat pro servery obnovení nebo repliky

Po zašifrování Azure Database for MySQL pomocí spravovaného klíče zákazníka uloženého ve službě Key Vault se zašifrují také všechny nově vytvořené kopie serveru. Tuto novou kopii můžete vytvořit buď prostřednictvím operace místního nebo geografického obnovení, nebo prostřednictvím operace repliky (místní/mezi oblastmi). Pro šifrovaný server MySQL tedy můžete pomocí následujícího postupu vytvořit šifrovaný obnovený server.

Vytvoření obnoveného serveru nebo serveru repliky

Po obnovení serveru znovu obnovte šifrování dat obnoveného serveru.

  • Přiřazení identity pro server repliky
az mysql server update --name  <server name>  -g <resoure_group> --assign-identity
  • Získání existujícího klíče, který se musí použít pro obnovený server nebo server repliky
az mysql server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Nastavení zásad pro novou identitu pro obnovený server nebo server repliky
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>
  • Opětovné ověření obnoveného serveru nebo serveru repliky pomocí šifrovacího klíče
az mysql server key create –name  <server name> -g <resource_group> --kid <key url>

Další funkce klíče používaného pro Azure Database for MySQL

Získání použitého klíče

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

Adresa URL klíče: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Výpis použitého klíče

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

Vyřazení použitého klíče

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

Použití šablony Azure Resource Manageru k povolení šifrování dat

Kromě webu Azure Portal můžete také povolit šifrování dat na serveru Azure Database for MySQL pomocí šablon Azure Resource Manageru pro nové a existující servery.

Pro nový server

Použití jedné z předem vytvořených šablon Azure Resource Manageru ke zřízení serveru s povoleným šifrováním dat: Příklad s šifrováním dat

Tato šablona Azure Resource Manageru vytvoří server Azure Database for MySQL a použije keyVault a klíč předaný jako parametry k povolení šifrování dat na serveru.

Pro existující server

Kromě toho můžete pomocí šablon Azure Resource Manageru povolit šifrování dat na stávajících serverech Azure Database for MySQL.

  • Předejte ID prostředku klíče služby Azure Key Vault, který jste zkopírovali dříve v Uri rámci vlastnosti v objektu vlastností.

  • Jako verzi rozhraní API použijte verzi 2020-01-01-preview .

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

Další kroky