En esta página, se describe cómo usar claves de encriptación administradas por el cliente (CMEK) creadas de forma manual para Spanner.
Para obtener más información sobre las CMEK, consulta la descripción general de las claves de encriptación administradas por el cliente (CMEK).
Crea una base de datos habilitada con CMEK
Crea una clave en Cloud Key Management Service (Cloud KMS). Spanner admite la creación de los siguientes tipos de Cloud KMS:
La clave debe estar en la misma ubicación que tu instancia de Spanner. Por ejemplo, si la configuración de tu instancia de Spanner está en
us-west1
, la ubicación del llavero de claves de Cloud KMS también debe serus-west1
.No todas las configuraciones de instancias multirregionales de Spanner tienen una ubicación de llavero de claves de Cloud KMS correspondiente. En el caso de las bases de datos de Spanner en configuraciones de instancias personalizadas, de dos regiones o de varias regiones, puedes usar varias claves de Cloud KMS regionales (de una sola región) para proteger tu base de datos. Por ejemplo:
- Si tu base de datos de Spanner está en la configuración de instancia
multirregional
nam14
, puedes crear claves de Cloud KMS enus-east4
,northamerica-northeast1
yus-east1
. - Si tu base de datos tiene una configuración de instancia personalizada que usa
nam3
como la configuración de instancia base con una réplica adicional de solo lectura enus-central2
, puedes crear claves de Cloud KMS enus-east4
,us-east1
,us-central1
yus-central2
.
Opcional: Para ver una lista de las ubicaciones de las réplicas en la configuración de tu instancia de Spanner, usa el comando
gcloud spanner instances get-locations
:gcloud spanner instances get-locations <var>INSTANCE_ID</var>
Para obtener más información, consulta los siguientes recursos:
- Si tu base de datos de Spanner está en la configuración de instancia
multirregional
Otorgar a Spanner acceso a la clave
En Cloud Shell, crea y muestra el agente de servicio, o bien muéstralo si la cuenta ya existe:
gcloud beta services identity create --service=spanner.googleapis.com \ --project=PROJECT_ID
Si se te solicita que instales el componente Comandos Beta de gcloud, escribe
Y
. Después de la instalación, el comando se reinicia de forma automática.El comando
gcloud services identity
crea o obtiene el agente de servicio que Spanner puede usar para acceder a la clave de Cloud KMS en tu nombre.El ID de la cuenta de servicio tiene el formato de una dirección de correo electrónico:
Service identity created: service-xxx@gcp-sa-spanner.iam.gserviceaccount.com
Otorga el rol de encriptador/desencriptador de CryptoKey de Cloud KMS(
cloudkms.cryptoKeyEncrypterDecrypter
) a la cuenta de servicio de cada región (--location
) en la configuración de tu instancia de Spanner. Para ello, ejecuta el comandogcloud kms keys add-iam-policybinding
:gcloud kms keys add-iam-policy-binding KMS_KEY \ --location KMS_KEY_LOCATION \ --keyring KMS_KEY_RING \ --project=PROJECT_ID \ --member serviceAccount:service-xxx@gcp-sa-spanner.iam.gserviceaccount.com \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter
Este es un resultado de ejemplo:
Updated IAM policy for key [KMS_KEY]
Si usas varias claves de Cloud KMS para proteger tu base de datos, ejecuta el comando
gcloud kms keys add-iam-policybinding
para todas tus claves.Este rol garantiza que la cuenta de servicio tenga permiso para encriptar y desencriptar con la clave de Cloud KMS. Para obtener más información, consulta Permisos y roles de Cloud KMS.
Crea la base de datos y especifica tu clave de Cloud KMS.
Console
Usa la consola para crear bases de datos en configuraciones de instancias regionales.
En la consola de Google Cloud, ve a la página Instancias.
Haz clic en la instancia en la que deseas crear una base de datos.
Haz clic en Crear base de datos y completa los campos obligatorios.
Haz clic en Mostrar opciones de encriptación.
Selecciona Clave de Cloud KMS.
Selecciona una clave de la lista desplegable.
La lista de claves se limita al proyecto de Google Cloud actual. Para usar una clave de otro proyecto de Google Cloud, crea la base de datos con gcloud CLI en lugar de la consola de Google Cloud.
Una vez que se crea la base de datos, puedes verificar que esté habilitada para CMEK en la página Descripción general de la base de datos.
gcloud
Para crear una base de datos habilitada para CMEK en una configuración de instancia regional, personalizada o
multirregional, ejecuta el comando gcloud spanner databases create
:
gcloud spanner databases create DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID \
--ddl="CREATE TABLE Users (Id INT64 NOT NULL, FirstName STRING(100) NOT NULL, LastName STRING(100) NOT NULL,) PRIMARY KEY (Id)" \
--kms-project=KMS_PROJECT_ID \
--kms-location=KMS_KEY_LOCATION \
--kms-keyring=KMS_KEYRING \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
Para verificar que una base de datos esté habilitada para CMEK, ejecuta el comando gcloud spanner databases describe
:
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Las bases de datos habilitadas para CMEK incluyen un campo para encryptionConfig
, como se muestra en el siguiente resultado de ejemplo:
encryptionConfig:
kmsKeyNames:projects/my-kms-project/locations/eur5/keyRings/my-kms-key-ring/cryptoKeys/my-kms-key
name: projects/my-spanner-project/instances/my-instance/databases/my-db
state: READY
Bibliotecas cliente
C#
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
C++
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Go
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Java
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Node.js
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
PHP
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Python
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Ruby
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Para crear una base de datos habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Consulta las versiones de claves en uso
El campo encryption_info
de la base de datos muestra información sobre las versiones de clave.
Cuando cambia la versión de clave de una base de datos, el cambio no se propaga de inmediato a encryption_info
. Puede haber un retraso antes de que el cambio se refleje en este campo.
Console
En la consola de Google Cloud, ve a la página Instancias.
Haz clic en la instancia que contiene la base de datos que quieres ver.
Haz clic en la base de datos.
La información de encriptación se muestra en la página Detalles de la base de datos.
gcloud
Para obtener el encryption_info
de una base de datos, ejecuta el comando
gcloud spanner databases describe
o gcloud spanner databases list
. Por ejemplo:
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Este es un resultado de ejemplo:
name: projects/my-project/instances/test-instance/databases/example-db
encryptionInfo:
- encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: projects/my-kms-project/locations/my-kms-key1-location/keyRings/my-kms-key-ring1/cryptoKeys/my-kms-key1/cryptoKeyVersions/1
- encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: projects/my-kms-project/locations/my-kms-key2-location/keyRings/my-kms-key-ring2/cryptoKeys/my-kms-key2/cryptoKeyVersions/1
Inhabilita la clave
Sigue estas instrucciones para cada versión de clave y, luego, inhabilita las versiones de clave que estén en uso.
Espera a que se aplique el cambio. La inhabilitación de una clave puede tardar hasta tres horas en propagarse.
Para confirmar que ya no se puede acceder a la base de datos, ejecuta una consulta en la base de datos con CMEK inhabilitada:
gcloud spanner databases execute-sql DATABASE \ --project=SPANNER_PROJECT_ID \ --instance=INSTANCE_ID \ --sql='SELECT * FROM Users'
Aparecerá el siguiente mensaje de error:
KMS key required by the Spanner resource is not accessible.
Habilita la clave
Para habilitar las versiones de clave que usa la base de datos, sigue estas instrucciones para cada versión de clave.
Espera a que se aplique el cambio. La habilitación de una clave puede tardar hasta tres horas en propagarse.
Para confirmar que ya no se puede acceder a la base de datos, ejecuta una consulta en la base de datos habilitada para CMEK:
gcloud spanner databases execute-sql DATABASE \ --project=SPANNER_PROJECT_ID \ --instance=INSTANCE_ID \ --sql='SELECT * FROM Users'
Si el cambio se aplicó, el comando se ejecutará correctamente.
Crea una copia de seguridad de una base de datos
Puedes usar las copias de seguridad de Spanner para crear copias de seguridad de tus bases de datos. De forma predeterminada, las copias de seguridad de Spanner creadas desde una base de datos usan la misma configuración de encriptación que la propia base de datos. De forma opcional, puedes especificar una configuración de encriptación diferente para una copia de seguridad.
Console
Usa la consola para crear copias de seguridad en configuraciones de instancias regionales.
En la consola de Google Cloud, ve a la página Instancias.
Haz clic en el nombre de la instancia que contiene la base de datos de la que deseas crear una copia de seguridad.
Haz clic en la base de datos.
En el panel de navegación, haz clic en Copias de seguridad/restablecimientos.
En la pestaña Copias de seguridad, haz clic en Crear copia de seguridad.
Ingresa un nombre para la copia de seguridad y selecciona una fecha de vencimiento.
Opcional: Haz clic en Mostrar opciones de encriptación.
a. Si deseas usar una configuración de encriptación diferente para tu copia de seguridad, haz clic en el control deslizante junto a Usar la encriptación existente.
a. Selecciona Clave de Cloud KMS.
a. Selecciona una clave de la lista desplegable.
La lista de claves se limita al proyecto de Google Cloud actual. Para usar una clave de un proyecto de Google Cloud diferente, crea la base de datos con gcloud CLI en lugar de la consola de Google Cloud.
Haz clic en Crear.
La tabla Copias de seguridad muestra la información de encriptación de cada copia de seguridad.
gcloud
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, personalizada o multirregional, ejecuta el comando gcloud spanner backups create
:
gcloud spanner backups create BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID \
--database=DATABASE \
--retention-period=RETENTION_PERIOD \
--encryption-type=customer_managed_encryption \
--kms-project=KMS_PROJECT_ID \
--kms-location=KMS_KEY_LOCATION \
--kms-keyring=KMS_KEY_RING \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
--async
Para verificar que la copia de seguridad creada esté encriptada con CMEK, haz lo siguiente:
gcloud spanner backups describe BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Bibliotecas cliente
C#
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
C++
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Go
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Java
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Node.js
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
PHP
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Python
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Ruby
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Cómo copiar una copia de seguridad
Puedes copiar una copia de seguridad de tu base de datos de Spanner de una instancia a otra en una región o un proyecto diferentes. De forma predeterminada, una copia de seguridad copiada usa la misma configuración de encriptación, ya sea administrada por Google o por el cliente, que la encriptación de la copia de seguridad de origen. Puedes anular este comportamiento si especificas una configuración de encriptación diferente cuando copias la copia de seguridad. Si deseas que la copia de seguridad copiada se encripte con CMEK cuando se copie entre regiones, especifica las claves de Cloud KMS correspondientes a las regiones de destino.
Console
Usa la consola para copiar una copia de seguridad en una configuración de instancia regional.
En la consola de Google Cloud, ve a la página Instancias.
Haz clic en el nombre de la instancia que contiene la base de datos de la que deseas crear una copia de seguridad.
Haz clic en la base de datos.
En el panel de navegación, haz clic en Copias de seguridad/restablecimientos.
En la tabla Copias de seguridad, selecciona Acciones para tu copia de seguridad y haz clic en Copiar.
Para completar el formulario, elige una instancia de destino, proporciona un nombre y selecciona una fecha de vencimiento para la copia de seguridad.
Opcional: Si quieres usar una configuración de encriptación diferente para tu copia de seguridad, haz clic en Mostrar opciones de encriptación.
a. Selecciona Clave de Cloud KMS.
a. Selecciona una clave de la lista desplegable.
La lista de claves se limita al proyecto de Google Cloud actual. Para usar una clave de otro proyecto de Google Cloud, crea la base de datos con gcloud CLI en lugar de la consola de Google Cloud.
Haz clic en Copiar.
gcloud
Para copiar una copia de seguridad, con una nueva configuración de encriptación, a una instancia diferente
del mismo proyecto, ejecuta el siguiente comando gcloud spanner backups copy
:
gcloud spanner backups copy --async \
--source-instance=INSTANCE_ID \
--source-backup=SOURCE_BACKUP_NAME \
--destination-instance=DESTINATION_INSTANCE_ID \
--destination-backup=DESTINATION_BACKUP_NAME \
--expiration-date=EXPIRATION_DATE \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
Para copiar una copia de seguridad, con una nueva configuración de encriptación, a una instancia diferente
en un proyecto diferente, ejecuta el siguiente comando gcloud spanner backups copy
:
gcloud spanner backups copy --async \
--source-backup=SOURCE_BACKUP_NAME \
--destination-backup=DESTINATION_BACKUP_NAME \
--encryption-type=CUSTOMER_MANAGED_ENCRYPTION \
--kms-keys=KMS_KEY_1[, KMS_KEY_2 ... ]
Para verificar que la copia de seguridad copiada esté encriptada con CMEK, sigue estos pasos:
gcloud spanner backups describe BACKUP \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Bibliotecas cliente
C#
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
C++
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Go
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Java
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Node.js
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
PHP
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Python
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Ruby
Para copiar una copia de seguridad habilitada con CMEK en una configuración de instancia multirregional, haz lo siguiente:
Restablecer copia de seguridad
Puedes restablecer una copia de seguridad de una base de datos de Spanner en una base de datos nueva. De forma predeterminada, las bases de datos que se restablecen a partir de una copia de seguridad usan la misma configuración de encriptación que la copia de seguridad, pero puedes anular este comportamiento si especificas una configuración de encriptación diferente para la base de datos restablecida. Si la copia de seguridad está protegida por CMEK, la versión de la clave que se usó para crearla debe estar disponible para que se pueda desencriptar.
Console
Usa la consola para restablecer una copia de seguridad en una configuración de instancia regional.
En la consola de Google Cloud, ve a la página Instancias.
Haz clic en la instancia que contiene la base de datos que deseas restablecer.
Haz clic en la base de datos.
En el panel de navegación, haz clic en Copias de seguridad/restablecimientos.
En la tabla Copias de seguridad, selecciona Acciones para tu copia de seguridad y haz clic en Restaurar.
Selecciona la instancia que se restablecerá y asígnale un nombre a la base de datos restablecida.
Opcional: Si quieres usar una configuración de encriptación diferente con tu base de datos restaurada, haz clic en el control deslizante junto a Usar encriptación existente.
a. Selecciona Clave de Cloud KMS.
a. Selecciona una clave de la lista desplegable.
La lista de claves se limita al proyecto de Google Cloud actual. Para usar una clave de un proyecto de Google Cloud diferente, crea la base de datos con gcloud CLI en lugar de la consola de Google Cloud.
Haz clic en Restore.
gcloud
Para restablecer una copia de seguridad con una nueva configuración de encriptación, ejecuta el siguiente comando gcloud spanner databases restore
:
gcloud spanner databases restore --async \
--project=SPANNER_PROJECT_ID \
--destination-instance=DESTINATION_INSTANCE_ID \
--destination-database=DESTINATION_DATABASE_ID \
--source-instance=SOURCE_INSTANCE_ID \
--source-backup=SOURCE_BACKUP_NAME
Para verificar que la base de datos restablecida esté encriptada con CMEK, sigue estos pasos:
gcloud spanner databases describe DATABASE \
--project=SPANNER_PROJECT_ID \
--instance=INSTANCE_ID
Para obtener más información, consulta Cómo restablecer a partir de una copia de seguridad.
Bibliotecas cliente
C#
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
C++
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
Go
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
Java
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
Node.js
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
PHP
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
Python
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
Ruby
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia multirregional, haz lo siguiente:
Visualiza los registros de auditoría de la clave de Cloud KMS
Asegúrate de que el registro esté habilitado para la API de Cloud KMS en tu proyecto.
En la consola de Google Cloud, ve al Explorador de registros.
Agrega las siguientes líneas al compilador de consultas para limitar las entradas de registro a tu clave de Cloud KMS:
resource.type="cloudkms_cryptokey" resource.labels.location="KMS_KEY_LOCATION" resource.labels.key_ring_id="KMS_KEY_RING_ID" resource.labels.crypto_key_id="KMS_KEY_ID"
En las operaciones normales, las acciones de encriptación y desencriptación se registran con la gravedad
INFO
. Estas entradas se registran a medida que las zonas de tu instancia de Spanner sondean la clave de Cloud KMS aproximadamente cada cinco minutos.Si Spanner no puede acceder a la clave, las operaciones se registran como
ERROR
.