Enkripsi data untuk Azure Database for MySQL menggunakan Azure CLI

BERLAKU UNTUKAzure Database for MySQL - Server Tunggal

Penting

Server tunggal Azure Database for MySQL berada di jalur penghentian. Kami sangat menyarankan Agar Anda meningkatkan ke server fleksibel Azure Database for MySQL. Untuk informasi selengkapnya tentang migrasi ke server fleksibel Azure Database for MySQL, lihat Apa yang terjadi pada Server Tunggal Azure Database for MySQL?

Pelajari cara menggunakan Azure CLI untuk menyiapkan dan mengelola enkripsi data untuk Azure Database for MySQL Anda.

Prasyarat untuk Azure CLI

  • Anda harus memiliki langganan Azure dan menjadi admin pada langganan tersebut.

  • Buat brankas kunci dan kunci yang akan digunakan untuk kunci yang dikelola pelanggan. Aktifkan juga perlindungan penghapusan menyeluruh dan penghapusan sementara pada brankas kunci.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • Di Azure Key Vault yang dibuat, buat kunci yang akan digunakan untuk enkripsi data Azure Database for MySQL.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Untuk menggunakan brankas kunci yang ada, brankas tersebut harus memiliki properti berikut untuk digunakan sebagai kunci yang dikelola pelanggan:

    • Penghapusan sementara

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

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
    • Jumlah hari retensi diatur ke 90 hari

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --retention-days 90
    
  • Kunci harus memiliki atribut berikut untuk digunakan sebagai kunci yang dikelola pelanggan:

    • Tidak ada tanggal kedaluwarsa
    • Tidak dinonaktifkan
    • Lakukan operasi get, wrap, unwrap
    • atribut recoverylevel diatur ke Dapat dipulihkan (atribut ini memerlukan penghapusan sementara diaktifkan dengan periode retensi yang diatur ke 90 hari)
    • Proteksi pembersihan diaktifkan

Anda dapat memverifikasi atribut kunci di atas dengan menggunakan perintah berikut:

az keyvault key show --vault-name <key_vault_name> -n <key_name>
  • Azure Database for MySQL - Server Tunggal harus berada pada tingkat harga Tujuan Umum atau Memori yang Dioptimalkan dan penyimpanan tujuan umum v2. Sebelum Anda melangkah lebih jauh, lihat batasan untuk enkripsi data dengan kunci yang dikelola pelanggan.

Mengatur izin yang tepat untuk operasi utama

  1. Ada dua cara mendapatkan identitas terkelola untuk Azure Database for MySQL.

    Buat database server Azure Database for MySQL dengan identitas terkelola.

    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
    

    Perbarui server Azure Database for MySQL yang sudah ada untuk mendapatkan identitas terkelola.

    az mysql server update --name  <server name>  -g <resource_group> --assign-identity
    
  2. Atur Izin kunci (Get, Wrap, Unwrap) untuk Utama, yang merupakan nama server MySQL.

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

Mengatur enkripsi data untuk Azure Database for MySQL

  1. Aktifkan Enkripsi data untuk Azure Database for MySQL menggunakan kunci yang dibuat di Azure Key Vault.

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

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

Menggunakan Enkripsi data untuk memulihkan atau mereplikasi server

Setelah Azure Database for MySQL dienkripsi dengan kunci yang dikelola pelanggan yang disimpan di Azure Key Vault, salinan server yang baru dibuat juga dienkripsi. Anda dapat membuat salinan baru ini melalui operasi lokal atau pemulihan geografis, atau melalui operasi replika (lokal/lintas wilayah). Jadi, untuk server MySQL terenkripsi, Anda dapat menggunakan langkah-langkah berikut untuk membuat server yang dipulihkan terenkripsi.

Membuat server yang dipulihkan/replika

Setelah server dipulihkan, validasi ulang enkripsi data pada server yang dipulihkan

  • Menetapkan identitas untuk server replika
az mysql server update --name  <server name>  -g <resoure_group> --assign-identity
  • Dapatkan kunci yang sudah ada yang harus digunakan untuk server yang dipulihkan/replika
az mysql server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Atur kebijakan identitas baru untuk server yang dipulihkan/replika
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>
  • Memvalidasi ulang server yang dipulihkan/replika dengan kunci enkripsi
az mysql server key create –name  <server name> -g <resource_group> --kid <key url>

Kapabilitas tambahan untuk kunci yang digunakan untuk Azure Database for MySQL

Dapatkan Kunci yang digunakan

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

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

Cantumkan Kunci yang digunakan

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

Hapus kunci yang sedang digunakan

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

Menggunakan templat Azure Resource Manager untuk mengaktifkan enkripsi data

Selain portal Azure, Anda juga dapat mengaktifkan enkripsi data di server Azure Database for MySQL menggunakan templat Azure Resource Manager untuk server baru dan yang sudah ada.

Untuk server baru

Gunakan salah satu templat Azure Resource Manager yang telah dibuat sebelumnya untuk menyediakan server dengan enkripsi data yang diaktifkan: Contoh dengan Enkripsi data

Templat Azure Resource Manager ini membuat server Azure Database for MySQL dan menggunakan KeyVault dan Kunci yang diteruskan sebagai parameter untuk mengaktifkan enkripsi data di server.

Untuk server yang sudah ada

Selain itu, Anda dapat menggunakan templat Azure Resource Manager untuk mengaktifkan enkripsi data di server Azure Database for MySQL yang sudah ada.

  • Teruskan ID Sumber Daya kunci Azure Key Vault yang Anda salin sebelumnya pada properti Uridi objek properti.

  • Gunakan 2020-01-01-preview sebagai versi 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'))]"
      }
    }
  ]
}

Langkah berikutnya