Bagikan melalui


Enkripsi data untuk Azure Database for PostgreSQL Single server dengan Azure CLI

BERLAKU UNTUK: Azure Database for PostgreSQL - Server Tunggal

Penting

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

Pelajari cara menggunakan Azure CLI untuk menyiapkan dan mengelola enkripsi data untuk Azure Database for PostgreSQL Single server 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 PostgreSQL Single server.

    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
      
  • Kunci harus memiliki atribut berikut untuk digunakan sebagai kunci yang dikelola pelanggan:

    • Tidak ada tanggal kedaluwarsa
    • Tidak dinonaktifkan
    • Melakukan operasi get, wrap, dan unwrap

Mengatur izin yang tepat untuk operasi utama

  1. Ada dua cara untuk mendapatkan identitas terkelola untuk Azure Database for PostgreSQL Single server Anda.

    Buat server Azure Database for PostgreSQL baru dengan identitas terkelola.

    az postgres server create --name <server_name> -g <resource_group> --location <location> --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 PostgreSQL yang sudah ada untuk mendapatkan identitas terkelola.

    az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
    
  2. Atur Izin kunci (Get, Wrap, Unwrap) untuk Prinsipal, yang merupakan nama server PostgreSQL Single server.

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

Mengatur enkripsi data untuk server Tunggal Azure Database for PostgreSQL

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

    az postgres 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 server Tunggal Azure Database for PostgreSQL dienkripsi dengan kunci terkelola pelanggan yang disimpan di Key Vault, setiap 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 PostgreSQL Single server terenkripsi, Anda dapat menggunakan langkah-langkah berikut untuk membuat server yang dipulihkan yang terenkripsi.

Membuat server yang dipulihkan/replika

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

  • Menetapkan identitas untuk server replika
az postgres server update --name  <server name>  -g <resource_group> --assign-identity
  • Dapatkan kunci yang sudah ada yang harus digunakan untuk server yang dipulihkan/replika
az postgres 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 <resource_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 postgres server key create –name  <server name> -g <resource_group> --kid <key url>

Kemampuan tambahan untuk kunci yang digunakan untuk Azure Database for PostgreSQL Single server

Dapatkan Kunci yang digunakan

az postgres 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 postgres server key list --name  <server name>  -g <resource_group>

Hapus kunci yang sedang digunakan

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

Menggunakan templat Azure Resource Manager untuk mengaktifkan enkripsi data

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

Untuk server yang sudah ada

Selain itu, Anda dapat menggunakan templat Azure Resource Manager untuk mengaktifkan enkripsi data di Azure Database for PostgreSQL Single server Anda 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.DBforPostgreSQL/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.DBforPostgreSQL/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.DBforPostgreSQL/servers/', parameters('serverName')), '2017-12-01', 'Full').identity.principalId]",
                    "permissions": {
                      "keys": [
                        "get",
                        "wrapKey",
                        "unwrapKey"
                      ]
                    }
                  }
                ]
              }
            }
          ]
        }
      }
    },
    {
      "name": "[concat(parameters('serverName'), '/', variables('serverKeyName'))]",
      "type": "Microsoft.DBforPostgreSQL/servers/keys",
      "apiVersion": "2020-01-01-preview",
      "dependsOn": [
        "addAccessPolicy",
        "[resourceId('Microsoft.DBforPostgreSQL/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

Untuk mempelajari selengkapnya tentang enkripsi data, lihat Enkripsi data server Tunggal Azure Database for PostgreSQL dengan kunci yang dikelola pelanggan.