Usar claves de encriptación administradas por el cliente (CMEK)
En esta página, se describe cómo realizar tareas relacionadas con Claves de encriptación administradas por el cliente (CMEK) para Bigtable. Para obtener más información sobre las CMEK en general, incluso cuándo y por qué habilitarlas, consulta la documentación de Cloud KMS.
Te recomendamos que uses la consola de Google Cloud para todas las tareas de administración de claves. Si planeas usar Google Cloud CLI, instala la CLI de gcloud para Bigtable.
Prepara tus claves CMEK
Antes de crear un recurso de Bigtable protegido por CMEK, debes completar los siguientes pasos a fin de crear una clave CMEK para cada región en la que se encontrarán los clústeres de la instancia:
- Crea (o recupera) un agente de servicio de Bigtable.
- Crea una clave CMEK.
- Establece la configuración de IAM para esa clave.
Crea un agente de servicio de Bigtable
Antes de crear una clave de CMEK, debes tener un agente de servicio de Bigtable, que Bigtable usa para acceder a la clave.
Console
No puedes crear un agente de servicio en la consola de Google Cloud. Sin embargo, si creas tu clave en la consola de Google Cloud, se te solicitará que otorgues el rol Cloud KMS Encrypter/Decrypter, y el agente de servicio se creará en ese momento si aún no existe.
gcloud
Ejecuta el comando de creación de identidades de servicios de gcloud a fin de ver el agente de servicio que Bigtable usa para acceder a la clave CMEK en tu nombre. Este comando crea la cuenta de servicio si aún no existe y, luego, la muestra.
gcloud beta services identity create \ --service=bigtableadmin.googleapis.com \ --project CBT_PROJECT
Reemplaza
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. Registra la string de correo electrónico de salida, ya que la usarás en un paso posterior.
Service identity created: service-xxx@gcp-sa-bigtable.iam.gserviceaccount.com
Crear una clave
Puedes usar una clave creada directamente en Cloud KMS o una clave administrada de forma externa que pongas a disposición con Cloud External Key Manager.
En el proyecto de Google Cloud en el que deseas administrar tus claves, haz lo siguiente:
Crea un llavero de claves y una clave mediante una de las siguientes opciones:
- Crea el llavero de claves y la clave directamente en Cloud KMS.
- Usa una clave administrada de forma externa. Crea la clave externa y, luego, crea una clave de Cloud EKM para que la clave 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 usará. Por ejemplo, si creas un llavero de claves y una clave en
us-central1
(Iowa), los clústeres enus-central1-a
,us-central1-b
yus-central1-c
pueden estar protegidos por claves de ese llavero.
Establece la configuración de IAM para la clave
Console
Para otorgar una función de Cloud KMS a tu agente de servicio, haz lo siguiente. También puedes otorgar permiso a nivel de la clave o del llavero de claves si deseas reducir el nivel de detalle.
En la consola de Google Cloud, ve a la página IAM.
Haga clic en Add.
Ingresa el ID con formato de correo electrónico para tu agente de servicio de Bigtable.
Selecciona la función Encriptador/Desencriptador de CryptoKey de Cloud KMS.
Haz clic en Guardar.
gcloud
Otorga la función
cloudkms.cryptoKeyEncrypterDecrypter
al 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
Proporcione lo siguiente:
KMS_KEY
: es el nombre que le asignaste a la claveKMS_KEYRING
: es el llavero de claves de KMS que contiene la claveKMS_LOCATION
: la región que contiene el llavero de clavesSERVICE_ACCOUNT_EMAIL
: es el identificador con formato de correo electrónico para el agente de servicio al que le otorgas accesoKMS_PROJECT
: el proyecto que contiene la clave
Crea una instancia con CMEK habilitadas
Después de crear y configurar tus claves CMEK, puedes crear una instancia protegida por CMEK. Las instancias de Bigtable existentes que están protegidas por la encriptación predeterminada de Google no se pueden convertir para usar CMEK. Solo puedes elegir un tipo de encriptación y una clave en el momento de la creación.
Sigue los pasos que se indican en Crea una instancia para crear la instancia protegida por CMEK.
Visualiza la clave en uso
La información sobre las versiones de claves proviene del campo encryption_info
.
Para ver la información de la versión de clave CMEK de una tabla, completa los siguientes pasos:
Console
Ve a la página Instancias de Bigtable en la consola de Google Cloud.
Haz 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 en la instancia.
Junto al ID de clúster, haz clic en nombre de la clave en Clave de encriptación para ver la página Versiones de la clave del clúster.
gcloud
Para cada clúster, puedes confirmar su configuración de CMEK de la siguiente manera:
gcloud bigtable clusters describe CLUSTER_ID \
--instance INSTANCE_ID --project CBT_PROJECT
Proporcione lo siguiente:
CLUSTER_ID
: el identificador permanente del clústerINSTANCE_ID
: el identificador permanente de la instancia.CBT_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
Inhabilita una clave
Inhabilitar una versión de clave CMEK suspende el acceso a todos los datos protegidos por esa versión de clave. Destruir una versión de clave es la contraparte permanente (después de 24 horas) de esta acción. Siempre inhabilita todas las claves para una instancia, en lugar de inhabilitar solo las claves de uno o algunos clústeres.
Console
Este es el método recomendado. Usar la consola de Google Cloud te permite inhabilitar todas las versiones de una clave a la vez.
Sigue estas instrucciones para cada versión de clave.
gcloud
Te recomendamos que uses la consola de Google Cloud para inhabilitar las claves. Si deseas usar Google Cloud CLI en su lugar, ejecuta los siguientes comandos.
Enumera todas las versiones de la clave de CMEK:
gcloud kms keys versions list --key KMS_KEY \ --keyring KMS_KEYRING --location KMS_LOCATION \ --project KMS_PROJECT
Proporcione lo siguiente:
KMS_KEY
: es el nombre de la clave CMEKKMS_KEYRING
: es el llavero de claves de KMS que contiene la claveKMS_LOCATION
: la región que contiene el llavero de clavesKMS_PROJECT
: el proyecto que contiene la clave
El resultado es 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
Inhabilita 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
Proporcione lo siguiente:
1 2 3 4
: son las versiones que inhabilitasKMS_KEY
: es el nombre de la clave CMEKKMS_KEYRING
: es el llavero de claves de KMS que contiene la claveKMS_LOCATION
: la región que contiene el llavero de clavesKMS_PROJECT
: el proyecto que contiene la clave
Si haces una lista de todas las versiones de la clave otra vez, el estado se cambiará a
DISABLED
, aunque Bigtable puede tardar hasta 4 horas en actuar ante este cambio de estado.(Opcional) Para confirmar el estado de una CMEK inhabilitada después de haber esperado 4 horas, ejecuta el siguiente comando:
gcloud bigtable instances tables describe TABLE_ID \ --instance INSTANCE_ID --view ENCRYPTION \ --project CBT_PROJECT
Proporcione lo siguiente:
TABLE_ID
: el identificador permanente de la tablaINSTANCE_ID
: el identificador permanente de la instancia.CBT_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 en la instancia estén inhabilitados, ejecuta el siguiente comando:
gcloud bigtable clusters list --instances INSTANCE_ID --project CBT_PROJECT
Proporcione lo siguiente:
INSTANCE_ID
: el identificador permanente de la instancia.CBT_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
Habilita una clave
Si se inhabilitó una versión de clave, puedes volver a habilitarla para recuperar el acceso a tus recursos de Bigtable. Esta opción está disponible durante 30 días desde el momento en que se inhabilita la versión de clave.
Console
Este es el método recomendado. La consola de Google Cloud te permite habilitar todas las versiones de una clave a la vez.
Sigue estas instrucciones para cada versión de clave.
gcloud
Te recomendamos usar la consola de Google Cloud para habilitar claves. Si deseas usar Google Cloud CLI en su lugar, 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
Proporcione lo siguiente:
KMS_KEY
: es el nombre de la clave CMEKKMS_KEYRING
: es el llavero de claves de KMS que contiene la claveKMS_LOCATION
: la región que contiene el llavero 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 enumeran. Con el resultado de ejemplo, el comando es 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
Proporcione lo siguiente:
1 2 3 4
: son las versiones que inhabilitasKMS_KEY
: es el nombre de la clave CMEKKMS_KEYRING
: es el llavero de claves de KMS que contiene la claveKMS_LOCATION
: la región que contiene el llavero de clavesKMS_PROJECT
: el proyecto que contiene la clave
Enumerar las versiones de clave otra vez muestra su estado invertido en
ENABLED
.
Visualiza los registros de auditoría de una clave de Cloud KMS
Antes de habilitar los registros de auditoría de acceso a los datos de Cloud KMS, debes estar familiarizado con los registros de auditoría de Cloud.
Los registros de auditoría de acceso a los datos de Cloud KMS te muestran cuándo Bigtable o cualquier otro producto configurado para usar tu clave CMEK con llamadas de encriptación/desencriptación a Cloud KMS. Bigtable no emite una llamada de encriptación/desencriptación en cada solicitud de datos, sino que mantiene una aplicación de sondeo que verifica la clave de forma periódica. Los resultados del sondeo aparecen en los registros de auditoría.
Puedes configurar los registros de auditoría y también interactuar con ellos en la consola de Google Cloud:
Asegúrate de que el registro esté habilitado para la API de Cloud KMS en tu proyecto.
Ve a Cloud Logging en la consola de Google Cloud.
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.key_ring_id = KMS_KEYRING resource.labels.crypto_key_id = KMS_KEY
Proporcione lo siguiente:
KMS_KEY
: es el nombre de la clave CMEKKMS_KEYRING
: es el llavero de claves de KMS que contiene la clave
En el registro, se muestran un par de entradas de registro de alrededor de cinco minutos por tabla en cada clúster. Las entradas de registro son similares a 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 Comprende los registros de auditoría para obtener detalles sobre para interpretar los registros de auditoría.
Ver uso de la clave
Cloud KMS te permite ver la siguiente información sobre los recursos de Bigtable que protegen tus claves.
- Resumen de uso de claves: Incluye información sobre la cantidad de recursos y proyectos protegidos que usan la clave.
- Detalles del uso de claves: Identifica los recursos que protege una clave y los que dependen de ella.
Se admiten los siguientes recursos de Bigtable:
bigtableadmin.googleapis.com/Backup
bigtableadmin.googleapis.com/Cluster
bigtableadmin.googleapis.com/Table
Para obtener más información sobre el uso de claves, consulta Consulta información de uso de claves.
Visualiza el estado de encriptación de una tabla
Console
No puedes ver el estado de encriptación de una tabla en la consola de Google Cloud.
gcloud
Para ver los detalles de CMEK en una tabla, configura view
como ENCRYPTION
o FULL
.
La respuesta incluye la versión de clave en uso y su estado, tal como lo ve Bigtable.
gcloud alpha bigtable instances tables describe TABLE_ID \
--instance INSTANCE_ID --view ENCRYPTION \
--project CBT_PROJECT
Proporcione lo siguiente:
TABLE_ID
: el identificador permanente del clústerINSTANCE_ID
: el 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
Visualiza los detalles de encriptación de una copia de seguridad
Una copia de seguridad permanece fijada a la versión de la clave original. Las rotaciones de versiones de claves en Cloud KMS no rotan las versiones que se usan para desencriptar las copias de seguridad.
Console
Ve a la página Instancias de Bigtable en la consola de Google Cloud.
Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia.
En el panel de navegación izquierdo, haz clic en Copias de seguridad.
El nombre y la versión de clave de cada copia de seguridad se enumeran en Clave administrada por el cliente.
gcloud
Ejecuta el siguiente comando para ver información de encriptación de una copia de seguridad.
gcloud alpha bigtable backups describe BACKUP_ID \
--instance INSTANCE_ID --cluster CLUSTER_ID \
--project CBT_PROJECT
Proporcione lo siguiente:
BACKUP_ID
: el ID asignado a la copia de seguridadCLUSTER_ID
: el identificador permanente del clústerINSTANCE_ID
: el 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: kmsKeyVersion
es la versión de la clave CMEK a la que se fija la copia de seguridad. No se informa el estado de la versión de 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'