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:
-
az resource update --id $(az keyvault show --name \ <key_vault_name> -o tsv | awk '{print $1}') --set \ properties.enableSoftDelete=true
-
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
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
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
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.