Usar claves de encriptación administradas por el cliente (CMEK)

En esta página, se describe cómo realizar tareas relacionadas con las 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:

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

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

  1. En el proyecto de Google Cloud en el que deseas administrar tus claves, haz lo siguiente:

    1. Habilita la API de Cloud KMS.

    2. Crea un llavero de claves y una clave mediante 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 usará. Por ejemplo, si creas un llavero de claves y una clave en us-central1 (Iowa), los clústeres en us-central1-a, us-central1-b y us-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.

  1. En la consola de Google Cloud, ve a la página IAM.

    Ir a la página IAM

  2. Haga clic en Add.

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

  4. Selecciona la función Encriptador/Desencriptador de CryptoKey de Cloud KMS.

  5. Haz clic en Guardar.

gcloud

  1. 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 clave
    • KMS_KEYRING: es el llavero de claves de KMS que contiene la clave
    • KMS_LOCATION: la región que contiene el llavero de claves
    • SERVICE_ACCOUNT_EMAIL: es el identificador con formato de correo electrónico para el agente de servicio al que le otorgas acceso
    • KMS_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

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

    Abrir la lista de instancias

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

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

    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.

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

  3. (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 tabla
    • 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:

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

  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
    

    Proporcione lo siguiente:

    • KMS_KEY: es el nombre de la clave CMEK
    • KMS_KEYRING: es el llavero de claves de KMS que contiene la clave
    • KMS_LOCATION: la región que contiene el llavero 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 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 inhabilitas
    • KMS_KEY: es el nombre de la clave CMEK
    • KMS_KEYRING: es el llavero de claves de KMS que contiene la clave
    • KMS_LOCATION: la región que contiene el llavero de claves
    • KMS_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:

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

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

    Ir a Cloud Logging

  3. 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 CMEK
    • KMS_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 Información sobre los registros de auditoría para obtener detalles sobre cómo interpretarlos.

Cómo ver el uso de la clave

Cloud KMS te permite ver la siguiente información sobre los recursos de Bigtable que protegen tus claves.

  • Resumen del uso de claves: Incluye información sobre la cantidad de recursos protegidos y proyectos que usan la clave.
  • Detalles del uso de claves: 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

Para obtener más información sobre cómo ver el uso de claves, consulta Cómo ver la 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úster
  • INSTANCE_ID: el 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

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

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

    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 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 seguridad
  • CLUSTER_ID: el identificador permanente del clúster
  • INSTANCE_ID: el 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: 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'

¿Qué sigue?