Cifrado de datos para Azure Database for PostgreSQL: servidor único mediante la CLI de Azure

Se aplica a: Azure Database for PostgreSQL: servidor único

Importante

El servicio de servidor único de Azure Database for PostgreSQL está en proceso de retirada. Es muy recomendable actualizar al servidor flexible de Azure Database for PostgreSQL. Para obtener más información sobre la migración al servidor flexible de Azure Database for PostgreSQL, consulte ¿Qué sucederá con el servicio de servidor único de Azure Database for PostgreSQL?.

Aprenda a usar la CLI de Azure para configurar y administrar el cifrado de datos para Azure Database for PostgreSQL: servidor único.

Requisitos previos de la CLI de Azure

  • Debe tener una suscripción de Azure y ser un administrador en esa suscripción.

  • Cree un almacén de claves y una clave que se usará como clave administrada por el cliente. Habilite también la protección de purga y la eliminación temporal en el almacén de claves.

    az keyvault create -g <resource_group> -n <vault_name> --enable-soft-delete true --enable-purge-protection true
    
  • En la instancia de Azure Key Vault creada, cree la clave que se usará para el cifrado de datos de Azure Database for PostgreSQL: servidor único.

    az keyvault key create --name <key_name> -p software --vault-name <vault_name>
    
  • Para usar un almacén de claves existente, este debe tener las siguientes propiedades para usarse como una clave administrada por el cliente:

    • Eliminación temporal

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

      az keyvault update --name <key_vault_name> --resource-group <resource_group_name>  --enable-purge-protection true
      
  • La clave debe tener los siguientes atributos para que se pueda usar como clave administrada por el cliente:

    • Sin fecha de expiración
    • No deshabilitado
    • Realización de operaciones get, wrap y unwrap

Establecer los permisos adecuados para las operaciones de clave

  1. Hay dos maneras de obtener la identidad administrada para Azure Database for PostgreSQL: servidor único.

    Cree un servidor de Azure Database for PostgreSQL con una identidad administrada.

    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
    

    Actualice un servidor de Azure Database for PostgreSQL existente para obtener una identidad administrada.

    az postgres server update --resource-group <resource_group> --name <server_name> --assign-identity
    
  2. Establezca el valor de Permisos de claves (Get [Obtener], Wrap [Encapsular], Unwrap [Desencapsular]) de Entidad de seguridad, que es el nombre del servidor único de PostgreSQL.

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

Configuración del cifrado de datos para un único servidor de Azure Database for PostgreSQL

  1. Permita el cifrado de datos para Azure Database for PostgreSQL: servidor único mediante la clave creada en Azure Key Vault.

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

    Dirección URL de la clave: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Uso del cifrado de datos con servidores de restauración o réplica

Después de cifrar un servidor único de Azure Database for PostgreSQL con la clave administrada de un cliente almacenada en Key Vault, también se cifra cualquier copia recién creada del servidor. Puede crear esta nueva copia mediante una operación de restauración local o geográfica, o por medio de una operación de réplica (local o entre regiones). De modo que, con un servidor único de PostgreSQL cifrado, puede usar los siguientes pasos para crear un servidor restaurado cifrado.

Creación de un servidor restaurado o de réplica

Una vez restaurado el servidor, vuelva a validar el cifrado de datos del servidor restaurado.

  • Asignación de identidades para el servidor Réplica
az postgres server update --name  <server name>  -g <resource_group> --assign-identity
  • Obtenga la clave existente que se debe usar para el servidor restaurado o el servidor Réplica.
az postgres server key list --name  '<server_name>'  -g '<resource_group_name>'
  • Establezca la directiva de la nueva identidad del servidor restaurado o el servidor Réplica.
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>
  • Vuelva a validar el servidor restaurado o el servidor Réplica con la clave de cifrado.
az postgres server key create –name  <server name> -g <resource_group> --kid <key url>

Funcionalidad adicional para la clave que se usa para Azure Database for PostgreSQL: servidor único

Obtención de la clave usada

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

Dirección URL de la clave: https://YourVaultName.vault.azure.net/keys/YourKeyName/01234567890123456789012345678901>

Enumeración de la clave usada

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

Eliminación de la clave usada

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

Uso de una plantilla de Azure Resource Manager para habilitar el cifrado de datos

Además de en Azure Portal, también puede habilitar el cifrado de datos en el servidor único de Azure Database for PostgreSQL mediante plantillas de Azure Resource Manager para los servidores nuevos o ya existentes.

Para un servidor existente

Además, puede usar plantillas de Azure Resource Manager para habilitar el cifrado de datos en los servidores únicos existentes de Azure Database for PostgreSQL.

  • Pase el URI del recurso de la clave de Azure Key Vault que copió anteriormente en la propiedad Uri en el objeto properties.

  • Use 2020-01-01-preview como la versión de 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'))]"
      }
    }
  ]
}

Pasos siguientes

Para más información sobre el cifrado de datos, consulte Cifrado de datos de un solo servidor de Azure Database for PostgreSQL con la clave administrada por el cliente.