Censys-Logs erfassen
In diesem Dokument wird beschrieben, wie Sie Censys-Logs mithilfe von Amazon S3 in Google Security Operations aufnehmen. Censys bietet über seine API umfassendes Attack Surface Management und Internet-Intelligence. Mit dieser Integration können Sie Host-Erkennungsereignisse, Risikoereignisse und Asset-Änderungen aus Censys ASM erfassen und zur Analyse und Überwachung an Google SecOps weiterleiten. Der Parser wandelt Rohlogs in ein strukturiertes Format um, das dem Google SecOps-UDM entspricht. Felder werden aus der Rohprotokollnachricht extrahiert, Datentypkonvertierungen werden durchgeführt und die extrahierten Informationen werden entsprechenden UDM-Feldern zugeordnet. Die Daten werden mit zusätzlichem Kontext und Labels angereichert.
Hinweise
Prüfen Sie, ob folgende Voraussetzungen erfüllt sind:
- Google SecOps-Instanz
- Privilegierter Zugriff auf Censys ASM
- Privilegierter Zugriff auf AWS (S3, IAM, Lambda, EventBridge)
Voraussetzungen für Censys (API-Anmeldedaten)
- Melden Sie sich unter
app.censys.io
in der Censys ASM Console an. - Klicken Sie oben auf der Seite auf Integrationen.
- Kopieren und speichern Sie Ihren API-Schlüssel und Ihre Organisations-ID.
- Notieren Sie sich die API-Basis-URL:
https://api.platform.censys.io
.
AWS S3-Bucket und IAM für Google SecOps konfigurieren
- Erstellen Sie einen Amazon S3-Bucket. Folgen Sie dazu dieser Anleitung: Bucket erstellen.
- Speichern Sie den Namen und die Region des Buckets zur späteren Verwendung (z. B.
censys-logs
). - Erstellen Sie einen Nutzer gemäß dieser Anleitung: IAM-Nutzer erstellen.
- Wählen Sie den erstellten Nutzer aus.
- Wählen Sie den Tab Sicherheitsanmeldedaten aus.
- Klicken Sie im Abschnitt Zugriffsschlüssel auf Zugriffsschlüssel erstellen.
- Wählen Sie als Anwendungsfall Drittanbieterdienst aus.
- Klicken Sie auf Weiter.
- Optional: Fügen Sie ein Beschreibungstag hinzu.
- Klicken Sie auf Zugriffsschlüssel erstellen.
- Klicken Sie auf CSV-Datei herunterladen, um den Access Key (Zugriffsschlüssel) und den Secret Access Key (geheimer Zugriffsschlüssel) zur späteren Verwendung zu speichern.
- Klicken Sie auf Fertig.
- Wählen Sie den Tab Berechtigungen aus.
- Klicken Sie im Bereich Berechtigungsrichtlinien auf Berechtigungen hinzufügen.
- Wählen Sie Berechtigungen hinzufügen aus.
- Wählen Sie Richtlinien direkt anhängen aus.
- Suchen Sie nach der Richtlinie AmazonS3FullAccess und wählen Sie sie aus.
- Klicken Sie auf Weiter.
- Klicken Sie auf Berechtigungen hinzufügen.
IAM-Richtlinie und ‑Rolle für S3-Uploads konfigurieren
- Rufen Sie in der AWS-Konsole IAM > Richtlinien > Richtlinie erstellen > Tab „JSON“ auf.
Geben Sie die folgende Richtlinie ein:
{ "Version": "2012-10-17", "Statement": [ { "Sid": "AllowPutObjects", "Effect": "Allow", "Action": "s3:PutObject", "Resource": "arn:aws:s3:::censys-logs/*" }, { "Sid": "AllowGetStateObject", "Effect": "Allow", "Action": "s3:GetObject", "Resource": "arn:aws:s3:::censys-logs/censys/state.json" } ] }
- Ersetzen Sie
censys-logs
, wenn Sie einen anderen Bucket-Namen eingegeben haben.
- Ersetzen Sie
Klicken Sie auf Weiter > Richtlinie erstellen.
Rufen Sie IAM > Rollen > Rolle erstellen > AWS-Service > Lambda auf.
Hängen Sie die neu erstellte Richtlinie und die verwaltete Richtlinie AWSLambdaBasicExecutionRole (für den Zugriff auf CloudWatch Logs) an.
Geben Sie der Rolle den Namen
censys-lambda-role
und klicken Sie auf Rolle erstellen.
Lambda-Funktion erstellen
- Rufen Sie in der AWS Console Lambda > Funktionen > Funktion erstellen auf.
- Klicken Sie auf Von Grund auf erstellen.
- Geben Sie die folgenden Konfigurationsdetails an:
Einstellung | Wert |
---|---|
Name | censys-data-collector |
Laufzeit | Python 3.13 |
Architektur | x86_64 |
Ausführungsrolle | censys-lambda-role |
Nachdem die Funktion erstellt wurde, öffnen Sie den Tab Code, löschen Sie den Stub und geben Sie den folgenden Code ein (
censys-data-collector.py
):import json import boto3 import urllib3 import gzip import logging import os from datetime import datetime, timedelta, timezone from typing import Dict, List, Any, Optional from urllib.parse import urlencode # Configure logging logger = logging.getLogger() logger.setLevel(logging.INFO) # AWS S3 client s3_client = boto3.client('s3') # HTTP client http = urllib3.PoolManager() # Environment variables S3_BUCKET = os.environ['S3_BUCKET'] S3_PREFIX = os.environ['S3_PREFIX'] STATE_KEY = os.environ['STATE_KEY'] CENSYS_API_KEY = os.environ['CENSYS_API_KEY'] CENSYS_ORG_ID = os.environ['CENSYS_ORG_ID'] API_BASE = os.environ.get('API_BASE', 'https://api.platform.censys.io') class CensysCollector: def __init__(self): self.headers = { 'Authorization': f'Bearer {CENSYS_API_KEY}', 'X-Organization-ID': CENSYS_ORG_ID, 'Content-Type': 'application/json' } def get_last_collection_time(self) -> Optional[datetime]: """Get the last collection timestamp from S3 state file.""" try: response = s3_client.get_object(Bucket=S3_BUCKET, Key=STATE_KEY) state = json.loads(response['Body'].read().decode('utf-8')) return datetime.fromisoformat(state.get('last_collection_time', '2024-01-01T00:00:00Z')) except Exception as e: logger.info(f"No state file found or error reading state: {e}") return datetime.now(timezone.utc) - timedelta(hours=1) def save_collection_time(self, collection_time: datetime): """Save the current collection timestamp to S3 state file.""" state = {'last_collection_time': collection_time.strftime('%Y-%m-%dT%H:%M:%SZ')} s3_client.put_object( Bucket=S3_BUCKET, Key=STATE_KEY, Body=json.dumps(state), ContentType='application/json' ) def collect_logbook_events(self, cursor: str = None) -> List[Dict[str, Any]]: """Collect logbook events from Censys ASM API using cursor-based pagination.""" events = [] url = f"{API_BASE}/v3/logbook" # Use cursor-based pagination as per Censys API documentation params = {} if cursor: params['cursor'] = cursor try: query_string = urlencode(params) if params else '' full_url = f"{url}?{query_string}" if query_string else url response = http.request('GET', full_url, headers=self.headers) if response.status != 200: logger.error(f"API request failed with status {response.status}: {response.data}") return [] data = json.loads(response.data.decode('utf-8')) events.extend(data.get('logbook_entries', [])) # Handle cursor-based pagination next_cursor = data.get('next_cursor') if next_cursor: events.extend(self.collect_logbook_events(next_cursor)) logger.info(f"Collected {len(events)} logbook events") return events except Exception as e: logger.error(f"Error collecting logbook events: {e}") return [] def collect_risks_events(self) -> List[Dict[str, Any]]: """Collect risk events from Censys ASM API.""" events = [] url = f"{API_BASE}/v3/risks" try: response = http.request('GET', url, headers=self.headers) if response.status != 200: logger.error(f"API request failed with status {response.status}: {response.data}") return [] data = json.loads(response.data.decode('utf-8')) events.extend(data.get('risks', [])) logger.info(f"Collected {len(events)} risk events") return events except Exception as e: logger.error(f"Error collecting risk events: {e}") return [] def save_events_to_s3(self, events: List[Dict[str, Any]], event_type: str): """Save events to S3 in compressed NDJSON format.""" if not events: return timestamp = datetime.now(timezone.utc).strftime('%Y%m%d_%H%M%S') filename = f"{S3_PREFIX}{event_type}_{timestamp}.json.gz" try: # Convert events to newline-delimited JSON ndjson_content = 'n'.join(json.dumps(event, separators=(',', ':')) for event in events) # Compress with gzip gz_bytes = gzip.compress(ndjson_content.encode('utf-8')) s3_client.put_object( Bucket=S3_BUCKET, Key=filename, Body=gz_bytes, ContentType='application/gzip', ContentEncoding='gzip' ) logger.info(f"Saved {len(events)} {event_type} events to {filename}") except Exception as e: logger.error(f"Error saving {event_type} events to S3: {e}") raise def lambda_handler(event, context): """AWS Lambda handler function.""" try: collector = CensysCollector() # Get last collection time for cursor state management last_collection_time = collector.get_last_collection_time() current_time = datetime.now(timezone.utc) logger.info(f"Collecting events since {last_collection_time}") # Collect different types of events logbook_events = collector.collect_logbook_events() risk_events = collector.collect_risks_events() # Save events to S3 collector.save_events_to_s3(logbook_events, 'logbook') collector.save_events_to_s3(risk_events, 'risks') # Update state collector.save_collection_time(current_time) return { 'statusCode': 200, 'body': json.dumps({ 'message': 'Censys data collection completed successfully', 'logbook_events': len(logbook_events), 'risk_events': len(risk_events), 'collection_time': current_time.strftime('%Y-%m-%dT%H:%M:%SZ') }) } except Exception as e: logger.error(f"Lambda execution failed: {str(e)}") return { 'statusCode': 500, 'body': json.dumps({ 'error': str(e) }) }
Klicken Sie auf Konfiguration> Umgebungsvariablen> Bearbeiten> Neue Umgebungsvariable hinzufügen.
Geben Sie die folgenden Umgebungsvariablen ein und ersetzen Sie die Platzhalter durch Ihre Werte:
Schlüssel Beispielwert S3_BUCKET
censys-logs
S3_PREFIX
censys/
STATE_KEY
censys/state.json
CENSYS_API_KEY
<your-censys-api-key>
CENSYS_ORG_ID
<your-organization-id>
API_BASE
https://api.platform.censys.io
Bleiben Sie nach dem Erstellen der Funktion auf der zugehörigen Seite oder öffnen Sie Lambda > Funktionen > Ihre Funktion.
Wählen Sie den Tab Konfiguration aus.
Klicken Sie im Bereich Allgemeine Konfiguration auf Bearbeiten.
Ändern Sie Zeitlimit in 5 Minuten (300 Sekunden) und klicken Sie auf Speichern.
EventBridge-Zeitplan erstellen
- Gehen Sie zu Amazon EventBridge > Scheduler > Create schedule (Amazon EventBridge > Scheduler > Zeitplan erstellen).
- Geben Sie die folgenden Konfigurationsdetails an:
- Wiederkehrender Zeitplan: Preis (
1 hour
). - Ziel: Ihre Lambda-Funktion
censys-data-collector
. - Name:
censys-data-collector-1h
.
- Wiederkehrender Zeitplan: Preis (
- Klicken Sie auf Zeitplan erstellen.
Optional: IAM-Nutzer mit Lesezugriff und Schlüssel für Google SecOps erstellen
- Rufen Sie in der AWS-Konsole IAM > Nutzer > Nutzer hinzufügen auf.
- Klicken Sie auf Add users (Nutzer hinzufügen).
- Geben Sie die folgenden Konfigurationsdetails an:
- Nutzer:
secops-reader
. - Zugriffstyp: Zugriffsschlüssel – programmatischer Zugriff.
- Nutzer:
- Klicken Sie auf Nutzer erstellen.
- Minimale Leseberechtigung (benutzerdefiniert) anhängen: Nutzer > secops-reader > Berechtigungen > Berechtigungen hinzufügen > Richtlinien direkt anhängen > Richtlinie erstellen.
Geben Sie im JSON-Editor die folgende Richtlinie ein:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": ["s3:GetObject"], "Resource": "arn:aws:s3:::censys-logs/*" }, { "Effect": "Allow", "Action": ["s3:ListBucket"], "Resource": "arn:aws:s3:::censys-logs" } ] }
Legen Sie
secops-reader-policy
als Name fest.Gehen Sie zu Richtlinie erstellen> suchen/auswählen > Weiter > Berechtigungen hinzufügen.
Rufen Sie Sicherheitsanmeldedaten > Zugriffsschlüssel > Zugriffsschlüssel erstellen auf.
Laden Sie die CSV herunter (diese Werte werden in den Feed eingegeben).
Feed in Google SecOps konfigurieren, um Censys-Logs aufzunehmen
- Rufen Sie die SIEM-Einstellungen > Feeds auf.
- Klicken Sie auf + Neuen Feed hinzufügen.
- Geben Sie im Feld Feed name (Feedname) einen Namen für den Feed ein, z. B.
Censys logs
. - Wählen Sie Amazon S3 V2 als Quelltyp aus.
- Wählen Sie CENSYS als Logtyp aus.
- Klicken Sie auf Weiter.
- Geben Sie Werte für die folgenden Eingabeparameter an:
- S3-URI:
s3://censys-logs/censys/
- Optionen zum Löschen von Quellen: Wählen Sie die gewünschte Option zum Löschen aus.
- Maximales Dateialter: Dateien einschließen, die in den letzten Tagen geändert wurden. Der Standardwert ist 180 Tage.
- Zugriffsschlüssel-ID: Zugriffsschlüssel des Nutzers mit Zugriff auf den S3-Bucket.
- Secret Access Key (Geheimer Zugriffsschlüssel): Geheimer Nutzersicherheitsschlüssel mit Zugriff auf den S3-Bucket.
- Asset-Namespace: der Asset-Namespace.
- Aufnahmelabels: Das Label, das auf die Ereignisse aus diesem Feed angewendet wird.
- S3-URI:
- Klicken Sie auf Weiter.
- Prüfen Sie die neue Feedkonfiguration auf dem Bildschirm Abschließen und klicken Sie dann auf Senden.
UDM-Zuordnungstabelle
Logfeld | UDM-Zuordnung | Logik |
---|---|---|
assetId | read_only_udm.principal.asset.hostname | Wenn das Feld „assetId“ keine IP-Adresse ist, wird es „principal.asset.hostname“ zugeordnet. |
assetId | read_only_udm.principal.asset.ip | Wenn das Feld „assetId“ eine IP-Adresse ist, wird es „principal.asset.ip“ zugeordnet. |
assetId | read_only_udm.principal.hostname | Wenn das Feld „assetId“ keine IP-Adresse ist, wird es „principal.hostname“ zugeordnet. |
assetId | read_only_udm.principal.ip | Wenn das Feld „assetId“ eine IP-Adresse ist, wird es „principal.ip“ zugeordnet. |
associatedAt | read_only_udm.security_result.detection_fields.value | Das Feld „associatedAt“ wird „security_result.detection_fields.value“ zugeordnet. |
autonomousSystem.asn | read_only_udm.additional.fields.value.string_value | Das Feld „autonomousSystem.asn“ wird in einen String konvertiert und mit dem Schlüssel „autonomousSystem_asn“ dem Feld „additional.fields.value.string_value“ zugeordnet. |
autonomousSystem.bgpPrefix | read_only_udm.additional.fields.value.string_value | Das Feld „autonomousSystem.bgpPrefix“ wird mit dem Schlüssel „autonomousSystem_bgpPrefix“ dem Feld „additional.fields.value.string_value“ zugeordnet. |
Banner | read_only_udm.principal.resource.attribute.labels.value | Das Bannerfeld wird mit dem Schlüssel „banner“ dem Feld „principal.resource.attribute.labels.value“ zugeordnet. |
Cloud | read_only_udm.metadata.vendor_name | Das Cloud-Feld wird metadata.vendor_name zugeordnet. |
comments.refUrl | read_only_udm.network.http.referral_url | Das Feld „comments.refUrl“ wird „network.http.referral_url“ zugeordnet. |
data.cve | read_only_udm.additional.fields.value.string_value | Das Feld „data.cve“ wird „additional.fields.value.string_value“ mit dem Schlüssel „data_cve“ zugeordnet. |
data.cvss | read_only_udm.additional.fields.value.string_value | Das Feld „data.cvss“ wird mit dem Schlüssel „data_cvss“ dem Feld „additional.fields.value.string_value“ zugeordnet. |
data.ipAddress | read_only_udm.principal.asset.ip | Wenn das Feld „data.ipAddress“ nicht mit dem Feld „assetId“ übereinstimmt, wird es „principal.asset.ip“ zugeordnet. |
data.ipAddress | read_only_udm.principal.ip | Wenn das Feld „data.ipAddress“ nicht mit dem Feld „assetId“ übereinstimmt, wird es „principal.ip“ zugeordnet. |
data.location.city | read_only_udm.principal.location.city | Wenn das Feld „location.city“ leer ist, wird das Feld „data.location.city“ dem Feld „principal.location.city“ zugeordnet. |
data.location.countryCode | read_only_udm.principal.location.country_or_region | Wenn das Feld „location.country“ leer ist, wird das Feld „data.location.countryCode“ dem Feld „principal.location.country_or_region“ zugeordnet. |
data.location.latitude | read_only_udm.principal.location.region_coordinates.latitude | Wenn die Felder „location.coordinates.latitude“ und „location.geoCoordinates.latitude“ leer sind, wird das Feld „data.location.latitude“ in einen Gleitkommawert konvertiert und „principal.location.region_coordinates.latitude“ zugeordnet. |
data.location.longitude | read_only_udm.principal.location.region_coordinates.longitude | Wenn die Felder „location.coordinates.longitude“ und „location.geoCoordinates.longitude“ leer sind, wird das Feld „data.location.longitude“ in einen Gleitkommawert konvertiert und „principal.location.region_coordinates.longitude“ zugeordnet. |
data.location.province | read_only_udm.principal.location.state | Wenn das Feld „location.province“ leer ist, wird das Feld „data.location.province“ dem Feld „principal.location.state“ zugeordnet. |
data.mailServers | read_only_udm.additional.fields.value.list_value.values.string_value | Jedes Element im Array „data.mailServers“ wird einem separaten „additional.fields“-Eintrag mit dem Schlüssel „Mail Servers“ und dem Wert „value.list_value.values.string_value“ zugeordnet, der auf den Elementwert festgelegt ist. |
data.names.forwardDns[].name | read_only_udm.network.dns.questions.name | Jedes Element im Array „data.names.forwardDns“ wird einem separaten Eintrag „network.dns.questions“ zugeordnet, wobei das Feld „name“ auf das Feld „name“ des Elements festgelegt ist. |
data.nameServers | read_only_udm.additional.fields.value.list_value.values.string_value | Jedes Element im Array „data.nameServers“ wird einem separaten „additional.fields“-Eintrag mit dem Schlüssel „Name nameServers“ und dem Wert „value.list_value.values.string_value“ zugeordnet, der auf den Elementwert festgelegt ist. |
data.protocols[].transportProtocol | read_only_udm.network.ip_protocol | Wenn das Feld „data.protocols[].transportProtocol“ einen der folgenden Werte hat: TCP, EIGRP, ESP, ETHERIP, GRE, ICMP, IGMP, IP6IN4, PIM, UDP oder VRRP, wird es dem Feld „network.ip_protocol“ zugeordnet. |
data.protocols[].transportProtocol | read_only_udm.principal.resource.attribute.labels.value | Das Feld „data.protocols[].transportProtocol“ wird mit dem Schlüssel „data_protocols {index}“ dem Feld „principal.resource.attribute.labels.value“ zugeordnet. |
http.request.headers[].key, http.request.headers[].value.headers.0 | read_only_udm.network.http.user_agent | Wenn das Feld „http.request.headers[].key“ „User-Agent“ ist, wird das entsprechende Feld „http.request.headers[].value.headers.0“ dem Feld „network.http.user_agent“ zugeordnet. |
http.request.headers[].key, http.request.headers[].value.headers.0 | read_only_udm.network.http.parsed_user_agent | Wenn das Feld „http.request.headers[].key“ „User-Agent“ ist, wird das entsprechende Feld „http.request.headers[].value.headers.0“ als User-Agent-String geparst und „network.http.parsed_user_agent“ zugeordnet. |
http.request.headers[].key, http.request.headers[].value.headers.0 | read_only_udm.principal.resource.attribute.labels.key, read_only_udm.principal.resource.attribute.labels.value | Für jedes Element im Array „http.request.headers“ wird das Schlüsselfeld „key“ dem Feld „principal.resource.attribute.labels.key“ und das Feld „value.headers.0“ dem Feld „principal.resource.attribute.labels.value“ zugeordnet. |
http.request.uri | read_only_udm.principal.asset.hostname | Der Hostname des Felds „http.request.uri“ wird extrahiert und „principal.asset.hostname“ zugeordnet. |
http.request.uri | read_only_udm.principal.hostname | Der Hostname des Felds „http.request.uri“ wird extrahiert und „principal.hostname“ zugeordnet. |
http.response.body | read_only_udm.principal.resource.attribute.labels.value | Das Feld „http.response.body“ wird mit dem Schlüssel „http_response_body“ dem Feld „principal.resource.attribute.labels.value“ zugeordnet. |
http.response.headers[].key, http.response.headers[].value.headers.0 | read_only_udm.target.hostname | Wenn das Feld „http.response.headers[].key“ „Server“ ist, wird das entsprechende Feld „http.response.headers[].value.headers.0“ dem Feld „target.hostname“ zugeordnet. |
http.response.headers[].key, http.response.headers[].value.headers.0 | read_only_udm.principal.resource.attribute.labels.key, read_only_udm.principal.resource.attribute.labels.value | Für jedes Element im Array „http.response.headers“ wird das Feld „key“ dem Feld „principal.resource.attribute.labels.key“ und das Feld „value.headers.0“ dem Feld „principal.resource.attribute.labels.value“ zugeordnet. |
http.response.statusCode | read_only_udm.network.http.response_code | Das Feld „http.response.statusCode“ wird in eine Ganzzahl konvertiert und „network.http.response_code“ zugeordnet. |
ip | read_only_udm.target.asset.ip | Das Feld „ip“ wird „target.asset.ip“ zugeordnet. |
ip | read_only_udm.target.ip | Das Feld „ip“ wird „target.ip“ zugeordnet. |
isSeed | read_only_udm.additional.fields.value.string_value | Das Feld „isSeed“ wird in einen String konvertiert und dem Feld „additional.fields.value.string_value“ mit dem Schlüssel „isSeed“ zugeordnet. |
location.city | read_only_udm.principal.location.city | Das Feld „location.city“ wird „principal.location.city“ zugeordnet. |
location.continent | read_only_udm.additional.fields.value.string_value | Das Feld „location.continent“ wird mit dem Schlüssel „location_continent“ dem Feld „additional.fields.value.string_value“ zugeordnet. |
location.coordinates.latitude | read_only_udm.principal.location.region_coordinates.latitude | Das Feld „location.coordinates.latitude“ wird in einen Gleitkommawert konvertiert und „principal.location.region_coordinates.latitude“ zugeordnet. |
location.coordinates.longitude | read_only_udm.principal.location.region_coordinates.longitude | Das Feld „location.coordinates.longitude“ wird in einen Gleitkommawert umgewandelt und „principal.location.region_coordinates.longitude“ zugeordnet. |
location.country | read_only_udm.principal.location.country_or_region | Das Feld „location.country“ wird „principal.location.country_or_region“ zugeordnet. |
location.geoCoordinates.latitude | read_only_udm.principal.location.region_coordinates.latitude | Wenn das Feld „location.coordinates.latitude“ leer ist, wird das Feld „location.geoCoordinates.latitude“ in einen Gleitkommawert konvertiert und „principal.location.region_coordinates.latitude“ zugeordnet. |
location.geoCoordinates.longitude | read_only_udm.principal.location.region_coordinates.longitude | Wenn das Feld „location.coordinates.longitude“ leer ist, wird das Feld „location.geoCoordinates.longitude“ in einen Gleitkommawert umgewandelt und „principal.location.region_coordinates.longitude“ zugeordnet. |
location.postalCode | read_only_udm.additional.fields.value.string_value | Das Feld „location.postalCode“ wird mit dem Schlüssel „Postal code“ dem Feld „additional.fields.value.string_value“ zugeordnet. |
location.province | read_only_udm.principal.location.state | Das Feld „location.province“ wird dem Feld „principal.location.state“ zugeordnet. |
Vorgang | read_only_udm.security_result.action_details | Das Feld „operation“ wird „security_result.action_details“ zugeordnet. |
perspectiveId | read_only_udm.principal.group.product_object_id | Das Feld „perspectiveId“ wird „principal.group.product_object_id“ zugeordnet. |
Port | read_only_udm.principal.port | Das Portfeld wird in eine Ganzzahl konvertiert und principal.port zugeordnet. |
risks[].severity, risks[].title | read_only_udm.security_result.category_details | Das Feld „risks[].severity“ wird mit dem Feld „risks[].title“ verkettet und „security_result.category_details“ zugeordnet. |
serviceName | read_only_udm.network.application_protocol | Wenn das Feld „serviceName“ „HTTP“ oder „HTTPS“ ist, wird es „network.application_protocol“ zugeordnet. |
sourceIp | read_only_udm.principal.asset.ip | Das Feld „sourceIp“ wird „principal.asset.ip“ zugeordnet. |
sourceIp | read_only_udm.principal.ip | Das Feld „sourceIp“ wird „principal.ip“ zugeordnet. |
timestamp | read_only_udm.metadata.event_timestamp | Das Zeitstempelfeld wird als Zeitstempel geparst und metadata.event_timestamp zugeordnet. |
transportFingerprint.id | read_only_udm.metadata.product_log_id | Das Feld „transportFingerprint.id“ wird in einen String konvertiert und „metadata.product_log_id“ zugeordnet. |
transportFingerprint.raw | read_only_udm.additional.fields.value.string_value | Das Feld „transportFingerprint.raw“ wird „additional.fields.value.string_value“ mit dem Schlüssel „transportFingerprint_raw“ zugeordnet. |
Typ | read_only_udm.metadata.product_event_type | Das Feld „type“ wird „metadata.product_event_type“ zugeordnet. |
- | read_only_udm.metadata.product_name | Der Wert „CENSYS_ASM“ wird metadata.product_name zugewiesen. |
- | read_only_udm.metadata.vendor_name | Der Wert „CENSYS“ wird metadata.vendor_name zugewiesen. |
- | read_only_udm.metadata.event_type | Der Ereignistyp wird anhand des Vorhandenseins bestimmter Felder bestimmt: NETWORK_CONNECTION, wenn „has_princ_machine_id“ und „has_target_machine“ „true“ sind und „has_network_flow“ „false“ ist, NETWORK_DNS, wenn „has_network_flow“ „true“ ist, STATUS_UPDATE, wenn „has_princ_machine_id“ „true“ ist, und GENERIC_EVENT andernfalls. |
Benötigen Sie weitere Hilfe? Antworten von Community-Mitgliedern und Google SecOps-Experten erhalten