איסוף יומני ביקורת של NetApp Console (לשעבר BlueXP)

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומני ביקורת של NetApp Console (לשעבר BlueXP) ב-Google Security Operations באמצעות Google Cloud Storage V2.

NetApp Console היא מישור בקרה מאוחד לניהול שירותי אחסון ונתונים היברידיים מרובי עננים בסביבות מקומיות ובענן. שירות הביקורת מתעד פעולות שבוצעו על ידי שירותי Console, כולל כתובות IP שמקורן, סביבות עבודה, סוכני Console שנעשה בהם שימוש ונתוני טלמטריה אחרים שמועילים לניתוח משפטי ולדרישות תאימות.

לפני שמתחילים

חשוב לוודא שמתקיימות דרישות הסף הבאות:

  • מכונה של Google SecOps
  • פרויקט GCP עם ממשקי Cloud Storage,‏ Cloud Run,‏ Pub/Sub ו-Cloud Scheduler API מופעלים
  • הרשאות ליצירה ולניהול של קטגוריות ב-GCS
  • הרשאות לניהול מדיניות IAM בקטגוריות GCS
  • הרשאות ליצירת שירותי Cloud Run, נושאי Pub/Sub ומשימות ב-Cloud Scheduler
  • הרשאת אדמין למסוף NetApp עם הרשאות ליצירת חשבונות שירות
  • מספר החשבון ב-NetApp Console

הגדרת גישה ל-API של NetApp Console

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

איך מאתרים את מזהה החשבון

  1. בדפדפן, עוברים אל NetApp Console.
  2. נכנסים באמצעות פרטי הכניסה למסוף NetApp או לאתר התמיכה של NetApp.
  3. לוחצים על התפריט הנפתח חשבון בחלק העליון של הדף.
  4. לוחצים על ניהול החשבון בחשבון שנבחר.
  5. בקטע סקירה כללית, מעתיקים את הערך של מזהה החשבון.

יצירה של חשבון שירות

  1. במסוף NetApp, עוברים אל Administration > Identity and access (ניהול > זהות וגישה).
  2. לוחצים על חברים.
  3. לוחצים על הוספת חבר.
  4. בשדה Member Type, בוחרים באפשרות Service account.
  5. מזינים שם לחשבון השירות (לדוגמה, Google SecOps Integration).
  6. משאירים את התיבה Use private key JWT authentication (שימוש באימות JWT של מפתח פרטי) לא מסומנת כדי להשתמש באימות של סוד הלקוח.

  7. בקטע Select an organization, folder, or project (בחירת ארגון, תיקייה או פרויקט), בוחרים את הארגון.

  8. בקטע קטגוריה, בוחרים באפשרות ארגון.

  9. בשדה Role (תפקיד), בוחרים באפשרות Organization viewer (צפייה בארגון).

  10. לוחצים על הוספה.

תיעוד פרטי הכניסה ל-API

אחרי שיוצרים את חשבון השירות, נפתחת תיבת דו-שיח עם פרטי הכניסה:

  • Client ID: מזהה הלקוח הייחודי שלכם (לדוגמה, TvPPs4SeM5smEElsGmdDUznljhN3YY8s)
  • ‫Client Secret: מפתח ה-API Secret
  1. מורידים או מעתיקים את מזהה הלקוח ואת סוד הלקוח למקום מאובטח.
  2. לוחצים על Close.

אימות ההרשאות

כדי לוודא שלחשבון השירות יש את ההרשאות הנדרשות:

  1. נכנסים למסוף NetApp.
  2. עוברים אל ניהול > זהויות וגישה.
  3. לוחצים על משתתפים.
  4. מאתרים את חשבון השירות שיצרתם ומוודאים שיש לו את התפקיד צפייה בארגון.
  5. אם התפקיד לא מוקצה, לוחצים על שם חשבון השירות ומעדכנים את התפקיד לOrganization viewer.

בדיקת הגישה ל-API

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

    # Replace with your actual credentials
    CLIENT_ID="your-client-id"
    CLIENT_SECRET="your-client-secret"
    ACCOUNT_ID="your-account-id"
    
    # Obtain access token
    TOKEN=$(curl -s -X POST "https://netapp-cloud-account.auth0.com/oauth/token" \
        -H "Content-Type: application/json" \
        -d '{
            "grant_type": "client_credentials",
            "client_id": "'"${CLIENT_ID}"'",
            "client_secret": "'"${CLIENT_SECRET}"'",
            "audience": "https://api.cloud.netapp.com"
        }' | python3 -c "import sys,json; print(json.load(sys.stdin)['access_token'])")
    
    # Test audit API access
    curl -s -H "Authorization: Bearer ${TOKEN}" \
        "https://cloudmanager.cloud.netapp.com/audit/${ACCOUNT_ID}?offset=0" \
        | python3 -m json.tool
    

תגובה מוצלחת מחזירה אובייקט JSON שמכיל רשומות ביקורת של החשבון שצוין.

יצירת קטגוריה של Google Cloud Storage

  1. נכנסים למסוף Google Cloud.
  2. בוחרים פרויקט או יוצרים פרויקט חדש.
  3. בתפריט הניווט, עוברים אל Cloud Storage > Buckets.
  4. לוחצים על Create bucket.
  5. ממלאים את פרטי ההגדרה הבאים:

    הגדרה ערך
    Name your bucket (שם הקטגוריה) מזינים שם ייחודי גלובלית (לדוגמה, netapp-bluexp-audit-logs)
    סוג המיקום בוחרים לפי הצרכים (אזור, שני אזורים, מספר אזורים)
    Location בוחרים את המיקום (לדוגמה, us-central1).
    סוג האחסון (storage class) רגיל (מומלץ ליומנים שצריך לגשת אליהם לעיתים קרובות)
    בקרת גישה אחידה (מומלץ)
    כלי הגנה אופציונלי: הפעלת ניהול גרסאות של אובייקטים או מדיניות שמירת נתונים
  6. לוחצים על יצירה.

יצירת חשבון שירות לפונקציית Cloud Run

  1. במסוף GCP, עוברים אל IAM & Admin > Service Accounts.
  2. לוחצים על Create Service Account.
  3. מספקים את פרטי ההגדרה הבאים:
    • שם חשבון השירות: מזינים netapp-bluexp-collector-sa
    • תיאור חשבון השירות: מזינים Service account for Cloud Run function to collect NetApp Console audit logs
  4. לוחצים על יצירה והמשך.
  5. בקטע Grant this service account access to project (מתן גישה של חשבון השירות הזה לפרויקט), מוסיפים את התפקידים הבאים:
    1. לוחצים על בחירת תפקיד.
    2. מחפשים את Storage Object Admin ולוחצים עליו.
    3. לוחצים על + הוספת תפקיד.
    4. מחפשים את האפשרות Cloud Run Invoker (הפעלת שירותים ב-Cloud Run) ולוחצים עליה.
    5. לוחצים על + הוספת תפקיד נוסף.
    6. מחפשים את האפשרות Cloud Functions Invoker (הפעלת פונקציות של Cloud Functions) ולוחצים עליה.
  6. לוחצים על Continue.
  7. לוחצים על סיום.

מתן הרשאות IAM בקטגוריית GCS

  1. עוברים אל Cloud Storage > Buckets (קטגוריות).
  2. לוחצים על שם הקטגוריה (netapp-bluexp-audit-logs).
  3. עוברים לכרטיסייה Permissions.
  4. לוחצים על הענקת גישה.
  5. מזינים את פרטי ההגדרה הבאים:
    • הוספת ישויות מורשות: מזינים את כתובת האימייל בחשבון של חשבון השירות (netapp-bluexp-collector-sa@PROJECT_ID.iam.gserviceaccount.com)
    • הקצאת תפקידים: בוחרים באפשרות אדמין של אובייקטים באחסון.
  6. לוחצים על Save.

יצירת נושא Pub/Sub

  1. במסוף GCP, עוברים אל Pub/Sub > Topics.
  2. לוחצים על יצירת נושא.
  3. מספקים את פרטי ההגדרה הבאים:
    • מזהה הנושא: מזינים netapp-bluexp-audit-trigger
    • השארת ההגדרות האחרות כברירת מחדל
  4. לוחצים על יצירה.

יצירת פונקציית Cloud Run לאיסוף יומנים

הפונקציה Cloud Run תופעל על ידי הודעות Pub/Sub מ-Cloud Scheduler כדי לאחזר יומני ביקורת מ-NetApp Console Audit API ולכתוב אותם ב-GCS.

  1. במסוף GCP, נכנסים ל-Cloud Run.
  2. לוחצים על יצירת שירות.
  3. בוחרים באפשרות Function (שימוש בעורך ישיר ליצירת פונקציה).
  4. בקטע Configure, מזינים את פרטי ההגדרה הבאים:

    הגדרה ערך
    שם השירות netapp-bluexp-collector
    אזור בוחרים אזור שתואם ל-GCS Bucket (לדוגמה, us-central1)
    זמן ריצה בוחרים באפשרות Python 3.12 ואילך.
  5. בקטע טריגר (אופציונלי):

    1. לוחצים על + הוספת טריגר.
    2. בוחרים באפשרות Cloud Pub/Sub.
    3. בקטע Select a Cloud Pub/Sub topic, בוחרים באפשרות netapp-bluexp-audit-trigger.
    4. לוחצים על Save.
  6. בקטע Authentication:

    1. לוחצים על דרישת אימות.
    2. בודקים את ניהול זהויות והרשאות גישה (IAM).
  7. גוללים למטה ומרחיבים את Containers, Networking, Security (מאגרי תגים, רשתות, אבטחה).

  8. עוברים לכרטיסייה אבטחה:

    • חשבון שירות: בוחרים באפשרות netapp-bluexp-collector-sa
  9. עוברים לכרטיסייה מאגרי תגים:

    1. לוחצים על Variables & Secrets (משתנים וסודות).
    2. לוחצים על + הוספת משתנה לכל משתנה סביבתי:
    שם משתנה ערך לדוגמה תיאור
    GCS_BUCKET netapp-bluexp-audit-logs שם קטגוריית GCS
    GCS_PREFIX netapp-bluexp-audit קידומת לקובצי יומן
    STATE_KEY netapp-bluexp-audit/state.json נתיב קובץ תמונת מצב
    NETAPP_CLIENT_ID your-client-id מזהה הלקוח של חשבון השירות ב-NetApp Console
    NETAPP_CLIENT_SECRET your-client-secret סוד הלקוח של חשבון השירות ב-NetApp Console
    NETAPP_ACCOUNT_ID account-AbCdEfGh מספר החשבון ב-NetApp Console
    MAX_RECORDS 5000 מספר הרשומות המקסימלי בכל הפעלה
    LOOKBACK_HOURS 24 תקופת המבט לאחור הראשונית
  10. בקטע Variables & Secrets, גוללים למטה אל Requests:

    • זמן קצוב לתפוגת בקשה: מזינים 600 שניות (10 דקות)
  11. עוברים לכרטיסייה הגדרות:

    • בקטע Resources:
      • זיכרון: בוחרים באפשרות 512MiB או יותר
      • מעבד (CPU): בוחרים באפשרות 1.
  12. בקטע Revision scaling:

    • מספר מינימלי של מופעים: מזינים 0
    • Maximum number of instances: מזינים 100
  13. לוחצים על יצירה.

  14. ממתינים ליצירת השירות (1-2 דקות).

  15. אחרי שיוצרים את השירות, עורך הקוד המוטבע נפתח באופן אוטומטי.

הוספת קוד פונקציה

  1. מזינים main בשדה Entry point.
  2. בעורך הקוד המוטבע, יוצרים שני קבצים:

    • main.py:
    import functions_framework
    from google.cloud import storage
    import json
    import os
    import urllib3
    from datetime import datetime, timezone, timedelta
    import time
    
    http = urllib3.PoolManager(
      timeout=urllib3.Timeout(connect=5.0, read=30.0),
      retries=False,
    )
    
    storage_client = storage.Client()
    
    GCS_BUCKET = os.environ.get('GCS_BUCKET')
    GCS_PREFIX = os.environ.get('GCS_PREFIX', 'netapp-bluexp-audit')
    STATE_KEY = os.environ.get('STATE_KEY', 'netapp-bluexp-audit/state.json')
    NETAPP_CLIENT_ID = os.environ.get('NETAPP_CLIENT_ID')
    NETAPP_CLIENT_SECRET = os.environ.get('NETAPP_CLIENT_SECRET')
    NETAPP_ACCOUNT_ID = os.environ.get('NETAPP_ACCOUNT_ID')
    MAX_RECORDS = int(os.environ.get('MAX_RECORDS', '5000'))
    LOOKBACK_HOURS = int(os.environ.get('LOOKBACK_HOURS', '24'))
    
    TOKEN_URL = 'https://netapp-cloud-account.auth0.com/oauth/token'
    API_BASE = 'https://cloudmanager.cloud.netapp.com'
    AUDIENCE = 'https://api.cloud.netapp.com'
    
    def to_unix_millis(dt):
      if dt.tzinfo is None:
        dt = dt.replace(tzinfo=timezone.utc)
      dt = dt.astimezone(timezone.utc)
      return int(dt.timestamp() * 1000)
    
    def parse_datetime(value):
      if value.endswith('Z'):
        value = value[:-1] + '+00:00'
      return datetime.fromisoformat(value)
    
    def get_access_token():
      body = json.dumps({
        'grant_type': 'client_credentials',
        'client_id': NETAPP_CLIENT_ID,
        'client_secret': NETAPP_CLIENT_SECRET,
        'audience': AUDIENCE,
      }).encode('utf-8')
    
      response = http.request(
        'POST', TOKEN_URL,
        body=body,
        headers={'Content-Type': 'application/json'}
      )
    
      if response.status != 200:
        raise Exception(
          f"Token request failed: {response.status} - "
          f"{response.data.decode('utf-8')}"
        )
    
      data = json.loads(response.data.decode('utf-8'))
      token = data.get('access_token')
      if not token:
        raise Exception('No access_token in token response')
    
      print('Successfully obtained NetApp Console access token')
      return token
    
    @functions_framework.cloud_event
    def main(cloud_event):
      if not all([GCS_BUCKET, NETAPP_CLIENT_ID, NETAPP_CLIENT_SECRET, NETAPP_ACCOUNT_ID]):
        print('Error: Missing required environment variables')
        return
    
      try:
        bucket = storage_client.bucket(GCS_BUCKET)
        state = load_state(bucket)
        now = datetime.now(timezone.utc)
    
        if isinstance(state, dict) and state.get('last_event_time'):
          try:
            last_val = state['last_event_time']
            if last_val.endswith('Z'):
              last_val = last_val[:-1] + '+00:00'
            last_time = datetime.fromisoformat(last_val)
            last_time = last_time - timedelta(minutes=2)
          except Exception as e:
            print(f'Warning: Could not parse last_event_time: {e}')
            last_time = now - timedelta(hours=LOOKBACK_HOURS)
        else:
          last_time = now - timedelta(hours=LOOKBACK_HOURS)
    
        print(f'Fetching audit logs from {last_time.isoformat()} to {now.isoformat()}')
    
        token = get_access_token()
    
        records, newest_time = fetch_audit_logs(token, last_time, now)
    
        if not records:
          print('No new audit records found.')
          save_state(bucket, now.isoformat())
          return
    
        timestamp = now.strftime('%Y%m%d_%H%M%S')
        object_key = f'{GCS_PREFIX}/netapp_bluexp_audit_{timestamp}.ndjson'
        blob = bucket.blob(object_key)
    
        ndjson = '\n'.join(
          [json.dumps(r, ensure_ascii=False, default=str) for r in records]
        ) + '\n'
        blob.upload_from_string(ndjson, content_type='application/x-ndjson')
    
        print(f'Wrote {len(records)} records to gs://{GCS_BUCKET}/{object_key}')
    
        save_state(bucket, newest_time if newest_time else now.isoformat())
    
        print(f'Successfully processed {len(records)} audit records')
    
      except Exception as e:
        print(f'Error processing audit logs: {str(e)}')
        raise
    
    def fetch_audit_logs(token, start_time, end_time):
      endpoint = f'{API_BASE}/audit/{NETAPP_ACCOUNT_ID}'
    
      headers = {
        'Authorization': f'Bearer {token}',
        'Accept': 'application/json',
        'User-Agent': 'GoogleSecOps-NetAppBlueXPCollector/1.0',
      }
    
      start_millis = to_unix_millis(start_time)
      end_millis = to_unix_millis(end_time)
    
      records = []
      newest_time = None
      offset = 0
      page_num = 0
      backoff = 1.0
    
      while True:
        page_num += 1
    
        if len(records) >= MAX_RECORDS:
          print(f'Reached max_records limit ({MAX_RECORDS})')
          break
    
        url = (
          f'{endpoint}'
          f'?fromLastModified={start_millis}'
          f'&toLastModified={end_millis}'
          f'&offset={offset}'
        )
    
        try:
          response = http.request('GET', url, headers=headers)
    
          if response.status == 429:
            retry_after = int(response.headers.get('Retry-After', str(int(backoff))))
            print(f'Rate limited (429). Retrying after {retry_after}s...')
            time.sleep(retry_after)
            backoff = min(backoff * 2, 30.0)
            continue
    
          backoff = 1.0
    
          if response.status != 200:
            print(f'HTTP Error: {response.status}')
            response_text = response.data.decode('utf-8')
            print(f'Response body: {response_text}')
            return [], None
    
          data = json.loads(response.data.decode('utf-8'))
    
          page_results = data.get('auditEntries', [])
    
          if not page_results:
            print('No more results (empty page)')
            break
    
          print(f'Page {page_num}: Retrieved {len(page_results)} audit records')
          records.extend(page_results)
    
          for entry in page_results:
            try:
              last_modified = entry.get('lastModified')
              if last_modified:
                entry_dt = datetime.fromtimestamp(
                  last_modified / 1000, tz=timezone.utc
                )
                entry_time = entry_dt.isoformat()
                if newest_time is None or parse_datetime(entry_time) > parse_datetime(newest_time):
                  newest_time = entry_time
            except Exception as e:
              print(f'Warning: Could not parse entry time: {e}')
    
          count = data.get('count', len(page_results))
          if count < 100:
            print(f'Reached last page (count={count})')
            break
    
          offset += count
    
        except Exception as e:
          print(f'Error fetching audit logs: {e}')
          return [], None
    
      print(f'Retrieved {len(records)} total audit records from {page_num} pages')
      return records, newest_time
    
    def load_state(bucket):
      try:
        blob = bucket.blob(STATE_KEY)
        if blob.exists():
          return json.loads(blob.download_as_text())
      except Exception as e:
        print(f'Warning: Could not load state: {e}')
      return {}
    
    def save_state(bucket, last_event_time_iso):
      try:
        state = {
          'last_event_time': last_event_time_iso,
          'last_run': datetime.now(timezone.utc).isoformat(),
        }
        blob = bucket.blob(STATE_KEY)
        blob.upload_from_string(
          json.dumps(state, indent=2),
          content_type='application/json'
        )
        print(f'Saved state: last_event_time={last_event_time_iso}')
      except Exception as e:
        print(f'Warning: Could not save state: {e}')
    
    • requirements.txt:
    functions-framework==3.*
    google-cloud-storage==2.*
    urllib3>=2.0.0
    
  3. לוחצים על Deploy כדי לשמור ולפרוס את הפונקציה.

  4. ממתינים לסיום הפריסה (2-3 דקות).

יצירת משימה ב-Cloud Scheduler

‫Cloud Scheduler יפרסם הודעות בנושא Pub/Sub במרווחי זמן קבועים, ויפעיל את הפונקציה של Cloud Run.

  1. במסוף GCP, עוברים אל Cloud Scheduler.
  2. לוחצים על Create Job (יצירת משימה).
  3. מספקים את פרטי ההגדרה הבאים:

    הגדרה ערך
    שם netapp-bluexp-collector-hourly
    אזור בחירה באותו אזור כמו פונקציית Cloud Run
    תדירות ‫0 * * * * (כל שעה, בשעה עגולה)
    אזור זמן בחירת אזור זמן (מומלץ לבחור UTC)
    סוג הטירגוט Pub/Sub
    נושא בחירת netapp-bluexp-audit-trigger
    גוף ההודעה ‫{} (אובייקט JSON ריק)
  4. לוחצים על יצירה.

אפשרויות לתדירות התזמון

בחירת התדירות בהתאם לנפח היומן ולדרישות זמן האחזור:

תדירות ביטוי Cron תרחיש לדוגמה
כל 5 דקות */5 * * * * נפח גבוה, זמן אחזור קצר
כל 15 דקות */15 * * * * נפח חיפושים בינוני
כל שעה 0 * * * * רגיל (מומלץ)
כל 6 שעות 0 */6 * * * נפח נמוך, עיבוד באצווה
יומי 0 0 * * * איסוף נתונים היסטוריים

בדיקת השילוב

  1. במסוף Cloud Scheduler, מאתרים את המשימה (netapp-bluexp-collector-hourly).
  2. לוחצים על Force run כדי להפעיל את המשימה באופן ידני.
  3. מחכים כמה שניות.
  4. עוברים אל Cloud Run > Services.
  5. לוחצים על netapp-bluexp-collector.
  6. לוחצים על הכרטיסייה Logs.
  7. מוודאים שהפונקציה בוצעה בהצלחה. מחפשים:

    Fetching audit logs from YYYY-MM-DDTHH:MM:SS+00:00 to YYYY-MM-DDTHH:MM:SS+00:00
    Successfully obtained NetApp Console access token
    Page 1: Retrieved X audit records
    Wrote X records to gs://netapp-bluexp-audit-logs/netapp-bluexp-audit/netapp_bluexp_audit_YYYYMMDD_HHMMSS.ndjson
    Successfully processed X audit records
    
  8. נכנסים לדף Cloud Storage > Buckets.

  9. לוחצים על netapp-bluexp-audit-logs.

  10. עוברים לתיקייה netapp-bluexp-audit/.

  11. מוודאים שנוצר קובץ .ndjson חדש עם חותמת הזמן הנוכחית.

אם מופיעות שגיאות ביומנים:

  • ‫HTTP 401: צריך לוודא שמשתני הסביבה NETAPP_CLIENT_ID ו-NETAPP_CLIENT_SECRET נכונים
  • ‫HTTP 403: מוודאים שלחשבון השירות יש את התפקיד Organization viewer ב-NetApp Console.
  • ‫HTTP 429: הגבלת קצב של יצירת בקשות – הפונקציה תנסה שוב באופן אוטומטי עם השהיה מעריכית לפני ניסיון חוזר (exponential backoff)
  • משתני סביבה חסרים: מוודאים שכל המשתנים הנדרשים מוגדרים בפונקציית Cloud Run.

אחזור של חשבון השירות של Google SecOps

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. לוחצים על Configure a single feed (הגדרת פיד יחיד).
  4. בשדה שם הפיד, מזינים שם לפיד (לדוגמה, NetApp Console Audit Logs).
  5. בוחרים באפשרות Google Cloud Storage V2 בתור סוג המקור.
  6. בוחרים באפשרות NetApp Console (לשעבר BlueXP) בתור סוג היומן.
  7. לוחצים על קבלת חשבון שירות. תוצג כתובת האימייל בחשבון שירות ייחודי, לדוגמה:

    chronicle-12345678@chronicle-gcp-prod.iam.gserviceaccount.com
    
  8. מעתיקים את כתובת האימייל הזו לשימוש בשלב הבא.

  9. לוחצים על הבא.

  10. מציינים ערכים לפרמטרים הבאים של הקלט:

    • כתובת ה-URL של קטגוריית האחסון: מזינים את ה-URI של קטגוריית GCS עם נתיב הקידומת:

      gs://netapp-bluexp-audit-logs/netapp-bluexp-audit/
      
    • אפשרות למחיקת המקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם:

      • אף פעם: לא נמחקים קבצים אחרי ההעברה (מומלץ לבדיקות).
      • מחיקת קבצים שהועברו: מחיקת קבצים אחרי שהם הועברו בהצלחה.
      • מחיקת קבצים שהועברו וספריות ריקות: מחיקת קבצים וספריות ריקות אחרי שההעברה מסתיימת בהצלחה.

    • הגיל המקסימלי של הקובץ: כולל קבצים ששונו במספר הימים האחרון (ברירת המחדל היא 180 ימים)

    • מרחב השמות של הנכס: מרחב השמות של הנכס

    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה

  11. לוחצים על הבא.

  12. בודקים את הגדרות הפיד החדש במסך סיום ולוחצים על שליחה.

הענקת הרשאות IAM לחשבון השירות של Google SecOps

  1. נכנסים לדף Cloud Storage > Buckets.
  2. לוחצים על netapp-bluexp-audit-logs.
  3. עוברים לכרטיסייה Permissions.
  4. לוחצים על הענקת גישה.
  5. מספקים את פרטי ההגדרה הבאים:
    • Add principals (הוספת ישויות מורשות): מדביקים את כתובת האימייל בחשבון של חשבון השירות של Google SecOps
    • הקצאת תפקידים: בוחרים באפשרות צפייה באובייקטים באחסון.
  6. לוחצים על Save.

טבלת מיפוי UDM

שדה ביומן מיפוי UDM היגיון
endTime additional.fields התוויות מכל אחד מהם ימוזגו אם הוא לא ריק
responseData additional.fields
weHash additional.fields
wePublicId additional.fields
hasFailedRecord additional.fields
פעולה additional.fields
שירות additional.fields
hasRecords additional.fields
workspaceId additional.fields
lastModified additional.fields
startTime additional.fields
agentName metadata.event_type הערך הוא STATUS_UPDATE אם agentName לא ריק, אחרת GENERIC_EVENT
agentId metadata.product_deployment_id הערך מועתק ישירות אם הוא לא ריק
requestId metadata.product_log_id הערך מועתק ישירות אם הוא לא ריק
network network שינוי השם באופן ישיר אם הוא לא ריק
agentName principal.asset.hostname הערך מועתק ישירות אם הוא לא ריק
fileName principal.file.names אם הוא לא ריק, הוא ימוזג
agentName principal.hostname הערך מועתק ישירות אם הוא לא ריק
accountId principal.resource.id הערך מועתק ישירות אם הוא לא ריק
resourceName principal.resource.name הערך מועתק ישירות אם הוא לא ריק
accountId principal.resource.product_object_id הערך מ-accountId אם הוא לא ריק, אחרת הערך מ-resourceId אם הוא לא ריק
resourceId principal.resource.product_object_id
principalId principal.user.userid הערך מועתק ישירות אם הוא לא ריק
סטטוס security_result.action הגדרה ל-ALLOW אם הסטטוס הוא ‎ =~ (?i)SUCCESS, הגדרה ל-BLOCK אם הסטטוס הוא FAILURE או UNSUCCESSFUL_ATTEMPT
סטטוס security_result.action_details הערך מועתק ישירות אם הוא לא ריק
יעד יעד שינוי השם באופן ישיר אם הוא לא ריק

יומן שינויים

צפייה ביומן השינויים של כלי הניתוח הזה

הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.