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:

  1. Crea (u obtiene) un agente de servicio de Bigtable.
  2. Crea una clave CMEK.
  3. 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

  1. 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.

  1. En el Google Cloud proyecto en el que quieras gestionar tus claves, sigue estos pasos:

    1. Habilita la API Cloud KMS.

    2. Crea un conjunto de claves y una clave con una de las siguientes opciones:

      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 de us-central1-a, us-central1-b y us-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.

  1. En la consola, ve a la página Gestión de identidades y accesos. Google Cloud

    Ir a la página de gestión de identidades y accesos

  2. Haz clic en Añadir.

  3. Introduce el ID con formato de correo electrónico de tu agente de servicio de Bigtable.

  4. Selecciona el rol Encargado del encriptado y desencriptado de la clave criptográfica Cloud KMS.

  5. Haz clic en Guardar.

gcloud

  1. 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 clave
    • KMS_KEYRING: el conjunto de claves de KMS que contiene la clave
    • KMS_LOCATION : la región que contiene el conjunto de claves
    • SERVICE_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

  1. Ve a la página Instancias de Bigtable de laGoogle Cloud consola.

    Abrir la lista de instancias

  2. 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.

  3. 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úster
  • INSTANCE_ID: 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

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.

  1. 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 CMEK
    • KMS_KEYRING: el conjunto de claves de KMS que contiene la clave
    • KMS_LOCATION: la región que contiene el conjunto de claves
    • KMS_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
    
  2. 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 inhabilitar
    • KMS_KEY: el nombre de la clave CMEK
    • KMS_KEYRING: el conjunto de claves de KMS que contiene la clave
    • KMS_LOCATION: la región que contiene el conjunto de claves
    • KMS_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.

  3. [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 tabla
    • INSTANCE_ID: 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
    
  4. [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 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
    

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.

  1. 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 CMEK
    • KMS_KEYRING: el conjunto de claves de KMS que contiene la clave
    • KMS_LOCATION: la región que contiene el conjunto de claves
    • KMS_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 inhabilitar
    • KMS_KEY: el nombre de la clave CMEK
    • KMS_KEYRING: el conjunto de claves de KMS que contiene la clave
    • KMS_LOCATION: la región que contiene el conjunto de claves
    • KMS_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:

  1. Asegúrate de que el registro esté habilitado para la API Cloud KMS en tu proyecto.

  2. Ve a Cloud Logging en la Google Cloud consola.

    Ir a Cloud Logging

  3. 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 CMEK
    • KMS_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úster
  • INSTANCE_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

  1. Ve a la página Instancias de Bigtable de laGoogle Cloud consola.

    Abrir la lista de instancias

  2. Haz clic en el nombre de la instancia para abrir la página Detalles de la instancia.

  3. 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 seguridad
  • CLUSTER_ID: identificador permanente del clúster
  • INSTANCE_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'

Siguientes pasos