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 los certificados de TDE.

Antes de comenzar

Para importar o exportar certificados de TDE, debes tener el permiso cloudsql.instances.manageEncryption de Identity and Access Management, 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 comando de 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: Es 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 al 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: Es 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 al 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: Es 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 al 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 a un momento determinado (PITR) está habilitada en la instancia, es posible que el certificado 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 procedimiento debe ser invocado por el usuario sqlserver, o por los usuarios a los que el usuario sqlserver les haya otorgado permiso, 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 del usuario. Si necesitas importar más, borra los certificados de TDE innecesarios con el procedimiento almacenado msdb.dbo.gcloudsql_drop_tde_user_certificate. El procedimiento debe ser invocado por el usuario sqlserver, o por los usuarios a los que el usuario sqlserver les haya otorgado permiso, 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 TDE

Debes especificar el nombre completo del certificado de TDE (incluidos el prefijo y el sufijo) que deseas exportar. Puedes buscar el nombre completo del certificado de encriptación TDE consultando la columna name 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 comando 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: Es 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 al 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: Es 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 al 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: Es 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 al 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 coincidente 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 lo importes. La marca proporciona los siguientes beneficios:

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

Si no usas la marca --keep-encrypted, se descifrará la 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:

Exporta 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 usó 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:

Cómo encriptar y desencriptar una base de datos

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

Inicialmente, solo los accesos de usuario root, 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 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?