Share via


Crittografia dei dati per Database di Azure per PostgreSQL server singolo usando l'interfaccia della riga di comando di Azure

SI APPLICA A: Database di Azure per PostgreSQL - Server singolo

Importante

Database di Azure per PostgreSQL - Server singolo si trova nel percorso di ritiro. È consigliabile eseguire l'aggiornamento a Database di Azure per PostgreSQL - Server flessibile. Per altre informazioni sulla migrazione a Database di Azure per PostgreSQL - Server flessibile, vedere What's happening to Database di Azure per PostgreSQL Single Server?.

Informazioni su come usare l'interfaccia della riga di comando di Azure per configurare e gestire la crittografia dei dati per il server singolo Database di Azure per PostgreSQL.

Prerequisiti per l'interfaccia della riga di comando di Azure

  • È necessario disporre di una sottoscrizione di Azure e avere il ruolo di amministratore di tale sottoscrizione.

  • Creare un insieme di credenziali delle chiavi e una chiave da usare per una chiave gestita dal cliente. Abilitare anche la protezione dall'eliminazione e l'eliminazione temporanea nell'insieme di credenziali delle chiavi.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • Nell'insieme di credenziali delle chiavi di Azure creato creare la chiave che verrà usata per la crittografia dei dati del Database di Azure per PostgreSQL server singolo.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Per usare un insieme di credenziali delle chiavi esistente, deve avere le proprietà seguenti da usare come chiave gestita dal cliente:

    • Eliminazione temporanea

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

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
  • Per essere usata come chiave gestita dal cliente, la chiave deve disporre degli attributi seguenti:

    • Nessuna data di scadenza
    • Non disabilitato
    • Eseguire operazioni get, wrap e unwrap

Impostare le autorizzazioni appropriate per le operazioni delle chiavi

  1. Esistono due modi per ottenere l'identità gestita per il server singolo Database di Azure per PostgreSQL.

    Creare un nuovo server Database di Azure per PostgreSQL con un'identità gestita.

    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
    

    Aggiornare un server Database di Azure per PostgreSQL esistente per ottenere un'identità gestita.

    az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
    
  2. Impostare le autorizzazioni chiave (Get, Wrap, Unwrap) per l'entità, ovvero il nome del server singolo PostgreSQL.

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

Impostare la crittografia dei dati per Database di Azure per PostgreSQL server singolo

  1. Abilitare Crittografia dei dati per il server singolo Database di Azure per PostgreSQL usando la chiave creata in Azure Key Vault.

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

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

Uso della crittografia dei dati per il ripristino o i server di replica

Una volta crittografato il server singolo di Database di Azure per PostgreSQL con una chiave gestita dal cliente archiviata in Key Vault, viene crittografata anche qualsiasi nuova copia creata del server. È possibile eseguire questa nuova copia tramite un'operazione di ripristino locale o geografico oppure tramite un'operazione di replica (area locale/interarea). Pertanto, per un server singolo PostgreSQL crittografato, è possibile usare la procedura seguente per creare un server ripristinato crittografato.

Creazione di un server di replica o ripristinato

Dopo il ripristino del server, riconvalidare la crittografia dei dati del server ripristinato

  • Assegnare l'identità per il server di replica
az postgres server update --name  <server name>  -g <resource_group> --assign-identity
  • Ottenere la chiave esistente che deve essere usata per il server ripristinato/di replica
az postgres server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Impostare i criteri per la nuova identità per il server ripristinato/di replica
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>
  • Convalidare nuovamente il server ripristinato/di replica con la chiave di crittografia
az postgres server key create –name  <server name> -g <resource_group> --kid <key url>

Funzionalità aggiuntiva per la chiave usata per il server singolo Database di Azure per PostgreSQL

Ottenere la chiave usata

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

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

Elencare la chiave usata

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

Rilasciare la chiave usata

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

Uso di un modello di Azure Resource Manager per abilitare la crittografia dei dati

Oltre a portale di Azure, è anche possibile abilitare la crittografia dei dati nel server singolo Database di Azure per PostgreSQL usando i modelli di Azure Resource Manager per il server nuovo ed esistente.

Per un server esistente

È anche possibile usare i modelli di Azure Resource Manager per abilitare la crittografia dei dati nei server singoli Database di Azure per PostgreSQL esistenti.

  • Passare l'ID risorsa della chiave di Azure Key Vault copiata in precedenza nella Uri proprietà nell'oggetto properties.

  • Usare 2020-01-01-preview come versione dell'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'))]"
      }
    }
  ]
}

Passaggi successivi

Per altre informazioni sulla crittografia dei dati, vedere Database di Azure per PostgreSQL crittografia dei dati a server singolo con chiave gestita dal cliente.