קביעת מסנני אירועים ליומני ביקורת בענן

טריגר Eventarc מצהיר על העניין שלכם באירוע מסוים או בקבוצת אירועים, ומאפשר לכם לתעד אירועים ספציפיים ולהגיב להם. טריגרים של Eventarc עם type=google.cloud.audit.log.v1.written שולחים בקשות ליעד כשנוצר יומן ביקורת שתואם לקריטריוני הסינון של הטריגר. ההתאמות מתבצעות לפי הערכים הבאים מתוך רשומת יומן הביקורת:

  • serviceName: השירות שכתב את יומן הביקורת
  • methodName: הפעולה שנבדקת
  • resourceName: המשאב שנבדק

רשימה של Google Cloud שירותים שמספקים יומני ביקורת זמינה במאמר Google Cloud שירותים עם יומני ביקורת. אפשר גם לאחזר את ערכי המסנן של האירוע שחלים על סוג האירוע google.cloud.audit.log.v1.written.

זיהוי מסנני אירועים

כדי לזהות את מסנני האירועים המדויקים שנדרשים ליצירת טריגר, צריך ליצור את האירוע שרוצים לתעד, ואז להציג את הרשומה המתאימה ביומני הביקורת של Cloud. חשוב לדעת שנתונים מרשומה ביומן יכולים להתפצל ולהתפרס על פני כמה רשומות.

  1. מוודאים שהפעלתם את סוגי יומני הביקורת Data Access בשירות שלכם.

    כניסה לדף 'יומני ביקורת'

    שימו לב: שירותים שבהם הביקורת מופעלת כברירת מחדל לא מופיעים ברשימה.

    1. בטבלה הראשית בדף Audit Logs, בוחרים שירות Google Cloud.

    2. בכרטיסייה סוגי יומנים, מסמנים את תיבות הסימון Admin Read,‏ Data Read ו-Data Write ואז לוחצים על שמירה.

  2. מבצעים את הפעולה שעבורה רוצים ליצור מסנן אירועים ומפיקים רשומה ביומן הביקורת. לדוגמה, אחסון קובץ בקטגוריה של Cloud Storage.

  3. במסוף Google Cloud , עוברים אל Logs Explorer.

    כניסה לדף Logs Explorer

  4. בחלונית Query builder, יוצרים ומריצים שאילתה כדי לסנן את רשומות היומן ולאחזר את התוצאות. לדוגמה:

    resource.type="gcs_bucket" resource.labels.bucket_name="eventarc-bucket"
    

    מידע נוסף על יצירת שאילתות לאחזור ולסינון יומנים זמין במאמר יצירת שאילתות באמצעות שפת השאילתות של Logging.

  5. כדי לראות את הפרטים המלאים של רשומה ביומן, לוחצים על חץ ההרחבה (▸) בתחילת הרשומה.

    השדה protoPayload מבדיל בין רשומה ביומן הביקורת לבין רשומות אחרות ביומן. בדוגמה הבאה, חלקים מסוימים מהרשומה ביומן הושמטו, וחלק מהשדות מודגשים:

    {
       protoPayload:{
          @type:"type.googleapis.com/google.cloud.audit.AuditLog",
          status:{},
          authenticationInfo:{},
          requestMetadata:{},
          serviceName:"storage.googleapis.com",
          methodName:"storage.objects.create",
          authorizationInfo:[],
          resourceName:"projects/_/buckets/eventarc-bucket/objects/random.txt",
          resourceLocation:{}
       },
       insertId:"il9evleafpdk",
       resource:{
          type:"gcs_bucket",
          labels:{
             project_id:"cloud-run-test",
             location:"us-central1",
             bucket_name:"eventarc-bucket"
          }
       },
       timestamp:"2021-03-05T15:55:20.754688805Z",
       severity:"INFO",
       logName:"projects/cloud-run-test/logs/cloudaudit.googleapis.com%2Fdata_access",
       receiveTimestamp:"2021-03-05T15:55:20.884984611Z"
    }

    • אפשר להשתמש במידע הבא כדי לאמת את התוכן של הרשומה הזו ביומן הביקורת:

      • השדה protoPayload.@type הוא type.googleapis.com/google.cloud.audit.AuditLog.

      • השדה logName כולל את הדומיין cloudaudit.googleapis.com.

    • השדה protoPayload.serviceName הוא השירות שכתב את יומן הביקורת.

    • השדה protoPayload.methodName הוא הפעולה שנבדקת.

    • השדה protoPayload.resourceName הוא המשאב שנבדק.

    לפרטים נוספים על איתור מידע ברשומה ביומן ביקורת, ראו הסבר על יומני ביקורת.

אחזור ערכי מסנני אירועים

אפשר להשתמש בפקודה gcloud eventarc audit-logs-provider כדי לבדוק ולרשום את הערכים של ספק serviceName ו-methodName עבור סוג האירוע google.cloud.audit.log.v1.written.

כדי להציג רשימה של שמות שירותים, מריצים את הפקודה הבאה:

gcloud eventarc audit-logs-provider service-names list

הפונקציה מחזירה את כל ערכי המאפיינים serviceName עבור סוג האירוע google.cloud.audit.log.v1.written.

כדי לפרסם את שמות השיטות בשירות מסוים, מריצים את הפקודה הבאה:

gcloud eventarc audit-logs-provider method-names list \
     --service-name=SERVICE_NAME

מחליפים את SERVICE_NAME בערך serviceName – לדוגמה, bigquery.googleapis.com.

דוגמאות לטריגרים של Eventarc

בדוגמה הבאה נוצר טריגר בשם cal-workflows-trigger ליעד Workflows. מסנני הטריגר ליומני ביקורת שנכתבים על ידי bigquery.googleapis.com ולפעולה שמזוהה כ-google.cloud.bigquery.v2.JobService.InsertJob:

gcloud eventarc triggers create cal-workflows-trigger \
   --location=us-central1 \
   --destination-workflow=my-workflow \
   --destination-workflow-location=europe-west4 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=bigquery.googleapis.com" \
   --event-filters="methodName=google.cloud.bigquery.v2.JobService.InsertJob" \
   --service-account=${TRIGGER_SA}@${PROJECT_ID}.iam.gserviceaccount.com

בדוגמה הבאה נוצר טריגר בשם cal-run-trigger ליעד Cloud Run. מסנני הטריגר ליומני ביקורת שנכתבים על ידי workflows.googleapis.com ולפעולה שמזוהה כ-google.cloud.workflows.v1.Workflows.GetWorkflow:

gcloud eventarc triggers create cal-run-trigger \
   --location=us-central1 \
   --destination-run-service=helloworld-events \
   --destination-run-region=us-central1 \
   --event-filters="type=google.cloud.audit.log.v1.written" \
   --event-filters="serviceName=workflows.googleapis.com" \
   --event-filters="methodName=google.cloud.workflows.v1.Workflows.GetWorkflow" \
   --event-filters="resourceName=projects/_/locations/us-central1/workflows/test-workflow" \
   --service-account=${PROJECT_NUMBER}-compute@developer.gserviceaccount.com

רשומות גדולות מדי ביומן הביקורת

Cloud Logging מפצל רשומות ביומן הביקורת שגדולות ממגבלת השימוש ומפיץ את הנתונים שכלולים ברשומה המקורית ביומן הביקורת בין כמה רשומות מפוצלות. אם רשומה ביומן מכילה שדה split, הרשומה היא תוצאה של פיצול רשומה גדולה יותר ביומן המקורי. השדה split הוא אובייקט LogSplit שמכיל את המידע שנדרש כדי לזהות רשומות קשורות של פיצול.

לכל רשומה מפוצלת יש protoPayload שכולל את אותם ערכים של serviceName,‏ methodName ו-resourceName כדי לעזור לסנן את האירועים ביומני הביקורת ב-Cloud. טריגרים של Eventarc מעבירים אירוע לכל רשומה מפוצלת.

אם יש לכם רשומה ביומן ביקורת שמפוצלת לכמה רשומות ביומן, אתם יכולים לסנן לפי כל אחד מהשדות ב-LogEntry. לדוגמה, אם אתם צריכים את הרשומה הראשונה בסדרה של רשומות יומן מפוצלות, אתם יכולים להריץ את הפקודה הבאה ב-CLI של gcloud, ולהשתמש ב-split.index=0 כדי לציין את המיקום של הרשומה הראשונה:

gcloud logging read "split.index=0"

למידע נוסף, כולל הסבר על זיהוי רשומות ודוגמאות לשאילתות, אפשר לעיין במאמר בנושא פיצול רשומות ביומן ביקורת.

המאמרים הבאים