ManageEngine ADAudit Plus 로그 수집
이 문서에서는 Bindplane 에이전트를 사용하여 ManageEngine ADAudit Plus 로그를 Google Security Operations로 수집하는 방법을 설명합니다. 파서는 ADAudit Plus의 로그를 처리하여 UDM 형식으로 변환합니다. 이 파서는 grok 패턴을 사용하여 SYSLOG (CEF) 및 키-값 형식 메시지 모두에서 필드를 추출하고, 알림 및 보고서 프로필에서 파생된 이벤트 유형을 기반으로 UDM 필드에 매핑하며, 추가 컨텍스트로 데이터를 보강합니다. 또한 파서는 로그인 실패, 사용자 변경, 파일 수정과 같은 특정 시나리오를 처리하여 이에 따라 UDM 매핑을 조정합니다.
시작하기 전에
- Google SecOps 인스턴스가 있는지 확인합니다.
- Windows 2016 이상 또는
systemd가 설치된 Linux 호스트를 사용하고 있는지 확인합니다. - 프록시 뒤에서 실행하는 경우 방화벽 포트가 열려 있는지 확인합니다.
- ManageEngine ADAudit에 대한 권한 있는 액세스 권한이 있는지 확인합니다.
Bindplane 에이전트의 Google SecOps 사용자 인증 정보 가져오기
Google SecOps에 Bindplane 에이전트를 인증하려면 다음 방법 중 하나를 선택합니다.
- 새 배포: Chronicle API를 사용합니다 (옵션 1).
- 기존 배포: 2027년 7월 20일에 Ingestion API가 중단될 때까지 데이터 수집 인증 파일 (옵션 2)을 계속 사용합니다.
옵션 1: Chronicle API용 서비스 계정 만들기 (권장)
- Google Cloud 콘솔에 로그인하고 Google SecOps 인스턴스에 연결된 Google Cloud 프로젝트를 선택합니다.
- IAM 및 관리자 > 서비스 계정으로 이동합니다.
- 서비스 계정 만들기를 클릭합니다.
- 다음 구성 세부정보를 제공합니다.
- 서비스 계정 이름: 계정 이름을 입력합니다 (예:
bindplane-ingest). - 서비스 계정 설명: 설명 (예:
Bindplane agent log ingestion)을 입력합니다.
- 서비스 계정 이름: 계정 이름을 입력합니다 (예:
- 만들고 계속하기를 클릭합니다.
- 이 서비스 계정에 프로젝트에 대한 액세스 권한 부여 섹션에서 역할 선택을 클릭하고 Chronicle 편집자를 선택합니다.
- 계속을 클릭한 다음 완료를 클릭합니다.
- 생성한 서비스 계정을 클릭한 다음 키 탭으로 이동합니다.
- 키 추가> 새 키 만들기를 클릭합니다.
- JSON을 선택하고 만들기를 클릭합니다. 키 파일이 컴퓨터에 다운로드됩니다.
- 키 파일을 Bindplane 수집기 디렉터리 (Linux의 경우
/opt/observiq-otel-collector/ingestion-auth.json, Windows의 경우C:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.json)에ingestion-auth.json로 저장하거나config.yaml의creds_file_path를 업데이트하여 저장한 경로와 일치시킵니다. - IAM 및 관리자 > 설정으로 이동하여 프로젝트 번호를 복사합니다. 내보내기 도구 구성에 필요합니다.
옵션 2: 데이터 수집 인증 파일 다운로드 (기존)
- 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에서는/opt/observiq-otel-collector/디렉터리에 있고 Windows에서는 설치 디렉터리에 있습니다.- 텍스트 편집기 (예:
nano,vi, 메모장)를 사용하여 파일을 엽니다.
다음과 같이
config.yaml파일을 수정합니다.receivers: udplog: # Replace the port and IP address as required listen_address: "0.0.0.0:514" exporters: chronicle/chronicle_w_labels: protocol: https # Region of your instance, for example us, europe, asia-southeast1 location: <LOCATION> # Project number of the Google Cloud project linked to the instance project: '<PROJECT_NUMBER>' compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: chronicle.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: ADAUDIT_PLUS raw_log_field: body service: pipelines: logs/source0__chronicle_w_labels-0: receivers: - udplog exporters: - chronicle/chronicle_w_labels인프라에서 필요에 따라 포트와 IP 주소를 바꿉니다.
<LOCATION>을 Google SecOps 인스턴스의 리전 (예:us,europe또는asia-southeast1)으로 바꿉니다. 내보내기 도구는 이 값으로chronicle.googleapis.com프리픽스를 지정합니다.<PROJECT_NUMBER>를 IAM 및 관리자 > 설정의 프로젝트 번호로 바꿉니다.<customer_id>를 실제 고객 ID로 바꿉니다.Bindplane 에이전트의 Google SecOps 사용자 인증 정보 가져오기 섹션에서 서비스 계정 키 파일 (옵션 1)이 저장된 경로로
/path/to/ingestion-authentication-file.json를 업데이트합니다.
기존 수집 API 내보내기 도구
옵션 2의 수집 인증 파일을 사용하는 경우
exporters블록을 다음으로 바꿉니다.creds을 수집 인증 파일의 경로로 설정하고 인스턴스가 미국 외부에 있는 경우malachiteingestion-pa.googleapis.com을 리전 엔드포인트 (예:europe-malachiteingestion-pa.googleapis.com)로 바꿉니다.exporters: chronicle/chronicle_w_labels: compression: gzip # Adjust the path to the credentials file you downloaded in Step 1 creds: '/path/to/ingestion-authentication-file.json' # Replace with your actual customer ID from Step 2 customer_id: <customer_id> endpoint: malachiteingestion-pa.googleapis.com # Add optional ingestion labels for better organization ingestion_labels: log_type: ADAUDIT_PLUS raw_log_field: body
Bindplane 에이전트를 다시 시작하여 변경사항을 적용합니다.
Linux에서 Bindplane 에이전트를 다시 시작하려면 다음 명령어를 실행합니다.
sudo systemctl restart bindplane-agentWindows에서 Bindplane 에이전트를 다시 시작하려면 서비스 콘솔을 사용하거나 다음 명령어를 입력하면 됩니다.
net stop BindPlaneAgent && net start BindPlaneAgent
ManageEngine ADAudit Plus Syslog 구성
- ManageEngine ADAudit Plus 웹 UI에 로그인합니다.
- 관리자 > 구성 > SIEM 통합으로 이동합니다.
- 사용 설정을 선택하여 ADAudit Plus 로그를 전송합니다.
- ArcSight (CEF) 형식을 선택합니다.
- 다음 구성 세부정보를 제공합니다.
- IP 주소: Bindplane 에이전트 IP 주소입니다.
- 포트: Bindplane 포트 번호(예: UDP의 경우
514) - 대상 유형: UDP를 선택합니다 (Bindplane 에이전트 구성에 따라 TCP를 선택할 수도 있음).
- 저장을 클릭합니다.
UDM 매핑 테이블
| 로그 필드 | UDM 매핑 | 로직 |
|---|---|---|
ACCOUNT_DOMAIN |
principal.administrative_domain |
원시 로그의 ACCOUNT_DOMAIN 값이 이 UDM 필드에 할당됩니다. |
ACCOUNT_NAME |
principal.user.userid |
원시 로그의 ACCOUNT_NAME 값이 이 UDM 필드에 할당됩니다. |
ALERT_PROFILE |
security_result.summary |
원시 로그의 ALERT_PROFILE 값이 이 UDM 필드에 할당됩니다. |
APPLICATION_NAME |
target.resource.name |
원시 로그의 APPLICATION_NAME 값이 이 UDM 필드에 할당됩니다. 또한 target.resource.resource_type를 TASK로, has_target_resource를 true로 설정합니다. |
CALLER_DISPLAY_NAME |
target.user.user_display_name |
원시 로그의 CALLER_DISPLAY_NAME 값이 이 UDM 필드에 할당됩니다. |
CALLER_USER_NAME |
target.user.userid |
원시 로그의 CALLER_USER_NAME 값이 이 UDM 필드에 할당됩니다. |
CALLER_USER_SID |
target.group.windows_sid |
원시 로그의 CALLER_USER_SID 값이 [%,{,}] 문자를 삭제한 후 이 UDM 필드에 할당됩니다. 이 작업은 값이 Windows SID 패턴과 일치하는 경우에만 수행됩니다. |
Category |
metadata.product_event_type |
원시 로그의 Category 값이 이 UDM 필드에 할당됩니다. |
CLIENT_HOST_NAME |
target.hostname, target.asset.hostname |
원시 로그의 CLIENT_HOST_NAME 값이 이러한 UDM 필드에 할당됩니다. |
CLIENT_IP_ADDRESS |
target.ip, target.asset.ip |
원시 로그의 CLIENT_IP_ADDRESS 값은 유효한 IP 주소인지 확인한 후 이러한 UDM 필드에 할당됩니다. |
CLIENT_PORT |
target.port |
원시 로그의 CLIENT_PORT 값이 정수로 변환된 후 이 UDM 필드에 할당됩니다. |
DOMAIN |
target.administrative_domain |
원시 로그의 DOMAIN 값이 이 UDM 필드에 할당됩니다. 이 값은 나중에 ACCOUNT_DOMAIN(있는 경우)에 의해 덮어쓰여질 수 있습니다. |
FILE_LOCATION |
target.file.full_path |
원시 로그의 FILE_LOCATION 값이 이 UDM 필드에 할당됩니다. |
FILE_NAME |
target.file.full_path |
FILE_LOCATION이 없으면 원시 로그의 FILE_NAME 값이 이 UDM 필드에 할당됩니다. |
FORMAT_MESSAGE |
security_result.description |
원시 로그의 FORMAT_MESSAGE 값이 이 UDM 필드에 할당됩니다. 이 필드의 일부는 다른 UDM 필드를 채우는 데 사용된 후 설명에서 삭제될 수 있습니다. |
IP |
principal.ip, principal.asset.ip |
원시 로그의 IP 값이 유효한 IP 주소인지 확인한 후 이러한 UDM 필드에 할당됩니다. |
loggerHost |
intermediary.hostname, intermediary.asset.hostname |
원시 로그의 메시지 필드에서 추출된 loggerHost 값이 이러한 UDM 필드에 할당됩니다. |
login_name |
target.user.userid, target.user.email_addresses 또는 target.user.user_display_name |
값에 @가 포함되어 있으면 이메일 주소로 처리됩니다. 공백이 포함된 경우 표시 이름으로 처리됩니다. 그렇지 않으면 userid로 처리됩니다. 또한 event_type를 USER_LOGIN로, extensions.auth.type를 MACHINE로, extensions.auth.mechanism를 USERNAME_PASSWORD로 설정합니다. |
RECORD_NUMBER |
principal.process.pid |
원시 로그의 RECORD_NUMBER 값이 이 UDM 필드에 할당됩니다. |
REPORT_PROFILE |
metadata.description |
원시 로그의 REPORT_PROFILE 값이 이 UDM 필드에 할당됩니다. |
SEVERITY |
security_result.severity |
SEVERITY 값은 이 UDM 필드의 값을 결정합니다. 1은 LOW에 매핑되고 2는 MEDIUM에 매핑되며 3은 HIGH에 매핑됩니다. |
SOURCE |
principal.hostname, principal.asset.hostname |
원시 로그의 SOURCE 값은 SOURCE에 도메인 부분이 포함되지 않은 경우 DOMAIN와 결합되어 이러한 UDM 필드에 할당됩니다. has_principal_host도 true로 설정합니다. |
TIME_GENERATED |
metadata.event_timestamp.seconds |
원시 로그의 TIME_GENERATED 값이 이벤트 타임스탬프로 사용됩니다. |
UNIQUE_ID |
metadata.product_log_id |
원시 로그의 UNIQUE_ID 값이 이 UDM 필드에 할당됩니다. |
USERNAME |
principal.user.userid |
ACCOUNT_NAME이 없으면 원시 로그의 USERNAME 값이 이 UDM 필드에 할당됩니다. |
USER_OU_GUID |
metadata.product_log_id |
UNIQUE_ID가 없으면 중괄호를 삭제한 후 원시 로그의 USER_OU_GUID 값이 이 UDM 필드에 할당됩니다. |
access_mode |
security_result.detection_fields.value |
원시 로그의 access_mode 값이 이 UDM 필드에 할당되고 키는 ACCESS_MODE로 설정됩니다. |
action_name |
security_result.description |
원시 로그의 action_name 값이 이 UDM 필드에 할당됩니다. |
domain_name |
principal.administrative_domain |
원시 로그의 domain_name 값이 이 UDM 필드에 할당됩니다. |
event.idm.read_only_udm.extensions.auth.mechanism |
event.idm.read_only_udm.extensions.auth.mechanism |
login_name가 있거나 event_type가 USER_LOGIN인 경우 USERNAME_PASSWORD로 설정합니다. |
event.idm.read_only_udm.extensions.auth.type |
event.idm.read_only_udm.extensions.auth.type |
login_name가 있거나 event_type가 USER_LOGIN인 경우 MACHINE로 설정합니다. |
event.idm.read_only_udm.metadata.event_type |
event.idm.read_only_udm.metadata.event_type |
ALERT_PROFILE, REPORT_PROFILE, FORMAT_MESSAGE 값에 따라 파서에 의해 결정됩니다. USER_CHANGE_PERMISSIONS, USER_STATS, USER_LOGIN, USER_CHANGE_PASSWORD, SETTING_MODIFICATION, FILE_DELETION, FILE_MODIFICATION, STATUS_SHUTDOWN, SCHEDULED_TASK_CREATION, FILE_READ, NETWORK_CONNECTION, GENERIC_EVENT, USER_UNCATEGORIZED, STATUS_UPDATE를 포함한 여러 값 중 하나일 수 있습니다. |
event.idm.read_only_udm.metadata.log_type |
event.idm.read_only_udm.metadata.log_type |
항상 ADAUDIT_PLUS로 설정합니다. |
event.idm.read_only_udm.metadata.product_name |
event.idm.read_only_udm.metadata.product_name |
항상 ADAudit Plus로 설정합니다. |
event.idm.read_only_udm.metadata.vendor_name |
event.idm.read_only_udm.metadata.vendor_name |
항상 Zoho Corporation로 설정합니다. |
host |
principal.hostname, principal.asset.hostname |
원시 로그의 host 값이 이러한 UDM 필드에 할당됩니다. has_principal_host도 true로 설정합니다. |
intermediary.hostname, intermediary.asset.hostname |
intermediary.hostname, intermediary.asset.hostname |
loggerHost 값으로 설정합니다. |
principalHost |
principal.hostname, principal.asset.hostname |
원시 로그의 principalHost 값이 IP인지 확인한 후 이러한 UDM 필드에 할당됩니다. has_principal_host도 true로 설정합니다. |
security_result.action |
security_result.action |
outcome 또는 msg_data_2에 Success이 포함되거나 FORMAT_MESSAGE에 Status:Success이 포함된 경우 ALLOW로 설정합니다. status에 denied, locked out, incorrect, does not meet 또는 Unable to validate가 포함된 경우 BLOCK로 설정합니다. ALERT_PROFILE가 Logon Failures for Admin Users이면 BLOCK로 설정합니다. |
security_result.category |
security_result.category |
event_type이 USER_STATS이거나 ALERT_PROFILE가 Logon Failures for Admin Users인 경우 POLICY_VIOLATION로 설정합니다. |
security_result.rule_name |
security_result.rule_name |
Reason:이 포함된 경우 FORMAT_MESSAGE 필드에서 추출됩니다. |
status |
security_result.summary |
원시 로그의 status 값이 이 UDM 필드에 할당됩니다. |
targetHost |
target.hostname, target.asset.hostname 또는 target.ip, target.asset.ip |
원시 로그의 targetHost 값은 IP인지 확인한 후 이러한 UDM 필드에 할당됩니다. |
targetUser |
target.user.userid |
원시 로그의 targetUser 값이 이 UDM 필드에 할당됩니다. |
_CNtargetUser |
target.user.user_display_name |
원시 로그의 _CNtargetUser 값이 이 UDM 필드에 할당됩니다. |
_user |
principal.user.userid 또는 target.user.userid |
원시 로그의 _user 값은 event_type가 USER_CHANGE_PASSWORD가 아닌 한 principal.user.userid에 할당되며, 이 경우 target.user.userid에 할당됩니다. |
변경 로그
도움이 더 필요하신가요? 커뮤니티 회원 및 Google SecOps 전문가에게 문의하여 답변을 받으세요.