Share via


Azure CLI kullanarak MySQL için Azure Veritabanı için veri şifreleme

ŞUNLAR IÇIN GEÇERLIDIR: MySQL için Azure Veritabanı - Tek Sunucu

Önemli

MySQL için Azure Veritabanı tek sunucu kullanımdan kaldırma yolundadır. Esnek MySQL için Azure Veritabanı sunucuya yükseltmenizi kesinlikle öneririz. MySQL için Azure Veritabanı esnek sunucuya geçiş hakkında daha fazla bilgi için bkz. MySQL için Azure Veritabanı Tek Sunucu'ya neler oluyor?

azure CLI kullanarak MySQL için Azure Veritabanı için veri şifrelemesi ayarlamayı ve yönetmeyi öğrenin.

Azure CLI önkoşulları

  • Bir Azure aboneliğinizin olması ve bu abonelikte yönetici olmanız gerekir.

  • Müşteri tarafından yönetilen anahtar için kullanılacak bir anahtar kasası ve anahtar oluşturun. Ayrıca anahtar kasasında temizleme korumasını ve geçici silmeyi etkinleştirin.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • Oluşturulan Azure Key Vault'ta, MySQL için Azure Veritabanı veri şifrelemesi için kullanılacak anahtarı oluşturun.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Mevcut bir anahtar kasasını kullanmak için, müşteri tarafından yönetilen anahtar olarak kullanılacak aşağıdaki özelliklere sahip olması gerekir:

    • Geçici silme

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

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
    • Bekletme günleri 90 güne ayarlanmış

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --retention-days 90
    
  • Müşteri tarafından yönetilen anahtar olarak kullanılabilmesi için anahtarın aşağıdaki özniteliklere sahip olması gerekir:

    • Son kullanma tarihi yok
    • Devre dışı bırakılmadı
    • Alma, sarmalama, kaldırma işlemlerini gerçekleştirme
    • Recoverylevel özniteliği Kurtarılabilir olarak ayarlanmış (bu, saklama süresi 90 güne ayarlanmış geçici silmeyi gerektirir)
    • Temizleme koruması etkinleştirildi

Aşağıdaki komutu kullanarak anahtarın yukarıdaki özniteliklerini doğrulayabilirsiniz:

az keyvault key show --vault-name <key_vault_name> -n <key_name>
  • MySQL için Azure Veritabanı - Tek Sunucu Genel Amaçlı veya Bellek için İyileştirilmiş fiyatlandırma katmanında ve genel amaçlı depolama v2'de olmalıdır. Daha fazla ilerlemeden önce, müşteri tarafından yönetilen anahtarlarla veri şifreleme sınırlamalarına bakın.

Anahtar işlemleri için doğru izinleri ayarlama

  1. MySQL için Azure Veritabanı için yönetilen kimliği almanın iki yolu vardır.

    Yönetilen kimlikle yeni bir MySQL için Azure Veritabanı sunucusu oluşturun.

    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
    

    Yönetilen kimlik almak için mevcut bir MySQL için Azure Veritabanı sunucusunu güncelleştirin.

    az mysql server update --name  <server name>  -g <resource_group> --assign-identity
    
  2. MySQL sunucusunun adı olan Sorumlu için Anahtar izinlerini (Get, Wrap, Unwrap) ayarlayın.

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

MySQL için Azure Veritabanı için veri şifrelemesini ayarlama

  1. Azure Key Vault'ta oluşturulan anahtarı kullanarak MySQL için Azure Veritabanı için Veri şifrelemeyi etkinleştirin.

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

    Anahtar url'si: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Geri yükleme veya çoğaltma sunucuları için Veri şifrelemesi kullanma

MySQL için Azure Veritabanı müşterinin Key Vault'ta depolanan yönetilen anahtarıyla şifrelendiğinde sunucunun yeni oluşturulan tüm kopyaları da şifrelenir. Bu yeni kopyayı yerel veya coğrafi geri yükleme işlemiyle ya da çoğaltma (yerel/bölgeler arası) işlemi aracılığıyla yapabilirsiniz. Bu nedenle şifrelenmiş bir MySQL sunucusu için aşağıdaki adımları kullanarak şifrelenmiş bir geri yüklenen sunucu oluşturabilirsiniz.

Geri yüklenen/çoğaltma sunucusu oluşturma

Sunucu geri yüklendikten sonra, geri yüklenen sunucuyu veri şifrelemesini yeniden doğrulama

  • Çoğaltma sunucusu için kimlik atama
az mysql server update --name  <server name>  -g <resoure_group> --assign-identity
  • Geri yüklenen/çoğaltma sunucusu için kullanılması gereken mevcut anahtarı alma
az mysql server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Geri yüklenen/çoğaltma sunucusu için yeni kimlik ilkesini ayarlama
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>
  • Geri yüklenen/çoğaltma sunucusunu şifreleme anahtarıyla yeniden doğrulama
az mysql server key create –name  <server name> -g <resource_group> --kid <key url>

MySQL için Azure Veritabanı için kullanılan anahtar için ek özellik

Anahtarı kullanma

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

Anahtar url'si: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Kullanılan Anahtarı listeleme

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

Kullanılan anahtarı bırakma

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

Veri şifrelemeyi etkinleştirmek için Azure Resource Manager şablonu kullanma

Azure portalının dışında, yeni ve mevcut sunucular için Azure Resource Manager şablonlarını kullanarak MySQL için Azure Veritabanı sunucunuzda veri şifrelemeyi etkinleştirebilirsiniz.

Yeni bir sunucu için

Sunucuya veri şifrelemesi etkinleştirilmiş olarak sağlamak için önceden oluşturulmuş Azure Resource Manager şablonlarından birini kullanın: Veri şifreleme örneği

Bu Azure Resource Manager şablonu bir MySQL için Azure Veritabanı sunucusu oluşturur ve sunucuda veri şifrelemeyi etkinleştirmek için parametre olarak geçirilen KeyVault ve Anahtar'ı kullanır.

Mevcut bir sunucu için

Ayrıca, mevcut MySQL için Azure Veritabanı sunucularınızda veri şifrelemeyi etkinleştirmek için Azure Resource Manager şablonlarını kullanabilirsiniz.

  • Daha önce properties nesnesindeki özelliğin altına kopyaladığınız Azure Key Vault anahtarının Uri Kaynak Kimliğini geçirin.

  • API sürümü olarak 2020-01-01-preview kullanın.

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

Sonraki adımlar