Share via


Azure CLI kullanarak PostgreSQL için Azure Veritabanı Tek sunucu için veri şifreleme

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

Önemli

PostgreSQL için Azure Veritabanı - Tek Sunucu kullanımdan kaldırma yolundadır. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya yükseltmenizi kesinlikle öneririz. PostgreSQL için Azure Veritabanı - Esnek Sunucu'ya geçiş hakkında daha fazla bilgi için bkz. PostgreSQL için Azure Veritabanı Tek Sunucuya ne oluyor?.

PostgreSQL için Azure Veritabanı Tek sunucunuz için veri şifrelemesini ayarlamak ve yönetmek için Azure CLI'yi kullanmayı öğ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, PostgreSQL için Azure Veritabanı Tek sunucusunun 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
      
  • 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 ve kaldırma işlemlerini gerçekleştirme

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

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

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

    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
    

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

    az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
    
  2. PostgreSQL Tek sunucu sunucusunun adı olan Sorumlu için Anahtar izinlerini (Al, Sarmala, Çöz) ayarlayın.

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

PostgreSQL için Azure Veritabanı Tek sunucu için veri şifrelemesini ayarlama

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

    az postgres 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

PostgreSQL için Azure Veritabanı Tek sunucu 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 PostgreSQL Tek sunucu 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 postgres server update --name  <server name>  -g <resource_group> --assign-identity
  • Geri yüklenen/çoğaltma sunucusu için kullanılması gereken mevcut anahtarı alma
az postgres 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 <resource_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 postgres server key create –name  <server name> -g <resource_group> --kid <key url>

PostgreSQL için Azure Veritabanı Tek sunucu için kullanılan anahtar için ek özellik

Anahtarı kullanma

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

Kullanılan anahtarı bırakma

az postgres 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 sunucu için Azure Resource Manager şablonlarını kullanarak PostgreSQL için Azure Veritabanı tek sunucunuzda veri şifrelemeyi etkinleştirebilirsiniz.

Mevcut bir sunucu için

Ayrıca, mevcut PostgreSQL için Azure Veritabanı Tek 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.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'))]"
      }
    }
  ]
}

Sonraki adımlar

Veri şifreleme hakkında daha fazla bilgi edinmek için bkz. müşteri tarafından yönetilen anahtarla tek sunucu veri şifrelemesi PostgreSQL için Azure Veritabanı.