Usar el cifrado de datos transparente (TDE)

En esta página se explica cómo usar el cifrado de datos transparente (TDE).

En las siguientes secciones se explica cómo gestionar los certificados de TDE.

Antes de empezar

Para importar o exportar certificados TDE, debes tener el permiso de gestión de identidades y accesos cloudsql.instances.manageEncryption, disponible en el rol cloudsql.admin. Para obtener más información, consulta los roles de Cloud SQL.

GRANT VIEW ANY DEFINITION TO other_login AS CustomerDbRootRole

Importar un certificado TDE externo

Consola

No puedes importar un certificado TDE mediante la consola Google Cloud .

gcloud

Usa el siguiente comando gcloud sql import para importar un certificado de un segmento de Cloud Storage:

    gcloud sql import tde INSTANCE_NAME \
    --certificate CERTIFICATE_NAME \
    --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
    --pvk-path=gs://BUCKET_NAME/KEY_NAME \
    --prompt-for-pvk-password \
    --pvk-password CERTIFICATE_PASSWORD
    

Haz las siguientes sustituciones:

  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL a la que quieres importar el certificado de TDE.
  • CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras importar.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage donde se encuentra el certificado de TDE que quieres importar.
  • KEY_NAME: el nombre de la clave de cifrado asociada al segmento de Cloud Storage.
  • CERTIFICATE_PASSWORD: la contraseña del certificado.

REST v1

Para importar un certificado TDE, usa el método instances.import y especifica las siguientes propiedades:

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el nombre del proyecto en el que se va a importar el certificado de cifrado.
  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL a la que quieres importar el certificado de cifrado.
  • TDE_CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras usar después de importarlo.
  • CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras importar.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage en el que se encuentra el certificado de cifrado que quieres importar.
  • KEY_NAME: el nombre de la clave de cifrado asociada al segmento de Cloud Storage.
  • CERTIFICATE_PASSWORD: la contraseña del certificado.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

Cuerpo JSON de la solicitud:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

REST v1beta4

Para importar un certificado TDE, usa el método instances.import y especifica las siguientes propiedades:

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el nombre del proyecto en el que se va a importar el certificado de cifrado.
  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL a la que quieres importar el certificado de cifrado.
  • TDE_CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras usar después de importarlo.
  • CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras importar.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage en el que se encuentra el certificado de cifrado que quieres importar.
  • KEY_NAME: el nombre de la clave de cifrado asociada al segmento de Cloud Storage.
  • CERTIFICATE_PASSWORD: la contraseña del certificado.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/import

Cuerpo JSON de la solicitud:


{
  "importContext":
    {
        "fileType": "TDE",
        "tdeImportOptions":
          {
            "name": "TDE_CERTIFICATE_NAME",
            "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
            "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
            "privateKeyPassword": "CERTIFICATE_PASSWORD"
          }
    }
}



Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

A cada certificado TDE importado se le asigna un nombre único con el siguiente formato:

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

Si la recuperación a un momento dado (PITR) está habilitada en la instancia, pueden pasar varios minutos antes de que el certificado TDE importado esté disponible.

Rotar certificados de TDE

  • Puedes rotar un certificado TDE importado con el procedimiento almacenado msdb.dbo.gcloudsql_rotate_tde_certificate. El procedimiento debe invocarlo el usuario sqlserver o los usuarios a los que el usuario sqlserver haya dado permiso, mediante una llamada similar a la siguiente:

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

Eliminar certificados de TDE

  • Puedes importar hasta diez certificados TDE de usuario. Si necesitas importar más, elimina los certificados TDE innecesarios con el procedimiento almacenado msdb.dbo.gcloudsql_drop_tde_user_certificate. El procedimiento debe invocarlo el usuario sqlserver o los usuarios a los que el usuario sqlserver haya dado permiso, mediante una llamada similar a la siguiente:

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • No puedes eliminar un certificado gestionado por Cloud SQL.

  • No puedes eliminar un certificado mientras esté en uso.

Exportar un certificado TDE

Para exportar el certificado, debes especificar el nombre completo del certificado TDE, incluido el prefijo y el sufijo. Puede buscar el nombre completo del certificado de cifrado TDE consultando la columna de nombre de la vista sys.certificates:

    SELECT name FROM sys.certificates
  

Consola

No puedes exportar un certificado de TDE mediante la consola de Google Cloud .

gcloud

Utiliza el siguiente gcloud sql export para exportar un certificado de TDE a un segmento de Cloud Storage:

          gcloud sql export tde INSTANCE_NAME \
          --certificate CERTIFICATE_NAME \
          --cert-path=gs://BUCKET_NAME/CERTIFICATE_NAME \
          --pvk-path=gs://BUCKET_NAME/KEY_NAME \
          --prompt-for-pvk-password \
          --pvk-password CERTIFICATE_PASSWORD
        

Haz las siguientes sustituciones:

  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL desde la que quieres exportar el certificado de TDE.
  • CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras exportar.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage donde se encuentra el certificado de TDE que quieres exportar.
  • KEY_NAME: el nombre de la clave de cifrado asociada al segmento de Cloud Storage.
  • CERTIFICATE_PASSWORD: la contraseña del certificado.

REST v1

Para exportar un certificado TDE, usa el método instances.export y especifica las siguientes propiedades:

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el nombre del proyecto del que se va a exportar el certificado de cifrado.
  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL desde la que quieres exportar el certificado de cifrado.
  • TDE_CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras usar después de exportarlo.
  • CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras exportar.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage donde se encuentra el certificado de cifrado que quieres exportar.
  • KEY_NAME: el nombre de la clave de cifrado asociada al segmento de Cloud Storage.
  • CERTIFICATE_PASSWORD: la contraseña del certificado.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

Cuerpo JSON de la solicitud:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

REST v1beta4

Para exportar un certificado TDE, usa el método instances.export y especifica las siguientes propiedades:

Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

  • PROJECT_ID: el nombre del proyecto del que se va a exportar el certificado de cifrado.
  • INSTANCE_NAME: el nombre de la instancia de Cloud SQL desde la que quieres exportar el certificado de cifrado.
  • TDE_CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras usar después de exportarlo.
  • CERTIFICATE_NAME: el nombre del certificado de cifrado que quieras exportar.
  • BUCKET_NAME: el nombre del segmento de Cloud Storage donde se encuentra el certificado de cifrado que quieres exportar.
  • KEY_NAME: el nombre de la clave de cifrado asociada al segmento de Cloud Storage.
  • CERTIFICATE_PASSWORD: la contraseña del certificado.

Método HTTP y URL:

POST https://sqladmin.googleapis.com/v1beta4/projects/PROJECT_NAME/instances/INSTANCE_NAME/export

Cuerpo JSON de la solicitud:


{
  "exportContext":
    {
      "fileType": "TDE",
      "tdeExportOptions":
        {
          "name": "TDE_CERTIFICATE_NAME",
          "certificatePath": "gs://BUCKET_NAME/CERTIFICATE_NAME",
          "privateKeyPath": "gs://BUCKET_NAME/KEY_NAME",
          "privateKeyPassword": "CERTIFICATE_PASSWORD"
        }
    }
}


Para enviar tu solicitud, despliega una de estas opciones:

Deberías recibir una respuesta JSON similar a la siguiente:

Importar una copia de seguridad cifrada con TDE

Al importar una copia de seguridad cifrada con TDE, si el certificado TDE correspondiente ya está en la instancia de origen, puedes importar la copia de seguridad cifrada directamente y no se descifrará. No es necesario que proporcione el certificado de nuevo.

Si el certificado no está en la instancia, usa la marca --keep-encrypted al importarlo. La marca ofrece las siguientes ventajas:

  • Mantiene el certificado de TDE asociado a la instancia.
  • Impide que se descifre la copia de seguridad durante la importación.

Si no usas la marca --keep-encrypted, la copia de seguridad importada se descifrará y el certificado TDE no se guardará en el servidor.

Para obtener más información, consulta los siguientes recursos:

Exportar una copia de seguridad cifrada con TDE

Puedes exportar una copia de seguridad cifrada con TDE de la misma forma que exportas una sin cifrar. El certificado usado para cifrar la copia de seguridad no se incluye en la exportación. Debes exportarlo por separado.

Para obtener más información, consulta los siguientes recursos:

Encriptar y desencriptar una base de datos

Puedes cifrar y descifrar tu instancia de forma muy similar a como lo harías con SQL Server.

Inicialmente, solo los inicios de sesión de usuario root, como sqlserver, pueden acceder a los certificados de TDE. Para dar acceso a otros usuarios, usa el siguiente comando o uno similar:

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

También puedes conceder acceso a un certificado y a un usuario de base de datos específicos.

Puedes cifrar una base de datos con el siguiente comando o uno similar:

    CREATE DATABASE ENCRYPTION KEY WITH ALGORITHM = AES_256 ENCRYPTION BY SERVER CERTIFICATE CERTIFICATE_NAME
    ALTER DATABASE DATABASE_NAME SET ENCRYPTION ON
  

Puedes descifrar una base de datos con el siguiente comando o uno similar:

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

Siguientes pasos