Patrones para la prueba de cumplimiento automatizada con Chef InSpec

Last reviewed 2023-11-24 UTC

En este documento, se describen patrones para automatizar las verificaciones de políticas y cumplimiento de los recursos de Google Cloud mediante Chef InSpec, un framework de prueba de infraestructura de código abierto. Este documento está dirigido a los arquitectos y profesionales de DevOps que quieran integrar pruebas de cumplimiento continuo en el flujo de trabajo de desarrollo de software.

Políticas y cumplimiento en Google Cloud

Google Cloud proporciona una variedad de herramientas para ayudarte a aplicar y auditar los requisitos de políticas y cumplimiento:

Servicio Descripción
Jerarquía de recursos

Puedes usar la jerarquía de recursos a fin de asignar la estructura operativa de tu empresa a Google Cloud, y administrar el control de acceso y los permisos para grupos de recursos relacionados. Puedes definir grupos de recursos relacionados y aplicar controles coherentes a todos los recursos del grupo.

Por ejemplo, puedes agrupar todos tus proyectos de Google Cloud sujetos al cumplimiento de las Normas de seguridad de datos de la industria de tarjetas de pago (PCI DSS) en una carpeta determinada. Luego, puedes aplicar controles relevantes para todos los proyectos de esa carpeta.

Servicio de políticas de la organización

Usa el servicio de políticas de la organización para definir restricciones que limiten la disponibilidad o funcionalidad de los servicios de Google Cloud. Por ejemplo, puedes usar la restricción de ubicación de recursos para limitar el conjunto de regiones en las que se pueden crear recursos basados en la ubicación, como máquinas virtuales.

El Servicio de políticas de la organización funciona junto con la jerarquía de recursos. Puedes aplicar políticas de la organización en diferentes niveles de la jerarquía. Por ejemplo, puedes definir una política de la organización para los proyectos que están sujetos al cumplimiento de PCI y aplicar la política a la carpeta PCI.

Security Command Center

Puedes usar Security Command Center para obtener una visibilidad centralizada de todos tus recursos de Google Cloud. Security Command Center analiza automáticamente los recursos en la nube en busca de vulnerabilidades conocidas y proporciona una interfaz de usuario y una plataforma de datos únicas para agregar y administrar resultados de seguridad.

Las estadísticas del estado de la seguridad pueden proporcionar informes y supervisión de estándares de cumplimiento, como PCI DSS, y estándares de la industria, como la comparativa del Centro para la Seguridad en Internet (CIS). Puedes ver los informes en un panel de cumplimiento y, luego, exportarlos.

Security Command Center se integra en varias fuentes de seguridad de terceros y proporciona una API para que puedas agregar y administrar tus resultados personalizados. Security Command Center proporciona una interfaz unificada para todos tus hallazgos de seguridad y cumplimiento.

Sincronizador de configuración

Si utilizas GKE Enterprise, puedes usar el Sincronizador de configuración para mantener tus clústeres de Kubernetes sincronizados con las opciones de configuración definidas en un repositorio de Git. El repositorio de Git actúa como la única fuente de información para la configuración y las políticas de tu clúster. El Sincronizador de configuración audita de forma continua tu entorno de GKE Enterprise para identificar y corregir clústeres que se desvíen de la configuración definida en tu repositorio.

Policy Controller

Si utilizas GKE Enterprise, puedes usar Policy Controller, un controlador de admisión dinámico de Kubernetes, para aplicar políticas completamente programables para tus clústeres. Mediante Policy Controller, puedes impedir que se creen objetos dentro de los clústeres que no cumplan con los requisitos de tu política. Por ejemplo, puede crear políticas para aplicar la seguridad del Pod.

Introducción a Chef InSpec

Chef InSpec es un framework de prueba de infraestructura de código abierto con un lenguaje legible específico del dominio (DSL) para especificar los requisitos de cumplimiento, seguridad y políticas.

Con Chef InSpec, puedes hacer lo siguiente:

  • Define los requisitos de cumplimiento como código y prueba tu infraestructura de nube con esos requisitos.
  • Permite que los equipos de desarrollo agreguen pruebas específicas de aplicaciones y evalúen el cumplimiento de las aplicaciones a las políticas de seguridad antes de enviar cambios al entorno de producción.
  • Automatiza la verificación de cumplimiento en las canalizaciones de CI/CD y como parte del proceso de lanzamiento.
  • Prueba la infraestructura de Google Cloud de la misma manera que pruebas la infraestructura en otros entornos de nube.

Google Cloud proporciona varios recursos para ayudarte a comenzar a usar Chef InSpec:

Prácticas recomendadas para usar Chef InSpec con Google Cloud

Las siguientes son prácticas recomendadas generales para usar Chef InSpec:

  • Define y adopta un proceso para corregir las infracciones que se detectaron en las pruebas de Chef InSpec. Chef InSpec destaca los incumplimientos de tu política y los requisitos de cumplimiento, pero no realiza ninguna solución.
  • Otorga los permisos de IAM adecuados a la cuenta de servicio que usas para ejecutar las pruebas de Chef InSpec. Por ejemplo, si pruebas buckets de Cloud Storage, la cuenta de servicio debe tener las funciones de IAM adecuadas para Cloud Storage.
  • Configura generadores de informes de Chef InSpec para producir informes con formato que describen las pruebas y los resultados. Puedes almacenar estos informes para proporcionar un registro histórico. También puedes usar estos informes como entradas para tus otras herramientas de seguridad y cumplimiento. Por ejemplo, puedes integrar Chef InSpec y Security Command Center.
  • Agrupa las pruebas de Chef InSpec relacionadas con los perfiles. Puedes crear diferentes perfiles para distintos casos de uso. Por ejemplo, puedes ejecutar un perfil integral de extremo a extremo como parte de las pruebas nocturnas programadas. También puedes ejecutar un perfil más corto y enfocado en respuesta a eventos en tiempo real.

Escribe pruebas de Chef InSpec

Las pruebas de Chef InSpec se escriben con el DSL de Chef InSpec, que es un DSL de Ruby para escribir controles de auditoría.

En el siguiente código, se muestra un control para validar atributos de bucket de Cloud Storage:

control 'policy_gcs_bucket' do
 title 'Cloud Storage bucket policy'
 desc 'Compliance policy checks for Cloud Storage bucket'
 impact 'medium'

 google_storage_buckets(project: project_id).bucket_names.each do |bucket|
   describe "[#{project_id}] Cloud Storage Bucket #{bucket}" do
     subject { google_storage_bucket(name: bucket) }
     its('storage_class') { should eq 'STANDARD' }
     its('location') { should be_in ['EUROPE-WEST2', 'EU'] }
     end
   end
 end

El control especifica la siguiente información:

  • Metadatos que describen el control
  • Impacto o gravedad de las fallas
  • Verificaciones de políticas que verifican los atributos de cada bucket de Cloud Storage en tu proyecto

Ejecuta pruebas de Chef InSpec con Cloud Build

En los patrones que se describen en este documento, se usan Cloud Build y la imagen de contenedor de Chef InSpec para ejecutar las pruebas de InSpec. Con Cloud Build, puedes ejecutar imágenes de contenedores y encadenar los pasos de compilación para formar una canalización. Por ejemplo, puedes ejecutar las pruebas de Chef InSpec en un paso de compilación y, luego, exportar o analizar los informes generados en un paso posterior. Sin embargo, no es necesario usar Cloud Build. Puedes integrar Chef InSpec con las herramientas que uses.

En el siguiente archivo de configuración de Cloud Build, se muestra una canalización con dos pasos de compilación:

steps:
- id: 'run-inspec-cis'
  name: chef/inspec:latest
  entrypoint: '/bin/sh'
  args:
   - '-c'
   - |
     inspec exec https://github.com/GoogleCloudPlatform/inspec-gcp-cis-benchmark.git \
     --target gcp:// \
     --input gcp_project_id=${PROJECT_ID} \
     --reporter cli json:/workspace/report.json \
     --chef-license accept || touch fail.marker

- id: 'store-report'
  name: gcr.io/cloud-builders/gsutil:latest
  args:
   - cp
   - /workspace/report.json
   - gs://${_REPORTS_BUCKET}/cis-report-${BUILD_ID}.json

En el primer paso, se ejecutan las pruebas de comparativas de CIS de Google Cloud y se genera un informe en formato JSON. En el paso de compilación, se usa la imagen de contenedor chef/inspec y se recuperan las pruebas del repositorio público de GitHub de CIS de Google Cloud. El segundo paso de compilación copia el informe generado en un bucket de Cloud Storage.

A fin de simplificar, en el ejemplo anterior se hace referencia a la etiqueta latest para todas las imágenes de contenedor. Para ayudar a que tus compilaciones sean reproducibles, te recomendamos que hagas referencia a una versión de imagen de contenedor fija y específica, en lugar de una progresiva, como latest.

Si falla alguna de las pruebas, Chef InSpec muestra un error. En lugar de fallar la compilación, el primer paso de compilación escribe un archivo fail.marker y el segundo paso de compilación se ejecuta incluso si falla alguna de las pruebas de Chef InSpec. Si deseas que la compilación falle de forma explícita para destacar los errores, puedes buscar el archivo fail.marker en un paso de compilación final y fallar la compilación si existe.

Analiza los informes de Chef InSpec

Puedes configurar los generadores de informes de Chef InSpec para producir informes con formato que describan las pruebas y los resultados de InSpec. Puedes almacenar estos informes para proporcionar un registro histórico. También puedes usar estos informes como entradas para tus otras herramientas de seguridad y cumplimiento, o generar visualizaciones o alertas. Los patrones que se describen más adelante en este documento recomiendan almacenar los informes de Chef InSpec en un bucket de Cloud Storage.

En el siguiente diagrama, se muestra cómo puedes almacenar los informes y activar automáticamente más acciones.

Eventos activados por los informes

Agregar el informe a un bucket de Cloud Storage genera un evento. Puedes activar más acciones o análisis del informe en respuesta a este evento. En el diagrama anterior, activas una función de Cloud Functions que escribe detalles de las pruebas de Chef InSpec en BigQuery y otra función de Cloud Functions que agrega los resultados a Security Command Center.

Integra Chef InSpec y Security Command Center

Security Command Center es la base de datos canónica de riesgos y seguridad para Google Cloud. Security Command Center proporciona visibilidad centralizada de todos tus recursos de Google Cloud y analiza de forma automática tus recursos en la nube en busca de vulnerabilidades conocidas. Te recomendamos habilitar Security Command Center para tu organización.

Puedes agregar los resultados de las pruebas de Chef InSpec a Security Command Center. Security Command Center actúa como la plataforma de datos centralizada para agregar y administrar los resultados de seguridad de varias fuentes.

Security Command Center incluye Estadísticas del estado de la seguridad. Las estadísticas del estado de la seguridad analizan de forma automática tus recursos y proyectos de Google Cloud en busca de vulnerabilidades comunes. Por ejemplo, las estadísticas del estado de la seguridad ejecutan análisis que evalúan tus proyectos en comparación con la comparativa de CIS para Google Cloud Foundation 1.0. También puedes ejecutar un conjunto de pruebas similar con el perfil de CIS de InSpec de Google Cloud. Deberías comparar el permiso de tus pruebas de Chef InSpec para que no dupliquen las verificaciones que realiza las estadísticas del estado de la seguridad.

Existen varias formas de agregar los resultados de Chef InSpec a Security Command Center:

Patterns

En esta sección, se describen patrones para integrar Chef InSpec en tus operaciones diarias. Puedes combinar estos patrones para lograr pruebas de cumplimiento continuo.

Programa pruebas de Chef InSpec.

Con este patrón, ejecutarás tu conjunto de pruebas de Chef InSpec según un programa fijo. Recomendamos este enfoque de programación fijo como una buena forma de comenzar con Chef InSpec, ya que puedes ingresar pruebas de Chef InSpec sin modificar tus procesos existentes.

En el siguiente diagrama, se muestra cómo puedes ejecutar las pruebas de forma programada.

Programe pruebas de Chef InSpec.

En el diagrama anterior, debes crear un trabajo de Cloud Scheduler que se ejecuta con la frecuencia que prefieras. Cada vez que se ejecuta tu trabajo, activa una canalización de Cloud Build que ejecuta tus pruebas de Chef InSpec y envía el informe de prueba a Cloud Storage. Para obtener más información, consulta Programa compilaciones.

Este patrón tiene los siguientes beneficios:

  • Puedes ingresar pruebas de Chef InSpec con cambios mínimos en tus procesos existentes.
  • Puedes usar las pruebas de Chef InSpec sin importar los procesos que uses para aprovisionar y administrar la infraestructura y las apps.

Este patrón tiene las siguientes limitaciones:

  • Las pruebas de Chef InSpec se desacoplan del aprovisionamiento de tu infraestructura, lo que dificulta atribuir los cambios particulares a las pruebas de Chef InSpec con errores.
  • Las pruebas de Chef InSpec se ejecutan solo de forma periódica, por lo que puede haber un retraso antes de identificar los incumplimientos de cumplimiento o políticas.

Integración directa en tus canalizaciones de CI/CD

Muchas organizaciones automatizan el aprovisionamiento y la administración de su infraestructura mediante herramientas como Terraform o Config Connector. Por lo general, la infraestructura se crea o cambia solo como parte de una canalización de CI/CD. Para obtener más información sobre los conceptos de CI/CD en Google Cloud, consulta CI/CD modernas con GKE Enterprise.

En este patrón, agregas pruebas de Chef InSpec como pasos adicionales en tus canalizaciones de implementación de infraestructura para que puedas validar la infraestructura cada vez que ejecutes la canalización de implementación. Puedes fallar la compilación si hay incumplimientos de cumplimiento.

En el siguiente diagrama, se muestra un flujo de trabajo común en el que la canalización de implementación se activa en función de una confirmación que incluye cambios en la infraestructura.

Integra Chef Inspec con canalizaciones de CI/CD.

En el diagrama anterior, los cambios en la infraestructura se aplican a un entorno de prueba o etapa de pruebas y, luego, las pruebas de Chef InSpec se ejecutan en ese entorno. Si todas las verificaciones de Chef InSpec cumplen con los requisitos, puedes combinar y aplicar los cambios de infraestructura al entorno de producción, y las pruebas de Chef InSpec se ejecutarán nuevamente en el entorno de producción.

Este patrón tiene los siguientes beneficios:

  • Las pruebas de Chef InSpec están integradas directamente en el proceso de implementación para que las infracciones se identifiquen con rapidez.
  • Si las pruebas Chef InSpec no se aprueban, puede fallar la implementación de forma explícita.

Este patrón tiene las siguientes limitaciones:

  • Las pruebas de Chef InSpec están integradas directamente en la canalización de tu compilación, por lo que el equipo que administra la canalización de compilación debe comprender las pruebas de Chef InSpec.
  • Si tienes varias compilaciones que requieren pruebas de Chef InSpec, debes agregar los pasos de Chef InSpec a cada compilación individual, lo que podría dificultar el mantenimiento y el escalamiento de tus esfuerzos.

Integración indirecta en tus canalizaciones de CI/CD

Este patrón es similar al patrón anterior, pero en lugar de ejecutar directamente tus pruebas de Chef InSpec como un paso dentro de tu canalización de implementación, debes ejecutar tus pruebas de Chef InSpec en una canalización separada. Las canalizaciones de implementación activan esta canalización independiente. Puedes mantener la lógica de Chef InSpec separada de las canalizaciones de infraestructura, pero aún ejecutar las pruebas de cumplimiento y de políticas como parte del flujo de trabajo de implementación.

Cloud Build genera notificaciones de compilación de forma automática cuando cambia el estado de tu compilación, por ejemplo, cuando esta se crea, cuando pasa a un estado de trabajo y cuando comienza a cuando finaliza. Los mensajes de notificación se publican en un tema de Pub/Sub y contienen información sobre la compilación, incluidos los pasos individuales y sus argumentos.

En el siguiente diagrama, se muestra cómo crear una Cloud Function que se activa de forma automática cada vez que se publica un mensaje en el tema de Pub/Sub de la notificación de compilación.

Integración indirecta de Chef InSpec con canalizaciones de CI/CD

En el diagrama anterior, la función puede inspeccionar el mensaje de notificación de compilación y, luego, activar la canalización de Chef InSpec cuando sea necesario. Por ejemplo, solo deseas activar la canalización de Chef InSpec en respuesta a compilaciones correctas que contienen pasos de compilación específicos.

Este patrón tiene los siguientes beneficios:

  • Las pruebas de Chef InSpec son independientes de tus canalizaciones de implementación. Los equipos que administran las canalizaciones de implementación no necesitan interactuar con Chef InSpec.
  • Puedes centralizar las pruebas de Chef InSpec, lo que facilita mantener y escalar tus esfuerzos con Chef InSpec.
  • Puedes ejecutar pruebas de Chef InSpec de forma selectiva según los resultados y los resultados de las compilaciones anteriores.

Este patrón tiene las siguientes limitaciones:

  • Debes escribir y mantener código para analizar y analizar los mensajes de notificación de compilación a fin de determinar si ejecutas las pruebas de Chef InSpec y pasar los parámetros a tus pruebas de Chef InSpec.
  • Las notificaciones de Cloud Build se publican en un tema de Pub/Sub en el mismo proyecto. Si tienes compilaciones en varios proyectos, debes implementar la Cloud Functions en cada proyecto.

Activa pruebas de Chef InSpec en respuesta a las notificaciones de Cloud Asset Inventory

Cloud Asset Inventory proporciona un inventario de todos tus recursos de Google Cloud. Puedes usar Cloud Asset Inventory para buscar, analizar y exportar tus recursos y metadatos de recursos en los proyectos de Google Cloud, las carpetas y la organización. También puedes usar Cloud Asset Inventory para enviar notificaciones en tiempo real sobre los cambios a los recursos de la nube y las políticas.

En el siguiente diagrama, se muestra cómo ejecutar las pruebas de Chef InSpec según las notificaciones de Cloud Asset Inventory.

Activa pruebas de Chef InSpec basadas en notificaciones.

En el diagrama anterior, se muestra cómo puedes obtener comentarios casi en tiempo real sobre cualquier recurso nuevo o actualizado de la nube que no cumpla con los requisitos. Puedes filtrar las notificaciones para que solo recibas notificaciones de cambios en ciertos tipos de recursos. Puedes usar estas notificaciones para activar pruebas de Chef InSpec orientadas y específicas de recursos. Por ejemplo, ejecuta un conjunto de pruebas en particular cada vez que se crea un bucket de Cloud Storage y ejecuta un conjunto diferente de pruebas de Chef InSpec cuando se actualiza una política de IAM.

Este patrón tiene los siguientes beneficios:

  • Puedes activar pruebas Chef InSpec orientadas y específicas de recursos según los cambios particulares en tus elementos en la nube.
  • Las notificaciones de Cloud Asset Inventory se entregan casi en tiempo real, por lo que cualquier incumplimiento de política o infracción del cumplimiento se identifica con rapidez.
  • Puedes usar este patrón sin importar cualquier proceso que uses para aprovisionar y administrar tu infraestructura. Las pruebas de Chef InSpec se ejecutan sin importar si un desarrollador individual o una canalización de CI/CD crea o cambia la infraestructura.
  • Cloud Asset Inventory puede generar notificaciones sobre cambios en tus recursos en toda la organización o desde carpetas o proyectos seleccionados. Puedes ejecutar conjuntos específicos de pruebas de Chef InSpec según la carpeta o el proyecto desde el que se originó el cambio.
  • Puedes usar este patrón junto con los otros patrones. Por ejemplo, muchas organizaciones no tienen implementaciones automatizadas para sus entornos de desarrollo o de zona de pruebas. Puedes usar este patrón a fin de realizar comprobaciones de políticas seleccionadas en estos entornos, mientras se integra en las canalizaciones de CI/CD para los entornos de producción y etapa de pruebas.

Este patrón tiene las siguientes limitaciones:

  • Es posible que este patrón no sea práctico si hay un gran volumen de cambios en los elementos de la nube porque las pruebas de Chef InSpec pueden activarse con cada cambio.
  • Debes escribir y mantener código para analizar y analizar los mensajes de notificación de Cloud Asset Inventory a fin de determinar si deseas ejecutar tus pruebas de Chef InSpec.

¿Qué sigue?