Habilitar claves de encriptación administradas por el cliente (CMEK) para conjuntos de datos de la API de Cloud Healthcare

De forma predeterminada, Google Cloud encripta los datos cuando están en reposo de forma automática mediante claves de encriptación administradas por Google. Si tienes requisitos regulatorios o de cumplimiento específicos relacionados con las claves que protegen tus datos, puedes usar claves de encriptación administradas por el cliente (CMEK) para tus conjuntos de datos de la API de Cloud Healthcare. En lugar de que Google posea y administre las claves de encriptación que protegen tus datos, los conjuntos de datos de la API de Cloud Healthcare se encriptan con una clave que controlas y administras en Cloud Key Management Service (Cloud KMS).

Para obtener más información sobre las CMEK en general, incluso cuándo y por qué habilitarlas, consulta Claves de encriptación administradas por el cliente (CMEK).

Antes de comenzar

Decide si tu conjunto de datos de la API de Cloud Healthcare y Cloud KMS estarán en el mismo proyecto de Google Cloud o en otros diferentes. Para obtener orientación, consulta Separación de obligaciones.

Para fines de documentación, se usan las siguientes convenciones:

  • PROJECT_ID: El ID del proyecto de la API de Cloud Healthcare
  • KMS_PROJECT_ID: Es 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 números y los ID de los proyectos de Google Cloud, consulta la sección Identifica proyectos.

Limitaciones

  • Solo puedes usar las claves de Cloud KMS cuando creas un conjunto de datos de la API de Cloud Healthcare. No puedes habilitar, cambiar o inhabilitar las claves de Cloud KMS en un conjunto de datos existente de la API de Cloud Healthcare.
  • Solo los almacenes de FHIR, DICOM y HL7v2 son compatibles con los conjuntos de datos encriptados con CMEK. La protección de CMEK se aplica a los almacenes DICOM, FHIR y HL7v2 en el conjunto de datos y sus recursos.
  • No puedes desidentificar los recursos encriptados con CMEK.

Operaciones de CMEK

Las claves de Cloud KMS se usan cuando se crea, lee, actualiza o borra un recurso encriptado con CMEK y para tareas operativas como facturar o garantizar que la clave esté disponible.

Consideraciones de claves externas

Para obtener información sobre el uso de claves que administras dentro de un sistema asociado de administración de claves externo compatible para proteger datos en Google Cloud, consulta Cloud External Key Manager.

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

Falta de disponibilidad y pérdida de datos de las claves

Si un conjunto de datos está encriptado con una clave y esta deja de estar disponible ni tampoco está disponible, la API de Cloud Healthcare inhabilita y, con el tiempo, borra 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 debido a permisos revocados, pero este comportamiento ocurre si la clave no está disponible por algún motivo. El nivel de protección de la clave o si es una clave externa no afecta este comportamiento. Las claves externas también pueden dejar de estar disponibles de manera impredecible. Por ejemplo, pueden surgir problemas de conectividad entre tus recursos de Google Cloud y tu EKM.

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

  1. Después de que se crea un conjunto de datos de la API de Cloud Healthcare encriptado con CMEK, la API de Cloud Healthcare verifica el estado de la clave cada cinco minutos para garantizar que esté disponible. Si la clave no está disponible, la API de Cloud Healthcare seguirá admitiendo solicitudes al conjunto de datos durante un máximo de una hora.

  2. Después de una hora, si la API de Cloud Healthcare aún no puede conectarse con Cloud KMS, el conjunto de datos de la API de Cloud Healthcare se inhabilita como medida de protección. Para volver a habilitar el conjunto de datos de la API de Cloud Healthcare, comunícate con tu representante de asistencia.

    Cuando se inhabilita, solo puedes enviar solicitudes datasets.get y datasets.delete al conjunto de datos de la API de Cloud Healthcare. Otras solicitudes fallan con un error 400 FAILED_PRECONDITION.

  3. Si el conjunto de datos de la API de Cloud Healthcare no está disponible durante más de 30 días, se borrará de forma permanente. También se borrarán todos los almacenes de DICOM, FHIR y HL7v2 del conjunto de datos y sus datos asociados. Si se borran, no se podrán recuperar.

Creación de claves

En las siguientes secciones, se describe cómo crear un llavero de claves y una clave de Cloud KMS. Solo se admiten las claves de encriptación 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 llavero de claves en una ubicación que coincida con la región o multirregión del conjunto de datos de la API de Cloud Healthcare.

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

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

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

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

Crea un llavero de claves y una clave

Completa los siguientes pasos en el proyecto de Google Cloud que ejecuta Cloud KMS:

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

Otorga permisos de encriptación y desencriptación

Para proteger los datos de la API de Cloud Healthcare con una clave de Cloud KMS, otorga a la cuenta de servicio del agente de servicio de Cloud Healthcare la función Encriptador/Desencriptador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) en esa clave. Para obtener instrucciones, consulta Permisos de CMEK del conjunto de datos.

Después de otorgar la función a la cuenta de servicio, la API de Cloud Healthcare puede encriptar y desencriptar recursos encriptados con CMEK. No es necesario que las aplicaciones especifiquen claves cuando leen o escriben datos. La API de Cloud Healthcare controla la encriptación.

Cuando un solicitante lee o escribe un objeto encriptado con una clave de Cloud KMS, accede al objeto normalmente. Durante la solicitud, el agente de servicio encripta o desencripta de forma automática el objeto solicitado, siempre que se cumplan las dos condiciones siguientes:

  • El agente de servicio aún tiene los permisos necesarios.
  • La clave está disponible y habilitada.

Crea un conjunto de datos de la API de Cloud Healthcare encriptado con CMEK

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

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

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

Para ver tus IDs de recursos de clave de Cloud KMS, consulta Obtén un ID de recurso de Cloud KMS.

Console

  1. En la consola de Google Cloud, 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, ingresa un identificador para el conjunto de datos sujeto a los requisitos de tamaño y caracteres permitidos del conjunto de datos.

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

    • Region. El conjunto de datos reside de forma permanente dentro de una región de Google Cloud. 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 de forma permanente dentro de una ubicación que abarca varias regiones de Google Cloud. Después de seleccionar esta opción, escribe o selecciona una ubicación multirregional en el campo Multirregional.

  5. En la sección Encriptación, selecciona uno de los siguientes tipos de encriptación:

    • Clave de encriptación administrada por Google: Es el método de encriptación predeterminado. Usa este método si deseas que Google administre las claves de encriptación que protegen tus datos en este conjunto de datos de la API de Cloud Healthcare.

    • Clave de Cloud KMS: Usa una clave de encriptación administrada 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.

REST

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

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    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 comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

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

    Luego, ejecuta el siguiente comando para enviar tu solicitud de 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 comando siguiente en la terminal para crear o reemplazar este archivo en el directorio actual:

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

    Luego, ejecuta el siguiente comando para enviar tu solicitud de 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 del Explorador de API 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, completa cualquier otro campo obligatorio y haz clic en Ejecutar.

    Este es el resultado. La respuesta contiene un identificador para una operación de larga duración (LRO). Las operaciones de larga duración se muestran cuando las llamadas de métodos pueden tardar más en completarse. Toma nota del valor de OPERATION_ID. Necesitarás este valor en el paso siguiente.

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

    Antes de usar cualquiera de los datos de solicitud a continuación, realiza los siguientes reemplazos:

    • PROJECT_IDEl ID de tu proyecto de Google Cloud.
    • LOCATION: La ubicación del conjunto de datos.
    • DATASET_ID: El ID del conjunto de datos
    • OPERATION_ID: Es el ID que muestra la operación de larga duración.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el siguiente comando:

    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 siguiente comando:

    $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 del Explorador de API se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Completa los campos obligatorios y haz clic en Ejecutar.

    Este es el resultado. Cuando la respuesta contiene "done": true, significa que la operación de larga duración finalizó.

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

En cada una de las claves que creaste o que protegen los conjuntos de datos de la API de Cloud Healthcare, puedes ver qué recursos protege esa clave con el seguimiento del uso de claves. Para obtener más información, consulta Ver uso de claves.

Rotación de claves

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

La rotación de una clave da como resultado lo siguiente:

  • Los conjuntos de datos de la API de Cloud Healthcare creados después de la rotación usan la versión de clave nueva para la encriptación y todas las operaciones.
  • Los recursos de un conjunto de datos existente que se encriptaron con la clave no se vuelven a encriptar de manera automática con la nueva versión de la clave primaria.

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

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

Tienes control sobre tus claves y puedes inhabilitar, destruir o revocar los permisos en ellas para que la API de Cloud Healthcare no pueda acceder a los datos encriptados con CMEK. Después de destruir una clave o versión de clave asociada con un conjunto de datos de la API de Cloud Healthcare, todos los datos encriptados con esa clave o versión de clave se pierden de forma permanente.

Existe una demora entre el momento en que se inhabilita una clave o versión de clave y el momento en que esta ya no se puede usar. También hay una demora entre el momento en que se revocan 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 recursos de Cloud KMS.

Importa y exporta datos a una instancia con CMEK habilitadas

Para mantener tus datos encriptados con una clave administrada por el cliente durante una operación de exportación, debes configurar una CMEK en el destino de almacenamiento antes de comenzar la exportación. No hay requisitos ni restricciones especiales para importar datos a un conjunto de datos encriptado con CMEK cuando se importan desde un almacenamiento sin CMEK o desde un almacenamiento encriptado con CMEK.

Restricciones

Precios

Los conjuntos de datos se facturan igual sin importar si están encriptados con CMEK. Para obtener más información, consulta los precios de la API de Cloud Healthcare.

Cloud KMS te factura por el costo de la clave y cualquier operación criptográfica relacionada con ella. Estas operaciones ocurren cuando la API de Cloud Healthcare usa la clave para la encriptación o desencriptación. Puedes esperar que estos costos sean mínimos, según la cantidad esperada de operaciones criptográficas generadas por la API de 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 de Cloud Healthcare, tus proyectos pueden consumir cuotas de solicitudes criptográficas de Cloud KMS. Los conjuntos de datos de la API de Cloud Healthcare con encriptación CMEK y sus almacenes de DICOM, FHIR y HL7v2 consumen estas cuotas para todas las operaciones, excepto datasets.get. Las operaciones de encriptación y desencriptación con claves CMEK afectan las cuotas de Cloud KMS solo si usas claves de hardware (Cloud HSM) o externas (Cloud EKM). Para obtener más información, consulta las cuotas de Cloud KMS.

¿Qué sigue?