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

De forma predeterminada, Google Cloud encripta los datos cuando están en reposo automáticamente a través de claves de encriptación administradas por Google. Si tienes requisitos normativos o de cumplimiento específicos relacionados con las claves que protegen los 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, tus conjuntos de datos de la API de Cloud Healthcare se encriptan con una clave que tú 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 proyectos distintos. Para obtener orientación, consulta Separación de obligaciones.

A los efectos de la documentación, se usan las siguientes convenciones:

  • PROJECT_ID: Es 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 claves de Cloud KMS cuando creas un conjunto de datos de la API de Cloud Healthcare. No puedes habilitar, cambiar ni inhabilitar claves de Cloud KMS en un conjunto de datos existente de la API de Cloud Healthcare.
  • Solo se admiten almacenes FHIR, DICOM y HL7v2 en 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 la facturación o la verificación de que la clave esté disponible.

Consideraciones de claves externas

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

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

Falta de disponibilidad de claves y pérdida de datos

Si una clave encripta un conjunto de datos y esa clave deja de estar disponible y permanece así, la API de Cloud Healthcare inhabilita el conjunto de datos y, finalmente, lo borra. A veces, una clave deja de estar disponible si se inhabilita o destruye, o si no se puede acceder a ella debido a la revocación de permisos, pero este comportamiento se produce 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 forma 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 crear 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 asegurarse de que esté disponible. Si la clave no está disponible, la API de Cloud Healthcare seguirá admitiendo solicitudes al conjunto de datos durante 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 está inhabilitada, 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, estos datos 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 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 de tu 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 que coincida. 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 que coincidan. 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 tus datos de la API de Cloud Healthcare con una clave de Cloud KMS, otorga a la cuenta de servicio de Cloud Healthcare Service Agent el rol de encriptador/desencriptador de CryptoKey (roles/cloudkms.cryptoKeyEncrypterDecrypter) en esa clave. Para obtener instrucciones, consulta Permisos de CMEK de los conjuntos de datos.

Después de otorgar el rol a la cuenta de servicio, la API de Cloud Healthcare puede encriptar y desencriptar recursos encriptados con CMEK. Tus aplicaciones no necesitan especificar 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 como de costumbre. Durante la solicitud, el agente de servicio encripta o desencripta automáticamente el objeto solicitado, siempre y cuando se cumplan las siguientes condiciones:

  • El agente de servicio todavía 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 clave de Cloud KMS cuando crees 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 los IDs de recursos de claves 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 mostrará la página Crear un 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 en 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 Multirregión.

  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 mostrará la página Navegador. El conjunto de datos nuevo aparecerá en la lista de conjuntos de datos.

gcloud

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

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

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 que figura a continuación:

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

    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 API

    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

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

Rotación de claves

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

Rotar una clave genera lo siguiente:

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

Para que la encriptación funcione, todas las versiones de clave deben estar disponibles. De lo contrario, se inhabilita el conjunto de datos de la API de Cloud Healthcare y fallan todas las solicitudes al conjunto de datos. Para obtener más información, consulta Consideraciones sobre claves 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 de la clave para que la API de Cloud Healthcare no pueda acceder a los datos encriptados con CMEK. Después de destruir una clave o una versión de clave asociada con un conjunto de datos de la API de Cloud Healthcare, se perderán de forma permanente todos los datos encriptados con esa clave o versión de clave.

Hay una demora entre el momento en que inhabilitas una clave o una versión de clave y el momento en que ya no se puede usar. También hay una demora entre el momento en que revocas los permisos de la cuenta de servicio del agente de servicios 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.

Exporta e importa 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 establecer una CMEK en el destino de almacenamiento antes de comenzar la exportación. No existen requisitos ni restricciones especiales para importar datos a un conjunto de datos encriptado con CMEK cuando se importa desde un almacenamiento no CMEK o encriptado con CMEK.

Restricciones

Precios

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

Cloud KMS te factura el costo de la clave y todas las operaciones criptográficas que se realicen en ella. Estas operaciones se producen cuando la API de Cloud Healthcare usa la clave para la encriptación o desencriptación. Se espera que estos costos sean mínimos, según la cantidad esperada de operaciones criptográficas que genera la API de Cloud Healthcare. Para obtener más información, consulta 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 encriptados con CMEK y sus almacenes 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 Cuotas de Cloud KMS.

¿Qué sigue?