Habilitar claves de cifrado gestionadas por el cliente (CMEK) en conjuntos de datos de la API Cloud Healthcare

De forma predeterminada, Google Cloud se encriptan automáticamentelos datos en reposo con claves de cifrado gestionadas por Google. Si tienes requisitos de cumplimiento o normativas específicos relacionados con las claves que protegen tus datos, puedes usar claves de cifrado gestionadas por el cliente (CMEK) en tus conjuntos de datos de la API Cloud Healthcare. En lugar de que Google sea el propietario y el gestor de las claves de cifrado que protegen tus datos, los conjuntos de datos de la API Cloud Healthcare se cifran con una clave que tú controlas y gestionas en Cloud Key Management Service (Cloud KMS).

Para obtener más información sobre las CMEK en general, incluido cuándo y por qué habilitarlas, consulta el artículo Claves de cifrado gestionadas por el cliente (CMEK).

Antes de empezar

Decide si tu conjunto de datos de la API Cloud Healthcare y Cloud KMS estarán en el mismo Google Cloud proyecto o en proyectos diferentes. Para obtener más información, consulta el artículo Separación de funciones.

Para facilitar la lectura de la documentación, se utilizan las siguientes convenciones:

  • PROJECT_ID: el ID de proyecto de la API de Cloud Healthcare
  • KMS_PROJECT_ID: el ID del proyecto en el que se ejecuta Cloud KMS, que puede ser el mismo que PROJECT_ID

Para obtener información sobre los IDs y los números de proyecto, consulta el artículo sobre cómo identificar proyectos. Google Cloud

Limitaciones

  • Solo puedes usar claves de Cloud KMS al crear un conjunto de datos de la API Cloud Healthcare. No puedes habilitar, cambiar ni inhabilitar claves de Cloud KMS en un conjunto de datos de la API Cloud Healthcare.
  • Solo se admiten almacenes FHIR, DICOM y HL7v2 en conjuntos de datos cifrados con CMEK. La protección con CMEK se aplica a los almacenes DICOM, FHIR y HL7v2 del conjunto de datos, así como a sus recursos.
  • No puedes desidentificar los recursos cifrados con CMEK.

Operaciones de CMEK

Las claves de Cloud KMS se usan cuando se crea, se lee, se actualiza o se elimina un recurso encriptado con CMEK, así como para tareas operativas como la facturación o para asegurarse de que la clave esté disponible.

Consideraciones sobre las claves externas

Para obtener información sobre cómo usar las claves que gestionas en un sistema de partner de gestión de claves externo admitido para proteger los datos enGoogle Cloud, consulta Cloud External Key Manager.

Si pierdes las claves que gestionas fuera de Google Cloud, Google no podrá recuperar tus datos.

Indisponibilidad de claves y pérdida de datos

Si un conjunto de datos está cifrado con una clave y esa clave deja de estar disponible y sigue sin estarlo, la API Cloud Healthcare inhabilita y, finalmente, elimina el conjunto de datos. A veces, una clave deja de estar disponible si se inhabilita o se destruye, o si no se puede acceder a ella porque se han revocado los permisos. Sin embargo, este comportamiento se produce si la clave no está disponible por cualquier motivo. El nivel de protección de la clave o si se trata de una clave externa no influyen en este comportamiento. Las claves externas también pueden dejar de estar disponibles de forma impredecible. Por ejemplo, pueden surgir problemas de conectividad entre tus Google Cloud recursos y tu EKM.

En el siguiente proceso se describe cómo se comprueba la disponibilidad de las claves y cómo se puede inhabilitar y eliminar un conjunto de datos:

  1. Una vez creado un conjunto de datos de la API Cloud Healthcare cifrado con CMEK, la API Cloud Healthcare comprueba el estado de la clave cada cinco minutos para asegurarse de que está disponible. Si la clave no está disponible, la API Cloud Healthcare seguirá admitiendo solicitudes al conjunto de datos durante un máximo de una hora.

  2. Si, al cabo de una hora, la API Cloud Healthcare sigue sin poder conectarse con Cloud KMS, el conjunto de datos de la API Cloud Healthcare se inhabilita como medida de protección. Para volver a habilitar el conjunto de datos de la API Cloud Healthcare, ponte en contacto con tu representante del equipo de Asistencia.

    Si está inhabilitada, solo puedes enviar solicitudes datasets.get y datasets.delete al conjunto de datos de la API Cloud Healthcare. Otras solicitudes fallan y se produce un error 400 FAILED_PRECONDITION.

  3. Si el conjunto de datos de la API Cloud Healthcare sigue sin estar disponible durante más de 30 días, se eliminará permanentemente. También se eliminan los almacenes DICOM, FHIR y HL7v2 del conjunto de datos, así como los datos asociados. Si eliminas estos datos, no podrás recuperarlos.

Creación de claves

En las siguientes secciones se describe cómo crear un conjunto de claves y una clave de Cloud KMS. Solo se admiten las claves de cifrado simétricas de Cloud KMS.

Ubicaciones admitidas

Las claves de Cloud KMS están disponibles en las ubicaciones de la API de Cloud Healthcare. Crea el conjunto de claves en una ubicación que coincida con la región o multirregión de tu conjunto de datos de la API Cloud Healthcare.

  • Cualquier conjunto de datos multirregional de la API Cloud Healthcare debe usar un conjunto de claves multirregional de una ubicación coincidente. Por ejemplo, un conjunto de datos de la API Cloud Healthcare de la región us debe protegerse con un conjunto de claves de la región us, y un conjunto de datos de la API Cloud Healthcare de la región eu debe protegerse con un conjunto de claves de la región europe.

  • Los conjuntos de datos regionales de la API Cloud Healthcare deben usar claves regionales coincidentes. Por ejemplo, un conjunto de datos de la API Cloud Healthcare de la región asia-northeast1 debe protegerse con un conjunto de claves de la región asia-northeast1.

  • No puedes usar la región global al configurar CMEK para un conjunto de datos de la API Cloud Healthcare.

Para obtener más información, consulta las ubicaciones de la API de Cloud Healthcare y las ubicaciones de Cloud KMS.

Crear un conjunto de claves y una clave

Sigue estos pasos en el proyecto Google Cloud que ejecuta Cloud KMS:

  1. Crea un conjunto de claves.
  2. Crea una clave.

Conceder permisos de cifrado y descifrado

Para proteger tus datos de la API Cloud Healthcare con una clave de Cloud KMS, asigna el rol Encargado del encriptado y desencriptado de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) a la cuenta de servicio del agente de servicio de Cloud Healthcare en esa clave. Para obtener instrucciones, consulta Permisos de CMEK de conjuntos de datos.

Después de conceder el rol a la cuenta de servicio, la API de Cloud Healthcare puede cifrar y descifrar recursos cifrados con CMEK. Tus aplicaciones no tienen que especificar claves al leer o escribir datos. La API Cloud Healthcare se encarga del cifrado.

Cuando un solicitante lee o escribe un objeto cifrado con una clave de Cloud KMS, accede al objeto con normalidad. Durante la solicitud, el agente de servicio cifra o descifra automáticamente el objeto solicitado, siempre que se cumplan las dos condiciones siguientes:

  • El agente de servicio sigue teniendo los permisos necesarios.
  • La clave está disponible y habilitada.

Crear un conjunto de datos de la API Cloud Healthcare cifrado con CMEK

En los siguientes ejemplos se muestra cómo crear un conjunto de datos cifrado con CMEK.

Debes especificar un ID de recurso de clave de Cloud KMS al crear el conjunto de datos. Esta clave distingue entre mayúsculas y minúsculas y tiene el siguiente formato:

projects/KMS_PROJECT_ID/locations/LOCATION/keyRings/KEY_RING/cryptoKeys/KEY_NAME

Para ver los IDs de recursos de claves de Cloud KMS, consulta Obtener un ID de recurso de Cloud KMS.

Consola

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

    Ir al navegador

  2. Haz clic en Crear conjunto de datos. Se muestra la página Crear conjunto de datos.

  3. En el campo Nombre, introduce un identificador para el conjunto de datos que cumpla los requisitos de caracteres y tamaño permitidos para los conjuntos de datos.

  4. Seleccione uno de los siguientes tipos de ubicación:

    • Región. El conjunto de datos reside de forma permanente en una Google Cloud región. Después de seleccionar esta opción, escribe o selecciona una ubicación en el campo Región.

    • Multirregión. El conjunto de datos reside permanentemente en una ubicación que abarca varias Google Cloud regiones. Después de seleccionar esta opción, escribe o selecciona una ubicación multirregional en el campo Multirregión.

  5. En la sección Cifrado, seleccione uno de los siguientes tipos de cifrado:

    • Google-managed encryption key: es el método de cifrado predeterminado. Usa este método si quieres que Google gestione las claves de cifrado que protegen tus datos en este conjunto de datos de la API Cloud Healthcare.

    • Clave de Cloud KMS: usa una clave de cifrado gestionada por el cliente (CMEK).

  6. Haz clic en Crear. Se muestra la página Navegador. El nuevo conjunto de datos se muestra en la lista de conjuntos de datos.

gcloud

Crea el conjunto de datos con el comando gcloud healthcare datasets create.

Antes de usar los datos de los comandos que se indican a continuación, haz los siguientes cambios:

Ejecuta el siguiente comando:

Linux, macOS o Cloud Shell

gcloud healthcare datasets create DATASET_ID \
  --location=LOCATION \
  --encryption-key=KEY_RESOURCE_ID

Windows (PowerShell)

gcloud healthcare datasets create DATASET_ID `
  --location=LOCATION `
  --encryption-key=KEY_RESOURCE_ID

Windows (cmd.exe)

gcloud healthcare datasets create DATASET_ID ^
  --location=LOCATION ^
  --encryption-key=KEY_RESOURCE_ID

Deberías recibir una respuesta similar a la siguiente:

Create request issued for: [DATASET_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...
Created dataset [DATASET_ID].

REST

  1. Crea el conjunto de datos con el método datasets.create.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    Cuerpo JSON de la solicitud:

    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "encryptionSpec": {
        "kmsKeyName": "KEY_RESOURCE_ID"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets?datasetId=DATASET_ID" | Select-Object -Expand Content

    Explorador de APIs

    Copia el cuerpo de la solicitud y abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Pega el cuerpo de la solicitud en esta herramienta, rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar más tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Obtén el estado de la operación de larga duración mediante el método projects.locations.datasets.operations.get.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DATASET_ID: el ID del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Ejecuta el comando siguiente:

    $cred = gcloud auth print-access-token
    $headers = @{ "Authorization" = "Bearer $cred" }

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.

Determinar si un conjunto de datos está protegido por Cloud KMS

Puedes ver qué recursos protege cada una de las claves que has creado o que protegen tus conjuntos de datos de la API Cloud Healthcare mediante el seguimiento del uso de claves. Para obtener más información, consulta Ver el uso de las claves.

Rotación de claves

Cloud KMS admite la rotación de claves automática y manual a una nueva versión.

Al rotar una clave, ocurre lo siguiente:

  • Los conjuntos de datos de la API Cloud Healthcare creados después de la rotación usarán la nueva versión de la clave para el cifrado y todas las operaciones.
  • Los recursos de un conjunto de datos que estén cifrados con la clave no se volverán a cifrar automáticamente con la nueva versión de la clave principal.

Para que el cifrado funcione, todas las versiones de la clave deben estar disponibles. De lo contrario, el conjunto de datos de la API Cloud Healthcare se inhabilitará y se producirá un error en todas las solicitudes al conjunto de datos. Para obtener más información, consulta Consideraciones sobre las claves externas y Conjuntos de datos inhabilitados y eliminación permanente de conjuntos de datos.

Quitar el acceso de la API Cloud Healthcare a la clave de Cloud KMS

Tienes control sobre tus claves y puedes inhabilitarlas, destruirlas o revocar los permisos de la clave para que la API Cloud Healthcare no pueda acceder a los datos cifrados con CMEK. Cuando destruyes una clave o una versión de una clave asociada a un conjunto de datos de la API Cloud Healthcare, se pierden de forma permanente todos los datos cifrados con esa clave o versión de la clave.

Hay un retraso entre el momento en que inhabilitas una clave o una versión de clave y el momento en que deja de poderse usar. También hay un retraso entre el momento en que revocas los permisos de la cuenta de servicio del agente de servicio de Cloud Healthcare en la clave y el momento en que ya no se puede acceder a ella. Para obtener más información, consulta Coherencia de los recursos de Cloud KMS.

Exportar e importar datos a una instancia habilitada para CMEK

Para que tus datos sigan encriptados con una clave gestionada por el cliente durante una operación de exportación, debes definir una CMEK en el destino de almacenamiento antes de iniciar la exportación. No hay requisitos ni restricciones especiales para importar datos a un conjunto de datos cifrado con CMEK cuando se importan desde un almacenamiento no cifrado con CMEK o cifrado con CMEK.

Restricciones

Precios

Los conjuntos de datos se facturan de la misma forma, independientemente de si están cifrados con CMEK. Para obtener más información, consulta la página Precios de la API de Cloud Healthcare.

Cloud KMS te cobra tanto el coste de la clave como las operaciones criptográficas que se realicen con ella. Estas operaciones se producen cuando la API Cloud Healthcare usa la clave para encriptar o desencriptar. Estos costes serán mínimos, en función del número previsto de operaciones criptográficas generadas por la API Cloud Healthcare. Para obtener más información, consulta los precios de Cloud KMS.

Cuotas de Cloud KMS y API de Cloud Healthcare

Cuando usas CMEK en la API Cloud Healthcare, tus proyectos pueden consumir cuotas de solicitudes criptográficas de Cloud KMS. Los conjuntos de datos de la API Cloud Healthcare cifrados con CMEK y sus almacenes DICOM, FHIR y HL7v2 consumen estas cuotas en todas las operaciones, excepto en datasets.get. Las operaciones de cifrado y descifrado con claves CMEK solo afectan a las cuotas de Cloud KMS si usas claves de hardware (Cloud HSM) o externas (Cloud EKM). Para obtener más información, consulta las cuotas de Cloud KMS.

Siguientes pasos