איסוף יומני Google Cloud Compute
גרסת המנתח: 2.0
במאמר הזה מוסבר איך להגדיר ייצוא של יומני Compute ל-Google Security Operations באמצעות Cloud Storage. Google Cloud המנתח מחלץ שדות, מנרמל את שדה ההודעה וממפה את הנתונים שחולצו לסכימה של Unified Data Model (UDM) כדי לייצג אירועי אבטחה באופן עקבי. הוא מטפל בפורמטים שונים של יומנים, כולל הודעות דמויות syslog וצמדי מפתח/ערך, ומסווג אירועים על סמך שדות שחולצו כמו type ו-action.
לפני שמתחילים
ודאו שאתם עומדים בדרישות המוקדמות הבאות:
- מופע של Google SecOps.
- Compute מוגדר ופעיל בסביבת Google Cloud .
- גישה מיוחדת אל Google Cloud.
יצירת קטגוריה של Google Cloud Storage
- נכנסים למסוףGoogle Cloud .
נכנסים לדף Cloud Storage Buckets.
לוחצים על Create.
ממלאים את פרטי הקטגוריה בדף Create a bucket. אחרי כל אחד מהשלבים הבאים, לוחצים על המשך כדי לעבור לשלב הבא:
בקטע Get started:
- מזינים שם ייחודי שעומד בדרישות לשמות של קטגוריות, לדוגמה compute-logs.
כדי להפעיל מרחב שמות היררכי, לוחצים על החץ להרחבת הקטע Optimize for file oriented and data-intensive workloads ובוחרים באפשרות Enable Hierarchical namespace on this bucket.
- כדי להוסיף תווית לקטגוריה, לוחצים על החץ להרחבת הקטע Labels.
- לוחצים על Add label ומציינים מפתח וערך בשביל התווית.
בקטע Choose where to store your data מבצעים את הפעולות הבאות:
בוחרים Location type.
- בתפריט של סוג המיקום, בוחרים מיקום שבו נתוני האובייקטים בקטגוריה יאוחסנו באופן קבוע.
- כדי להגדיר שכפול בין קטגוריות, מרחיבים את הקטע Set up cross-bucket replication.
בקטע Choose a storage class for your data, בוחרים default storage class לקטגוריה, או בוחרים ב-Autoclass לניהול אוטומטי של סוג האחסון (storage class) של נתוני הקטגוריה.
בקטע Choose how to control access to objects, בוחרים באפשרות not כדי לאכוף את public access prevention, ובוחרים access control model לאובייקטים של הקטגוריה.
בקטע Choose how to protect object data:
- בוחרים באחת מהאפשרויות בקטע הגנה על נתונים שרוצים להגדיר לקטגוריה.
- כדי לבחור איך נתוני האובייקטים יוצפנו, לוחצים על החץ להרחבה שנקרא Data encryption ובוחרים Data encryption method.
לוחצים על יצירה.
הגדרת ייצוא של יומני Google Cloud Compute
- במסוף Google Cloud, נכנסים לדף Logging > Log Router.
- לוחצים על Create Sink.
- מזינים את פרטי ההגדרה הבאים:
- Sink Name: מזינים שם בעל משמעות (לדוגמה,
Compute-Logs-Sink). - Sink Destination: בוחרים באפשרות Cloud Storage.
- קטגוריה של Cloud Storage: מזינים את ה-URI של הקטגוריה (לדוגמה,
gs://compute-logs/compute-logs/).
- Sink Name: מזינים שם בעל משמעות (לדוגמה,
בקטע Build inclusion filter, מגדירים את מסנן היומנים כדי לתעד את יומני Google Cloud Compute באמצעות אחת או יותר מהתבניות הבאות:
מסנן סוג המשאב (חובה – צריך לבחור אחד):
רק ליומנים של מכונות וירטואליות:
resource.type="gce_instance"לכל המשאבים שקשורים ל-GCE (מכונות וירטואליות, רשתות משנה, חומות אש):
resource.type=("gce_instance" OR "gce_subnetwork" OR "gce_network" OR "gce_firewall_rule")
סוגי יומנים ספציפיים (אופציונלי – אפשר להוסיף לפי הצורך):
ביומני ביקורת (פעולות במכונות, שינויים בהגדרות):
resource.type="gce_instance" logName:"cloudaudit.googleapis.com/activity"ב-VPC Flow logs (תנועה ברשת):
resource.type="gce_subnetwork" logName:"vpc_flows"ביומני חומת האש (חיבורים שאושרו או נדחו):
resource.type="gce_subnetwork" logName:"compute.googleapis.com/firewall"ביומנים של הקונסולה הטורית:
resource.type="gce_instance" logName:"serialconsole.googleapis.com"
מסננים שקשורים לרשת (אופציונלי – אפשר להוסיף לפי הצורך):
סינון לפי פרטי החיבור (כתובות IP של מקור/יעד, יציאות):
jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:*סינון לפי פרטי המכונה:
jsonPayload.dest_instance.project_id:* OR jsonPayload.src_instance.project_id:*סינון לפי פעולות אבטחה:
jsonPayload.rule_details.action=("ALLOW" OR "BLOCK")
דוגמה: מסנן מלא לרישום מקיף ביומן של Compute:
(resource.type="gce_instance" OR resource.type="gce_subnetwork") AND ( logName:"cloudaudit.googleapis.com/activity" OR logName:"vpc_flows" OR logName:"compute.googleapis.com/firewall" OR jsonPayload.connection.dest_ip:* OR jsonPayload.connection.src_ip:* )לוחצים על Create Sink.
הגדרת הרשאות ל-Cloud Storage
- נכנסים לדף IAM > IAM & Admin > Service Accounts.
- מאתרים את חשבון השירות של Cloud Logging, לדוגמה service-account@logging.iam.gserviceaccount.com.
- מקצים לו את התפקיד roles/storage.admin בקטגוריה.
הגדרת פידים
יש שתי נקודות כניסה שונות להגדרת פידים בפלטפורמת Google SecOps:
- הגדרות > ניהול נתונים > פידים > הוספת פיד חדש (בפלטפורמה של SIEM בלבד, הגדרות > פידים > הוספת פיד חדש)
- מרכז התוכן > חבילות תוכן > מתחילים
איך מגדירים את פיד Google Cloud compute
- לוחצים על החבילה Google Cloud Compute platform.
- מאתרים את סוג היומן GCP Compute Feed ולוחצים על Add new feed.
מציינים ערכים בשדות הבאים:
- סוג המקור: Google Cloud Storage V2.
- Storage Bucket URI: כתובת ה-URL של קטגוריה של Cloud Storage, לדוגמה
gs://compute-context-logs/. כתובת ה-URL הזו חייבת להסתיים בקו נטוי (/). אפשרות מחיקת המקור: בוחרים את אפשרות המחיקה הרצויה.
גיל הקובץ המקסימלי: כולל קבצים ששונו במספר הימים האחרונים. ברירת המחדל היא 180 ימים.
חשבון שירות של Chronicle: מעתיקים את חשבון השירות. תצטרכו אותו כדי להוסיף הרשאות בקטגוריה לחשבון השירות הזה, כדי לאפשר ל-Google SecOps לקרוא או למחוק נתונים בקטגוריה.
אפשרויות מתקדמות
- שם הפיד: ערך שמולא מראש ומזהה את הפיד.
- מרחב השמות של הנכס: מרחב השמות שמשויך לפיד.
- תוויות הטמעה: תוויות שנוספו לכל האירועים מהפיד הזה.
לוחצים על יצירת פיד.
למידע נוסף על הגדרת כמה פידים לסוגי יומנים שונים במשפחת המוצרים הזו, ראו הגדרת פידים לפי מוצר.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | Logic (פונקציה לוגית) |
|---|---|---|
| addr | read_only_udm.principal.ip | הן מוזגו לרשימת כתובות ה-IP הראשיות אם השדה לא ריק או לא מכיל את התו "?". |
| jsonPayload.connection.dest_ip | read_only_udm.target.ip | אם השדה קיים, הוא מוזג לרשימת כתובות ה-IP של היעד. |
| jsonPayload.connection.dest_port | read_only_udm.target.port | הערך מומר למחרוזת, לאחר מכן למספר שלם, ואז ממופה אם לא מתרחשות שגיאות במהלך ההמרה. |
| jsonPayload.connection.protocol | read_only_udm.network.ip_protocol | הערך מומר למחרוזת ואז למספר שלם. משמש לקביעת פרוטוקול ה-IP (TCP, UDP וכו') באמצעות טבלת בדיקת מידע, וממופה אם לא מתרחשות שגיאות במהלך ההמרה. |
| jsonPayload.connection.src_ip | read_only_udm.principal.ip | הן מוזגו לרשימת כתובות ה-IP הראשיות אם השדה קיים. |
| jsonPayload.connection.src_port | read_only_udm.principal.port | הערך מומר למחרוזת, לאחר מכן למספר שלם, ואז ממופה אם לא מתרחשות שגיאות במהלך ההמרה. |
| jsonPayload.dest_instance.project_id | read_only_udm.target.resource.product_object_id | מיפוי מותנה אם קיים jsonPayload.dest_vpc.project_id. |
| jsonPayload.dest_instance.region | read_only_udm.target.location.name | מיפוי מותנה אם קיים jsonPayload.dest_vpc.project_id. |
| jsonPayload.dest_instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | מיפוי מותנה אם קיים jsonPayload.dest_vpc.project_id. |
| jsonPayload.dest_instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | מיפוי מותנה אם קיים jsonPayload.dest_vpc.project_id. |
| jsonPayload.dest_vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | משמש כתנאי למיפוי שדות קשורים. |
| jsonPayload.dest_vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | מיפוי מותנה אם קיים jsonPayload.dest_vpc.project_id. |
| jsonPayload.instance.project_id | read_only_udm.target.resource.product_object_id | מיפוי מותנה אם jsonPayload.instance.project_id קיים. |
| jsonPayload.instance.region | read_only_udm.target.location.name | מיפוי מותנה אם jsonPayload.instance.project_id קיים. |
| jsonPayload.instance.vm_name | read_only_udm.target.resource.attribute.cloud.project.name | מיפוי מותנה אם jsonPayload.instance.project_id קיים. |
| jsonPayload.instance.zone | read_only_udm.target.resource.attribute.cloud.availability_zone | מיפוי מותנה אם jsonPayload.instance.project_id קיים. |
| jsonPayload.message | read_only_udm.metadata.product_event_type, read_only_udm.principal.application, read_only_udm.target.process.pid, read_only_udm.target.user.userid, read_only_udm.principal.hostname, read_only_udm.target.process.command_line, read_only_udm.security_result.description, read_only_udm.principal.process.file.full_path | מנותחים וממופים לשדות שונים על סמך תבניות grok ולוגיקה מותנית. |
| jsonPayload.rule_details.action | read_only_udm.security_result.action | משמש לקביעת הפעולה של תוצאת האבטחה (ALLOW/BLOCK) וממופה. |
| jsonPayload.rule_details.direction | read_only_udm.network.direction | משמש לקביעת כיוון הרשת (INBOUND/OUTBOUND/UNKNOWN_DIRECTION) וממופה. |
| jsonPayload.rule_details.priority | read_only_udm.security_result.priority_details | הערך מומר למחרוזת וממופה אם לא מתרחשות שגיאות במהלך ההמרה. |
| jsonPayload.rule_details.reference | read_only_udm.security_result.rule_labels.value | ממופה לערך של תווית הכלל. |
| jsonPayload.src_instance.project_id | read_only_udm.principal.resource.product_object_id | מיפוי מותנה אם jsonPayload.src_vpc.project_id קיים. |
| jsonPayload.src_instance.region | read_only_udm.principal.location.name | מיפוי מותנה אם jsonPayload.src_vpc.project_id קיים. |
| jsonPayload.src_instance.vm_name | read_only_udm.principal.resource.attribute.cloud.project.name | מיפוי מותנה אם jsonPayload.src_vpc.project_id קיים. |
| jsonPayload.src_instance.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | מיפוי מותנה אם jsonPayload.src_vpc.project_id קיים. |
| jsonPayload.src_vpc.project_id | read_only_udm.principal.cloud.vpc.product_object_id | משמש כתנאי למיפוי שדות קשורים. |
| jsonPayload.src_vpc.subnetwork_name | read_only_udm.principal.cloud.vpc.name | מיפוי מותנה אם jsonPayload.src_vpc.project_id קיים. |
| jsonPayload.vpc.project_id | read_only_udm.target.cloud.vpc.product_object_id | מיפוי מותנה אם קיים jsonPayload.vpc.project_id. |
| jsonPayload.vpc.subnetwork_name | read_only_udm.target.cloud.vpc.name | מיפוי מותנה אם קיים jsonPayload.vpc.project_id. |
| logName | read_only_udm.security_result.category_details | ממופה ישירות. |
| resource.labels.instance_id | read_only_udm.principal.resource.product_object_id, read_only_udm.principal.asset_id | מיפוי מותנה. אם הסוג הוא "PROCTITLE", הוא משמש ליצירת מזהה הנכס. |
| resource.labels.location | read_only_udm.principal.location.name | מיפוי מותנה אם השדה קיים. |
| resource.labels.project_id | read_only_udm.metadata.product_deployment_id | מיפוי מותנה אם השדה קיים. |
| resource.labels.zone | read_only_udm.principal.resource.attribute.cloud.availability_zone | מיפוי מותנה אם השדה קיים. |
| resource.type | read_only_udm.metadata.event_type | משמש לקביעת סוג האירוע ומיפוי שלו. |
| חותמת זמן | read_only_udm.metadata.event_timestamp | ממופה ישירות. |
| סוג | read_only_udm.metadata.product_event_type, read_only_udm.metadata.event_type, read_only_udm.extensions.auth.type | משמש לקביעת סוג האירוע, סוג אירוע המוצר וסוג האימות, וממופה בהתאם. |
| read_only_udm.metadata.event_type | הלוגיקה מגדירה את סוג האירוע על סמך השדה "type" ותנאים אחרים. אם לא נמצאה התאמה ספציפית, ברירת המחדל היא "GENERIC_EVENT". | |
| read_only_udm.metadata.log_type | ערך קבוע "GCP_COMPUTE". | |
| read_only_udm.metadata.vendor_name | ערך קבוע "Google Cloud Platform". | |
| read_only_udm.metadata.product_name | ערך קבוע "Google Cloud Platform". | |
| read_only_udm.security_result.rule_labels.key | ערך קבוע "Reference". | |
| read_only_udm.target.cloud.vpc.resource_type | מוגדר באופן מותנה ל-"VPC_NETWORK" אם jsonPayload.instance.project_id או jsonPayload.dest_vpc.project_id קיימים. | |
| read_only_udm.target.resource.attribute.cloud.environment | מוגדר באופן מותנה ל-"GOOGLE_CLOUD_PLATFORM" אם קיים jsonPayload.instance.project_id, jsonPayload.dest_vpc.project_id או jsonPayload.src_vpc.project_id. | |
| read_only_udm.principal.administrative_domain | ממופה מהשדה "דומיין החשבון" שחולץ מהשדה "kv_data". | |
| read_only_udm.principal.user.user_display_name | ממופה מהשדה "שם החשבון" שחולץ מהשדה "kv_data". | |
| read_only_udm.target.resource.name | ממופה מהשדה "שם האובייקט" שחולץ מהשדה "kv_data". | |
| read_only_udm.target.resource.type | ממופה מהשדה "סוג אובייקט" שחולץ מהשדה "kv_data". | |
| read_only_udm.principal.process.pid | ממופה מהשדה "מזהה תהליך" שחולץ מהשדה "kv_data". | |
| read_only_udm.target.user.windows_sid | מופה מהשדה "מזהה אבטחה" שחולץ מהשדה "kv_data". | |
| read_only_udm.network.session_id | ממופה מהשדה auid. |
יומן שינויים
הצגת יומן השינויים של המנתח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.