איסוף יומנים של פונקציות AWS Lambda

נתמך ב:

במאמר הזה מוסבר איך להטמיע יומנים של פונקציות AWS Lambda ב-Google Security Operations באמצעות Amazon S3.

‫AWS Lambda הוא שירות מחשוב ללא שרתים שמריץ את הקוד בתגובה לאירועים ומנהל באופן אוטומטי את משאבי המחשוב הבסיסיים. ‫Lambda שולח באופן אוטומטי את כל יומני הפונקציות (יומני פלטפורמה, יומני הרחבות ופלט אפליקציות) אל Amazon CloudWatch Logs, ויוצר קבוצת יומנים לכל פונקציה. השילוב הזה משתמש ב-Amazon Data Firehose כדי להזרים אירועים ביומן של Lambda מ-CloudWatch Logs לקטגוריית S3, ש-Google SecOps מעכלת באמצעות פיד Amazon S3 V2.

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

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

  • מופע של Google SecOps
  • גישה עם הרשאות למסוף הניהול של AWS לניהול:
    • AWS Lambda (פונקציות, הגדרת רישום ביומן)
    • Amazon CloudWatch Logs (קבוצות יומנים, מסנני מינוי)
    • Amazon Data Firehose (מקורות נתונים)
    • Amazon S3 (קטגוריות)
    • AWS IAM (תפקידים, מדיניות, משתמשים)

אימות של קבוצת היומנים ב-CloudWatch Logs עבור פונקציית Lambda

  • מערכת AWS Lambda יוצרת באופן אוטומטי קבוצת יומנים של CloudWatch Logs לכל פונקציה כשהיא מופעלת בפעם הראשונה. מוסכמת השמות של קבוצות יומנים שמוגדרת כברירת מחדל היא:

    /aws/lambda/<function-name>
    

כדי לבצע אימות:

  1. ב-AWS Console, עוברים אל CloudWatch > Logs > Log groups.
  2. חיפוש של /aws/lambda/.
  3. מוודאים שקיימת קבוצת יומנים לכל פונקציית Lambda שרוצים להטמיע את היומנים שלה.

הגדרת קטגוריה של AWS S3

  1. יוצרים קטגוריה ב-Amazon S3 לפי המדריך למשתמש בנושא יצירת קטגוריה.
  2. שומרים את השם של ה-bucket ואת האזור לעיון בעתיד (לדוגמה, lambda-logs-to-secops).

הגדרת תפקיד IAM ל-Amazon Data Firehose

Amazon Data Firehose דורש תפקיד IAM כדי לכתוב יומנים לקטגוריית S3.

יצירת מדיניות IAM

  1. במסוף AWS, עוברים אל IAM > Policies > Create policy (מדיניות > יצירת מדיניות).
  2. לוחצים על הכרטיסייה JSON.
  3. מדביקים את המדיניות הבאה (מחליפים את lambda-logs-to-secops בשם הקטגוריה בפועל):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "S3Delivery",
                "Effect": "Allow",
                "Action": [
                    "s3:AbortMultipartUpload",
                    "s3:GetBucketLocation",
                    "s3:GetObject",
                    "s3:ListBucket",
                    "s3:ListBucketMultipartUploads",
                    "s3:PutObject"
                ],
                "Resource": [
                    "arn:aws:s3:::lambda-logs-to-secops",
                    "arn:aws:s3:::lambda-logs-to-secops/*"
                ]
            },
            {
                "Sid": "CloudWatchLogging",
                "Effect": "Allow",
                "Action": [
                    "logs:PutLogEvents"
                ],
                "Resource": "arn:aws:logs:*:*:log-group:/aws/kinesisfirehose/lambda-logs-to-secops:log-stream:*"
            }
        ]
    }
    
  4. לוחצים על הבא.

  5. בשדה Policy name, מזינים LambdaLogsFirehoseS3Policy.

  6. לוחצים על יצירת מדיניות.

יצירת תפקיד IAM

  1. עוברים אל IAM > Roles > Create role (ניהול זהויות וגישה > תפקידים > יצירת תפקיד).
  2. בוחרים באפשרות מדיניות אמון בהתאמה אישית.
  3. מדביקים את מדיניות ההרשאות הבאה:

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "firehose.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. לוחצים על הבא.

  5. מחפשים את LambdaLogsFirehoseS3Policy ובוחרים בו.

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

  7. בשדה שם התפקיד מזינים LambdaLogsFirehoseToS3Role.

  8. לוחצים על יצירת תפקיד.

יצירת הזרם של Amazon Data Firehose

  1. פותחים את מסוף Kinesis בכתובת https://console.aws.amazon.com/kinesis.
  2. בחלונית הניווט, בוחרים באפשרות Amazon Data Firehose.
  3. לוחצים על יצירת מקור נתונים של Firehose.
  4. בקטע Choose source and destination (בחירת מקור ויעד), מציינים את ההגדרות הבאות:
    • מקור: בוחרים באפשרות העלאה ישירה.
    • יעד: בוחרים באפשרות Amazon S3.
  5. בשדה Firehose stream name, מזינים lambda-logs-to-secops.
  6. בקטע Transform records (שינוי רשומות), בקטע Decompress source records from Amazon CloudWatch Logs (ביטול הדחיסה של רשומות המקור מ-Amazon CloudWatch Logs):

    1. בוחרים באפשרות הפעלת ביטול הדחיסה.
    2. לא בוחרים באפשרות הפעלה של חילוץ הודעות.
  7. בקטע הגדרות יעד:

    • קטגוריית S3: בוחרים את קטגוריית S3‏ lambda-logs-to-secops.
    • תחילית של מאגר S3 (אופציונלי): מזינים lambda-logs/.
    • קידומת פלט שגיאה של S3 bucket (אופציונלי): מזינים firehose-errors/.
  8. בקטע הצעות להוספת הפסקה בין פגישות:

    • שטח אחסון זמני: 5 MiB (ברירת מחדל).
    • הפסקה בין פגישות: 300 שניות (ברירת מחדל).
  9. בקטע הגדרות מתקדמות:

    • הצפנה בצד השרת: אופציונלי. מפעילים אם נדרשת הצפנה.
    • רישום שגיאות ביומן: בוחרים באפשרות מופעל (מומלץ).
    • הרשאות: בוחרים באפשרות בחירת תפקיד IAM קיים ואז בוחרים את LambdaLogsFirehoseToS3Role.
  10. לוחצים על יצירת מקור נתונים של Firehose.

  11. מחכים עד שהסטטוס של השידור Status יהיה Active.

הגדרת תפקיד IAM ל-CloudWatch Logs

כדי לשלוח נתוני יומן לזרם Firehose, צריך להקצות תפקיד IAM ל-CloudWatch Logs.

יצירת מדיניות IAM

  1. עוברים אל IAM > מדיניות > יצירת מדיניות.
  2. לוחצים על הכרטיסייה JSON.
  3. מדביקים את המדיניות הבאה (מחליפים את <region> ואת <account-id> באזור ובמזהה החשבון שלכם ב-AWS):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Action": [
                    "firehose:PutRecord",
                    "firehose:PutRecordBatch"
                ],
                "Resource": "arn:aws:firehose:<region>:<account-id>:deliverystream/lambda-logs-to-secops"
            }
        ]
    }
    
  4. לוחצים על הבא.

  5. בשדה Policy name, מזינים LambdaLogsCWLtoFirehosePolicy.

  6. לוחצים על יצירת מדיניות.

יצירת תפקיד IAM

  1. עוברים אל IAM > Roles > Create role (ניהול זהויות וגישה > תפקידים > יצירת תפקיד).
  2. בוחרים באפשרות מדיניות אמון בהתאמה אישית.
  3. מדביקים את מדיניות ההרשאה הבאה (מחליפים את <region> באזור AWS שלכם):

    {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Effect": "Allow",
                "Principal": {
                    "Service": "logs.<region>.amazonaws.com"
                },
                "Action": "sts:AssumeRole"
            }
        ]
    }
    
  4. לוחצים על הבא.

  5. מחפשים את LambdaLogsCWLtoFirehosePolicy ובוחרים בו.

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

  7. בשדה שם התפקיד מזינים LambdaLogsCWLtoFirehoseRole.

  8. לוחצים על יצירת תפקיד.

יצירת מסנן הרשמה ל-CloudWatch Logs

  1. ב-AWS Console, עוברים אל CloudWatch > Logs > Log groups.
  2. בוחרים את קבוצת היומנים /aws/lambda/<function-name>.
  3. בוחרים בכרטיסייה מסנני מינויים.
  4. לוחצים על Create > Create Amazon Data Firehose subscription filter (יצירה > יצירת מסנן מינוי של Amazon Data Firehose).
  5. מספקים את פרטי ההגדרה הבאים:
    • יעד: בוחרים את זרם Firehose lambda-logs-to-secops.
    • Grant permission (הענקת הרשאה): בוחרים את התפקיד LambdaLogsCWLtoFirehoseRole.
    • שם מסנן המינוי: מזינים שם תיאורי (לדוגמה, lambda-logs-to-secops-filter).
    • פורמט יומן: בוחרים באפשרות אחר.
    • תבנית לסינון מינויים: אם רוצים לשלוח את כל אירועי היומן של פונקציית Lambda, משאירים את השדה הזה ריק.
  6. לוחצים על התחלת השידור.

הגדרת משתמש IAM ל-Google SecOps

‫Google SecOps צריך משתמש IAM עם גישה ל-S3 bucket כדי להטמיע את היומנים שנמסרו.

  1. יוצרים משתמש לפי מדריך המשתמש הזה: יצירת משתמש IAM.
  2. בוחרים את המשתמש שנוצר.
  3. לוחצים על הכרטיסייה פרטי כניסה לאבטחה.
  4. בקטע מפתחות גישה, לוחצים על יצירת מפתח גישה.
  5. בוחרים באפשרות שירות של צד שלישי בתור תרחיש שימוש.
  6. לוחצים על הבא.
    • אופציונלי: מוסיפים תג תיאור.
  7. לוחצים על Create access key (יצירת מפתח גישה).
  8. לוחצים על הורדת קובץ CSV כדי לשמור את מפתח הגישה ואת מפתח הגישה הסודי לעיון עתידי.
  9. לוחצים על סיום.
  10. לוחצים על הכרטיסייה הרשאות.
  11. בקטע Permissions policies, לוחצים על Add permissions.
  12. לוחצים על הוספת הרשאות.
  13. בוחרים באפשרות צירוף מדיניות ישירות.
  14. מחפשים את המדיניות AmazonS3FullAccess.
  15. בוחרים את המדיניות.
  16. לוחצים על הבא.
  17. לוחצים על הוספת הרשאות.

הגדרת פיד ב-Google SecOps להטמעה של יומנים של פונקציות AWS Lambda

  1. עוברים אל SIEM Settings > Feeds (הגדרות SIEM > פידים).
  2. לוחצים על הוספת פיד חדש.
  3. בדף הבא, לוחצים על הגדרת פיד יחיד.
  4. מזינים שם ייחודי בשם הפיד.
  5. בוחרים באפשרות Amazon S3 V2 בתור סוג המקור.
  6. בוחרים באפשרות פונקציה של AWS Lambda בתור סוג היומן.
  7. לוחצים על הבא ואז על שליחה.
  8. מציינים ערכים בשדות הבאים:
    • S3 URI: s3://lambda-logs-to-secops/lambda-logs/
    • אפשרות למחיקת מקור: בוחרים את אפשרות המחיקה לפי ההעדפה שלכם
    • הגיל המקסימלי של הקובץ: כולל קבצים שעברו שינוי במספר הימים האחרון (ברירת המחדל היא 180 ימים)
    • מזהה מפתח הגישה: מפתח הגישה של המשתמש עם גישה לקטגוריית S3
    • מפתח גישה סודי: מפתח סודי של משתמש עם גישה לקטגוריית S3
    • מרחב שמות של נכס: מרחב השמות של הנכס
    • תוויות להוספה: התווית שתתווסף לאירועים מהפיד הזה
  9. לוחצים על הבא ואז על שליחה.

טבלת מיפוי UDM

שדה היומן מיפוי UDM לוגיקה
Activity_id_label additional.fields ממוזג
Arrays_label additional.fields ממוזג
Name_label additional.fields ממוזג
Type_1_label additional.fields ממוזג
Type_id_label additional.fields ממוזג
Type_label additional.fields ממוזג
Uid_label additional.fields ממוזג
Uid_label_1 additional.fields ממוזג
Value_label additional.fields ממוזג
__type_label additional.fields ממוזג
attempts_label additional.fields ממוזג
class_name_label additional.fields ממוזג
contentType_label additional.fields ממוזג
env_label additional.fields ממוזג
extendedRequestId_label additional.fields ממוזג
feature_name_label additional.fields ממוזג
line_number_label additional.fields ממוזג
logType_label additional.fields ממוזג
product_name_label additional.fields ממוזג
requestid_label additional.fields ממוזג
sourceAccount_label additional.fields ממוזג
stack_label additional.fields ממוזג
totalRetryDelay_label additional.fields ממוזג
vendor_name_label additional.fields ממוזג
version_label additional.fields ממוזג
has_principal extensions.auth.type מיפוי: trueAUTHTYPE_UNSPECIFIED
description metadata.description מיפוי ישיר
file_desc metadata.description מיפוי ישיר
Time metadata.event_timestamp הניתוח הוא UNIX
time metadata.event_timestamp הניתוח הוא yyyy-MM-ddTHH:mm:ss.SSSZ
has_principal metadata.event_type מיפוי: trueUSER_LOGIN, ‏ trueNETWORK_HTTP, ‏ trueNETWORK_CONNECTION, ‏ true...
has_principal_user metadata.event_type מיפוי: trueUSER_RESOURCE_ACCESS
Api.Operation metadata.product_event_type מיפוי ישיר
name metadata.product_event_type מיפוי ישיר
Api.Request.Uid metadata.product_log_id מיפוי ישיר
id metadata.product_log_id מיפוי ישיר
meta_data.requestId metadata.product_log_id מיפוי ישיר
Metadata.Version metadata.product_version מיפוי ישיר
version metadata.product_version מיפוי ישיר
meta_data.httpStatusCode network.http.response_code מיפוי ישיר
Http_request.User_agent network.http.user_agent מיפוי ישיר
Actor.Invoked_by principal.administrative_domain מיפוי ישיר
Src_endpoint.Domain principal.asset.hostname מיפוי ישיר
Src_endpoint.Domain principal.hostname מיפוי ישיר
Cloud.Region principal.resource.attribute.cloud.availability_zone מיפוי ישיר
Actor.User.Name principal.user.userid מיפוי ישיר
Status security_result.action_details מיפוי ישיר
Category_name security_result.category_details ממוזג
error security_result.description מיפוי ישיר
errorMessage security_result.description מיפוי ישיר
Metadata_uid_label security_result.detection_fields ממוזג
category_uid_label security_result.detection_fields ממוזג
class_uid_label security_result.detection_fields ממוזג
errorType_label security_result.detection_fields ממוזג
event_code_label security_result.detection_fields ממוזג
fault_label security_result.detection_fields ממוזג
functionName_label security_result.detection_fields ממוזג
severity_id_label security_result.detection_fields ממוזג
sourceArn_label security_result.detection_fields ממוזג
type_name_label security_result.detection_fields ממוזג
type_uid_label security_result.detection_fields ממוזג
user_type_label security_result.detection_fields ממוזג
Severity security_result.severity מיפוי: InformationalINFORMATIONAL
severity security_result.severity מיפוי: INFOINFORMATIONAL
msg security_result.summary מיפוי ישיר
Api.Service.Name target.application מיפוי ישיר
service target.application מיפוי ישיר
size target.file.size מיפוי ישיר
filename target.process.file.full_path מיפוי ישיר
Activity_name target.resource.name מיפוי ישיר
targetVar target.resource.name מיפוי ישיר
לא רלוונטי extensions.auth.type קבוע: AUTHTYPE_UNSPECIFIED
לא רלוונטי metadata.event_type קבוע: USER_UNCATEGORIZED
לא רלוונטי metadata.product_name קבוע: AWS_Lambda_Function
לא רלוונטי metadata.vendor_name קבוע: AWS_Lambda_Function
לא רלוונטי principal.resource.attribute.cloud.environment קבוע: AMAZON_WEB_SERVICES
לא רלוונטי security_result.severity קבוע: INFORMATIONAL

שנה רישום

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

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