VMware 네트워킹 및 보안 가상화(NSX) 관리자 로그 수집
이 문서에서는 VMware 네트워킹 및 보안 가상화 (NSX) 관리자 로그를 수집하는 방법을 설명합니다. 파서는 메시지 형식을 기반으로 다양한 grok 패턴을 사용하여 필드를 추출합니다. 그런 다음 키-값 파싱, JSON 파싱, 조건부 로직을 실행하여 추출된 필드를 UDM에 매핑하고, 다양한 로그 형식을 처리하고, 추가 컨텍스트로 데이터를 보강합니다.
시작하기 전에
- Google Security Operations 인스턴스가 있어야 합니다.
- Windows 2016 이상 또는
systemd
가 설치된 Linux 호스트를 사용하고 있는지 확인합니다. - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
- VMWare NSX에 대한 관리 액세스 권한이 있는지 확인합니다.
Google SecOps 수집 인증 파일 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 수집 에이전트로 이동합니다.
- 수집 인증 파일을 다운로드합니다. Bindplane 에이전트가 설치될 시스템에 파일을 안전하게 저장합니다.
Google SecOps 고객 ID 가져오기
- Google SecOps 콘솔에 로그인합니다.
- SIEM 설정 > 프로필로 이동합니다.
- 조직 세부정보 섹션에서 고객 ID를 복사하여 저장합니다.
Bindplane 에이전트 설치
Windows 설치
- 명령 프롬프트 또는 PowerShell을 관리자로 엽니다.
다음 명령어를 실행합니다.
msiexec /i "https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi" /quiet
Linux 설치
- 루트 또는 sudo 권한으로 터미널을 엽니다.
다음 명령어를 실행합니다.
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)" install_unix.sh
추가 설치 리소스
- 추가 설치 옵션은 이 설치 가이드를 참고하세요.
Syslog를 수집하여 Google SecOps로 전송하도록 Bindplane 에이전트 구성
구성 파일에 액세스합니다.
config.yaml
파일을 찾습니다. 일반적으로 Linux에서는/etc/bindplane-agent/
디렉터리에 있고 Windows에서는 설치 디렉터리에 있습니다.- 텍스트 편집기 (예:
nano
,vi
, 메모장)를 사용하여 파일을 엽니다.
다음과 같이
config.yaml
파일을 수정합니다.receivers: udplog: # Replace the below port <54525> and IP <0.0.0.0> with your specific values listen_address: "0.0.0.0:54525" exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the creds location below according the placement of the credentials file you downloaded creds: '{ json file for creds }' # Replace <customer_id> below with your actual ID that you copied customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # You can apply ingestion labels below as preferred ingestion_labels: log_type: SYSLOG namespace: vmware_nsx raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels
인프라에 필요한 대로 포트와 IP 주소를 바꿉니다.
<customer_id>
를 실제 고객 ID로 바꿉니다.Google SecOps 수집 인증 파일 가져오기 섹션에서 인증 파일이 저장된 경로로
/path/to/ingestion-authentication-file.json
를 업데이트합니다.
변경사항을 적용하려면 Bindplane 에이전트를 다시 시작하세요.
Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.
sudo systemctl restart bindplane-agent
Windows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.
net stop BindPlaneAgent && net start BindPlaneAgent
NSX Edge의 Syslog 구성
- vSphere Web Client에 로그인합니다.
- 네트워킹 및 보안 > NSX Edge로 이동합니다.
- 구성할 특정 NSX Edge 인스턴스를 선택합니다.
- Syslog 설정으로 이동합니다.
- NSX 6.4.4 이상:
- 관리 > 설정 > 어플라이언스 설정으로 이동합니다.
- 설정 > Syslog 구성 변경을 클릭합니다.
- NSX 6.4.3 이하의 경우:
- 관리 > 설정 > 구성으로 이동합니다.
- 세부정보 대화상자에서 변경을 클릭합니다.
- NSX 6.4.4 이상:
- 시스템 로그 서버 세부정보를 구성합니다.
- 서버: Syslog 서버 (Bindplane)의 IP 주소 또는 호스트 이름을 입력합니다.
- 프로토콜: Bindplane 구성에 따라 UDP 또는 TCP를 선택합니다.
- 포트: 포트 번호를 입력합니다 (Bindplane 구성에 따라 다름).
- 확인을 클릭하여 설정을 저장합니다.
NSX Manager의 Syslog 구성
- 다음과 같이 관리자 사용자 인증 정보로 NSX Manager 웹 인터페이스에 로그인합니다.
https://<NSX-Manager-IP>
또는https://<NSX-Manager-Hostname>
.
- 어플라이언스 설정 관리 > 일반으로 이동합니다.
- 수정을 클릭하여 시스템로그 서버 설정을 구성합니다.
- 시스템 로그 서버 세부정보를 입력합니다.
- 서버: Syslog 서버 (Bindplane)의 IP 주소 또는 호스트 이름을 입력합니다.
- 프로토콜: Bindplane 구성에 따라 UDP 또는 TCP를 선택합니다.
- 포트: 포트 번호를 입력합니다 (Bindplane 구성에 따라 다름).
- 확인을 클릭하여 설정을 저장합니다.
NSX 컨트롤러의 Syslog 구성
- vSphere Web Client에 로그인합니다.
- 네트워킹 및 보안 > 설치 및 업그레이드 > 관리 > NSX 컨트롤러 노드로 이동합니다.
- 컨트롤러 노드를 관리하는 NSX Manager를 선택합니다.
- Common Controller Attributes Edit(일반 컨트롤러 속성 수정)을 클릭합니다.
- Syslog Servers 대화상자에서 Add를 클릭합니다.
- Syslog 서버 이름 또는 IP 주소를 입력합니다.
- UDP 프로토콜을 선택합니다 (Bindplane 구성에 따라 다름).
- 로그 수준을 설정합니다 (예:
INFO
).
- 확인을 클릭하여 설정을 저장합니다.
UDM 매핑 테이블
로그 필드 | UDM 매핑 | 논리 |
---|---|---|
DST |
event.idm.read_only_udm.target.ip |
대상 IP 주소는 원시 로그의 DST 필드에서 추출됩니다. |
ID |
event.idm.read_only_udm.metadata.product_log_id |
제품 로그 ID는 원시 로그의 ID 필드에서 추출됩니다. |
MAC |
event.idm.read_only_udm.principal.mac |
MAC 주소는 원시 로그의 MAC 필드에서 추출됩니다. |
ModuleName |
event.idm.read_only_udm.metadata.product_event_type |
제품 이벤트 유형은 원시 로그의 ModuleName 필드에서 추출됩니다. |
Operation |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
작업은 원시 로그의 Operation 필드에서 추출되어 키가 'Operation'인 라벨로 추가됩니다. |
PROTO |
event.idm.read_only_udm.network.ip_protocol |
IP 프로토콜은 원시 로그의 PROTO 필드에서 추출됩니다. |
RES |
event.idm.read_only_udm.target.resource.name |
타겟 리소스 이름은 원시 로그의 RES 필드에서 추출됩니다. |
SRC |
event.idm.read_only_udm.principal.ip |
소스 IP 주소는 원시 로그의 SRC 필드에서 추출됩니다. |
SPT |
event.idm.read_only_udm.principal.port |
소스 포트는 원시 로그의 SPT 필드에서 추출됩니다. |
UserName |
event.idm.read_only_udm.principal.user.userid |
사용자 ID는 원시 로그의 UserName 필드에서 추출됩니다. |
app_type |
event.idm.read_only_udm.principal.application |
주 애플리케이션은 원시 로그의 app_type 필드에서 추출됩니다. |
application |
event.idm.read_only_udm.target.application |
타겟 애플리케이션은 원시 로그의 application 필드에서 추출됩니다. |
audit |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
감사 값은 원시 로그의 audit 필드에서 추출되어 키가 'audit'인 라벨로 추가됩니다. |
cancelTimeUTC |
event.idm.read_only_udm.principal.resource.attribute.last_update_time |
마지막 업데이트 시간은 원시 로그의 cancelTimeUTC 필드에서 파생됩니다. |
client |
event.idm.read_only_udm.principal.ip 또는 event.idm.read_only_udm.principal.administrative_domain |
client 필드가 IP 주소인 경우 주 구성원 IP에 매핑됩니다. 그렇지 않으면 기본 관리 도메인에 매핑됩니다. |
comp |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
구성요소 값이 원시 로그의 comp 필드에서 추출되어 키가 'Comp'인 라벨로 추가됩니다. |
datetime |
event.idm.read_only_udm.metadata.event_timestamp |
이벤트 타임스탬프는 원시 로그의 datetime 필드에서 추출됩니다. |
description |
event.idm.read_only_udm.metadata.description |
설명은 원시 로그의 description 필드에서 추출됩니다. |
details |
event.idm.read_only_udm.principal.resource.attribute.labels |
세부정보는 원시 로그의 details 필드에서 추출되어 라벨로 추가됩니다. |
direction |
event.idm.read_only_udm.network.direction |
direction 필드가 'OUT'인 경우 'OUTBOUND'에 매핑됩니다. |
dst_ip |
event.idm.read_only_udm.target.ip |
대상 IP 주소는 원시 로그의 dst_ip 필드에서 추출됩니다. |
DPT |
event.idm.read_only_udm.target.port |
대상 포트는 원시 로그의 DPT 필드에서 추출됩니다. |
errorCode |
event.idm.read_only_udm.security_result.detection_fields |
오류 코드는 원시 로그의 errorCode 필드에서 추출되어 감지 필드로 추가됩니다. |
eventType |
event.idm.read_only_udm.metadata.product_event_type |
제품 이벤트 유형은 원시 로그의 eventType 필드에서 추출됩니다. |
filepath |
event.idm.read_only_udm.principal.process.file.full_path |
파일 경로는 원시 로그의 filepath 필드에서 추출됩니다. |
hostname |
event.idm.read_only_udm.principal.ip |
호스트 이름은 원시 로그의 hostname 필드에서 추출되며 IP 주소인 경우 주 구성원 IP에 매핑됩니다. |
kv_data |
다양한 UDM 필드 | kv_data 의 키-값 쌍은 키에 따라 다양한 UDM 필드에 매핑됩니다. |
kv_data1 |
다양한 UDM 필드 | kv_data1 의 키-값 쌍은 키에 따라 다양한 UDM 필드에 매핑됩니다. |
kv_data2 |
다양한 UDM 필드 | kv_data2 의 키-값 쌍은 키에 따라 다양한 UDM 필드에 매핑됩니다. |
kv_data3 |
다양한 UDM 필드 | kv_data3 의 키-값 쌍은 키에 따라 다양한 UDM 필드에 매핑됩니다. |
kv_data4 |
다양한 UDM 필드 | kv_data4 의 키-값 쌍은 키에 따라 다양한 UDM 필드에 매핑됩니다. |
level |
event.idm.read_only_udm.security_result.severity |
level 필드가 'INFO'인 경우 'INFORMATIONAL'에 매핑됩니다. 'ERROR'인 경우 'ERROR'에 매핑됩니다. |
managedExternally |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
managedExternally 값은 원시 로그의 managedExternally 필드에서 추출되며 키가 'managedExternally'인 라벨로 추가됩니다. |
message |
다양한 UDM 필드 | 메시지 필드가 파싱되어 다양한 UDM 필드가 추출됩니다. |
message_data |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
메시지 데이터는 원시 로그의 message_data 필드에서 추출되어 키가 'message'인 라벨로 추가됩니다. |
network_status |
event.idm.read_only_udm.additional.fields |
네트워크 상태는 원시 로그의 network_status 필드에서 추출되며 키가 'Network_Connection_Status'인 추가 필드로 추가됩니다. |
new_value |
다양한 event.idm.read_only_udm.target 필드 |
새 값은 원시 로그의 new_value 필드에서 추출되며 다양한 타겟 필드를 채우는 데 사용됩니다. |
node |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
노드 값은 원시 로그의 node 필드에서 추출되며 키가 'node'인 라벨로 추가됩니다. |
old_value |
다양한 UDM 필드 | 이전 값은 원시 로그의 old_value 필드에서 추출되며 다양한 UDM 필드를 채우는 데 사용됩니다. |
payload |
다양한 UDM 필드 | 페이로드는 원시 로그의 payload 필드에서 추출되며 다양한 UDM 필드를 채우는 데 사용됩니다. |
pid |
event.idm.read_only_udm.target.process.pid |
프로세스 ID는 원시 로그의 pid 필드에서 추출됩니다. |
reqId |
event.idm.read_only_udm.metadata.product_log_id |
제품 로그 ID는 원시 로그의 reqId 필드에서 추출됩니다. |
resourceId |
event.idm.read_only_udm.principal.resource.product_object_id |
제품 객체 ID는 원시 로그의 resourceId 필드에서 추출됩니다. |
s2comp |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
s2comp 값은 원시 로그의 s2comp 필드에서 추출되어 키가 's2comp'인 라벨로 추가됩니다. |
ses |
event.idm.read_only_udm.network.session_id |
세션 ID는 원시 로그의 ses 필드에서 추출됩니다. |
src_host |
event.idm.read_only_udm.principal.hostname |
주 구성원 호스트 이름은 원시 로그의 src_host 필드에서 추출됩니다. |
src_ip |
event.idm.read_only_udm.principal.ip |
소스 IP 주소는 원시 로그의 src_ip 필드에서 추출됩니다. |
src_ip1 |
event.idm.read_only_udm.principal.ip |
소스 IP 주소는 원시 로그의 src_ip1 필드에서 추출됩니다. |
src_port |
event.idm.read_only_udm.principal.port |
소스 포트는 원시 로그의 src_port 필드에서 추출됩니다. |
startTimeUTC |
event.idm.read_only_udm.principal.resource.attribute.creation_time |
생성 시간은 원시 로그의 startTimeUTC 필드에서 파생됩니다. |
subcomp |
event.idm.read_only_udm.network.application_protocol 또는 event.idm.read_only_udm.principal.resource.attribute.labels.value |
subcomp 필드가 'http'인 경우 'HTTP'에 매핑됩니다. 그렇지 않으면 키가 'Sub Comp'인 라벨로 추가됩니다. |
tname |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
tname 값은 원시 로그의 tname 필드에서 추출되어 키가 'tname'인 라벨로 추가됩니다. |
type |
event.idm.read_only_udm.metadata.product_event_type |
제품 이벤트 유형은 원시 로그의 type 필드에서 추출됩니다. |
uid |
event.idm.read_only_udm.principal.user.userid |
사용자 ID는 원시 로그의 uid 필드에서 추출됩니다. |
update |
event.idm.read_only_udm.principal.resource.attribute.labels.value |
업데이트 값은 원시 로그의 update 필드에서 추출되며 키가 'update'인 라벨로 추가됩니다. |
user |
event.idm.read_only_udm.principal.user.user_display_name |
사용자 표시 이름은 원시 로그의 user 필드에서 추출됩니다. |
vmw_cluster |
event.idm.read_only_udm.target.resource.name |
타겟 리소스 이름은 원시 로그의 vmw_cluster 필드에서 추출됩니다. |
vmw_datacenter |
event.idm.read_only_udm.target.resource.attribute.labels.value |
vmw_datacenter 값은 원시 로그의 vmw_datacenter 필드에서 추출되어 키가 'vmw_datacenter'인 라벨로 추가됩니다. |
vmw_host |
event.idm.read_only_udm.target.hostname 또는 event.idm.read_only_udm.target.ip |
vmw_host 필드가 호스트 이름인 경우 타겟 호스트 이름에 매핑됩니다. 그렇지 않고 IP 주소인 경우 타겟 IP에 매핑됩니다. |
vmw_object_id |
event.idm.read_only_udm.target.resource.product_object_id |
제품 객체 ID는 원시 로그의 vmw_object_id 필드에서 추출됩니다. |
vmw_product |
event.idm.read_only_udm.target.application |
타겟 애플리케이션은 원시 로그의 vmw_product 필드에서 추출됩니다. |
vmw_vcenter |
event.idm.read_only_udm.target.cloud.availability_zone |
가용성 영역은 원시 로그의 vmw_vcenter 필드에서 추출됩니다. |
vmw_vcenter_id |
event.idm.read_only_udm.target.resource.attribute.labels.value |
vmw_vcenter_id 값은 원시 로그의 vmw_vcenter_id 필드에서 추출되며 키가 'vmw_vcenter_id'인 라벨로 추가됩니다. |
vmw_vr_ops_appname |
event.idm.read_only_udm.intermediary.application |
중개자 애플리케이션은 원시 로그의 vmw_vr_ops_appname 필드에서 추출됩니다. |
vmw_vr_ops_clustername |
event.idm.read_only_udm.intermediary.resource.name |
중개자 리소스 이름은 원시 로그의 vmw_vr_ops_clustername 필드에서 추출됩니다. |
vmw_vr_ops_clusterrole |
event.idm.read_only_udm.intermediary.resource.attribute.roles.name |
중개자 리소스 역할 이름은 원시 로그의 vmw_vr_ops_clusterrole 필드에서 추출됩니다. |
vmw_vr_ops_hostname |
event.idm.read_only_udm.intermediary.hostname |
중개자 호스트 이름은 원시 로그의 vmw_vr_ops_hostname 필드에서 추출됩니다. |
vmw_vr_ops_id |
event.idm.read_only_udm.intermediary.resource.product_object_id |
중개 제품 객체 ID는 원시 로그의 vmw_vr_ops_id 필드에서 추출됩니다. |
vmw_vr_ops_logtype |
event.idm.read_only_udm.intermediary.resource.attribute.labels.value |
vmw_vr_ops_logtype 값은 원시 로그의 vmw_vr_ops_logtype 필드에서 추출되어 키가 'vmw_vr_ops_logtype'인 라벨로 추가됩니다. |
vmw_vr_ops_nodename |
event.idm.read_only_udm.intermediary.resource.attribute.labels.value |
vmw_vr_ops_nodename 값은 원시 로그의 vmw_vr_ops_nodename 필드에서 추출되며 키가 'vmw_vr_ops_nodename'인 라벨로 추가됩니다. 다른 필드의 값을 기반으로 하는 일련의 조건문으로 결정됩니다. 가능한 값은 USER_LOGIN, NETWORK_CONNECTION, STATUS_UPDATE, GENERIC_EVENT입니다. 'VMWARE_NSX'로 하드코딩됩니다. 'VMWARE_NSX'로 하드코딩됩니다. 'VMWARE_NSX'로 하드코딩됩니다. Operation 이 'LOGIN'이고 target_details 이 비어 있지 않거나 message 에 'authentication failure'가 포함되어 있고 application 이 비어 있지 않은 경우 'AUTHTYPE_UNSPECIFIED'로 설정됩니다. PROTO 이 'ssh2'인 경우 'SSH'로 설정하고 subcomp 이 'http'인 경우 'HTTP'로 설정합니다. 다른 필드의 값을 기반으로 하는 일련의 조건문으로 결정됩니다. 가능한 값은 ALLOW 및 BLOCK입니다. vmw_cluster 이 비어 있지 않으면 'VIRTUAL_MACHINE'으로 설정합니다. |
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가로부터 답변을 받으세요.