Szyfrowanie danych dla pojedynczego serwera usługi Azure Database for PostgreSQL przy użyciu interfejsu wiersza polecenia platformy Azure
DOTYCZY: Azure Database for PostgreSQL — pojedynczy serwer
Ważne
Usługa Azure Database for PostgreSQL — pojedynczy serwer znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do usługi Azure Database for PostgreSQL — serwer elastyczny. Aby uzyskać więcej informacji na temat migracji do usługi Azure Database for PostgreSQL — serwer elastyczny, zobacz Co się dzieje z usługą Azure Database for PostgreSQL — pojedynczy serwer?.
Dowiedz się, jak używać interfejsu wiersza polecenia platformy Azure do konfigurowania szyfrowania danych dla pojedynczego serwera usługi Azure Database for PostgreSQL i zarządzania nim.
Wymagania wstępne dotyczące interfejsu wiersza polecenia platformy Azure
Musisz mieć subskrypcję platformy Azure i być administratorem tej subskrypcji.
Utwórz magazyn kluczy i klucz do użycia dla klucza zarządzanego przez klienta. Włącz również ochronę przed przeczyszczeniem i usuwanie nietrwałe w magazynie kluczy.
az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
W utworzonym usłudze Azure Key Vault utwórz klucz, który będzie używany do szyfrowania danych pojedynczego serwera usługi Azure Database for PostgreSQL.
az keyvault key create --name <key_name> -p software --vault-name <vault_name>
Aby można było używać istniejącego magazynu kluczy, musi mieć następujące właściwości do użycia jako klucz zarządzany przez klienta:
-
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
-
Klucz musi mieć następujące atrybuty do użycia jako klucz zarządzany przez klienta:
- Brak daty wygaśnięcia
- Niewyłączone
- Wykonywanie operacji pobierania, zawijania i odpakowywanie
Ustawianie odpowiednich uprawnień dla operacji kluczy
Istnieją dwa sposoby uzyskiwania tożsamości zarządzanej dla pojedynczego serwera usługi Azure Database for PostgreSQL.
Utwórz nowy serwer usługi Azure Database for PostgreSQL z tożsamością zarządzaną.
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
Zaktualizuj istniejący serwer usługi Azure Database for PostgreSQL, aby uzyskać tożsamość zarządzaną.
az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
Ustaw uprawnienia klucza (Get, Wrap, Unwrap) dla podmiotu zabezpieczeń, który jest nazwą serwera pojedynczego serwera PostgreSQL.
az keyvault set-policy --name -g <resource_group> --key-permissions get unwrapKey wrapKey --object-id <principal id of the server>
Ustawianie szyfrowania danych dla pojedynczego serwera usługi Azure Database for PostgreSQL
Włącz szyfrowanie danych dla pojedynczego serwera usługi Azure Database for PostgreSQL przy użyciu klucza utworzonego w usłudze Azure Key Vault.
az postgres server key create --name <server_name> -g <resource_group> --kid <key_url>
Adres URL klucza:
https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Używanie szyfrowania danych dla serwerów przywracania lub repliki
Po zaszyfrowaniu pojedynczego serwera usługi Azure Database for PostgreSQL za pomocą klucza zarządzanego klienta przechowywanego w usłudze Key Vault każda nowo utworzona kopia serwera jest również szyfrowana. Możesz utworzyć tę nową kopię za pomocą operacji przywracania lokalnego lub geograficznego albo za pomocą operacji repliki (lokalnie/między regionami). W przypadku zaszyfrowanego serwera pojedynczego serwera PostgreSQL można utworzyć zaszyfrowany serwer przywrócony za pomocą poniższych kroków.
Tworzenie przywróconego/repliki serwera
Po przywróceniu serwera zrewiduj szyfrowanie danych przywróconego serwera
- Przypisywanie tożsamości dla serwera repliki
az postgres server update --name <server name> -g <resource_group> --assign-identity
- Pobierz istniejący klucz, który musi być używany dla przywróconego/repliki serwera
az postgres server key list --name '<server_name>' -g '<resource_group_name>'
- Ustawianie zasad nowej tożsamości dla przywróconego/repliki serwera
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>
- Ponownie zweryfikuj przywrócony/replikowy serwer przy użyciu klucza szyfrowania
az postgres server key create –name <server name> -g <resource_group> --kid <key url>
Dodatkowa funkcja klucza używanego dla pojedynczego serwera usługi Azure Database for PostgreSQL
Pobieranie używanego klucza
az postgres server key show --name <server name> -g <resource_group> --kid <key url>
Adres URL klucza: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>
Wyświetlanie listy użytych kluczy
az postgres server key list --name <server name> -g <resource_group>
Usuwanie używanego klucza
az postgres server key delete -g <resource_group> --kid <key url>
Używanie szablonu usługi Azure Resource Manager do włączania szyfrowania danych
Oprócz witryny Azure Portal można również włączyć szyfrowanie danych na pojedynczym serwerze usługi Azure Database for PostgreSQL przy użyciu szablonów usługi Azure Resource Manager dla nowego i istniejącego serwera.
Dla istniejącego serwera
Ponadto możesz użyć szablonów usługi Azure Resource Manager, aby włączyć szyfrowanie danych na istniejących serwerach usługi Azure Database for PostgreSQL.
Przekaż identyfikator zasobu klucza usługi Azure Key Vault skopiowany wcześniej w ramach
Uri
właściwości w obiekcie properties.Użyj wersji interfejsu API 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'))]"
}
}
]
}
Następne kroki
Aby dowiedzieć się więcej na temat szyfrowania danych, zobacz Szyfrowanie danych pojedynczego serwera usługi Azure Database for PostgreSQL przy użyciu klucza zarządzanego przez klienta.