Šifrování dat pro jednoúčelový server Azure Database for PostgreSQL pomocí Azure CLI

PLATÍ PRO: Azure Database for PostgreSQL – Jednoúčelový server

Důležité

Jednoúčelový server Azure Database for PostgreSQL je na cestě vyřazení. Důrazně doporučujeme upgradovat na flexibilní server Azure Database for PostgreSQL. Další informace o migraci na flexibilní server Azure Database for PostgreSQL najdete v tématu Co se děje s jednoúčelovým serverem Azure Database for PostgreSQL?

Zjistěte, jak pomocí Azure CLI nastavit a spravovat šifrování dat pro jednoúčelový server Azure Database for PostgreSQL.

Požadavky pro Azure CLI

  • Musíte mít předplatné Azure a být správcem daného předplatného.

  • Vytvořte trezor klíčů a klíč, který se má použít pro klíč spravovaný zákazníkem. Povolte také ochranu před vymazáním a obnovitelné odstranění v trezoru klíčů.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • Ve vytvořené službě Azure Key Vault vytvořte klíč, který se použije k šifrování dat jednoúčelového serveru Azure Database for PostgreSQL.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Aby bylo možné použít existující trezor klíčů, musí mít následující vlastnosti, které se mají použít jako klíč spravovaný zákazníkem:

    • Obnovitelné odstranění

      az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
      
    • Vyprázdnění chráněné

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
  • Aby bylo možné klíč použít jako klíč spravovaný zákazníkem, musí mít následující atributy:

    • Nesmí mít žádné datum ukončení platnosti.
    • Nesmí být zakázaný.
    • Provádění operací získání, zabalení a rozbalení

Nastavení správných oprávnění pro operace s klíči

  1. Existují dva způsoby získání spravované identity pro jednoúčelový server Azure Database for PostgreSQL.

    Vytvořte nový server Azure Database for PostgreSQL se spravovanou identitou.

    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
    

    Aktualizujte existující server Azure Database for PostgreSQL a získejte spravovanou identitu.

    az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
    
  2. Nastavte oprávnění ke klíči (Get, Wrap, Unwrap) pro objekt zabezpečení, což je název jednoúčelového serveru PostgreSQL.

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

Nastavení šifrování dat pro jednoúčelový server Azure Database for PostgreSQL

  1. Povolte šifrování dat pro jednoúčelový server Azure Database for PostgreSQL pomocí klíče vytvořeného ve službě Azure Key Vault.

    az postgres server key create --name <server_name> -g <resource_group> --kid <key_url>
    

    Adresa URL klíče: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Použití šifrování dat pro servery obnovení nebo repliky

Jakmile se jednoúčelový server Azure Database for PostgreSQL zašifruje pomocí spravovaného klíče zákazníka uloženého ve službě Key Vault, všechny nově vytvořené kopie serveru se také zašifrují. Tuto novou kopii můžete vytvořit buď prostřednictvím operace místního nebo geografického obnovení, nebo prostřednictvím operace repliky (místní/mezi oblastmi). Pro šifrovaný jednoúčelový server PostgreSQL můžete vytvořit šifrovaný obnovený server pomocí následujícího postupu.

Vytvoření obnoveného serveru nebo serveru repliky

Po obnovení serveru znovu obnovte šifrování dat obnoveného serveru.

  • Přiřazení identity pro server repliky
az postgres server update --name  <server name>  -g <resource_group> --assign-identity
  • Získání existujícího klíče, který se musí použít pro obnovený server nebo server repliky
az postgres server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Nastavení zásad pro novou identitu pro obnovený server nebo server repliky
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>
  • Opětovné ověření obnoveného serveru nebo serveru repliky pomocí šifrovacího klíče
az postgres server key create –name  <server name> -g <resource_group> --kid <key url>

Další funkce klíče používaného pro jednoúčelový server Azure Database for PostgreSQL

Získání použitého klíče

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

Adresa URL klíče: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Výpis použitého klíče

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

Vyřazení použitého klíče

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

Použití šablony Azure Resource Manageru k povolení šifrování dat

Kromě webu Azure Portal můžete také povolit šifrování dat na jednoúčelovém serveru Azure Database for PostgreSQL pomocí šablon Azure Resource Manageru pro nový a existující server.

Pro existující server

Kromě toho můžete pomocí šablon Azure Resource Manageru povolit šifrování dat na stávajících jednoúčelových serverech Azure Database for PostgreSQL.

  • Předejte ID prostředku klíče služby Azure Key Vault, který jste zkopírovali dříve v Uri rámci vlastnosti v objektu vlastností.

  • Jako verzi rozhraní API použijte verzi 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.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'))]"
      }
    }
  ]
}

Další kroky

Další informace o šifrování dat najdete v tématu Šifrování dat jednoúčelového serveru Azure Database for PostgreSQL pomocí klíče spravovaného zákazníkem.