В настоящее время наша команда работает над скриптом Python для автоматических отчетов для Wazuh, но, похоже, возникла проблема с токенами API. Мы выполнили шаги, указанные в документации Wazuh, о том, как получить Wazuh API, но мы все равно столкнулся с ошибкой и не смог получить данные от нашего Wazuh Manager.
Как это исправить? Или как мы можем правильно получить/использовать токен Wazuh API?
Эту ошибку мы получаем при каждом запуске скрипта:
В настоящее время наша команда работает над скриптом Python для автоматических отчетов для Wazuh, но, похоже, возникла проблема с токенами API. Мы выполнили шаги, указанные в документации Wazuh, о том, как получить Wazuh API, но мы все равно столкнулся с ошибкой и не смог получить данные от нашего Wazuh Manager. Как это исправить? Или как мы можем правильно получить/использовать токен Wazuh API? Эту ошибку мы получаем при каждом запуске скрипта:
Ошибка получения данных: 401
[img]https://i.sstatic.net /oc4YlbA4.png[/img]
Вот наш скрипт: [code]import os from datetime import datetime from fpdf import FPDF import requests import urllib3
# Suppress SSL warnings (if needed for testing, but avoid in production) urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
# Wazuh API details api_url = "https://10.255.255.21" # Replace with your server IP or domain endpoint = "/security/events" headers = { 'Authorization': 'Bearer eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJ3YXp1aCIsImF1ZCI6IldhenVoIEFQSSBSRVNUIiwibmJmIjoxNzMyNjAyNzgwLCJleHAiOjE3MzI2MDM2ODAsInN1YiI6IndhenVoIiwicnVuX2FzIjpmYWxzZSwicmJhY19yb2xlcyI6WzFdLCJyYmFjX21vZGUiOiJ3aGl0ZSJ9.ABsFfykJS4X7JaGzfG-QvuRWyb4ib6NHYBMXy_Hs3d4he-317nAQhCs37A9YCTVSSMgxeQ8CvsTWw5M1t5Ncywd3AG3U2myDQF0fJ6PFkSnJ-d6iP6W6LCo-M_wdW13ntjc0D0Kuy-L0gL3FrDVox1MzDF44XblKjqnpbTW7G59UdCMU', # Replace with your token 'Content-Type': 'application/json' }
# Fetch alerts data from the Wazuh API try: response = requests.get(f"{api_url}{endpoint}?limit=50", headers=headers, verify=False) # Change verify=True to validate SSL certificate response.raise_for_status() # Raise an exception for HTTP errors data = response.json() except requests.exceptions.HTTPError as err: print(f"Error fetching data: {err}") exit()
# Create PDF Report class PDF(FPDF): def header(self): self.set_font('Arial', 'B', 14) self.cell(0, 10, 'Wazuh Alerts Report', border=False, ln=True, align='C')
# Check if 'data' and 'alerts' keys exist in the response if 'data' in data and 'alerts' in data['data']: for alert in data['data']['alerts']: alert_id = alert.get('id', 'N/A') severity = alert.get('rule', {}).get('level', 'N/A') description = alert.get('rule', {}).get('description', 'No description available') timestamp = alert.get('timestamp', 'N/A') rule = alert.get('rule', {}).get('id', 'N/A')
pdf.chapter_title(f"Alert ID: {alert_id}") body = ( f"Rule ID: {rule}\n" f"Description: {description}\n" f"Severity: {severity}\n" f"Timestamp: {timestamp}" ) pdf.chapter_body(body) else: print("No alerts found in the response.") exit()
# Save report to a dedicated folder with a timestamped filename output_folder = os.path.expanduser("~/wazuh_reports") os.makedirs(output_folder, exist_ok=True) filename = f"{output_folder}/wazuh_alerts_{datetime.now().strftime('%Y-%m-%d')}.pdf" pdf.output(filename) print(f"Report saved to {filename}")
[/code] или вы можете проверить это здесь: https://github.com/jmlessrobbery/Wazuh-Scripts/blob/main/generate_wazuh_report.py Изменить: я включил в публикацию наш сценарий