Recopila registros de Forseti Open Source

Se admite en los siguientes sistemas operativos:

En este documento, se explica cómo transferir registros de Forseti de código abierto a Google Security Operations con Google Cloud Storage V2.

Forseti Security es una colección de herramientas de código abierto impulsadas por la comunidad para mejorar la seguridad de los entornos de Google Cloud Platform. Forseti toma instantáneas de inventario de los recursos de GCP con una cadencia recurrente, analiza los recursos para garantizar que los controles de acceso se configuren según lo previsto y proporciona visibilidad de las políticas de Cloud IAM.

Antes de comenzar

Asegúrate de cumplir con los siguientes requisitos previos:

  • Es la instancia de Google SecOps.
  • Proyecto de GCP con la API de Cloud Storage habilitada
  • Permisos para crear y administrar buckets de GCS
  • Permisos para administrar políticas de IAM en buckets de GCS
  • Una implementación existente de Forseti Security (por ejemplo, implementada con el módulo de Terraform de Forseti en Google Compute Engine)
  • Acceso al archivo de configuración del servidor de Forseti (forseti_conf_server.yaml)

Crea un bucket de Google Cloud Storage

Usa la consola de Google Cloud

  1. Ve a Google Cloud Console.
  2. Selecciona tu proyecto o crea uno nuevo.
  3. En el menú de navegación, ve a Cloud Storage > Buckets.
  4. Haz clic en Crear bucket.
  5. Proporciona los siguientes detalles de configuración:

    Configuración Valor
    Asigna un nombre a tu bucket Ingresa un nombre global único (por ejemplo, forseti-violations-export).
    Tipo de ubicación Elige según tus necesidades (región, birregional, multirregional)
    Ubicación Selecciona la ubicación (por ejemplo, us-central1).
    Clase de almacenamiento Estándar (recomendado para los registros a los que se accede con frecuencia)
    Control de acceso Uniforme (recomendado)
    Herramientas de protección Opcional: Habilita el control de versiones de objetos o la política de retención
  6. Haz clic en Crear.

Usa la herramienta de línea de comandos de gcloud

Como alternativa, crea un bucket con el comando gcloud:

gcloud storage buckets create gs://forseti-violations-export \
    --location=us-central1 \
    --default-storage-class=STANDARD

Reemplaza lo siguiente:

  • forseti-violations-export: Es el nombre del bucket que deseas (único a nivel global).
  • us-central1: Tu región preferida (por ejemplo, us-central1, europe-west1).

Configura Forseti Security para exportar incumplimientos a GCS

Forseti Security usa una configuración de notificador en el archivo forseti_conf_server.yaml para exportar los incumplimientos del análisis a Google Cloud Storage.

  1. Conéctate a la VM del servidor de Forseti con SSH:

    gcloud compute ssh forseti-server-vm --project=YOUR_PROJECT_ID --zone=YOUR_ZONE
    

    Reemplaza YOUR_PROJECT_ID y YOUR_ZONE por los valores de tu implementación de Forseti.

  2. Abre el archivo de configuración del servidor de Forseti para editarlo:

    sudo nano /home/ubuntu/forseti-security/configs/forseti_conf_server.yaml
    

    Si tu implementación de Forseti usa una configuración basada en GCS, descarga el archivo del bucket del servidor de Forseti:

    gsutil cp gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yaml ~/forseti_conf_server.yaml
    
  3. Navega a la sección notifier y ubica la subsección resources.

  4. Para cada tipo de recurso de incumplimiento que desees exportar, configura el notificador gcs_violations. Agrega o actualiza la configuración de la siguiente manera:

    notifier:
      resources:
        - resource: iam_policy_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: firewall_rule_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: cloudsql_acl_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: bucket_acl_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
        - resource: config_validator_violations
          should_notify: true
          notifiers:
            - name: gcs_violations
              configuration:
                data_format: csv
                gcs_path: gs://forseti-violations-export/violations/
    

    Reemplaza lo siguiente:

    • forseti-violations-export: Es el nombre del bucket de GCS que creaste en el paso anterior.
    • violations/: Es la ruta de acceso del prefijo opcional para organizar los archivos de incumplimientos.

    Parámetros de configuración:

    • resource: Es el tipo de recurso de incumplimiento. Los tipos de recursos disponibles dependen de los verificadores de Forseti que estén habilitados en tu implementación. Entre los tipos comunes, se incluyen iam_policy_violations, firewall_rule_violations, cloudsql_acl_violations, bucket_acl_violations, config_validator_violations, groups_settings_violations y otros.
    • should_notify: Se establece en true para habilitar las notificaciones de este tipo de recurso.
    • data_format: Es el formato de los datos exportados. Los valores válidos son csv o json. El valor predeterminado es csv.
    • gcs_path: Es la ruta de acceso de Cloud Storage en la que se exportarán los incumplimientos. La ruta debe comenzar con gs:// y debe incluir una barra diagonal final.
  5. Guarda el archivo de configuración.

  6. Si descargaste la configuración de GCS, vuelve a subir el archivo actualizado al bucket del servidor de Forseti:

    gsutil cp ~/forseti_conf_server.yaml gs://YOUR_FORSETI_SERVER_BUCKET/configs/forseti_conf_server.yaml
    
  7. Vuelve a cargar la configuración del servidor de Forseti:

    forseti server configuration reload
    
  8. Verifica que la configuración se haya cargado correctamente:

    forseti server configuration get | grep gcs_violations
    

Recupera la cuenta de servicio de Google SecOps

Las Operaciones de seguridad de Google usan una cuenta de servicio única para leer datos de tu bucket de GCS. Debes otorgar acceso a tu bucket a esta cuenta de servicio.

Configura un feed en Google SecOps para transferir registros de Forseti Open Source

  1. Ve a Configuración de SIEM > Feeds.
  2. Haz clic en Agregar feed nuevo.
  3. Haz clic en Configura un feed único.
  4. En el campo Nombre del feed, ingresa un nombre para el feed (por ejemplo, Forseti Violations).
  5. Selecciona Google Cloud Storage V2 como el Tipo de fuente.
  6. Selecciona Código abierto de Forseti como el Tipo de registro.

  7. Haz clic en Obtener cuenta de servicio.

  8. Se mostrará un correo electrónico único de la cuenta de servicio, por ejemplo:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  9. Copia esta dirección de correo electrónico. la usarás en el próximo paso.

  10. Haz clic en Siguiente.

  11. Especifica valores para los siguientes parámetros de entrada:

    • URL del bucket de almacenamiento: Ingresa el URI del bucket de GCS con la ruta de acceso del prefijo:
    gs://forseti-violations-export/violations/
    
    • Reemplaza:
      • forseti-violations-export: Es el nombre de tu bucket de GCS.
      • violations/: Es el prefijo o la ruta de carpeta opcionales en los que se almacenan los registros (déjalo vacío para la raíz).
    • Opción de borrado de la fuente: Selecciona la opción de borrado según tu preferencia:

      • Nunca: Nunca borra ningún archivo después de las transferencias (se recomienda para las pruebas).
      • Borrar archivos transferidos: Borra los archivos después de la transferencia exitosa.
      • Borrar los archivos transferidos y los directorios vacíos: Borra los archivos y los directorios vacíos después de la transferencia exitosa.
    • Antigüedad máxima del archivo: Incluye los archivos modificados en la cantidad de días especificada. El valor predeterminado es de 180 días.
    • Espacio de nombres del recurso: Es el espacio de nombres del recurso.
    • Etiquetas de transmisión: Es la etiqueta que se aplicará a los eventos de este feed.
  12. Haz clic en Siguiente.

  13. Revisa la nueva configuración del feed en la pantalla Finalizar y, luego, haz clic en Enviar.

Otorga permisos de IAM a la cuenta de servicio de Google SecOps

La cuenta de servicio de Google SecOps necesita el rol de visualizador de objetos de almacenamiento en tu bucket de GCS.

Usa la consola de Google Cloud

  1. Ve a Cloud Storage > Buckets.
  2. Haz clic en el nombre de tu bucket.
  3. Ve a la pestaña Permisos.
  4. Haz clic en Otorgar acceso.
  5. Proporciona los siguientes detalles de configuración:
    • Agregar principales: Pega el correo electrónico de la cuenta de servicio de Google SecOps.
    • Asignar roles: Selecciona Visualizador de objetos de Storage.
  6. Haz clic en Guardar.

Usa la herramienta de línea de comandos de gcloud

Como alternativa, otorga permisos con el comando gcloud:

gcloud storage buckets add-iam-policy-binding gs://forseti-violations-export \
    --member="serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com" \
    --role="roles/storage.objectViewer"

Reemplaza lo siguiente:

  • forseti-violations-export: Es el nombre de tu bucket.
  • chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com: Es el correo electrónico de la cuenta de servicio de Google SecOps.

Usa la herramienta de línea de comandos de gsutil (heredada)

gsutil iam ch serviceAccount:chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com:objectViewer \
    gs://forseti-violations-export

Verifica los permisos

Para verificar que los permisos se hayan otorgado correctamente, haz lo siguiente:

gcloud storage buckets get-iam-policy gs://forseti-violations-export \
    --flatten="bindings[].members" \
    --filter="bindings.role:roles/storage.objectViewer"

Deberías ver el correo electrónico de la cuenta de servicio de Google SecOps en el resultado.

Tabla de asignación de UDM

Campo de registro Asignación de UDM Lógica
data.resource_data.instanceGroupUrls acerca de Se fusionó del array de instanceGroupUrls
data.resource_data.nodePools.*.statusMessage metadata.description Valor de nodePool.statusMessage
data.resource_type metadata.event_type Se establece en RESOURCE_PERMISSIONS_CHANGE para kms_cryptokey/serviceaccount_key, RESOURCE_DELETION para firewall, STATUS_HEARTBEAT para kubernetes_cluster y, de lo contrario, en GENERIC_EVENT.
data.scanner_index_id metadata.product_log_id Valor copiado directamente y convertido en cadena
metadata.product_name Se establece en "FORSETI SECURITY".
metadata.vendor_name Se estableció en "FORSETI".
data.resource_data.direction network.direction Se establece en INBOUND si la dirección es INGRESS.
data.resource_data.endpoint principal.ip Valor copiado directamente
data.resource_data.nodeConfig.oauthScopes.0 principal.url Valor copiado directamente
data.full_name, serviceAccount principal.user.userid Se extrae de data.full_name con grok o se establece en serviceAccount si no está vacío.
data.violation_data.protection_level, data.violation_data.purpose, data.violation_data.project_id, data.violation_data.node_pool_name, data.violation_data.violation_reason security_result.detection_fields Se combinan a partir de varios pares clave-valor
data.violation_type security_result.category Se establece en POLICY_VIOLATION si es FIREWALL_BLACKLIST_VIOLATION, en UNKNOWN_CATEGORY si es KE_VERSION_VIOLATION y en ACL_VIOLATION en cualquier otro caso.
data.rule_name security_result.rule_name Valor copiado directamente
data.violation_type security_result.summary Valor copiado directamente
data.resource_data.zone target.asset.attribute.cloud.availability_zone Valor copiado directamente
target.asset.attribute.cloud.environment Se establece en "GOOGLE_CLOUD_PLATFORM".
data.full_name target.asset.attribute.cloud.project.id Se extrae de data.full_name con grok
data.resource_data.subnetwork target.asset.attribute.cloud.vpc.name Valor copiado directamente
data.resource_data.nodeConfig.machineType target.asset.hardware Se fusionó de machineType y la plataforma de CPU constante
data.resource_data.privateClusterConfig.privateEndpoint target.ip Valor copiado directamente
data.resource_data.versionTemplate.algorithm, data.resource_data.key_algorithm target.labels Par clave-valor combinado para el algoritmo, si está presente
data.resource_data.location target.location.name Valor copiado directamente
data.resource_name target.resource.name Valor copiado directamente
data.resource_id target.resource.product_object_id El valor se copia directamente si es diferente de resource_name.
data.resource_type target.resource.resource_subtype Se establece en "gke" si resource_type es kubernetes_cluster
data.resource_type target.resource.resource_type Se asigna a un tipo específico según el valor de resource_type original.

¿Necesitas más ayuda? Obtén respuestas de miembros de la comunidad y profesionales de Google SecOps.