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 usuariosqlserver
o los usuarios a los que el usuariosqlserver
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 usuariosqlserver
o los usuarios a los que el usuariosqlserver
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 e importar con archivos BAK
- Importar datos a una instancia de Cloud SQL desde un archivo de copia de seguridad BAK
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:
- Exportar e importar con archivos BAK
- Exportar datos a una instancia de Cloud SQL desde un archivo de copia de seguridad BAK
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