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 수집 인증 파일
인증 파일을 다운로드하려면 다음 단계를 따르세요.
- Google SecOps 콘솔을 엽니다.
- SIEM 설정 > 컬렉션 에이전트로 이동합니다.
- Google SecOps 처리 인증 파일을 다운로드합니다.
Google SecOps 고객 ID
고객 ID를 찾으려면 다음 단계를 따르세요.
- Google SecOps 콘솔을 엽니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 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 관리 콘솔을 배포하는 방법에는 두 가지가 있습니다.
- 다운로드하여 Linux 호스트에 설치: DEB 패키지, RPM 패키지, 또는 Docker 이미지로 이용 가능합니다.
- Google Cloud Marketplace에서 설치하여 프로비저닝.
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 고객 IDendpoint
: Google SecOps 리전 엔드포인트creds
: 인증 토큰또는,
creds_file_path
를 사용하여 사용자 인증 정보 파일을 직접 참조할 수도 있습니다. Windows 구성의 경우 백슬래시로 경로를 이스케이프 처리합니다.log_type
: 로그 유형ingestion_labels
: 수집 라벨(선택사항)namespace
: 네임스페이스(선택사항)각 로그 유형마다 내보내기 도구를 구성해야 합니다.
아키텍처
에이전트 아키텍처에서 사용할 수 있는 옵션은 다음과 같습니다.
옵션 1: 수집 에이전트가 Google SecOps 포워더에 로그 전송
Google SecOps 포워더는 여러 syslog 스트림을 수신합니다. 각 syslog 데이터 소스는 Google SecOps 포워더에 구성된 수신 대기 포트로 구분됩니다. 포워더는 Google SecOps 인스턴스에 암호화된 GRPC 연결을 만들어 수집된 로그를 전송합니다.
포워더 옵션을 사용하면 로그를 Google SecOps에 전송하기 전 로그 집계를 허용합니다.
옵션 2: 수집 에이전트에서 Google SecOps 수집 API로 직접 로그 전송
옵션 3: 수집 에이전트가 Cloud Logging으로 직접 로그 전송
옵션 4: 컬렉션 에이전트가 여러 대상에 로그 전송
확장성
에이전트 수집기는 일반적으로 최소한의 리소스를 사용하지만 시스템에서 대량의 원격 분석(로그 또는 trace)을 처리할 때는 다른 서비스에 영향을 주지 않도록 리소스 소비량에 유의해야 합니다. 자세한 내용은 에이전트 크기 조정 및 확장
지원
수집기 에이전트와 관련된 문제는 Google Cloud 지원팀에 문의하세요.
BindPlane OP Management와 관련된 모든 문제는 ObservIQ 지원팀에 문의하세요.
추가 로그 수집 구성 샘플
다음 섹션에는 추가 로그 수집 구성 샘플이 나와 있습니다.
Windows 이벤트 및 sysmon을 Google SecOps로 직접 전송
샘플에서 다음 매개변수를 구성합니다.
-
namespace
ingestion_labels
log_type
customer_id
creds
샘플 구성:
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로 직접 전송
샘플에서 다음 매개변수를 구성합니다.
windowseventlogreceiver
tcplogreceiver
listen_address
chronicleexporter
namespace
ingestion_labels
log_type
customer_id
creds
샘플 구성:
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 포워더에 전송
샘플에서 다음 매개변수를 구성합니다.
windowseventlogreceiver
tcplogreceiver
listen_address
chronicleforwarder
endpoint
샘플 구성:
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 전송
샘플에서 다음 매개변수를 구성합니다.
tcplogreceiver
listen_address
chronicleexporter
namespace
ingestion_labels
log_type
customer_id
Creds
샘플 구성:
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로 전송
샘플에서 다음 매개변수를 구성합니다.
sqlqueryreceiver
chronicleexporter
namespace
ingestion_labels
log_type
customer_id
creds
샘플 구성:
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에 관한 자세한 내용은 다음을 참조하세요.