Configura un proyecto que cumpla con la HIPAA

En este instructivo se explica el Google Cloud Healthcare Data Protection Toolkit, un framework de automatización para implementar recursos de Google Cloud a fin de almacenar y procesar datos de atención médica, incluida la información de salud protegida (PHI), según se define en la Ley de Responsabilidad y Portabilidad de Seguros Médicos (HIPAA) de EE.UU. Este instructivo se diseñó para leerse junto con el artículo de arquitectura de Google Cloud Healthcare alineado con la HIPAA.

Descripción general

El instructivo es para organizaciones de atención médica que recién comienzan a usar Google Cloud y buscan un ejemplo de cómo configurar una infraestructura de Google Cloud para el almacenamiento de datos, el análisis o el desarrollo de aplicaciones. Esta configuración incluye muchos de los controles de prácticas recomendadas de seguridad y privacidad que se sugieren para datos de atención médica, como configurar accesos adecuados, mantener registros de auditoría y supervisar actividades sospechosas. Para obtener detalles sobre estas prácticas recomendadas, consulta el informe de la HIPAA de Google Cloud.

En el instructivo se explican varios servicios de Google Cloud que pueden almacenar y procesar PHI, pero no se abarcan todos los tipos de recursos y casos prácticos de Google Cloud. En su lugar, el instructivo se centra en un subconjunto de tipos de recursos. Para obtener una lista de los servicios de Google Cloud que admiten el cumplimiento de la ley HIPAA en virtud del Acuerdo entre Socios Comerciales (BAA) de Google, consulta Cumplimiento de la ley HIPAA en Google Cloud. También puedes revisar la documentación de Google Cloud relacionada con la seguridad, la privacidad y el cumplimiento.

Renuncia de responsabilidad

  • En este instructivo se explica una arquitectura de referencia y este no constituye asesoramiento legal sobre las protecciones administrativas, técnicas y físicas adecuadas que debes implementar para cumplir con la HIPAA o cualquier otra legislación de privacidad de datos.
  • El alcance de este instructivo se limita a la protección y la supervisión de los datos almacenados en los recursos dentro del alcance. La implementación del instructivo no abarca de manera automática los recursos de datos derivados que otros servicios de Google Cloud Storage almacenan o procesan. Debes aplicar medidas de protección similares a los recursos de datos derivados.
  • La implementación de este instructivo no es un producto oficial de Google; se pensó como una implementación de referencia. El código se encuentra en un proyecto de código abierto, el Google Cloud Healthcare Data Protection Toolkit, que está disponible en la licencia de Apache, versión 2.0. Puedes usar el framework como punto de partida y configurarlo para que se ajuste a tus casos prácticos. Eres responsable de garantizar que el entorno y las aplicaciones que compilas en Google Cloud estén configurados y protegidos de forma adecuada según los requisitos de la HIPAA.
  • En este instructivo se muestra una instantánea del código en GitHub, que se puede actualizar o cambiar con el tiempo. Es posible que encuentres más tipos de recursos (por ejemplo, instancias de Cloud SQL o clústeres de Kubernetes) incluidos en la implementación de referencia de los que se abordan en este instructivo. Consulta el archivo README para conocer el alcance más reciente.

Objetivos

El objetivo de este instructivo es proporcionar una implementación de referencia de una infraestructura como código (IaC) para configurar un proyecto de Google Cloud alineado con la HIPAA. Con esta estrategia de implementación, se automatizan los siguientes procesos:

Costos

Google Cloud ofrece a los clientes una prueba gratuita de duración limitada y un nivel de uso Siempre gratuito, que se aplica a varios de los servicios que se usan en este instructivo. Para obtener más información, consulta la página Nivel gratuito de Google Cloud.

Según la cantidad de datos o la cantidad de registros que acumules mientras ejecutas esta implementación, es posible que puedas completar la implementación sin exceder los límites de la prueba gratuita o el Nivel gratuito. Puedes usar la calculadora de precios para generar una estimación de costos según el uso previsto.

Cuando finalices esta implementación, puedes borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más detalles, consulta Realiza una limpieza.

Antes de comenzar

  1. Revisa la guía de prácticas recomendadas de integración.
  2. Revisa el cumplimiento de la ley HIPAA en Google Cloud.
  3. Si usas los servicios de Google Cloud en relación con PHI, realiza un BAA con Google Cloud.
  4. Asegúrate de que tu configuración básica de Google Cloud esté completa:

Inicializa un entorno

  1. En tu shell descarga el Google Cloud Healthcare Data Protection Toolkit. Nota: Si vas a ejecutar la secuencia de comandos auxiliar en Cloud Shell, puedes detenerte aquí y omitir los próximos pasos.

  2. Instala herramientas y servicios de dependencia:

    • Bazel: herramienta de compilación y prueba de código abierto
    • Terraform: herramienta de aprovisionamiento en la nube
    • SDK de Cloud: conjunto de herramientas para administrar recursos y aplicaciones alojadas en Google Cloud
    • Git: sistema de control de versión distribuido
  3. Configura la autenticación:

    gcloud auth login
    

Lista de tareas para la preparación de la implementación

Antes de comenzar, asegúrate de anotar la siguiente información.

Google Cloud usa grupos y Cuentas de Google en los dominios compatibles de G Suite o Cloud Identity, o Grupos de Google públicos para el control de permisos. En Google Cloud, se recomienda crear un conjunto de grupos para funciones predefinidas, de modo que puedas controlar con facilidad los permisos individuales mediante la membresía de grupo sin modificar el proyecto.

Crea o verifica la existencia de grupos de usuarios descritos en el documento de concepto. Si tu organización es cliente de Google Workspace o planeas usar la secuencia de comandos a fin de aprovisionar recursos para una organización existente de Google Cloud, consulta con el administrador la información de los grupos de usuarios. El administrador usa la Consola del administrador de Google para este fin. Usa la ayuda de Cloud Identity para averiguar quién es el administrador. Los usuarios de la organización se configuran en Google Cloud Identity. De forma predeterminada la cuenta de correo electrónico designada como administrador en el proceso de configuración se asigna como administrador de la organización. Esta persona puede crear y asignar otras funciones de IAM. Los grupos de IAM y las funciones asociadas controlan el acceso a varios recursos necesarios para la transferencia de datos, el análisis y la auditoría de seguridad.

Además, el usuario que ejecuta la secuencia de comandos de implementación debe estar en los grupos de propietarios de todos los proyectos que se creen, incluido el proyecto de seguridad. Puedes quitar a ese usuario de estos grupos después de que la implementación se realice con éxito. Agrega al usuario que estás usando como miembro del OWNERS_GROUP que creaste antes. Accede a la Consola del administrador de Google Workspace.

Como alternativa si planeas realizar pruebas fuera de una cuenta comercial, puedes usar Grupos de Google.

Crea cada uno de los grupos de Google y, luego, usa la siguiente configuración segura de permisos básicos:

  • Tipo de grupo: lista de direcciones de correo electrónico
  • Ver temas: todos los miembros del grupo (y administradores)
  • Publicar: solo administradores y propietarios
  • Unirse al grupo: solo usuarios invitados

Recopila información del entorno y nombra los recursos del proyecto

Un archivo de configuración está en formato YAML y enumera cada uno de los recursos que deseas crear y sus respectivas propiedades. Puedes elegir entre una cantidad de archivos de configuración de muestra cada vez mayor. Te recomendamos usar el archivo de configuración del registro de auditoría remoto.

En la sección overall se encuentran los detalles de organization y billing que se aplican a todos los proyectos.

  • Define el proyecto que alojará los registros de auditoría en la sección audit_logs_project.
  • Define el proyecto que alojará los recursos de Forseti en la sección forseti.
  • Enumera todos los proyectos de hosting de datos necesarios en projects.

Recopila la siguiente información para tu entorno de Google Cloud y actualiza el archivo.

Parámetro Valor de muestra
organization_id 12345678
billing_account 000000-000000-000000
location EE.UU., la UE o Asia (para BigQuery y Cloud Storage)

La configuración predeterminada es el almacenamiento de datos multirregional dentro de los límites de EE.UU., la UE o Asia.
TTL days Este campo en la sección audit determina el tiempo de retención para los registros de auditoría (por el momento solo para los depósitos de almacenamiento).

Un valor de ejemplo es 365.
project_id Proporciona nombres únicos para los tres proyectos:

  1. audit_logs_project
  2. Forseti
  3. Proyecto de conjunto de datos (projects.project_id)
stackdriver_alert_email [your admin email id]
owners_group hipaa-sample-project-owner@google.com
auditors_group hipaa-sample-project-auditor@google.com

El kit de herramientas te permite seguir las prácticas recomendadas, como las convenciones de denominación coherentes y el etiquetado de recursos. Toma decisiones sobre nombres de proyectos y nombres de conjuntos de datos de BigQuery y depósitos de Cloud Storage, además de nombres de VPC. Para obtener prácticas recomendadas sobre la denominación, consulta los siguientes documentos:

Usa lo siguiente para recopilar la información necesaria, que puedes agregar al archivo de configuración de implementación. Ten en cuenta los componentes ilustrados en el siguiente ejemplo cuando establezcas las convenciones de nombres:

  • Nombre de la empresa: Altostrat Company: altoco
  • Unidad de negocios: Recursos Humanos: hr
  • Código de la aplicación: Sistema de compensación: comp
  • Código regional: north-america-northeast1: na-ne1, europe-west1: eu-we1
  • Códigos de entorno: dev, test, uat, stage, prod
Parámetro Ejemplo de convención de nombres
project_id Decide las convenciones de nombres de proyectos.

Ejemplo:
{org-name}-{app/bu/purpose}-{environment}

altoco-edw-prod

Define el proyecto que alojará los registros de auditoría en la sección audit_logs_project.

Define el proyecto que alojará los recursos de Forseti en la sección forseti.

Enumera todos los proyectos de hosting de datos necesarios en projects.
Nombre del bucket {storage_name} Ejemplo: {org-name hash}-{source}-{type}-{bu/region}-{seq#}

08uy6-cerner-inpatient-east-1

Usa el hash del nombre de la organización para obtener mayor seguridad.
Nombre del conjunto de datos de BigQuery Ejemplo: {org-name}_{bu/region}_{app/module}

altoco_east_edw
Nombre de VPC Ejemplo:
{org-name}-{bu/region}-{environment}-{seq#}

altoco-east-prod-vpc-1

Información sobre las secuencias de comandos

En un nivel alto, Google Cloud Healthcare Data Protection Toolkit usa Terraform, Cloud Foundation Toolkit y la lógica personalizada cuando corresponde para aprovisionar recursos, configura IAM y los registros según las prácticas recomendadas y habilita la supervisión de Forseti.

Secuencias de comandos auxiliares

La secuencia de comandos auxiliar principal apply.go lee la configuración de un archivo de configuración YAML y crea o modifica los proyectos que se enumeran en el archivo de configuración. La secuencia de comandos crea un proyecto de registros de auditoría y un proyecto de Forseti. Luego, la secuencia de comandos crea un proyecto de hosting de datos para cada proyecto que aparece en projects. Para cada proyecto enumerado, la secuencia de comandos realiza las siguientes acciones:

  • Crea el proyecto (si el proyecto aún no está presente).
  • Habilita la facturación en el proyecto.
  • Crea un bucket para almacenar el estado de Terraform (ya sea de forma local dentro del proyecto o de forma remota en el proyecto central de DevOps).
  • Te solicita que crees o selecciones un lugar de trabajo; para ello, usa Cloud Monitoring. Para obtener más detalles, consulta la Guía de supervisión.
  • Crea Alertas de supervisión para supervisar las reglas de seguridad.
  • Implementa recursos almacenados de forma local dentro del proyecto, incluidos los servicios, los recursos de supervisión y los recursos de retención de datos.
  • Crea receptores y recursos de datos de registros de auditoría (ya sea de forma local dentro del proyecto o de forma remota en el proyecto de auditoría central).
  • Crea recursos de supervisión de Forseti.

La secuencia de comandos auxiliar rule_generator.go lee la configuración desde un archivo de configuración YAML para generar reglas de Forseti y escribirlas en un directorio local o un depósito de Cloud Storage.

NOTA: Por el momento la generación de reglas solo funciona con los archivos de configuración anteriores basados en el administrador.

Ejecuta las secuencias de comandos

Con el Data Protection Toolkit, puedes usar un archivo de configuración a fin de describir todos los recursos que desees para una sola implementación. Un archivo de configuración está en formato YAML y enumera cada uno de los recursos que desees crear y sus respectivas propiedades.

  1. Copia un archivo de configuración de muestra en la carpeta raíz.

  2. Asegúrate de estar en la carpeta ./healthcare/deploy.

    cp ./samples/simple/config.yaml .
    nano config.yaml
    
  3. Actualiza los parámetros que recopilaste antes en los lugares adecuados del archivo de configuración.

Los parámetros de la secuencia de comandos auxiliar principal apply.go se definen de la siguiente manera:

--config_path
La ruta de acceso relativa o absoluta a la configuración de implementación.
--projects
Lista de ID de proyectos separados por comas de la configuración de implementación. Puedes omitir este parámetro para indicar todos los proyectos enumerados en la configuración de la implementación. La secuencia de comandos crea proyectos nuevos y actualiza los existentes.
--dry_run
Se usa para especificar una ejecución de prueba. No incluyas --dry_run si quieres especificar una ejecución estándar.

Los parámetros de la secuencia de comandos auxiliar rule_generator.go se definen de la siguiente manera:

--config_path
La ruta de acceso relativa o absoluta a la configuración de implementación.
--output_path
La ruta de acceso en la que la secuencia de comandos de generación de reglas ubica los archivos de reglas. Puede ser un directorio local o un bucket de Cloud Storage. Si no se configura, escribe directamente en el bucket del servidor de Forseti.

Modo de ejecución de prueba

Realizar una ejecución de prueba te permite revisar todo lo que la secuencia de comandos haría en función de la configuración de implementación especificada, pero sin realmente hacerlo. Podrás confirmar que la implementación se realizará como se espera cuando realmente se lleve a cabo.

bazel run cmd/apply:apply -- \
    --config_path=[CONFIG_FILE] \
    --projects=[PROJECTS] \
    --dry_run

Modo de creación de proyectos

Después de examinar los comandos en una ejecución de prueba, cuando estés listo para realizar la implementación, ejecuta la secuencia de comandos sin el parámetro --dry_run:

bazel run cmd/apply:apply -- \
    --config_path=[CONFIG_FILE] \
    --projects=[PROJECTS]

Modo de actualización

Si deseas agregar un recurso a un proyecto existente o modificar una configuración existente, especifica el proyecto implementado con anterioridad en la marca --projects.

bazel run cmd/apply:apply -- \
    --config_path=[CONFIG_FILE] \
    --projects=[PROJECTS]

Generación de reglas

Si implementaste un proyecto de Forseti con la secuencia de comandos principal, te recomendamos ejecutar la secuencia de comandos de generación de reglas para generar y subir reglas. De forma predeterminada las reglas se subirán al bucket del servidor de Forseti. Si deseas crear tu propio conjunto de reglas de Forseti, omite este paso.

bazel run cmd/rule_generator:rule_generator -- \
    --config_path=[CONFIG_FILE]

Verifica los resultados

La secuencia de comandos auxiliar encapsula muchos comandos. En esta sección se destaca qué esperar en Cloud Console después de ejecutar de manera correcta la secuencia de comandos.

Cloud Console

Tus proyectos están disponibles en Cloud Console:

proyectos enumerados en Cloud Console

IAM

Para cada proyecto Cloud Console muestra OWNERS_GROUP como propietario del proyecto y AUDITORS_GROUP como revisor de seguridad del proyecto.

Permisos para tu proyecto en Console

Aunque en la captura de pantalla anterior se muestra solo la membresía de OWNERS_GROUP y AUDITORS_GROUP, es probable que veas varias cuentas de servicio que tienen acceso a nivel de proyecto debido a las API que habilitaste en el proyecto. Las cuentas de servicio más comunes son las siguientes:

Navegador de Storage

El navegador de almacenamiento muestra el depósito recién creado para almacenar registros. El nombre del bucket, la clase de almacenamiento y la ubicación siguen la configuración de implementación. Este ejemplo es para una disposición de registro local. En una disposición de registro remoto, este depósito se encuentra en un proyecto diferente que los datos y consolida los registros de todos los proyectos de datos mientras está en un modo de registro local. Cada proyecto tiene su propio bucket de registros.

Consolidación de registros para todos los proyectos de datos en un modo de registro local

Ciclo de vida

El ciclo de vida está habilitado para el depósito de registros. Consulta las políticas del ciclo de vida para ver que ttl_days especifica una acción Delete (Borrar) para los objetos que son más antiguos que el valor en la configuración de implementación.

Visualiza las políticas del ciclo de vida

  • Además de los permisos para cloud-storage-analytics@google.com, el resto de los permisos se configuran como lo especificaste. Consulta la documentación sobre registros para comprender por qué cloud-storage-analytics@google.com debe tener acceso de escritura al depósito.

    Grupos con permisos de escritura

  • El navegador de almacenamiento muestra el depósito recién creado para almacenar datos. Las categorías Name (Nombre), Default storage class (Clase de almacenamiento predeterminada) y Location (Ubicación) del depósito coinciden con las especificaciones de la configuración de implementación.

    Depósitos creados recientemente

  • Los objetos en cada depósito de datos tienen versiones. Ejecuta el siguiente comando para verificar esto y reemplaza bucket_name por el nombre de tu depósito:

    gsutil versioning get gs://bucket_name
    
  • Los registros de acceso y almacenamiento de los depósitos de datos se capturan y se almacenan en el depósito de registros; el registro comienza cuando se crea el depósito de datos. Ejecuta este comando para verificar lo siguiente:

    gsutil logging get gs://bucket_name
    
  • Los permisos para cada bucket se configuran según tus especificaciones.

    Grupos con permisos de escritura en el bucket

Google Cloud Console

En Cloud Console los registros de acceso a los datos están activados para todos los servicios.

Registros de acceso a datos en la Consola del administrador

Cloud Console

En Cloud Console verifica que la API de BigQuery esté habilitada.

API de BigQuery habilitada en Cloud Console

BigQuery

En Cloud Console verifica que se muestre el conjunto de datos en el que se reciben los registros de auditoría de Cloud. Verifica también que los valores de Description (Descripción), Dataset ID (ID de conjunto de datos) y Data location (Ubicación de los datos) coincidan con las especificaciones de la configuración de implementación y el receptor de exportación de registro que viste antes.

BigQuery muestra el conjunto de datos en el que Cloud Logging recibe los registros de auditoría de Cloud

Verifica que el acceso al conjunto de datos esté configurado según tus especificaciones.

Verifica también que la cuenta de servicio que transmite los registros de Cloud Logging a BigQuery tenga derechos de edición en el conjunto de datos.

Permisos de datos de BigQuery

Verifica que se muestren los conjuntos de datos creados recientemente para almacenar datos y que los valores Description (Descripción), Dataset ID (ID de conjunto de datos) y Data location (Ubicación de los datos), además de las etiquetas en cada conjunto de datos, coincidan con las especificaciones de la configuración de implementación.

BigQuery muestra los conjuntos de datos creados recientemente

Verifica que el acceso al conjunto de datos esté configurado como lo especificaste. Es probable que veas otras cuentas de servicio con permisos heredados, según las API que hayas habilitado en el proyecto.

Permisos de datos de BigQuery para almacenar datos

Pub/Sub

Verifica que Pub/Sub muestre el tema recién creado y que el nombre del tema, la lista de suscripciones y los detalles de cada suscripción (por ejemplo, Delivery type [Tipo de envío] y Acknowledgement deadline [Plazo de confirmación]) coincidan con las especificaciones de la configuración de implementación.

Verifica también que los derechos de acceso del tema coincidan con la configuración de implementación. Por ejemplo, en la siguiente captura de pantalla, se muestra la propiedad OWNERS_GROUP heredada del tema y que READ_WRITE_GROUP tiene la función de editor de temas. Según las API que hayas habilitado en el proyecto, es probable que veas otras cuentas de servicio con permisos heredados.

Pub/Sub muestra el tema recién creado

Cloud Logging

En Cloud Console verifica que se muestre un receptor de exportación nuevo. Toma nota de los valores de Destination (Destino) y de Writer Identity (Identidad del escritor); luego, compáralos con los que verás a continuación en BigQuery.

Cloud Logging muestra un receptor de exportación nuevo

Verifica que las métricas basadas en registros estén configuradas para contar incidentes de actividades sospechosas en los registros de auditoría.

Cloud Logging muestra métricas basadas en registros que están configuradas para contar incidentes de actividades sospechosas

Alertas de Cloud Monitoring

Verifica que Cloud Monitoring contenga políticas de alertas para las métricas basadas en registros correspondientes:

  1. En Google Cloud Console, ve a Monitoring.

    Cloud Monitoring

  2. En el menú Alerting (Alertas), selecciona Policies Overview.

Monitoring muestra políticas de alertas que se activan en función de las métricas basadas en registros correspondientes

Registros de consultas

Con los registros de auditoría transmitidos a BigQuery, puedes usar la siguiente consulta de SQL para organizar el historial de registros en orden cronológico por tipo de actividad sospechosa. Usa esta consulta en el editor de BigQuery o a través de la interfaz de línea de comandos de BigQuery como punto de partida para definir las consultas que debes escribir según tus requisitos.

```sql
SELECT timestamp,
       resource.labels.project_id                              AS project,
       protopayload_auditlog.authenticationinfo.principalemail AS offender,
       'IAM Policy Tampering'                                  AS offenseType
FROM   `hipaa-sample-project.cloudlogs.cloudaudit_googleapis_com_activity_*`
WHERE  resource.type = "project"
       AND protopayload_auditlog.servicename =
           "cloudresourcemanager.googleapis.com"
       AND protopayload_auditlog.methodname = "setiampolicy"
UNION DISTINCT
SELECT timestamp,
       resource.labels.project_id                              AS project,
       protopayload_auditlog.authenticationinfo.principalemail AS offender,
       'Bucket Permission Tampering'                           AS offenseType
FROM   `hipaa-sample-project.cloudlogs.cloudaudit_googleapis_com_activity_*`
WHERE  resource.type = "gcs_bucket"
       AND protopayload_auditlog.servicename = "storage.googleapis.com"
       AND ( protopayload_auditlog.methodname = "storage.setiampermissions"
              OR protopayload_auditlog.methodname = "storage.objects.update" )
UNION DISTINCT
SELECT timestamp,
       resource.labels.project_id                              AS project,
       protopayload_auditlog.authenticationinfo.principalemail AS offender,
       'Unexpected Bucket Access'                              AS offenseType
FROM   `hipaa-sample-project.cloudlogs.cloudaudit_googleapis_com_data_access_*`
WHERE  resource.type = 'gcs_bucket'
       AND ( protopayload_auditlog.resourcename LIKE
             '%hipaa-sample-project-logs'
              OR protopayload_auditlog.resourcename LIKE
                 '%hipaa-sample-project-bio-medical-data' )
       AND protopayload_auditlog.authenticationinfo.principalemail NOT IN(
           'user1@google.com', 'user2@google.com' )
```

En la siguiente imagen, se muestra un resultado de muestra cuando ejecutas la consulta mediante la interfaz de línea de comandos de BigQuery.

Resultado de muestra cuando ejecutas la consulta mediante la interfaz de línea de comandos de BigQuery

Realiza una limpieza

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?