Usar claves de encriptado gestionadas por el cliente (CMEK)
En esta página se describe cómo realizar tareas relacionadas con las claves de cifrado gestionadas por el cliente (CMEK) de Bigtable. Para obtener más información sobre la clave CMEK en general, incluido cuándo y por qué habilitarla, consulta la documentación de Cloud KMS.
Te recomendamos que utilices la Google Cloud consola para todas las tareas de gestión de claves. Si tienes previsto usar Google Cloud CLI, instala gcloud CLI para Bigtable.
Preparar las claves CMEK
Antes de crear un recurso de Bigtable protegido con CMEK, debes completar los siguientes pasos para crear una clave CMEK para cada región en la que se encuentren los clústeres de la instancia:
- Crea (u obtiene) un agente de servicio de Bigtable.
- Crea una clave CMEK.
- Configura los ajustes de gestión de identidades y accesos de esa clave.
Crear un agente de servicio de Bigtable
Antes de crear una clave CMEK, debes tener un agente de servicio de Bigtable, que Bigtable usa para acceder a la clave.
Consola
No puedes crear un agente de servicio en la consola de Google Cloud . Bigtable puede aprovisionar automáticamente un agente de servicio durante el flujo de trabajo de creación de instancias cuando crees o selecciones tu clave. Además, cuando seleccionas una clave gestionada por el cliente, la consola busca el agente de servicio. Puede darse uno de estos casos:
- Si el agente de servicio existe, se te pedirá que le concedas el rol Encriptador/Desencriptador de Cloud KMS.
- Si el agente de servicio no se aprovisiona automáticamente o se producen errores durante la selección de la clave, usa la pestaña gcloud para crear manualmente el agente y conceder los permisos necesarios.
gcloud
Ejecuta el comando gcloud services identity create para ver el agente de servicio que usa Bigtable para acceder a la clave CMEK en tu nombre. Este comando crea la cuenta de servicio si aún no existe y, a continuación, la muestra.
gcloud beta services identity create \ --service=bigtableadmin.googleapis.com \ --project CBT_PROJECTSustituye
CBT_PROJECTpor el proyecto que contiene tus recursos de Bigtable.El comando muestra el ID del agente de servicio, que tiene el formato de una dirección de correo electrónico. Anota la cadena de correo de salida, ya que la usarás en un paso posterior.
Service identity created: service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
Crear clave
Puedes usar una clave creada directamente en Cloud KMS o una clave gestionada de forma externa que pongas a disposición con Cloud External Key Manager.
En el Google Cloud proyecto en el que quieras gestionar tus claves, sigue estos pasos:
Crea un conjunto de claves y una clave con una de las siguientes opciones:
- Crea el conjunto de claves y la clave directamente en Cloud KMS.
- Usa una clave gestionada de forma externa. Crea la clave externa y, a continuación, crea una clave de Cloud EKM para que esté disponible a través de Cloud KMS.
La ubicación de la clave de Cloud KMS debe ser la misma que la del clúster de Bigtable con el que se va a usar. Por ejemplo, si creas un conjunto de claves y una clave en
us-central1(Iowa), los clústeres deus-central1-a,us-central1-byus-central1-cse pueden proteger con claves de ese conjunto.
Configurar los ajustes de gestión de identidades y accesos de la clave
Consola
Para conceder un rol de Cloud KMS a tu agente de servicio, sigue estos pasos: También puedes conceder permisos a nivel de llave o llavero si quieres una granularidad menor.
En la consola de Google Cloud , ve a la página Gestión de identidades y accesos.
Haz clic en Añadir.
Introduce el ID con formato de correo electrónico de tu agente de servicio de Bigtable.
Selecciona el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS.
Haz clic en Guardar.
gcloud
Asigna el rol
cloudkms.cryptoKeyEncrypterDecryptera tu agente de servicio:gcloud kms keys add-iam-policy-binding KMS_KEY \ --keyring KMS_KEYRING\ --location KMS_LOCATION \ --member serviceAccount:SERVICE_ACCOUNT_EMAIL \ --role roles/cloudkms.cryptoKeyEncrypterDecrypter \ --project KMS_PROJECTProporciona lo siguiente:
KMS_KEY: el nombre que has asignado a la claveKMS_KEYRING: el conjunto de claves KMS que contiene la claveKMS_LOCATION: la región que contiene el conjunto de clavesSERVICE_ACCOUNT_EMAIL: el identificador con formato de correo electrónico del agente de servicio al que vas a conceder acceso.KMS_PROJECT: el proyecto que contiene la clave
Crear una instancia con CMEK habilitada
Una vez que hayas creado y configurado las claves CMEK, podrás crear una instancia protegida con CMEK. Las instancias de Bigtable protegidas con el cifrado predeterminado de Google no se pueden convertir para usar CMEK. Solo puedes elegir un tipo de cifrado y una clave en el momento de la creación.
Sigue los pasos que se indican en Crear una instancia para crear tu instancia protegida con CMEK.
Ver la clave en uso
La información sobre las versiones de clave procede del campo encryption_info.
Para ver la información de la versión de la clave CMEK de una tabla, sigue estos pasos:
Consola
Ve a la página Instancias de Bigtable de laGoogle Cloud consola.
Haga clic en el nombre de la instancia que contiene la tabla para abrir la página Detalles de la instancia y ver la lista de clústeres de la instancia.
Junto a un ID de clúster, haga clic en el nombre de la clave de Clave de cifrado para ver la página Versiones de la clave del clúster.
gcloud
Para cada clúster, puede confirmar su configuración de CMEK de la siguiente manera:
gcloud bigtable clusters describe CLUSTER_ID \
--instance INSTANCE_ID --project CBT_PROJECT
Proporciona lo siguiente:
CLUSTER_ID: identificador permanente del clústerINSTANCE_ID: identificador permanente de la instanciaCBT_PROJECT: el proyecto que contiene tus recursos de Bigtable
El comando muestra un resultado similar al siguiente:
defaultStorageType: SSD
encryptionConfig:
kmsKeyName: projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key
location: projects/cloud-bigtable-project/locations/us-central1-a
name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster
serveNodes: 1
state: READY
Inhabilitar una clave
Si inhabilitas una versión de una clave CMEK, se suspenderá el acceso a todos los datos protegidos por esa versión de la clave. Destruir una versión de clave es la contrapartida permanente (después de 24 horas) de esta acción. Deshabilita todas las claves de una instancia en lugar de deshabilitar solo las claves de uno o varios clústeres.
Consola
Este es el método recomendado. La consola Google Cloud te permite inhabilitar todas las versiones de una clave a la vez.
Sigue estas instrucciones para cada versión de la clave.
gcloud
Te recomendamos que uses la Google Cloud consola para inhabilitar las claves. Si prefieres usar la CLI de Google Cloud, ejecuta los siguientes comandos.
Lista todas las versiones de la clave CMEK:
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECTProporciona lo siguiente:
KMS_KEY: el nombre de la clave CMEKKMS_KEYRING: el conjunto de claves de KMS que contiene la claveKMS_LOCATION: la región que contiene el conjunto de clavesKMS_PROJECT: el proyecto que contiene la clave
El resultado debería ser similar al siguiente:
NAME STATE KMS_KEY_NAME/cryptoKeyVersions/1 ENABLED KMS_KEY_NAME/cryptoKeyVersions/2 ENABLED KMS_KEY_NAME/cryptoKeyVersions/3 ENABLED KMS_KEY_NAME/cryptoKeyVersions/4 ENABLEDInhabilitar todas las versiones:
for $KV in 1 2 3 4; do gcloud kms keys versions disable KV --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT; doneProporciona lo siguiente:
1 2 3 4: las versiones que vas a inhabilitarKMS_KEY: el nombre de la clave CMEKKMS_KEYRING: el conjunto de claves de KMS que contiene la claveKMS_LOCATION: la región que contiene el conjunto de clavesKMS_PROJECT: el proyecto que contiene la clave
Si vuelve a mostrar todas las versiones de la clave, su estado cambiará a
DISABLED, aunque Bigtable puede tardar hasta 4 horas en actuar en función de este cambio de estado.[Opcional] Para confirmar el estado de una clave CMEK inhabilitada después de esperar 4 horas, ejecuta el siguiente comando:
gcloud bigtable instances tables describe TABLE_ID \ --instance INSTANCE_ID --view ENCRYPTION \ --project CBT_PROJECTProporciona lo siguiente:
TABLE_ID: identificador permanente de la tablaINSTANCE_ID: identificador permanente de la instanciaCBT_PROJECT: el proyecto que contiene tus recursos de Bigtable
El comando muestra un resultado similar al siguiente:
clusterStates: CLUSTER: encryptionInfo: - encryptionStatus: code: 9 details: - '@type': type.googleapis.com/google.rpc.PreconditionFailure violations: - subject: KMS_KEY_NAME/cryptoKeyVersions/<int> type: KEY_DISABLED message: KMS_KEY_NAME is not enabled, current state is: DISABLED. encryptionType: CUSTOMER_MANAGED_ENCRYPTION kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/<int> name: projects/CBT_PROJECT/instances/INSTANCE/tables/TABLE[Opcional] Para verificar que los clústeres de la instancia están inhabilitados, ejecuta el siguiente comando:
gcloud bigtable clusters list --instances INSTANCE_ID --project CBT_PROJECTProporciona lo siguiente:
INSTANCE_ID: identificador permanente de la instanciaCBT_PROJECT: el proyecto que contiene tus recursos de Bigtable
El comando muestra un resultado similar al siguiente:
NAME ZONE NODES STORAGE STATE my-cluster us-central1-a 1 SSD DISABLED my-other-cluster us-central1-b 1 SSD DISABLED
Habilitar una clave
Si una versión de clave se ha inhabilitado, puedes volver a habilitarla para recuperar el acceso a tus recursos de Bigtable. Esta opción está disponible durante 30 días a partir del momento en que se inhabilita la versión de la clave.
Consola
Este es el método recomendado. La consola Google Cloud te permite habilitar todas las versiones de una clave a la vez.
Sigue estas instrucciones para cada versión de la clave.
gcloud
Te recomendamos que uses la consola Google Cloud para habilitar las llaves. Si prefieres usar la CLI de Google Cloud, ejecuta los siguientes comandos.
Consulta la lista de versiones para identificar todas las versiones de la clave:
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECTProporciona lo siguiente:
KMS_KEY: el nombre de la clave CMEKKMS_KEYRING: el conjunto de claves de KMS que contiene la claveKMS_LOCATION: la región que contiene el conjunto de clavesKMS_PROJECT: el proyecto que contiene la clave
El comando muestra un resultado similar al siguiente:
NAME STATE KMS_KEY_NAME/cryptoKeyVersions/1 DISABLED KMS_KEY_NAME/cryptoKeyVersions/2 DISABLED KMS_KEY_NAME/cryptoKeyVersions/3 DISABLED KMS_KEY_NAME/cryptoKeyVersions/4 DISABLEDEjecuta el comando
kms keys versions enabley proporciona todas las versiones que se muestran. En el ejemplo de salida, el comando tiene un aspecto similar al siguiente:for $KV in 1 2 3 4; do gcloud kms keys versions enable KV --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT; doneProporciona lo siguiente:
1 2 3 4: las versiones que vas a inhabilitarKMS_KEY: el nombre de la clave CMEKKMS_KEYRING: el conjunto de claves de KMS que contiene la claveKMS_LOCATION: la región que contiene el conjunto de clavesKMS_PROJECT: el proyecto que contiene la clave
Si vuelves a mostrar las versiones de la clave, verás que su estado ha cambiado a
ENABLED.
Ver registros de auditoría de una clave de Cloud KMS
Antes de habilitar los registros de auditoría de acceso a datos de Cloud KMS, debes familiarizarte con los registros de auditoría de Cloud.
Los registros de auditoría de acceso a datos de Cloud KMS muestran cuándo Bigtable u otros productos configurados para usar tu clave CMEK hacen llamadas de cifrado o descifrado a Cloud KMS. Bigtable no emite una llamada de cifrado o descifrado en cada solicitud de datos, sino que mantiene un poller que comprueba la clave periódicamente. Los resultados de la votación aparecen en los registros de auditoría.
Puedes configurar los registros de auditoría e interactuar con ellos en la Google Cloud consola:
Asegúrate de que el registro esté habilitado para la API Cloud KMS en tu proyecto.
Ve a Cloud Logging en la Google Cloud consola.
Limita las entradas de registro a tu clave de Cloud KMS añadiendo las siguientes líneas al creador de consultas:
resource.type="cloudkms_cryptokey" resource.labels.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEYProporciona lo siguiente:
KMS_KEY: el nombre de la clave CMEKKMS_KEYRING: el conjunto de claves de KMS que contiene la clave
El registro muestra un par de entradas de registro cada cinco minutos por tabla en cada clúster. Las entradas de registro tienen un aspecto similar al de estos ejemplos:
Info 2021-03-20 08:02:24.869 EDT Cloudkms.googleapis.com Decrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com audit_log, method: "Decrypt", principal_email: "service-1234567891011@gcp-sa-bigtable.iam.gserviceaccount.com" Info 2021-03-20 08:02:24.913 EDT Cloudkms.googleapis.com Encrypt projects/cloud-kms-project/locations/us-central1/keyRings/cloud-bigtable-keys/cryptoKeys/my-cmek-key service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com audit_log, method: "Encrypt", principal_email: "service-123456789123@gcp-sa-bigtable.iam.gserviceaccount.com"
Consulta el artículo Interpretar los registros de auditoría para obtener información sobre cómo interpretar los registros de auditoría.
Ver el uso de las claves
Cloud KMS te permite ver la siguiente información sobre los recursos de Bigtable que protegen tus claves.
- Resumen del uso de la clave: incluye información sobre el número de recursos y proyectos protegidos que usan la clave.
- Detalles del uso de la clave: identifica los recursos que protege una clave y los recursos que dependen de ella.
Se admiten los siguientes recursos de Bigtable:
bigtableadmin.googleapis.com/Backupbigtableadmin.googleapis.com/Clusterbigtableadmin.googleapis.com/Tablebigtableadmin.googleapis.com/AuthorizedView
Los siguientes recursos de Bigtable se admiten en la versión preliminar:
bigtableadmin.googleapis.com/LogicalViewbigtableadmin.googleapis.com/MaterializedView
Para obtener más información sobre cómo ver el uso de las claves, consulta Ver información sobre el uso de las claves.
Ver el estado del cifrado de una tabla
Consola
No puedes ver el estado del cifrado de una tabla en la consola deGoogle Cloud .
gcloud
Para ver los detalles de CMEK en una tabla, defina view como ENCRYPTION o FULL.
La respuesta incluye la versión de la clave en uso y su estado, tal como los ve Bigtable.
gcloud alpha bigtable instances tables describe TABLE_ID \
--instance INSTANCE_ID --view ENCRYPTION \
--project CBT_PROJECT
Proporciona lo siguiente:
TABLE_ID: identificador permanente del clústerINSTANCE_ID: identificador permanente de la instancia que contiene la copia de seguridadCBT_PROJECT: el proyecto que contiene tus recursos de Bigtable
El comando muestra un resultado similar al siguiente:
clusterStates:
my-cluster:
encryptionInfo:
- encryptionStatus: {}
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
my-other-cluster:
encryptionInfo:
- encryptionStatus: {}
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/4
name: projects/cloud-bigtable-project/instances/cmek-test-instance/tables/my-table
Ver los detalles del cifrado de una copia de seguridad
Una copia de seguridad permanece fijada a su versión de clave original. Las rotaciones de versiones de claves en Cloud KMS no rotan las versiones que se usan para desencriptar las copias de seguridad.
Consola
Ve a la página Instancias de Bigtable de laGoogle Cloud consola.
Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia.
En el panel de navegación de la izquierda, haz clic en Copias de seguridad.
El nombre y la versión de la clave de cada copia de seguridad se indican en Clave gestionada por el cliente.
gcloud
Ejecuta el siguiente comando para ver la información de cifrado de una copia de seguridad.
gcloud alpha bigtable backups describe BACKUP_ID \
--instance INSTANCE_ID --cluster CLUSTER_ID \
--project CBT_PROJECT
Proporciona lo siguiente:
BACKUP_ID: el ID asignado a la copia de seguridadCLUSTER_ID: identificador permanente del clústerINSTANCE_ID: identificador permanente de la instancia que contiene la copia de seguridadCBT_PROJECT: el proyecto que contiene tus recursos de Bigtable
El comando devuelve un resultado similar al siguiente. kmsKeyVersion es la versión de la clave CMEK a la que se ha fijado la copia de seguridad. No se informa del estado de la versión de la clave.
encryptionInfo:
encryptionStatus:
code: 2
message: Status of the associated key version is not tracked.
encryptionType: CUSTOMER_MANAGED_ENCRYPTION
kmsKeyVersion: KMS_KEY_NAME/cryptoKeyVersions/3
endTime: '2020-09-01T00:03:26.568600Z'
expireTime: '2020-09-02T00:03:25.436473Z'
name: projects/cloud-bigtable-project/instances/cmek-test-instance/clusters/my-cluster/backups/my-backup
sizeBytes: '3780'