Szyfrowanie danych dla usługi Azure Database for MySQL przy użyciu interfejsu wiersza polecenia platformy Azure

DOTYCZY: Azure Database for MySQL — pojedynczy serwer

Ważne

Pojedynczy serwer usługi Azure Database for MySQL znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do serwera elastycznego usługi Azure Database for MySQL. Aby uzyskać więcej informacji na temat migracji do serwera elastycznego usługi Azure Database for MySQL, zobacz Co się dzieje z usługą Azure Database for MySQL — pojedynczy serwer?

Dowiedz się, jak za pomocą interfejsu wiersza polecenia platformy Azure skonfigurować szyfrowanie danych dla usługi Azure Database for MySQL i zarządzać nim.

Wymagania wstępne dotyczące interfejsu wiersza polecenia platformy Azure

  • Musisz mieć subskrypcję platformy Azure i być administratorem tej subskrypcji.

  • Utwórz magazyn kluczy i klucz do użycia dla klucza zarządzanego przez klienta. Włącz również ochronę przed przeczyszczeniem i usuwanie nietrwałe w magazynie kluczy.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • W utworzonym usłudze Azure Key Vault utwórz klucz, który będzie używany do szyfrowania danych w usłudze Azure Database for MySQL.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Aby można było używać istniejącego magazynu kluczy, musi mieć następujące właściwości do użycia jako klucz zarządzany przez klienta:

    • Usuwanie nietrwałe

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

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
    • Dni przechowywania ustawione na 90 dni

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --retention-days 90
    
  • Klucz musi mieć następujące atrybuty do użycia jako klucz zarządzany przez klienta:

    • Brak daty wygaśnięcia
    • Niewyłączone
    • Wykonywanie operacji pobierania, zawijania, odpakowywanie
    • atrybut recoverylevel ustawiony na wartość Możliwe do odzyskania (wymaga to usunięcia nietrwałego z okresem przechowywania ustawionym na 90 dni)
    • Włączono ochronę przed przeczyszczeniem

Powyższe atrybuty klucza można zweryfikować przy użyciu następującego polecenia:

az keyvault key show --vault-name <key_vault_name> -n <key_name>
  • Usługa Azure Database for MySQL — pojedynczy serwer powinna znajdować się w warstwie cenowej Ogólnego przeznaczenia lub Zoptymalizowane pod kątem pamięci oraz w magazynie ogólnego przeznaczenia w wersji 2. Przed kontynuowaniem zapoznaj się z ograniczeniami szyfrowania danych przy użyciu kluczy zarządzanych przez klienta.

Ustawianie odpowiednich uprawnień dla operacji kluczy

  1. Istnieją dwa sposoby uzyskiwania tożsamości zarządzanej dla usługi Azure Database for MySQL.

    Utwórz nowy serwer usługi Azure Database for MySQL z tożsamością zarządzaną.

    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
    

    Zaktualizuj istniejący serwer usługi Azure Database for MySQL, aby uzyskać tożsamość zarządzaną.

    az mysql server update --name  <server name>  -g <resource_group> --assign-identity
    
  2. Ustaw uprawnienia klucza (Pobierz, Zawijaj, Odpakuj) dla nazwy podmiotu zabezpieczeń, czyli nazwy serwera MySQL.

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

Ustawianie szyfrowania danych dla usługi Azure Database for MySQL

  1. Włącz szyfrowanie danych dla usługi Azure Database for MySQL przy użyciu klucza utworzonego w usłudze Azure Key Vault.

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

    Adres URL klucza: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Używanie szyfrowania danych dla serwerów przywracania lub repliki

Po zaszyfrowaniu usługi Azure Database for MySQL za pomocą klucza zarządzanego klienta przechowywanego w usłudze Key Vault każda nowo utworzona kopia serwera jest również szyfrowana. Możesz utworzyć tę nową kopię za pomocą operacji przywracania lokalnego lub geograficznego albo za pomocą operacji repliki (lokalnie/między regionami). Dlatego w przypadku zaszyfrowanego serwera MySQL można wykonać następujące kroki, aby utworzyć zaszyfrowany przywrócony serwer.

Tworzenie przywróconego/repliki serwera

Po przywróceniu serwera zrewiduj szyfrowanie danych przywróconego serwera

  • Przypisywanie tożsamości dla serwera repliki
az mysql server update --name  <server name>  -g <resoure_group> --assign-identity
  • Pobierz istniejący klucz, który musi być używany dla przywróconego/repliki serwera
az mysql server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Ustawianie zasad nowej tożsamości dla przywróconego/repliki serwera
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>
  • Ponownie zweryfikuj przywrócony/replikowy serwer przy użyciu klucza szyfrowania
az mysql server key create –name  <server name> -g <resource_group> --kid <key url>

Dodatkowa możliwość klucza używanego w usłudze Azure Database for MySQL

Pobieranie używanego klucza

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

Adres URL klucza: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Wyświetlanie listy użytych kluczy

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

Usuwanie używanego klucza

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

Używanie szablonu usługi Azure Resource Manager do włączania szyfrowania danych

Oprócz witryny Azure Portal można również włączyć szyfrowanie danych na serwerze usługi Azure Database for MySQL przy użyciu szablonów usługi Azure Resource Manager dla nowych i istniejących serwerów.

Dla nowego serwera

Użyj jednego ze wstępnie utworzonych szablonów usługi Azure Resource Manager, aby aprowizować serwer z włączonym szyfrowaniem danych: przykład z szyfrowaniem danych

Ten szablon usługi Azure Resource Manager tworzy serwer usługi Azure Database for MySQL i używa funkcji KeyVault i Key przekazanych jako parametrów w celu włączenia szyfrowania danych na serwerze.

Dla istniejącego serwera

Ponadto możesz użyć szablonów usługi Azure Resource Manager, aby włączyć szyfrowanie danych na istniejących serwerach usługi Azure Database for MySQL.

  • Przekaż identyfikator zasobu klucza usługi Azure Key Vault skopiowany wcześniej w ramach Uri właściwości w obiekcie properties.

  • Użyj wersji interfejsu API 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'))]"
      }
    }
  ]
}

Następne kroki