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 . Sin embargo, si crea la clave en la consola, se le pedirá que conceda el rol Encargado de encriptar o desencriptar de Cloud KMS y el agente de servicio se creará en ese momento si aún no existe.Google Cloud
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_PROJECT
Sustituye
CBT_PROJECT
por 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-b
yus-central1-c
se 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 clave o de llavero si quieres que la granularidad sea menor.
En la consola, ve a la página Gestión de identidades y accesos. Google Cloud
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.cryptoKeyEncrypterDecrypter
a 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_PROJECT
Proporciona lo siguiente:
KMS_KEY
: el nombre que has asignado a la claveKMS_KEYRING
: el conjunto de claves de 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 le 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, haz clic en el nombre de la clave, en 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. Inhabilita todas las claves de una instancia en lugar de inhabilitar 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 utilices 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_PROJECT
Proporciona 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 ENABLED
Inhabilitar 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; done
Proporciona 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 enumerar todas las versiones de la clave, se mostrará su estado como
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_PROJECT
Proporciona 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_PROJECT
Proporciona 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_PROJECT
Proporciona 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 DISABLED
Ejecuta el comando
kms keys versions enable
y 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; done
Proporciona 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 consultar 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 encuesta 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_KEY
Proporciona 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 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 de 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/Backup
bigtableadmin.googleapis.com/Cluster
bigtableadmin.googleapis.com/Table
bigtableadmin.googleapis.com/AuthorizedView
Los siguientes recursos de Bigtable se admiten en la versión preliminar:
bigtableadmin.googleapis.com/LogicalView
bigtableadmin.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 seguridad.CBT_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 seguridad.CBT_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'