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 Spanner instancia. 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 tenga la ubicación del llavero de claves de Cloud KMS correspondiente. Para Bases de datos de Spanner personalizadas, birregionales o multirregionales configuraciones de instancias, puedes usar varias claves regionales (de una sola región) de Cloud KMS 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 está en una configuración de instancia personalizada que usa
nam3
como la configuración de instancia base con una réplica de solo lectura adicional 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 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
gcloud services identity
crea u obtiene agente de servicio que Spanner puede usar para acceder a la clave de Cloud KMS en por ti.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 hacerlo, ejecuta elgcloud 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 ejecuta el comando
gcloud kms keys add-iam-policybinding
para todas tus claves.Este rol garantiza que la cuenta de servicio tenga permiso y encriptarás 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 desde otro proyecto de Google Cloud, crea con gcloud CLI en lugar de la Consola de Google Cloud
Una vez creada la base de datos, puedes verificar que esté Habilitadas 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:
C++
Para crear una base de datos habilitada para CMEK en una configuración de instancia regional, haz lo siguiente:
Go
Para crear una base de datos habilitada para CMEK en una configuración de instancia regional, haz lo siguiente:
Java
Para crear una base de datos habilitada para CMEK en una configuración de instancia regional, haz lo siguiente:
Node.js
Para crear una base de datos habilitada para CMEK en una configuración de instancia regional, haz lo siguiente:
PHP
Para crear una base de datos habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Python
Para crear una base de datos habilitada para CMEK en una configuración de instancia regional, haz lo siguiente:
Ruby
Para crear una base de datos habilitada para CMEK en una configuración de instancia regional, haz lo siguiente:
Cómo ver 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 deseas 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 siguiente comando:
gcloud spanner databases describe
o gcloud spanner databases list
kubectl. 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
Inhabilitar la clave
Para inhabilitar las versiones de clave que están en uso, sigue estas instrucciones para cada versión de clave.
Espera a que se aplique el cambio. La inhabilitación de una clave puede tardar hasta tres horas para propagarse.
Para confirmar que ya no se puede acceder a la base de datos, ejecuta una consulta en la base de datos inhabilitada con CMEK:
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
Habilita las versiones de clave que usa la base de datos de la siguiente manera: estas instrucciones para cada clave versión.
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 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. También puedes especificar una configuración de encriptación 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 quieres usar una configuración de encriptación diferente para tu 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 actual de Google Cloud. 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 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, sigue estos pasos:
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, haz lo siguiente:
C++
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Go
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Java
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Node.js
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
PHP
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Python
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Ruby
Para crear una copia de seguridad habilitada con CMEK en una configuración de instancia regional, sigue estos pasos:
Cómo realizar 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 proyecto diferente. De forma predeterminada, una copia de seguridad usa el mismo de encriptación, administrada por Google o por el cliente, su encriptación de copias 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 quieres 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 actual de Google Cloud. Para usar una clave desde otro proyecto de Google Cloud, crea 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, en una instancia diferente
En otro proyecto, 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
Restablecer copia de seguridad
Puedes restablecer una copia de seguridad de un Convertir la base de datos en una nueva base de datos De forma predeterminada, las bases de datos que se restablecen desde 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 Backup/Restore.
En la tabla Copias de seguridad, selecciona Acciones para tu copia de seguridad y haz clic en Restablecer.
Selecciona la instancia para restablecer y asigna un nombre a la base de datos restablecida.
Opcional: Si quieres usar una configuración de encriptación diferente con la 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 otro proyecto de Google Cloud, 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 para CMEK en una configuración de instancia regional, sigue estos pasos:
C++
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia regional, sigue estos pasos:
Go
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Java
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia regional, sigue estos pasos:
Node.js
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
PHP
Para restablecer una copia de seguridad habilitada para CMEK en una configuración de instancia regional, sigue estos pasos:
Python
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, haz lo siguiente:
Ruby
Para restablecer una copia de seguridad habilitada con CMEK en una configuración de instancia regional, 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 operaciones normales, las acciones de encriptación y desencriptación se registran con
INFO
. gravedad. Estas entradas se registran como las zonas en tu La instancia de Spanner sondea la clave de Cloud KMS sobre cada cinco minutos.Si Spanner no puede acceder a la clave, las operaciones se registran. como
ERROR
.