איסוף יומנים של ManageEngine ADManager Plus
במסמך הזה מוסבר איך להטמיע יומנים של ManageEngine ADManager Plus ב-Google Security Operations באמצעות סוכן Bindplane.
ManageEngine ADManager Plus מציע פתרון מבוסס-אינטרנט לניהול פשוט של AD, כולל יצירה ושינוי של משתמשים, אבטחה מבוססת-תפקידים ודוחות מפורטים. השילוב של ADManager Plus עם שרתי Splunk ו-Syslog מאפשר לארגונים להעביר יומנים של כל פעולות הניהול של Active Directory, Microsoft 365 ו-Google Workspace שבוצעו ב-ADManager Plus.
לפני שמתחילים
חשוב לוודא שיש לכם את הדברים הבאים:
- מופע של Google SecOps
- Windows Server 2016 ואילך, או מארח Linux עם
systemd - קישוריות רשת בין סוכן Bindplane לבין ManageEngine ADManager Plus
- אם מריצים את הסוכן מאחורי שרת proxy, מוודאים שיציאות חומת האש פתוחות בהתאם לדרישות של סוכן Bindplane
- גישה מיוחדת למסוף הניהול של ManageEngine ADManager Plus
קבלת פרטי כניסה ל-Google SecOps בשביל סוכן Bindplane
כדי לאמת את סוכן Bindplane ב-Google SecOps, בוחרים באחת מהשיטות הבאות:
- פריסות חדשות: משתמשים ב-Chronicle API (אפשרות 1).
- פריסות קודמות: ממשיכים להשתמש בקובץ האימות להטמעת נתונים (אפשרות 2) עד שה-Ingestion API יופסק ב-20 ביולי 2027.
אפשרות 1: יצירת חשבון שירות ל-Chronicle API (מומלץ)
- נכנסים למסוףGoogle Cloud ובוחרים את הפרויקט ב- Google Cloud שמקושר למכונה של Google SecOps.
- נכנסים אל IAM & Admin > Service Accounts (ניהול הרשאות גישה (IAM) & אדמין > חשבונות שירות).
- לוחצים על Create service account.
- מזינים את פרטי ההגדרה הבאים:
- Service account name: מזינים שם לחשבון (לדוגמה,
bindplane-ingest). - Service account description: מזינים תיאור (לדוגמה,
Bindplane agent log ingestion).
- Service account name: מזינים שם לחשבון (לדוגמה,
- לוחצים על Create and continue.
- בקטע Grant this service account access to project, לוחצים על Select a role ובוחרים באפשרות Chronicle Editor.
- לוחצים על המשך ואז על סיום.
- לוחצים על חשבון השירות שיצרתם ואז עוברים לכרטיסייה Keys.
- לוחצים על Add key > Create new key.
- בוחרים באפשרות JSON ולוחצים על Create. קובץ המפתח יורד למחשב.
- שומרים את קובץ המפתח בשם
ingestion-auth.jsonבספריית Bindplane Collector (/opt/observiq-otel-collector/ingestion-auth.jsonב-Linux אוC:\Program Files\observIQ OpenTelemetry Collector\ingestion-auth.jsonב-Windows), או מעדכנים אתcreds_file_pathב-config.yamlכך שיתאים לנתיב שבו שומרים את הקובץ. - עוברים אל IAM & Admin > Settings (ניהול הרשאות גישה ואדמין > הגדרות) ומעתיקים את מספר הפרויקט. תצטרכו אותו כדי להגדיר את כלי הייצוא.
אפשרות 2: הורדת קובץ אימות להטמעת נתונים (גרסה מדור קודם)
- נכנסים למסוף Google SecOps.
- עוברים אל הגדרות SIEM > סוכני איסוף.
- מורידים את קובץ האימות להטמעת נתונים.
- שומרים את הקובץ בצורה מאובטחת במערכת שבה יותקן הסוכן של Bindplane.
איך מקבלים את מספר הלקוח ב-Google SecOps
- נכנסים למסוף Google SecOps.
- עוברים אל SIEM Settings > Profile.
מעתיקים את מזהה הלקוח מהקטע פרטי הארגון ושומרים אותו.
התקנת הסוכן של Bindplane
מתקינים את הסוכן של Bindplane במערכת ההפעלה Windows או Linux לפי ההוראות הבאות.
התקנת חלונות
- פותחים את שורת הפקודה או את PowerShell כאדמין.
מריצים את הפקודה הבאה:
msiexec /i "https://github.com/observIQ/bindplane-otel-collector/releases/latest/download/observiq-otel-collector.msi" /quietמחכים שההתקנה תסתיים.
כדי לוודא שההתקנה בוצעה, מריצים את הפקודה:
sc query observiq-otel-collector
השירות צריך להופיע עם הערך RUNNING.
התקנה ב-Linux
- פותחים טרמינל עם הרשאות root או sudo.
מריצים את הפקודה הבאה:
sudo sh -c "$(curl -fsSlL https://github.com/observiq/bindplane-otel-collector/releases/latest/download/install_unix.sh)" install_unix.shמחכים שההתקנה תסתיים.
מאמתים את ההתקנה על ידי הרצת:
sudo systemctl status observiq-otel-collector
השירות אמור להופיע כ-active (running).
מקורות מידע נוספים להתקנה
לאפשרויות התקנה נוספות ולפתרון בעיות, קראו את מדריך ההתקנה של סוכן Bindplane.
הגדרה של סוכן Bindplane לקליטת syslog ושליחה ל-Google SecOps
מאתרים את קובץ התצורה
Linux:
sudo nano /opt/observiq-otel-collector/config.yamlWindows:
notepad "C:\Program Files\observIQ OpenTelemetry Collector\config.yaml"
עריכת קובץ התצורה
מחליפים את כל התוכן של
config.yamlבהגדרה הבאה:receivers: tcplog: listen_address: "0.0.0.0:514" exporters: chronicle/admanager_plus: 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 creds_file_path: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: chronicle.googleapis.com log_type: ADMANAGER_PLUS raw_log_field: body ingestion_labels: log_source: admanager_plus service: pipelines: logs/admanager_to_chronicle: receivers: - tcplog exporters: - chronicle/admanager_plusמחליפים את ה-placeholders הבאים:
הגדרת מקלט:
- המקלט משתמש ב-
tcplogכדי לקבל נתוני syslog ביציאת TCP 514. -
listen_address: מגדירים את הערך0.0.0.0:514כדי להאזין לכל הממשקים ביציאה 514.
- המקלט משתמש ב-
הגדרת כלי הייצוא:
-
<CREDS_FILE_PATH>: הנתיב המלא לקובץ המפתח של חשבון השירות בפורמט JSON (אפשרות 1):- Linux:
/opt/observiq-otel-collector/ingestion-auth.json - Windows:
C:\\Program Files\\observIQ OpenTelemetry Collector\\ingestion-auth.json
- Linux:
-
<CUSTOMER_ID>: מספר הלקוח מהשלב הקודם. -
location: מחליפים את<LOCATION>באזור של המכונה של Google SecOps (לדוגמה,us,europeאוasia-southeast1). המייצא מוסיף את הערך הזה בתחילתchronicle.googleapis.com. לרשימה המלאה, ראו נקודות קצה אזוריות. -
project: מחליפים את<PROJECT_NUMBER>במספר הפרויקט שמופיע בקטע IAM & Admin > Settings. -
endpoint: צריך להשאיר את ההגדרהchronicle.googleapis.com. -
log_type: צריך להגדיר את הערך ל-ADMANAGER_PLUSבדיוק כמו שהוא מופיע ב-Chronicle. -
ingestion_labels: תוויות אופציונליות בפורמט YAML.
-
מייצא API להטמעה מדור קודם
אם אתם משתמשים בקובץ האימות להטמעת נתונים מאפשרות 2, החליפו את הבלוק
exportersבקוד הבא. מגדירים אתcreds_file_pathלנתיב לקובץ האימות של ההעברה, ואם המופע שלכם נמצא מחוץ לארה"ב, מחליפים אתmalachiteingestion-pa.googleapis.comבנקודת הקצה האזורית (לדוגמה,europe-malachiteingestion-pa.googleapis.com).exporters: chronicle/admanager_plus: compression: gzip creds_file_path: '<CREDS_FILE_PATH>' customer_id: '<CUSTOMER_ID>' endpoint: malachiteingestion-pa.googleapis.com log_type: ADMANAGER_PLUS raw_log_field: body ingestion_labels: log_source: admanager_plus
שמירת קובץ התצורה
אחרי העריכה, שומרים את הקובץ:
- Linux: מקישים על
Ctrl+O, אחר כך עלEnterואז עלCtrl+X. - Windows: לוחצים על קובץ > שמירה
מפעילים מחדש את הסוכן של Bindplane כדי להחיל את השינויים.
Linux
כדי להפעיל מחדש את סוכן Bindplane ב-Linux, מריצים את הפקודה הבאה:
sudo systemctl restart observiq-otel-collectorמוודאים שהשירות פועל:
sudo systemctl status observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
sudo journalctl -u observiq-otel-collector -f
Windows
כדי להפעיל מחדש את הסוכן של Bindplane ב-Windows, בוחרים באחת מהאפשרויות הבאות:
באמצעות שורת הפקודה או PowerShell כאדמין:
net stop observiq-otel-collector && net start observiq-otel-collectorשימוש במסוף Services:
- לוחצים על
Win+R, מקלידיםservices.mscולוחצים על Enter. - מחפשים את observIQ Distro for OpenTelemetry Collector.
- לוחצים לחיצה ימנית ובוחרים באפשרות הפעלה מחדש.
- לוחצים על
מוודאים שהשירות פועל:
sc query observiq-otel-collectorבודקים אם יש שגיאות ביומנים:
type "C:\Program Files\observIQ OpenTelemetry Collector\log\collector.log"
הגדרת העברת syslog ב-ManageEngine ADManager Plus
- מתחברים ל-ADManager Plus.
- עוברים לכרטיסייה אדמין.
- בקטע System Settings (הגדרות המערכת), לוחצים על Integrations (שילובים).
בקטע Log Forwarding, לוחצים על Syslog.
מגדירים את השדות הבאים:
- שרת Syslog: מזינים את שם שרת ה-Syslog. מזינים את כתובת ה-IP או את שם המארח של מארח הסוכן של Bindplane.
- יציאה: מזינים את מספר היציאה. מזינים את הערך
514. - פרוטוקול: בוחרים את הפרוטוקול המתאים, TCP או UDP, להעברת יומנים. בוחרים באפשרות TCP.
- תקן Syslog: בוחרים את פורמט ההודעה הרצוי של Syslog: RFC 3164, RFC 5424 או RawLog. בוחרים באפשרות RFC 5424 (מומלץ).
- פורמט נתונים: מזינים את פורמט הנתונים. מגדירים את פורמט הנתונים לפי הצורך בסביבה שלכם.
לוחצים על שמירה כדי לשמור את ההגדרה.
אחרי ההגדרה, ADManager Plus יתחיל להעביר את יומני פעולות הניהול לסוכן Bindplane, שישלח אותם ל-Google SecOps.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
| ipPhone | event.idm.read_only_udm.additional.fields | מוזג כתווית עם המפתח "ipPhone" והערך מ-ipPhone אם ipPhone != "" |
| l | event.idm.read_only_udm.additional.fields | המיזוג מתבצע כתווית עם המפתח 'l' והערך מ-l אם l != "" |
| lockoutTime | event.idm.read_only_udm.additional.fields | המיזוג מתבצע כתווית עם המפתח lockoutTime והערך מ-lockoutTime אם lockoutTime != "" |
| העברה מ- | event.idm.read_only_udm.additional.fields | מוזג כתווית עם המפתח "Move From" והערך מ-Move_From אם Move_From != "" |
| העברה אל | event.idm.read_only_udm.additional.fields | מוזג כתווית עם המפתח "Move To" והערך מ-Move_To אם Move_To != "" |
| msg | event.idm.read_only_udm.additional.fields | המיזוג מתבצע כתווית עם המפתח 'חבר' והערך מההודעה אם ההודעה שונה מ-'' |
| sn | event.idm.read_only_udm.additional.fields | המיזוג מתבצע כתווית עם המפתח 'sn' והערך מ-sn אם sn != "" |
| st | event.idm.read_only_udm.additional.fields | מוזג כתווית עם המפתח "st" והערך מ-st אם st != "" |
| שם תבנית | event.idm.read_only_udm.additional.fields | מוזג כתווית עם המפתח "שם התבנית" והערך מ-Template_Name אם Template_Name != "" |
| סטטוס | event.idm.read_only_udm.metadata.description | הערך נלקח מהסטטוס אם הסטטוס שונה מ-"" |
| פעם | event.idm.read_only_udm.metadata.event_timestamp | המרת השעה לפורמט חותמת זמן אם השעה != "" |
| event.idm.read_only_udm.metadata.event_type | נגזר: אם has_principal_user == "true" אז "USER_UNCATEGORIZED"; אחרת אם has_principal == "true" אז "STATUS_UPDATE"; אחרת "GENERIC_EVENT" | |
| TechnicianName | event.idm.read_only_udm.metadata.product_event_type | הערך נלקח מ-TechnicianName אם TechnicianName != "" |
| event.idm.read_only_udm.metadata.product_name | ההגדרה היא ADMANAGER_PLUS | |
| event.idm.read_only_udm.metadata.vendor_name | ההגדרה היא ADMANAGER_PLUS | |
| שם דומיין | event.idm.read_only_udm.principal.administrative_domain | הערך נלקח מ-Domain_Name אם Domain_Name != "" |
| שם המארח | event.idm.read_only_udm.principal.asset.hostname | הערך נלקח משם המארח אם שם המארח != "" |
| כתובת אימייל | event.idm.read_only_udm.principal.email | הערך נלקח מהאימייל אם האימייל שונה מ-"" |
| שם המארח | event.idm.read_only_udm.principal.hostname | הערך נלקח משם המארח אם שם המארח != "" |
| co | event.idm.read_only_udm.principal.location.city | הערך נלקח מ-co אם co != "" |
| משימה | event.idm.read_only_udm.principal.resource.name | הערך נלקח מהמשימה אם Task != "" |
| wWWHomePage | event.idm.read_only_udm.principal.url | הערך נלקח מ-wWWHomePage אם wWWHomePage != "" |
| סוג הסיסמה | event.idm.read_only_udm.principal.user.attribute.labels | מוזג כתווית עם המפתח "סוג סיסמה" והערך מ-Password_Type אם Password_Type != "" |
| countryCode | event.idm.read_only_udm.principal.user.attribute.labels | מוזג כתווית עם המפתח "countryCode" והערך מ-countryCode אם countryCode != "" |
| סיסמה | event.idm.read_only_udm.principal.user.attribute.labels | מוזג כתווית עם המפתח "password" והערך מ-password אם password != "" |
| postalCode | event.idm.read_only_udm.principal.user.attribute.labels | המיזוג מתבצע כתווית עם המפתח postalCode והערך מ-postalCode אם postalCode != "" |
| primaryGroupID | event.idm.read_only_udm.principal.user.attribute.labels | המידע ימוזג כתווית עם המפתח primaryGroupID והערך מ-primaryGroupID אם primaryGroupID != "" |
| userAccountControl | event.idm.read_only_udm.principal.user.attribute.labels | המיזוג מתבצע כתווית עם המפתח userAccountControl והערך מ-userAccountControl אם userAccountControl != "" |
| userPrincipalName | event.idm.read_only_udm.principal.user.attribute.labels | מוזג כתווית עם המפתח "userPrincipalName" והערך מ-userPrincipalName אם userPrincipalName != "" |
| חברה | event.idm.read_only_udm.principal.user.company_name | הערך נלקח מהחברה אם החברה != "" |
| מחלקה | event.idm.read_only_udm.principal.user.department | מוזג עם המחלקה אם המחלקה != "" |
| givenName | event.idm.read_only_udm.principal.user.first_name | הערך נלקח מ-givenName אם givenName != "" |
| physicalDeliveryOfficeName | event.idm.read_only_udm.principal.user.office_address.name | הערך נלקח מ-physicalDeliveryOfficeName אם physicalDeliveryOfficeName != "" |
| streetAddress | event.idm.read_only_udm.principal.user.personal_address.name | הערך נלקח מ-streetAddress אם streetAddress != "" |
| homePhone | event.idm.read_only_udm.principal.user.phone_numbers | מוזג עם homePhone אם homePhone != "" |
| שם משתמש | event.idm.read_only_udm.principal.user.user_display_name | הערך נלקח מ-User_Name אם User_Name != ""; אחרת מ-Object_Name אם Object_Name != "" |
| sAMAccountName | event.idm.read_only_udm.principal.user.userid | הערך נלקח מ-sAMAccountName אם sAMAccountName != "" |
| פעולה | event.idm.read_only_udm.security_result.action_details | הערך נלקח מ-ACTION אם ACTION != "" |
| description | event.idm.read_only_udm.security_result.description | הערך נלקח מהתיאור אם התיאור שונה מ-"" |
| שם המאגר | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_DC_value1" והערך מ-dc_label_1 אם dc_label_1 != "" |
| שם המאגר | event.idm.read_only_udm.security_result.detection_fields | הערך נגזר מ-container_Name grok: בוצע מיזוג כתווית עם המפתח Container_Name_DC_value2 והערך מ-dc_label_2 אם dc_label_2 != "" |
| שם המאגר | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_OU_value1" והערך מ-ou_label_1 אם ou_label_1 != "" |
| שם המאגר | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_OU_value2" והערך מ-ou_label_2 אם ou_label_2 != "" |
| שם המאגר | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-container_Name grok: מוזג כתווית עם המפתח "Container_Name_OU_value3" והערך מ-ou_label_3 אם ou_label_3 != "" |
| קבוצה ראשית | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-Primary_Group grok: מוזג כתווית עם המפתח "Primary_Group_CN_value1" והערך מ-cn_label_1 אם cn_label_1 != "" |
| קבוצה ראשית | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-Primary_Group grok: מוזג כתווית עם המפתח "Primary_Group_CN_value2" והערך מ-cn_label_2 אם cn_label_2 != "" |
| קבוצה ראשית | event.idm.read_only_udm.security_result.detection_fields | הערך נגזר מ-Primary_Group grok: הערך מוזג כתווית עם המפתח Primary_Group_DC_value1 והערך מ-primary_dc_label_1 אם primary_dc_label_1 != "" |
| קבוצה ראשית | event.idm.read_only_udm.security_result.detection_fields | Derived from Primary_Group grok: merged as label with key "Primary_Group_DC_value2" and value from primary_dc_label_2 if primary_dc_label_2 != "" |
| accountExpires | event.idm.read_only_udm.security_result.detection_fields | המידע מוזג כתווית עם המפתח accountExpires והערך מ-accountExpires אם accountExpires != "" |
| מנהל | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-grok של המנהל: מוזג כתווית עם המפתח "manager_cn_value1" והערך מ-manager_cn_value1 אם manager_cn_value1 != "" |
| מנהל | event.idm.read_only_udm.security_result.detection_fields | Derived from manager grok: merged as label with key "manager_dc_value1" and value from manager_dc_value1 if manager_dc_value1 != "" |
| מנהל | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-grok של המנהל: מוזג כתווית עם המפתח "manager_dc_value2" והערך מ-manager_dc_value2 אם manager_dc_value2 != "" |
| מנהל | event.idm.read_only_udm.security_result.detection_fields | Derived from manager grok: merged as label with key "manager_ou_value1" and value from manager_ou_value1 if manager_ou_value1 != "" |
| מנהל | event.idm.read_only_udm.security_result.detection_fields | נגזר מ-grok של המנהל: מוזג כתווית עם המפתח "manager_ou_value2" והערך מ-manager_ou_value2 אם manager_ou_value2 != "" |
| מנהל | event.idm.read_only_udm.security_result.detection_fields | הערך נגזר מ-manager grok: הערך אוחד כתווית עם המפתח manager_ou_value3 והערך מ-manager_ou_value3 אם manager_ou_value3 != "" |
| pwdLastSet | event.idm.read_only_udm.security_result.detection_fields | המיזוג מתבצע כתווית עם המפתח pwdLastSet והערך מ-pwdLastSet אם pwdLastSet != "" |
| ModuleName | event.idm.read_only_udm.target.resource.name | הערך נלקח מ-ModuleName אם ModuleName != "" |
Object_Name |
event.idm.read_only_udm.target.user.user_display_name |
מופה מיומן השינויים |
syslog_priority |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
syslog_version |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
product_app_id |
event.idm.read_only_udm.additional.fields |
מופה מיומן השינויים |
User_Name |
event.idm.read_only_udm.target.user.user_display_name |
מופה מיומן השינויים |
User_Name |
event.idm.read_only_udm.target.user.userid |
מופה מיומן השינויים |
streetAddress |
event.idm.ready_only_udm.principal.user.personal_address.name |
מופה מיומן השינויים |
physicalDeliveryOfficeName |
event.idm.ready_only_udm.principal.user.office_address.name |
מופה מיומן השינויים |
postalCode |
event.idm.ready_only_udm.principal.user.attribute.labels |
מופה מיומן השינויים |
countryCode |
event.idm.ready_only_udm.principal.user.attribute.labels |
מופה מיומן השינויים |
company |
event.idm.ready_only_udm.principal.user.company_name |
מופה מיומן השינויים |
department |
event.idm.ready_only_udm.principal.user.department |
מופה מיומן השינויים |
accountExpires |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
ou_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
ou_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
ou_label_3 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
dc_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
dc_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
cn_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
cn_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
primary_dc_label_1 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
primary_dc_label_2 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
manager_cn_value1 |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
, |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
and |
event.idm.ready_only_udm.security_result.detection_fields |
מופה מיומן השינויים |
givenName |
event.idm.ready_only_udm.user.first_name |
מופה מיומן השינויים |
sn |
event.idm.ready_only_udm.additional.fields |
מופה מיומן השינויים |
st |
event.idm.ready_only_udm.additional.fields |
מופה מיומן השינויים |
l |
event.idm.ready_only_udm.additional.fields |
מופה מיומן השינויים |
wWWHomePage |
event.idm.ready_only_udm.principal.url |
מופה מיומן השינויים |
homePhone |
event.idm.ready_only_udm.principal.user.phone_numbers |
מופה מיומן השינויים |
co |
event.idm.ready_only_udm.principal.location.city |
מופה מיומן השינויים |
יומן שינויים
צפייה ביומן השינויים של המנתח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.