BindPlane 에이전트 사용

BindPlane 에이전트(수집 에이전트라고도 함)는 오픈소스 에이전트로, OpenTelemetry 수지수집기를 기반으로 하며 Microsoft Windows 이벤트 로그를 비롯한 다양한 소스에서 로그를 수집하여 Google Security Operations에 전송합니다.

observIQ BindPlane OP 관리 콘솔은 Google SecOps 및 Google Cloud에서 OpenTelemetry(OTel) 수집기 배포를 관리하기 위한 포괄적이고 통합된 플랫폼을 제공하며, observIQ는 관리 콘솔의 BindPlane for Google 에디션을 제공합니다. 자세한 설명은 observIQ 솔루션을 확인하세요. 관리 콘솔은 선택사항입니다. 콘솔에서 또는 콘솔 없이 에이전트를 사용할 수 있습니다. 콘솔에 대한 자세한 내용은 BindPlane OP 관리 콘솔을 참고하세요.

이는 온프레미스 배포를 위해 Cloud Logging에서 사용하는 솔루션과 동일합니다.

시작하기 전에

에이전트를 설치하려면 다음이 필요합니다.

  • Google SecOps 수집 인증 파일

    인증 파일을 다운로드하려면 다음 단계를 따르세요.

    1. Google SecOps 콘솔을 엽니다.
    2. SIEM 설정 > 컬렉션 에이전트로 이동합니다.
    3. Google SecOps 처리 인증 파일을 다운로드합니다.
  • Google SecOps 고객 ID

    고객 ID를 찾으려면 다음 단계를 따르세요.

    1. Google SecOps 콘솔을 엽니다.
    2. SIEM 설정 > 프로필로 이동합니다.
    3. 조직 세부정보 섹션에서 고객 ID를 복사합니다.
  • Windows 2012 SP2 이상 또는 systemd를 포함한 Linux 호스트

  • 인터넷 연결

  • GitHub 액세스

방화벽 구성 확인

에이전트와 인터넷 사이의 모든 방화벽 또는 인증된 프록시에는 다음 호스트에 대한 액세스 열기 규칙이 필요합니다.

연결 유형 대상 포트
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

BindPlane OP 관리 콘솔

BindPlane OP Management 콘솔에서는 다음과 같은 주요 기능을 제공합니다.

  • 중앙 집중식 관리: 콘솔을 사용하면 Google Cloud에서 모든 OTel 수집기 배포를 관리할 수 있습니다. 각 배포 상태를 볼 수 있을 뿐만 아니라 수집기 시작, 중지, 다시 시작과 같은 일반적인 관리 태스크를 수행할 수 있습니다.
  • 실시간 모니터링: 콘솔이 OTel 수집기 배치의 실시간 모니터링을 제공합니다. CPU 사용량, 메모리 사용량, 처리량과 같은 측정항목을 추적하고 로그 및 trace를 확인하여 문제를 해결할 수 있습니다.
  • 경고 및 알림: 수집기가 다운되거나 측정항목 기준점이 초과되는 등의 중요한 이벤트가 발생할 때를 대비하여 콘솔에 경고 및 알림을 설정할 수 있습니다.
  • 구성 관리: 콘솔을 사용하면 OTel 수집기의 구성을 중앙에서 관리할 수 있습니다. 구성 파일을 수정하고, 환경 변수를 설정하고, 모든 배포에 보안 정책을 적용할 수 있습니다.
  • Google Cloud와 통합: Google Cloud에서 OTel 수집기 배포를 생성 및 관리하고 콘솔을 사용하여 Google Cloud 리소스에 액세스할 수 있습니다.

BindPlane OP 관리 콘솔을 배포하는 방법에는 두 가지가 있습니다.

BindPlane 에이전트 설치

이 섹션에서는 여러 호스트 운영체제에 에이전트를 설치하는 방법을 설명합니다.

Windows

Windows에 BindPlane 에이전트를 설치하려면 다음 PowerShell 명령어를 실행합니다.

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

또는 설치 마법사를 사용하여 설치하려면 Windows용 최신 설치 프로그램을 다운로드하세요.

설치 프로그램을 다운로드한 후 설치 마법사를 열고 안내에 따라 BindPlane 에이전트를 구성 및 설치합니다. 자세한 설치 정보는 Windows에 설치하기를 참고하세요.

Linux

설치할 패키지를 자동으로 결정하는 스크립트를 사용하여 Linux에 에이전트를 설치할 수 있습니다. 이 스크립트를 사용하여 기존 설치를 업데이트할 수도 있습니다.

설치 스크립트를 사용하여 설치하려면 다음 스크립트를 실행합니다.

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

로컬 패키지에서 설치

로컬 패키지에서 에이전트를 설치하려면 패키지 경로와 함께 -f를 사용합니다.

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

RPM 설치

출시 페이지에서 아키텍처용 RPM 패키지를 다운로드하고 rpm을 사용하여 패키지를 설치합니다. amd64 패키지 설치에 대해서는 다음 예시를 참조하세요.

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

VERSION을 다운로드한 패키지의 버전으로 바꿉니다.

DEB 설치

출시 페이지에서 아키텍처에 맞는 DEB 패키지를 다운로드하고 dpkg를 사용하여 패키지를 설치합니다. amd64 패키지를 설치하려면 다음 예시를 참조하세요.

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

VERSION을 다운로드한 패키지의 버전으로 바꿉니다.

자세한 내용은 BindPlane 에이전트 설치를 참조하세요.

에이전트 구성

수동으로 또는 BindPlane OP 관리 콘솔을 사용하여 에이전트를 구성할 수 있습니다. 에이전트를 수동으로 구성하는 경우 에이전트가 Google SecOps에 인증하도록 내보내기 도구 매개변수를 업데이트해야 합니다.

에이전트를 설치하고 나면 observiq-otel-collector 서비스가 실행되고 구성할 준비가 됩니다. 에이전트는 기본적으로 C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log에 로깅합니다.

에이전트 프로세스의 표준 오류 로그는 C:\Program Files\observIQ OpenTelemetry Collector\log\observiq_collector.err에서 확인할 수 있습니다.

기본적으로 에이전트 구성 파일은 C:\Program Files\observIQ OpenTelemetry Collector\config.yaml에 위치합니다. 구성을 변경할 때 구성 변경사항을 적용하려면 에이전트 서비스를 다시 시작해야 합니다.

에이전트가 사용하는 샘플 구성 파일과 인증 토큰은 Google SecOps 콘솔 > SIEM 설정 > 수집 에이전트에서 다운로드할 수 있습니다.

구성 파일에서 다음 두 섹션을 맞춤설정합니다.

  • 수신 도구: 에이전트가 수집하여 Google SecOps로 전송해야 하는 로그를 지정합니다.
  • 내보내기 도구: 에이전트가 로그를 전송하는 대상을 지정합니다. 다음 내보내기 도구가 지원됩니다.
    • Google SecOps 내보내기 도구: Google SecOps 수집 API로 직접 로그 전송
    • Google SecOps 포워더 내보내기 도구: Google SecOps 포워더에 로그 전송
    • Cloud Logging 내보내기 도구: 로그를 Cloud Logging으로 전송합니다.

내보내기 도구에서 다음을 맞춤설정합니다.

  • customer_id: Google SecOps 고객 ID
  • endpoint: Google SecOps 리전 엔드포인트
  • creds: 인증 토큰

    또는, creds_file_path를 사용하여 사용자 인증 정보 파일을 직접 참조할 수도 있습니다. Windows 구성의 경우 백슬래시로 경로를 이스케이프 처리합니다.

  • log_type: 로그 유형

  • ingestion_labels: 수집 라벨(선택사항)

  • namespace: 네임스페이스(선택사항)

    각 로그 유형마다 내보내기 도구를 구성해야 합니다.

아키텍처

에이전트 아키텍처에서 사용할 수 있는 옵션은 다음과 같습니다.

옵션 1: 수집 에이전트가 Google SecOps 포워더에 로그 전송

수집 에이전트가 Google SecOps 포워더에 로그 전송

Google SecOps 포워더는 여러 syslog 스트림을 수신합니다. 각 syslog 데이터 소스는 Google SecOps 포워더에 구성된 수신 대기 포트로 구분됩니다. 포워더는 Google SecOps 인스턴스에 암호화된 GRPC 연결을 만들어 수집된 로그를 전송합니다.

포워더 옵션을 사용하면 로그를 Google SecOps에 전송하기 전 로그 집계를 허용합니다.

옵션 2: 수집 에이전트에서 Google SecOps 수집 API로 직접 로그 전송

수집 에이전트가 Google SecOps 수집 API로 로그 직접 전송

옵션 3: 수집 에이전트가 Cloud Logging으로 직접 로그 전송

수집 에이전트가 Cloud Logging으로 직접 로그 전송

옵션 4: 컬렉션 에이전트가 여러 대상에 로그 전송

수집 에이전트가 여러 대상에 로그를 전송함

확장성

에이전트 수집기는 일반적으로 최소한의 리소스를 사용하지만 시스템에서 대량의 원격 분석(로그 또는 trace)을 처리할 때는 다른 서비스에 영향을 주지 않도록 리소스 소비량에 유의해야 합니다. 자세한 내용은 에이전트 크기 조정 및 확장

지원

수집기 에이전트와 관련된 문제는 Google Cloud 지원팀에 문의하세요.

BindPlane OP Management와 관련된 모든 문제는 ObservIQ 지원팀에 문의하세요.

추가 로그 수집 구성 샘플

다음 섹션에는 추가 로그 수집 구성 샘플이 나와 있습니다.

Windows 이벤트 및 sysmon을 Google SecOps로 직접 전송

샘플에서 다음 매개변수를 구성합니다.

샘플 구성:

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]

Windows 이벤트 및 syslog를 Google SecOps로 직접 전송

샘플에서 다음 매개변수를 구성합니다.

샘플 구성:

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

Windows 이벤트 및 syslog를 Google SecOps 포워더에 전송

샘플에서 다음 매개변수를 구성합니다.

샘플 구성:

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

Google SecOps에 직접 syslog 전송

샘플에서 다음 매개변수를 구성합니다.

샘플 구성:

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

Windows 이벤트를 원격으로 수집하여 Google SecOps로 직접 전송

샘플에서 다음 매개변수를 구성합니다.

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

샘플 구성:

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

Cloud Logging으로 데이터 전송

샘플에서 credentials_file 매개변수를 구성합니다.

샘플 구성:

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

SQL 데이터베이스 쿼리 및 결과를 Google SecOps로 전송

샘플에서 다음 매개변수를 구성합니다.

샘플 구성:

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

정규 표현식과 일치하는 로그 삭제

정규 표현식과 일치하는 로그를 삭제하도록 수집기를 구성할 수 있습니다. 이는 알려진 오류 또는 디버깅 메시지와 같은 원치 않는 로그를 필터링하는 데 유용합니다.

정규 표현식과 일치하는 로그를 삭제하려면 filter/drop-matching-logs-to-Chronicle 유형의 프로세서를 구성에 추가합니다. 이 프로세서는 IsMatch 함수를 사용하여 정규 표현식과 비교하여 로그 본문을 평가합니다. 함수가 true를 반환하면 로그가 삭제됩니다.

다음 구성 예시는 로그 본문에 <EventID>10</EventID> 또는 <EventID>4799</EventID> 문자열이 포함된 로그를 삭제합니다.

필요한 패턴과 일치하도록 정규 표현식을 맞춤설정할 수 있습니다. IsMatch 함수는 RE2 정규 표현식 문법을 사용합니다.

샘플 구성:

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

다음 예시는 동일한 구성에서 파이프라인에 프로세서를 추가합니다.

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]

참조 문서

observIQ에 관한 자세한 내용은 다음을 참조하세요.