Utiliser l'agent BindPlane

L'agent BindPlane (également appelé agent de collecte) est un agent Open Source basé sur OpenTelemetry Collector, qui collecte les journaux provenant de diverses sources, y compris les journaux d'événements Microsoft Windows, et les envoie à Google Security Operations.

La console BindPlane OP Management d'observIQ fournit une plate-forme complète et unifiée pour gérer vos déploiements de collecteurs OpenTelemetry (OTel) dans Google SecOps et Google Cloud. observIQ fournit une édition BindPlane pour Google de la console de gestion. Pour en savoir plus, consultez Solutions d'observIQ. La console de gestion est facultative. Vous pouvez utiliser l'agent avec ou sans la console. Pour en savoir plus sur la console, consultez la page Console de gestion des opérations BindPlane.

Il s'agit de la même solution que celle utilisée par Cloud Logging pour les déploiements sur site.

Avant de commencer

Pour installer l'agent, vous avez besoin des éléments suivants:

  • Fichier d'authentification d'ingestion Google SecOps

    Pour télécharger le fichier d'authentification, procédez comme suit:

    1. Ouvrez la console Google SecOps.
    2. Accédez à SIEM Settings (Paramètres SIEM) > Collection Agent (Agent de collecte).
    3. Téléchargez le fichier d'authentification d'ingestion Google SecOps.
  • Numéro client Google SecOps

    Pour trouver le numéro client, procédez comme suit:

    1. Ouvrez la console Google SecOps.
    2. Accédez à Paramètres SIEM > Profil.
    3. Copiez le numéro client à partir de la section Informations sur l'organisation.
  • Windows 2012 SP2 ou version ultérieure, ou hôte Linux avec systemd

  • Connectivité Internet

  • Accès à GitHub

Vérifier la configuration du pare-feu

Tous les pare-feu ou proxys authentifiés entre l'agent et Internet nécessitent des règles pour ouvrir l'accès aux hôtes suivants:

Type de connexion Destination Port
TCP malachiteingestion-pa.googleapis.com 443
TCP asia-northeast1-malachiteingestion-pa.googleapis.com 443
TCP asia-south1-malachiteingestion-pa.googleapis.com 443
TCP asia-southeast1-malachiteingestion-pa.googleapis.com 443
TCP australia-southeast1-malachiteingestion-pa.googleapis.com 443
TCP europe-malachiteingestion-pa.googleapis.com 443
TCP europe-west2-malachiteingestion-pa.googleapis.com 443
TCP europe-west3-malachiteingestion-pa.googleapis.com 443
TCP europe-west6-malachiteingestion-pa.googleapis.com 443
TCP europe-west12-malachiteingestion-pa.googleapis.com 443
TCP me-central1-malachiteingestion-pa.googleapis.com 443
TCP me-central2-malachiteingestion-pa.googleapis.com 443
TCP me-west1-malachiteingestion-pa.googleapis.com 443
TCP northamerica-northeast2-malachiteingestion-pa.googleapis.com 443
TCP accounts.google.com 443
TCP oauth2.googleapis.com 443

Console de gestion des opérations BindPlane

La console BindPlane OP Management offre les fonctionnalités clés suivantes:

  • Gestion centralisée: la console vous permet de gérer tous vos déploiements de collecteurs OTel dans Google Cloud. Vous pouvez afficher l'état de chaque déploiement et effectuer des tâches de gestion courantes telles que le démarrage, l'arrêt et le redémarrage des collecteurs.
  • Surveillance en temps réel: la console fournit une surveillance en temps réel de vos déploiements de collecteurs OTel. Vous pouvez suivre des métriques telles que l'utilisation du processeur, de la mémoire et le débit, et afficher les journaux et les traces pour résoudre les problèmes.
  • Alertes et notifications: la console vous permet de configurer des alertes et des notifications pour des événements importants, tels que l'arrêt d'un collecteur ou le dépassement d'un seuil de métrique.
  • Gestion de la configuration: la console vous permet de gérer de manière centralisée la configuration de vos collecteurs OTel. Vous pouvez modifier les fichiers de configuration, définir des variables d'environnement et appliquer des règles de sécurité à tous vos déploiements.
  • Intégration à Google Cloud: vous pouvez créer et gérer des déploiements de collecteurs OTel dans Google Cloud, et utiliser la console pour accéder à vos ressources Google Cloud.

Il existe deux façons de déployer la console BindPlane OP Management:

Installer l'agent BindPlane

Cette section explique comment installer l'agent sur différents systèmes d'exploitation hôtes.

Windows

Pour installer l'agent BindPlane sous Windows, exécutez la commande PowerShell suivante.

msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet

Pour effectuer l'installation à l'aide d'un assistant d'installation, vous pouvez également télécharger le dernier programme d'installation pour Windows.

Une fois le programme d'installation téléchargé, ouvrez l'assistant d'installation et suivez les instructions pour configurer et installer l'agent BindPlane. Pour en savoir plus, consultez la section Installation sur Windows.

Linux

Vous pouvez installer l'agent sous Linux à l'aide d'un script qui détermine automatiquement le package à installer. Vous pouvez également utiliser ce script pour mettre à jour une installation existante.

Pour effectuer l'installation à l'aide du script d'installation, exécutez le script suivant:

sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh

Installation à partir d'un package local

Pour installer l'agent à partir d'un package local, utilisez -f avec le chemin d'accès au package.

sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh -f path_to_package

Installation RPM

Téléchargez le package RPM pour votre architecture à partir de la page des versions et installez-le à l'aide de rpm. Reportez-vous à l'exemple suivant pour installer le package amd64:

sudo rpm -U ./observiq-otel-collector_v${VERSION}_linux_amd64.rpm
sudo systemctl enable --now observiq-otel-collector

Remplacez VERSION par la version du package que vous avez téléchargée.

Installation DEB

Téléchargez le package DEB pour votre architecture à partir de la page des versions et installez-le à l'aide de dpkg. Reportez-vous à l'exemple suivant pour installer le package amd64:

sudo dpkg -i --force-overwrite ./observiq-otel-collector_v${VERSION}_linux_amd64.deb
sudo systemctl enable --now observiq-otel-collector

Remplacez VERSION par la version du package que vous avez téléchargée.

Pour en savoir plus, consultez la page Installation de l'agent BindPlane.

Configurer l'agent

Vous pouvez configurer l'agent manuellement ou à l'aide de la console de gestion des opérations BindPlane. Si vous configurez l'agent manuellement, vous devez mettre à jour les paramètres de l'exportateur pour vous assurer que l'agent s'authentifie auprès de Google SecOps.

Une fois l'agent installé, le service observiq-otel-collector s'exécute et est prêt à être configuré. Par défaut, l'agent se connecte à C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log.

Le journal d'erreurs standard du processus de l'agent se trouve à l'adresse C:\Program Files\observIQ OpenTelemetry Collector\log\observiq_collector.err.

Par défaut, le fichier de configuration de l'agent se trouve à l'emplacement C:\Program Files\observIQ OpenTelemetry Collector\config.yaml. Lorsque vous modifiez la configuration, vous devez redémarrer le service de l'agent pour que les modifications de configuration soient prises en compte.

Vous pouvez télécharger un exemple de fichier de configuration et de jeton d'authentification utilisés par l'agent depuis la console Google SecOps > SIEM Settings > Collection Agent (Paramètres SIEM > Agent de collecte).

Personnalisez ces deux sections du fichier de configuration:

  • Destinataire: spécifie les journaux que l'agent doit collecter et envoyer à Google SecOps.
  • Exportateur: spécifie la destination à laquelle l'agent envoie les journaux. Les exportateurs suivants sont acceptés :
    • Exportateur Google SecOps: envoie les journaux directement à l'API d'ingestion Google SecOps
    • Exportateur de redirecteurs Google SecOps: envoie les journaux au redirecteur Google SecOps
    • Exportateur Cloud Logging: envoie des journaux à (Cloud Logging)

Dans l'exportateur, personnalisez les éléments suivants:

  • customer_id: numéro client Google SecOps
  • endpoint: point de terminaison régional Google SecOps
  • creds : jeton d'authentification

    Vous pouvez également utiliser creds_file_path pour référencer directement le fichier d'identifiants. Pour la configuration Windows, échappez le chemin à l'aide de barres obliques inverses.

  • log_type: type de journal

  • ingestion_labels: étiquettes d'ingestion facultatives

  • namespace: espace de noms facultatif

    Chaque type de journal nécessite la configuration d'un exportateur.

Architecture

Les options suivantes sont disponibles pour l'architecture de l'agent.

Option 1: L'agent de collecte envoie les journaux au redirecteur Google SecOps

L'agent de collecte envoie les journaux au redirecteur Google SecOps

Le programme de transfert Google SecOps reçoit plusieurs flux syslog. Chaque source de données syslog se distingue par le port d'écoute configuré sur le redirecteur Google SecOps. Le redirecteur établit une connexion gRPC chiffrée vers votre instance Google SecOps pour transmettre les journaux collectés.

Notez que l'option du redirecteur permet d'agréger les journaux avant de les envoyer à Google SecOps.

Option 2: L'agent de collecte envoie les journaux directement à l'API d'ingestion Google SecOps

L'agent de collecte envoie les journaux directement à l'API d'ingestion Google SecOps

Option 3: L'agent de collecte envoie les journaux directement à Cloud Logging

L'agent de collecte envoie les journaux directement à Cloud Logging

Option 4: L'agent de collecte envoie des journaux à plusieurs destinations

L'agent de collecte envoie des journaux à plusieurs destinations

Évolutivité

Les collecteurs d'agents utilisent généralement un minimum de ressources. Toutefois, lorsque vous gérez de grands volumes de télémétrie (journaux ou traces) sur un système, tenez compte de la consommation des ressources pour éviter d'affecter les autres services. Pour en savoir plus, consultez la page Dimensionnement et scaling de l'agent.

Assistance

Pour tout problème lié à l'agent de collecteur, contactez l'assistance Google Cloud.

Pour tout problème lié à BindPlane OP Management, contactez l'assistance ObservIQ.

Autres exemples de configuration de la collecte de journaux

Les sections suivantes présentent des exemples de configuration de collecte de journaux supplémentaires.

Envoyer les événements Windows et le système système directement à Google SecOps

Configurez les paramètres suivants dans l'exemple:

Exemple de configuration :

receivers:
  windowseventlog/sysmon:
    channel: Microsoft-Windows-Sysmon/Operational
    raw: true
  windowseventlog/security:
    channel: security
    raw: true
  windowseventlog/application:
    channel: application
    raw: true
  windowseventlog/system:
    channel: system
    raw: true

processors:
  batch:

exporters:
  chronicle/sysmon:
    endpoint: malachiteingestion-pa.googleapis.com
    creds: '{
  "type": "service_account",
  "project_id": "malachite-projectname",
  "private_key_id": "abcdefghijklmnopqrstuvwxyz123456789",
  "private_key": "-----BEGIN PRIVATE KEY-----abcdefg-----END PRIVATE KEY-----\n",
  "client_email": "account@malachite-projectname.iam.gserviceaccount.com",
  "client_id": "123456789123456789",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40malachite-projectname.iam.gserviceaccount.com",
  "universe_domain": "googleapis.com"
}' 
    log_type: 'WINDOWS_SYSMON'
    override_log_type: false
    raw_log_field: body
    customer_id: 'dddddddd-dddd-dddd-dddd-dddddddddddd'
  chronicle/winevtlog:
    endpoint: malachiteingestion-pa.googleapis.com
    creds: '{
  "type": "service_account",
  "project_id": "malachite-projectname",
  "private_key_id": "abcdefghijklmnopqrstuvwxyz123456789",
  "private_key": "-----BEGIN PRIVATE KEY-----abcdefg-----END PRIVATE KEY-----\n",
  "client_email": "account@malachite-projectname.iam.gserviceaccount.com",
  "client_id": "123456789123456789",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40malachite-projectname.iam.gserviceaccount.com",
  "universe_domain": "googleapis.com"
}'
    log_type: 'WINEVTLOG'
    override_log_type: false
    raw_log_field: body
    customer_id: 'dddddddd-dddd-dddd-dddd-dddddddddddd'

service:
  pipelines:
    logs/sysmon:
      receivers: [windowseventlog/sysmon]
      processors: [batch]
      exporters: [chronicle/sysmon]
    logs/winevtlog:
      receivers: 
        - windowseventlog/security
        - windowseventlog/application
        - windowseventlog/system
      processors: [batch]
      exporters: [chronicle/winevtlog]

Envoyer les événements Windows et le journal syslog directement à Google SecOps

Configurez les paramètres suivants dans l'exemple:

Exemple de configuration :

receivers:
    tcplog:
      listen_address: "0.0.0.0:54525"
    windowseventlog/source0__application:
        attributes:
            log_type: windows_event.application
        channel: application
        max_reads: 100
        poll_interval: 1s
        raw: true
        start_at: end
    windowseventlog/source0__security:
        attributes:
            log_type: windows_event.security
        channel: security
        max_reads: 100
        poll_interval: 1s
        raw: true
        start_at: end
    windowseventlog/source0__system:
        attributes:
            log_type: windows_event.system
        channel: system
        max_reads: 100
        poll_interval: 1s
        raw: true
        start_at: end
exporters:
    chronicle/chronicle_w_labels:
        compression: gzip
        creds: '{ json blob for creds }'
        customer_id: <customer_id>
        endpoint: malachiteingestion-pa.googleapis.com
        ingestion_labels:
            env: dev
        log_type: <applicable_log_type>
        namespace: testNamespace
        raw_log_field: body
service:
    pipelines:
        logs/source0__chronicle_w_labels-0:
            receivers:
                - windowseventlog/source0__system
                - windowseventlog/source0__application
                - windowseventlog/source0__security
            exporters:
                - chronicle/chronicle_w_labels
        logs/source1__chronicle_w_labels-0:
            receivers:
                - tcplog
            exporters:
                - chronicle/chronicle_w_labels

Envoyer les événements Windows et le journal syslog au redirecteur Google SecOps

Configurez les paramètres suivants dans l'exemple:

Exemple de configuration :

receivers:
tcplog:
    listen_address: "0.0.0.0:54525"
    windowseventlog/source0__application:
        attributes:
            log_type: windows_event.application
        channel: application
        max_reads: 100
        poll_interval: 1s
        raw: true
        start_at: end
    windowseventlog/source0__security:
        attributes:
            log_type: windows_event.security
        channel: security
        max_reads: 100
        poll_interval: 1s
        raw: true
        start_at: end
    windowseventlog/source0__system:
        attributes:
            log_type: windows_event.system
        channel: system
        max_reads: 100
        poll_interval: 1s
        raw: true
        start_at: end
exporters:
    chronicleforwarder/forwarder:
        export_type: syslog
        raw_log_field: body
        syslog:
            endpoint: 127.0.0.1:10514
            transport: udp
service:
    pipelines:
        logs/source0__forwarder-0:
            receivers:
                - windowseventlog/source0__system
                - windowseventlog/source0__application
                - windowseventlog/source0__security
            exporters:
                - chronicleforwarder/forwarder
        logs/source1__forwarder-0:
            receivers:
                - tcplog
            exporters:
                - chronicleforwarder/forwarder

Envoyer le journal syslog directement à Google SecOps

Configurez les paramètres suivants dans l'exemple:

Exemple de configuration :

receivers:
  tcplog:
    listen_address: "0.0.0.0:54525"

exporters:
    chronicle/chronicle_w_labels:
        compression: gzip
        creds: '{ json blob for creds }'
        customer_id: <customer_id>
        endpoint: malachiteingestion-pa.googleapis.com
        ingestion_labels:
            env: dev
        log_type: <applicable_log_type>
        namespace: testNamespace
        raw_log_field: body
service:
    pipelines:
        logs/source0__chronicle_w_labels-0:
            receivers:
                - tcplog
            exporters:
                - chronicle/chronicle_w_labels

Collecter les événements Windows à distance et les envoyer directement à Google SecOps

Configurez les paramètres suivants dans l'exemple:

  • windowseventlogreceiver
    • username
    • password
    • server
  • chronicleexporter
    • namespace
    • ingestion_labels
    • log_type
    • customer_id
    • creds

Exemple de configuration :

receivers:
    windowseventlog/system:
        channel: system
        max_reads: 100
        start_at: end
        poll_interval: 10s
        raw: true
        remote:
            username: "username"
            password: "password"
            server: "remote-server"
    windowseventlog/application:
        channel: application
        max_reads: 100
        start_at: end
        poll_interval: 10s
        raw: true
        remote:
            username: "username"
            password: "password"
            server: "server-ip"
    windowseventlog/security:
        channel: security
        max_reads: 100
        start_at: end
        poll_interval: 10s
        raw: true
        remote:
            username: "username"
            password: "password"
            server: "server-ip"
exporters:
    chronicle/chronicle_w_labels:
        compression: gzip
        creds: '{ json blob for creds }'
        customer_id: <customer_id>
        endpoint: malachiteingestion-pa.googleapis.com
        ingestion_labels:
            env: dev
        log_type: WINEVTLOG
        namespace: testNamespace
        raw_log_field: body
service:
    pipelines:
        logs/source0__chronicle_w_labels-0:
            receivers:
                - windowseventlog/system
                - windowseventlog/application
                - windowseventlog/security
            exporters:
                - chronicle/chronicle_w_labels

Envoyer des données à Cloud Logging

Configurez le paramètre credentials_file dans l'exemple.

Exemple de configuration :

exporters:
  googlecloud:
    credentials_file: /opt/observiq-otel-collector/credentials.json

Interroger une base de données SQL et envoyer les résultats à Google SecOps

Configurez les paramètres suivants dans l'exemple:

Exemple de configuration :

receivers:
  sqlquery/source0:
    datasource: host=localhost port=5432 user=postgres password=s3cr3t sslmode=disable
    driver: postgres
    queries:
      - logs:
          - body_column: log_body
        sql: select * from my_logs where log_id > $$1
        tracking_column: log_id
        tracking_start_value: "10000"
processors:
  transform/source0_processor0__logs:
    error_mode: ignore
    log_statements:
      - context: log
        statements:
          - set(attributes["chronicle_log_type"], "POSTGRESQL") where true
exporters:
  chronicle/chronicle_sql:
    compression: gzip
    creds: '{
  "type": "service_account",
  "project_id": "malachite-projectname",
  "private_key_id": "abcdefghijklmnopqrstuvwxyz123456789",
  "private_key": "-----BEGIN PRIVATE KEY-----abcdefg-----END PRIVATE KEY-----\n",
  "client_email": "account@malachite-projectname.iam.gserviceaccount.com",
  "client_id": "123456789123456789",
  "auth_uri": "https://accounts.google.com/o/oauth2/auth",
  "token_uri": "https://oauth2.googleapis.com/token",
  "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
  "client_x509_cert_url": "https://www.googleapis.com/robot/v1/metadata/x509/account%40malachite-projectname.iam.gserviceaccount.com",
  "universe_domain": "googleapis.com"
}' 
    customer_id: customer_id
    endpoint: malachiteingestion-pa.googleapis.com
    log_type: POSTGRESQL
    namespace: null
    raw_log_field: body
    retry_on_failure:
      enabled: false
    sending_queue:
      enabled: false
service:
  pipelines:
    logs/source0_chronicle_sql-0:
      receivers:
        - sqlquery/source0
      processors:
        - transform/source0_processor0__logs
      exporters:
        - chronicle/chronicle_sql

Supprimer les journaux qui correspondent à une expression régulière

Vous pouvez configurer le collecteur pour qu'il supprime les journaux correspondant à une expression régulière. Cette fonctionnalité est utile pour filtrer les journaux indésirables, tels que les erreurs connues ou les messages de débogage.

Pour supprimer les journaux qui correspondent à une expression régulière, ajoutez un processeur de type filter/drop-matching-logs-to-Chronicle à votre configuration. Cet outil de traitement utilise la fonction IsMatch pour évaluer le corps du journal par rapport à l'expression régulière. Si la fonction renvoie true, le journal est supprimé.

L'exemple de configuration suivant supprime les journaux contenant les chaînes <EventID>10</EventID> ou <EventID>4799</EventID> dans le corps du journal.

Vous pouvez personnaliser l'expression régulière pour qu'elle corresponde au modèle dont vous avez besoin. La fonction IsMatch utilise la syntaxe d'expression régulière RE2.

Exemple de configuration :

processors:
    filter/drop-matching-logs-to-Chronicle:
        error_mode: ignore
        logs:
            log_record:
                - (IsMatch(body, "<EventID>10</EventID>")) or (IsMatch(body, "<EventID>4799</EventID>"))

L'exemple suivant ajoute le processeur au pipeline dans la même configuration:

service:
  pipelines:
    logs/winevtlog:
      receivers: 
        - windowseventlog/security
        - windowseventlog/application
        - windowseventlog/system
      processors: 
      - filter/drop-matching-logs-to-Chronicle # Add this line
      - batch
      exporters: [chronicle/winevtlog]

Documentation de référence

Pour en savoir plus sur observIQ, consultez: