Collect Rapid7 InsightIDR logs
This parser handles both JSON and SYSLOG formatted logs from Rapid7 InsightIDR. It extracts fields, normalizes them to the UDM, and performs specific logic for vulnerability data, including CVSS scores and exploit information, handling both JSON and syslog formats separately. It also maps authentication attempts and session events to appropriate UDM event types.
Before you begin
Ensure that you have the following prerequisites:
- Google SecOps instance.
- Privileged access to the InsightIDR management console.
Configuring an API key in Rapid7 InsightIDR
- Sign in to the InsightIDR Command Platform.
- Click Administration.
- Click API Keys.
- Go to the Organization Keys tab.
- Click New Organization Key.
- Select an organization and provide a name for the key (for example, Google SecOps).
- Generate the key.
- Copy the key from a new window that displays the generated key. 
Set up feeds
To configure a feed, follow these steps:
- Go to SIEM Settings > Feeds.
- Click Add New Feed.
- On the next page, click Configure a single feed.
- In the Feed name field, enter a name for the feed; for example, Rapid7 InsightIDR Logs.
- Select Third party API as the Source type.
- Select Rapid7 Insight as the Log type.
- Click Next.
- Specify values for the following input parameters:
- Authentication HTTP Header: token previously generated in X-Api-Key:<value>format (for example, X-Api-Key:AAAABBBBCCCC111122223333).
- API Endpoint: enter vulnerabilities or assets.
- API Hostname: the FQDN (fully qualified domain name) of Rapid7 API endpoint in the [region].api.insight.rapid7.comformat.
 
- Authentication HTTP Header: token previously generated in 
- Click Next.
- Review the feed configuration in the Finalize screen, and then click Submit.
UDM Mapping Table
| Log Field | UDM Mapping | Logic | 
|---|---|---|
| added | vulnerabilities.first_found | The addedfield is converted to a timestamp and mapped tovulnerabilities.first_found. | 
| Authentication | security_result.detection_fields.value | The value of Authenticationfrom the raw log is mapped to thevaluefield withinsecurity_result.detection_fields. The correspondingkeyis set to "Authentication". | 
| critical_vulnerabilities | asset.attribute.labels.value | The value of critical_vulnerabilitiesis mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Critical Vulnerabilities". | 
| cves | vulnerabilities.cve_id | The value of cvesis mapped tovulnerabilities.cve_id. | 
| cvss_v2_access_complexity | asset.attribute.labels.value | The value of cvss_v2_access_complexityis mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Access Complexity(Ac)". | 
| cvss_v2_availability_impact | asset.attribute.labels.value | The value of cvss_v2_availability_impactis mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Availability Impact (A)". | 
| cvss_v2_confidentiality_impact | asset.attribute.labels.value | The value of cvss_v2_confidentiality_impactis mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Confidentiality Impact (C)". | 
| cvss_v2_integrity_impact | asset.attribute.labels.value | The value of cvss_v2_integrity_impactis mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Integrity Impact (I)". | 
| cvss_v2_score | vulnerabilities.cvss_base_score | The value of cvss_v2_scoreis converted to a string, then to a float, and mapped tovulnerabilities.cvss_base_score. | 
| cvss_v2_vector | vulnerabilities.cvss_vector | The value of cvss_v2_vectoris mapped tovulnerabilities.cvss_vector. | 
| cvss_v3_availability_impact | asset.attribute.labels.value | The value of cvss_v3_availability_impactis mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Availability Impact (A)". | 
| cvss_v3_score | vulnerabilities.cvss_base_score | The value of cvss_v3_scoreis converted to a string, then to a float, and mapped tovulnerabilities.cvss_base_score. | 
| cvss_v3_vector | vulnerabilities.cvss_vector | The value of cvss_v3_vectoris mapped tovulnerabilities.cvss_vector. | 
| description | vulnerabilities.description | The value of descriptionfrom the raw log is mapped tovulnerabilities.description. | 
| exploits | asset.attribute.labels.value | The value of exploitsis converted to a string and mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis either "Number of Exploits" or "Rank of Exploit" based on the presence of the "rank" field within theexploitsobject. | 
| host_name | asset.hostname | The value of host_nameis mapped toasset.hostname. Ifhost_nameis empty and bothipandmacare empty, the value ofidis used instead. | 
| id | asset.product_object_id | The value of idis mapped toasset.product_object_id. Ifhost_nameis empty and bothipandmacare empty, the value ofidis used forasset.hostname. | 
| ip | asset.ip,entity.asset.ip | The value of ipis mapped to bothasset.ipandentity.asset.ip. | 
| last_assessed_for_vulnerabilities | vulnerabilities.scan_end_time | The last_assessed_for_vulnerabilitiesfield is converted to a timestamp and mapped tovulnerabilities.scan_end_time. | 
| last_scan_end | vulnerabilities.last_found | The last_scan_endfield is converted to a timestamp and mapped tovulnerabilities.last_found. | 
| last_scan_start | vulnerabilities.first_found | The last_scan_startfield is converted to a timestamp and mapped tovulnerabilities.first_found. | 
| links | vulnerabilities.cve_id,vulnerabilities.vendor_knowledge_base_article_id | The idfield withinlinksis mapped tovulnerabilities.cve_id, and thehreffield withinlinksis mapped tovulnerabilities.vendor_knowledge_base_article_id. | 
| mac | asset.mac,entity.asset.mac | The value of macis converted to lowercase and mapped to bothasset.macandentity.asset.mac. | 
| MessageSourceAddress | principal.ip,principal.asset.ip | The IP address extracted from MessageSourceAddressis mapped toprincipal.ipandprincipal.asset.ip. | 
| Method | network.http.method | The value of Methodis mapped tonetwork.http.method. | 
| moderate_vulnerabilities | asset.attribute.labels.value | The value of moderate_vulnerabilitiesis converted to a string and mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Moderate Vulnerabilities". | 
| os_architecture | asset.hardware.cpu_platform | The value of os_architectureis mapped toasset.hardware.cpu_platform. | 
| os_description | asset.platform_software.platform_version | The value of os_descriptionis mapped toasset.platform_software.platform_version. | 
| os_family | asset.platform_software.platform | The value of os_familyis converted to uppercase and mapped toasset.platform_software.platform. Special handling is done for "MAC OS X", "IOS", "WINDOWS", "MAC", and "LINUX". If it doesn't match any of these, it's set to "UNKNOWN_PLATFORM". | 
| Port | principal.port | The value of Portis mapped toprincipal.portand converted to an integer. | 
| Principal | principal.user.email_addresses | If Principalis an email address, it's mapped toprincipal.user.email_addresses. | 
| product_event_type | metadata.product_event_type | The value of product_event_typeis mapped tometadata.product_event_type. | 
| Protocol | network.application_protocol | If Protocolis "HTTP" or "HTTPS", it's mapped tonetwork.application_protocol. | 
| published | vulnerabilities.last_found | The publishedfield is converted to a timestamp and mapped tovulnerabilities.last_found. | 
| Referer | network.http.referral_url | The value of Refereris mapped tonetwork.http.referral_url. | 
| risk_score | asset.attribute.labels.value | The value of risk_scoreis converted to a string and mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Risk Score". | 
| security_result_summary | security_result.summary | The value of security_result_summaryis mapped tosecurity_result.summary. If it matches the pattern "Total sessions for principal:security_result.detection_fields. | 
| Session | network.session_id | The value of Sessionis mapped tonetwork.session_id. | 
| severe_vulnerabilities | asset.attribute.labels.value | The value of severe_vulnerabilitiesis converted to a string and mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Severe Vulnerabilities". | 
| severity | vulnerabilities.severity,security_result.severity | The value of severityis converted to uppercase. If it's "HIGH", "LOW", "CRITICAL", or "MEDIUM", it's mapped tovulnerabilities.severity. For syslog messages, if it's "Info", it's mapped to "INFORMATIONAL" insecurity_result.severity. If it's "Error", it's mapped to "ERROR" insecurity_result.severity. | 
| severity_score | asset.attribute.labels.value | The value of severity_scoreis converted to a string and mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Severity Score". | 
| SiloID | security_result.detection_fields.value | The value of SiloIDis mapped to thevaluefield withinsecurity_result.detection_fields. The correspondingkeyis set to "Silo ID". | 
| SourceModuleName | target.resource.name | The value of SourceModuleNamewith quotes removed is mapped totarget.resource.name. | 
| SourceModuleType | observer.application | The value of SourceModuleTypewith quotes and closing brackets removed is mapped toobserver.application. | 
| Status | network.http.response_code | The value of Statusis mapped tonetwork.http.response_codeand converted to an integer. | 
| tags | asset.attribute.labels | For each element in the tagsarray, thetypefield is mapped tokeyand thenamefield is mapped tovaluewithinasset.attribute.labels. | 
| Thread | security_result.detection_fields.value | The value of Threadis mapped to thevaluefield withinsecurity_result.detection_fields. The correspondingkeyis set to "Thread". | 
| timestamp | event.timestamp,metadata.collected_timestamp,read_only_udm.metadata.event_timestamp | The timestampfield is converted to a timestamp and mapped toevent.timestampfor JSON logs andmetadata.collected_timestampfor entity events. For syslog messages, it's mapped toread_only_udm.metadata.event_timestamp. | 
| title | vulnerabilities.description | The value of titleis mapped tovulnerabilities.description. | 
| total_vulnerabilities | asset.attribute.labels.value | The value of total_vulnerabilitiesis converted to a string and mapped to thevaluefield withinasset.attribute.labels. The correspondingkeyis set to "Total Vulnerabilities". | 
| URI | security_result.detection_fields.value | The value of URIis mapped to thevaluefield withinsecurity_result.detection_fields. The correspondingkeyis set to "URI". | 
| User-Agent | network.http.user_agent,network.http.parsed_user_agent | The value of User-Agentis mapped tonetwork.http.user_agent. It's also mapped tonetwork.http.parsed_user_agentand converted to a parsed user agent object.  Hardcoded to "Rapid7 Insight". Hardcoded to "Rapid7 Insight". Hardcoded to "ASSET" for JSON logs. Set to "GENERIC_EVENT" initially, then potentially changed to "PROCESS_UNCATEGORIZED", "STATUS_UPDATE", or "USER_LOGIN" based on other fields. Set to "AUTHTYPE_UNSPECIFIED" for "USER_LOGIN" events. Set to "ALLOW" or "BLOCK" based onproduct_event_type. Hardcoded to "RAPID7_INSIGHT" for syslog messages. | 
| username | principal.user.user_display_name | The value of username, with quotes removed and potentially parsed for email address, is mapped toprincipal.user.user_display_name. The extracted email address, if present, is mapped toprincipal.user.email_addresses. | 
Need more help? Get answers from Community members and Google SecOps professionals.