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:

    • Usuwanie nietrwałe

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

      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

  1. 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
    
  2. 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

  1. 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.