In diesem Dokument wird beschrieben, wie Sie 1Password-Audit-Logs mit Bindplane in Google Security Operations aufnehmen. Der Parser wandelt Rohlogdaten im JSON-Format in ein strukturiertes Format um, das dem einheitlichen Datenmodell (Unified Data Model, UDM) von Google SecOps entspricht. Der Schwerpunkt liegt dabei auf der Normalisierung und Anreicherung von Ereignissen im Zusammenhang mit Anmeldeversuchen von Nutzern. Außerdem werden Details zum Nutzer, seinem Standort, Clientinformationen und dem Ergebnis des Versuchs extrahiert.
Hinweise
Prüfen Sie, ob die folgenden Voraussetzungen erfüllt sind:
Google SecOps-Instanz
Windows 2016 oder höher oder Linux-Host mit systemd
Wenn die Ausführung hinter einem Proxy erfolgt, sind die Firewallports geöffnet.
Privilegierter Zugriff auf 1Password
Authentifizierungsdatei für die Aufnahme in Google SecOps abrufen
Melden Sie sich in der Google SecOps-Konsole an.
Rufen Sie SIEM-Einstellungen > Collection Agents auf.
Laden Sie die Authentifizierungsdatei für die Aufnahme herunter. Speichern Sie die Datei sicher auf dem System, auf dem BindPlane installiert wird.
Google SecOps-Kundennummer abrufen
Melden Sie sich in der Google SecOps-Konsole an.
Rufen Sie die SIEM-Einstellungen > „Profil“ auf.
Kopieren und speichern Sie die Kunden-ID aus dem Bereich Organisationsdetails.
BindPlane-Agent installieren
Fenstereinbau
Öffnen Sie die Eingabeaufforderung oder PowerShell als Administrator.
BindPlane-Agent zum Erfassen von Syslog-Daten und Senden an Google SecOps konfigurieren
Rufen Sie die Konfigurationsdatei auf:
Suchen Sie die Datei config.yaml. Normalerweise befindet es sich unter Linux im Verzeichnis /etc/bindplane-agent/ oder unter Windows im Installationsverzeichnis.
Öffnen Sie die Datei mit einem Texteditor (z. B. nano, vi oder Notepad).
Bearbeiten Sie die Datei config.yamlso:
receivers:udplog:# Replace the port and IP address as requiredlisten_address:"0.0.0.0:514"exporters:chronicle/chronicle_w_labels:compression:gzip# Adjust the path to the credentials file you downloaded in Step 1creds:'/path/to/ingestion-authentication-file.json'# Replace with your actual customer ID from Step 2customer_id:<customer_id>
endpoint:malachiteingestion-pa.googleapis.com# Add optional ingestion labels for better organizationingestion_labels:log_type:'ONEPASSWORD_AUDIT_EVENTS'raw_log_field:bodyservice:pipelines:logs/source0__chronicle_w_labels-0:receivers:-udplogexporters:-chronicle/chronicle_w_labels
Ersetzen Sie den Port und die IP-Adresse nach Bedarf in Ihrer Infrastruktur.
Ersetzen Sie <customer_id> durch die tatsächliche Kunden-ID.
Bindplane-Agent neu starten, um die Änderungen zu übernehmen
Führen Sie den folgenden Befehl aus, um den Bindplane-Agent unter Linux neu zu starten:
sudosystemctlrestartbindplane-agent
Wenn Sie den Bindplane-Agent unter Windows neu starten möchten, können Sie entweder die Konsole Dienste verwenden oder den folgenden Befehl eingeben:
net stop BindPlaneAgent && net start BindPlaneAgent
1Password-API-Token abrufen
Melden Sie sich in der 1Password-Web-UI an.
Rufen Sie Integrationen auf.
Klicken Sie oben auf der Seite auf Verzeichnis.
Geben Sie einen Namen für das Token ein und legen Sie das Ablaufdatum des Tokens fest.
Klicken Sie unter Berichterstellung zu Ereignissen auf Sonstige.
Wählen Sie unter Ereignistypen die Option Audit-Ereignisse aus.
Klicken Sie auf Issue Token (Token ausstellen), um den Zugriffstoken-Schlüssel zu generieren.
Klicken Sie auf In 1Password speichern und wählen Sie aus, in welchem Tresor Ihr Token gespeichert werden soll.
Klicken Sie auf Integrationsdetails ansehen, um das Token aufzurufen.
Konfigurieren Sie einen Linux-Host für die Ausführung des folgenden Befehls:
Führen Sie dazu diesen Befehl aus:
import datetime
import requests
import os
import socket
import json
# For more information, check out the support page: https://support.1password.com/events-reporting
api_token = os.environ.get('EVENTS_API_TOKEN')
url = "https://events.1password.com"
if not api_token:
print("Please set the EVENTS_API_TOKEN environment variable.")
exit(1)
start_time = datetime.datetime.now() - datetime.timedelta(hours=24)
# Define the bindplane agent details
syslog_server_ip = <ip-address> # Replace with your Bindplane IP
syslog_server_port = <port-number> # Replace with your Bindplane port
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {api_token}"
payload = {
"limit": 20,
"start_time": start_time.astimezone().replace(microsecond=0).isoformat()
# Alternatively, use the cursor returned from previous responses to get any new events
# payload = { "cursor": cursor }
try:
r = requests.post(f"{url}/api/v1/signinattempts", headers=headers, json=payload)
r.raise_for_status() # Raise an exception if the request fails
if r.status_code == requests.codes.ok:
# Send the response to the bindplane server
syslog_message = f"{json.dumps(r.json())}"
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
sock.connect((syslog_server_ip, syslog_server_port))
sock.sendall(f"{syslog_message}\n".encode())
else:
print(f"Error getting sign-in attempts: status code {r.status_code}")
except requests.exceptions.RequestException as e:
print(f"Request error: {e}")
except Exception as e:
print(f"Error during syslog logging: {e}")
[[["Leicht verständlich","easyToUnderstand","thumb-up"],["Mein Problem wurde gelöst","solvedMyProblem","thumb-up"],["Sonstiges","otherUp","thumb-up"]],[["Schwer verständlich","hardToUnderstand","thumb-down"],["Informationen oder Beispielcode falsch","incorrectInformationOrSampleCode","thumb-down"],["Benötigte Informationen/Beispiele nicht gefunden","missingTheInformationSamplesINeed","thumb-down"],["Problem mit der Übersetzung","translationIssue","thumb-down"],["Sonstiges","otherDown","thumb-down"]],["Zuletzt aktualisiert: 2025-09-02 (UTC)."],[],[],null,["# Collect 1Password audit logs\n============================\n\nSupported in: \nGoogle secops [SIEM](/chronicle/docs/secops/google-secops-siem-toc)\n| **Note:** This feature is covered by [Pre-GA Offerings Terms](https://chronicle.security/legal/service-terms/) of the Google Security Operations Service Specific Terms. Pre-GA features might have limited support, and changes to pre-GA features might not be compatible with other pre-GA versions. For more information, see the [Google SecOps Technical Support Service guidelines](https://chronicle.security/legal/technical-support-services-guidelines/) and the [Google SecOps Service Specific Terms](https://chronicle.security/legal/service-terms/).\n\nThis document explains how to ingest 1Password audit logs to Google Security Operations\nusing Bindplane. The parser transforms raw JSON formatted log data into a\nstructured format compliant with the Google SecOps Unified Data\nModel (UDM). It specifically focuses on normalizing and enriching events related\nto user sign-in attempts, extracting details about the user, their location,\nclient information, and the outcome of the attempt.\n\nBefore you begin\n----------------\n\nEnsure that you have the following prerequisites:\n\n- Google SecOps instance\n- Windows 2016 or later or Linux host with systemd\n- If running behind a proxy, firewall [ports](/chronicle/docs/ingestion/use-bindplane-agent#verify_the_firewall_configuration) are open\n- Privileged access to 1Password\n\nGet Google SecOps ingestion authentication file\n-----------------------------------------------\n\n1. Sign in to the Google SecOps console.\n2. Go to **SIEM Settings \\\u003e Collection Agents**.\n3. Download the **Ingestion Authentication File**. Save the file securely on the system where Bindplane will be installed.\n\nGet Google SecOps customer ID\n-----------------------------\n\n1. Sign in to the Google SecOps console.\n2. Go to **SIEM Settings \\\u003e Profile**.\n3. Copy and save the **Customer ID** from the **Organization Details** section.\n\nInstall the Bindplane agent\n---------------------------\n\n### Windows installation\n\n1. Open the **Command Prompt** or **PowerShell** as an administrator.\n2. Run the following command:\n\n msiexec /i \"https://github.com/observIQ/bindplane-agent/releases/latest/download/observiq-otel-collector.msi\" /quiet\n\n### Linux installation\n\n1. Open a terminal with root or sudo privileges.\n2. Run the following command:\n\n sudo sh -c \"$(curl -fsSlL https://github.com/observiq/bindplane-agent/releases/latest/download/install_unix.sh)\" install_unix.sh\n\n### Additional installation resources\n\nFor additional installation options, consult the [installation guide](/chronicle/docs/ingestion/use-bindplane-agent#install_the_bindplane_agent).\n\nConfigure the Bindplane agent to ingest Syslog and send to Google SecOps\n------------------------------------------------------------------------\n\n1. Access the configuration file:\n - Locate the `config.yaml` file. Typically, it's in the `/etc/bindplane-agent/` directory on Linux or in the installation directory on Windows.\n - Open the file using a text editor (for example, `nano`, `vi`, or Notepad).\n2. Edit the `config.yaml` file as follows:\n\n receivers:\n udplog:\n # Replace the port and IP address as required\n listen_address: \"0.0.0.0:514\"\n\n exporters:\n chronicle/chronicle_w_labels:\n compression: gzip\n # Adjust the path to the credentials file you downloaded in Step 1\n creds: '/path/to/ingestion-authentication-file.json'\n # Replace with your actual customer ID from Step 2\n customer_id: \u003ccustomer_id\u003e\n endpoint: malachiteingestion-pa.googleapis.com\n # Add optional ingestion labels for better organization\n ingestion_labels:\n log_type: 'ONEPASSWORD_AUDIT_EVENTS'\n raw_log_field: body\n\n service:\n pipelines:\n logs/source0__chronicle_w_labels-0:\n receivers:\n - udplog\n exporters:\n - chronicle/chronicle_w_labels\n\n3. Replace the port and IP address as required in your infrastructure.\n\n4. Replace `\u003ccustomer_id\u003e` with the actual customer ID.\n\n5. Update `/path/to/ingestion-authentication-file.json` to the path where the authentication file was saved in the [Get Google SecOps ingestion authentication file](/chronicle/docs/ingestion/default-parsers/onepassword-audit-events#get-auth-file) section.\n\nRestart the Bindplane agent to apply the changes\n------------------------------------------------\n\n- To restart the Bindplane agent in Linux, run the following command:\n\n sudo systemctl restart bindplane-agent\n\n- To restart the Bindplane agent in Windows, you can either use the **Services** console or enter the following command:\n\n net stop BindPlaneAgent && net start BindPlaneAgent\n\nGet the 1Password API token\n---------------------------\n\n1. Sign in to the **1Password** web UI.\n2. Go to **Integrations**.\n3. Click **Directory** at the top of the page.\n4. Enter a name for the **token** and set the token **expiration**.\n5. In **Events Reporting** , click **Other**.\n6. Select **Audit events** from **Event Types**.\n7. Click **Issue Token** to generate the access token key.\n8. Click **Save in 1Password** and select which vault to save your token to.\n9. Click **View Integration Details** to view the token.\n\nConfigure a Linux host to run the following command\n---------------------------------------------------\n\n- Run the following command:\n\n import datetime\n import requests\n import os \n import socket \n import json\n\n # For more information, check out the support page: https://support.1password.com/events-reporting\n\n api_token = os.environ.get('EVENTS_API_TOKEN')\n url = \"https://events.1password.com\"\n if not api_token:\n print(\"Please set the EVENTS_API_TOKEN environment variable.\")\n exit(1)\n start_time = datetime.datetime.now() - datetime.timedelta(hours=24)\n\n # Define the bindplane agent details\n\n syslog_server_ip = \u003cip-address\u003e # Replace with your Bindplane IP\n syslog_server_port = \u003cport-number\u003e # Replace with your Bindplane port\n headers = {\n \"Content-Type\": \"application/json\",\n \"Authorization\": f\"Bearer {api_token}\"\n payload = {\n \"limit\": 20,\n \"start_time\": start_time.astimezone().replace(microsecond=0).isoformat()\n\n # Alternatively, use the cursor returned from previous responses to get any new events\n # payload = { \"cursor\": cursor }\n try:\n r = requests.post(f\"{url}/api/v1/signinattempts\", headers=headers, json=payload)\n r.raise_for_status() # Raise an exception if the request fails\n if r.status_code == requests.codes.ok:\n\n # Send the response to the bindplane server\n syslog_message = f\"{json.dumps(r.json())}\"\n with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:\n sock.connect((syslog_server_ip, syslog_server_port))\n sock.sendall(f\"{syslog_message}\\n\".encode())\n else:\n print(f\"Error getting sign-in attempts: status code {r.status_code}\")\n except requests.exceptions.RequestException as e:\n print(f\"Request error: {e}\")\n except Exception as e:\n print(f\"Error during syslog logging: {e}\")\n\n**Need more help?** [Get answers from Community members and Google SecOps professionals.](https://security.googlecloudcommunity.com/google-security-operations-2)"]]