Usa la encriptación de datos transparente (TDE)

En esta página, se muestra cómo usar la encriptación de datos transparente (TDE).

En las siguientes secciones, se muestra cómo administrar certificados de TDE.

Antes de comenzar

Para importar o exportar certificados de TDE, debes tener el permiso de Identity and Access Management 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

Importa un certificado TDE externo

Console

No puedes importar un certificado de TDE con la consola de Google Cloud.

gcloud

Usa el siguiente gcloud sql import para importar un certificado desde un bucket 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
    

Realiza los siguientes reemplazos:

  • INSTANCE_NAME: El nombre de la instancia de Cloud SQL a la que deseas importar el certificado de TDE.
  • CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas importar.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage en el que se encuentra el certificado de TDE que deseas importar.
  • KEY_NAME: Es el nombre de la clave de encriptación asociada con el bucket de Cloud Storage.
  • CERTIFICATE_PASSWORD: La contraseña del certificado

REST v1

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

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el nombre del proyecto en el que se importará el certificado de encriptación.
  • INSTANCE_NAME: El nombre de la instancia de Cloud SQL a la que deseas importar el certificado de encriptación.
  • TDE_CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas usar después de importarlo.
  • CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas importar.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage en el que se encuentra el certificado de encriptación que deseas importar.
  • KEY_NAME: Es el nombre de la clave de encriptación asociada con el bucket 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1beta4

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

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el nombre del proyecto en el que se importará el certificado de encriptación.
  • INSTANCE_NAME: El nombre de la instancia de Cloud SQL a la que deseas importar el certificado de encriptación.
  • TDE_CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas usar después de importarlo.
  • CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas importar.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage en el que se encuentra el certificado de encriptación que deseas importar.
  • KEY_NAME: Es el nombre de la clave de encriptación asociada con el bucket 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

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

  gcloud_tde_user_CERTIFICATE_NAME_GENERATED_GUID

Si la recuperación de un momento determinado (PITR) está habilitada en la instancia, es posible que el certificado de TDE importado tarde varios minutos en estar disponible.

Rota los certificados de TDE

  • Puedes rotar un certificado de TDE importado con el procedimiento almacenado msdb.dbo.gcloudsql_rotate_tde_certificate. El usuario sqlserver o los usuarios a los que el usuario sqlserver les otorgó permiso deben invocar el procedimiento con una llamada similar a la siguiente:

        EXEC msdb.dbo.gcloudsql_rotate_tde_certificate TDE_CERTIFICATE_NAME
        

Borra los certificados de TDE

  • Puedes importar hasta diez certificados de TDE de usuario. Si necesitas importar más, borra los certificados de TDE innecesarios con el procedimiento almacenado msdb.dbo.gcloudsql_drop_tde_user_certificate. El usuario sqlserver o los usuarios a los que el usuario sqlserver les otorgó permiso deben invocar el procedimiento con una llamada similar a la siguiente:

        EXEC gcloudsql_drop_tde_user_certificate TDE_CERTIFICATE_NAME
        
  • No puedes borrar un certificado administrado por Cloud SQL.

  • No puedes borrar un certificado mientras está en uso.

Cómo exportar un certificado de TDE

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

    SELECT name FROM sys.certificates
  

Console

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

gcloud

Usa el siguiente gcloud sql export para exportar un certificado de TDE a un bucket 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
        

Realiza los siguientes reemplazos:

  • INSTANCE_NAME: El nombre de la instancia de Cloud SQL desde la que deseas exportar el certificado de TDE.
  • CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas exportar.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage en el que se encuentra el certificado de TDE que deseas exportar.
  • KEY_NAME: Es el nombre de la clave de encriptación asociada con el bucket de Cloud Storage.
  • CERTIFICATE_PASSWORD: La contraseña del certificado

REST v1

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

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el nombre del proyecto desde el que se exportará el certificado de encriptación.
  • INSTANCE_NAME: El nombre de la instancia de Cloud SQL desde la que deseas exportar el certificado de encriptación.
  • TDE_CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas usar después de exportarlo.
  • CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas exportar.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage en el que se encuentra el certificado de encriptación que deseas exportar.
  • KEY_NAME: Es el nombre de la clave de encriptación asociada con el bucket 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

REST v1beta4

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

Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

  • PROJECT_ID: Es el nombre del proyecto desde el que se exportará el certificado de encriptación.
  • INSTANCE_NAME: El nombre de la instancia de Cloud SQL desde la que deseas exportar el certificado de encriptación.
  • TDE_CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas usar después de exportarlo.
  • CERTIFICATE_NAME: Es el nombre del certificado de encriptación que deseas exportar.
  • BUCKET_NAME: Es el nombre del bucket de Cloud Storage en el que se encuentra el certificado de encriptación que deseas exportar.
  • KEY_NAME: Es el nombre de la clave de encriptación asociada con el bucket 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, expande una de estas opciones:

Deberías recibir una respuesta JSON similar a la que se muestra a continuación:

Importa una copia de seguridad encriptada con TDE

Cuando importas una copia de seguridad encriptada con TDE, si el certificado de TDE correspondiente ya está en la instancia de origen, puedes importar la copia de seguridad encriptada directamente y no se desencriptará. No es necesario que vuelvas a proporcionar el certificado.

Si el certificado no está en la instancia, usa la marca --keep-encrypted cuando realices la importación. La marca proporciona los siguientes beneficios:

  • Mantiene el certificado de TDE asociado con la instancia.
  • Evita que se desencripte la copia de seguridad durante la importación.

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

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

Cómo exportar una copia de seguridad encriptada con TDE

Puedes exportar una copia de seguridad encriptada con TDE de la misma manera que exportas una sin encriptar. El certificado que se usa para encriptar 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:

Encripta y desencripta una base de datos

Puedes encriptar y desencriptar tu instancia de la misma manera que lo harías con SQL Server.

En un principio, solo los accesos de root del usuario, como sqlserver, pueden acceder a los certificados de TDE. Para otorgar acceso a otros usuarios, usa el siguiente comando o uno similar:

    GRANT VIEW ANY DEFINITION TO CERTIFICATE_NAME AS CustomerDbRootRole
  

Como alternativa, puedes otorgar acceso a un certificado y a un usuario de la base de datos específicos.

Puedes encriptar 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 desencriptar una base de datos con el siguiente comando o uno similar:

    ALTER DATABASE DATABASE_NAME SET ENCRYPTION OFF
  

¿Qué sigue?