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

גרסת המנתח: 2.0

נתמך ב:

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

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

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

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

  • מכונה של Google SecOps
  • גישה עם הרשאות ניהול ל-AWS Management Console עם הרשאות לניהול:
    • ‫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, נכנסים אל CloudWatch > Logs > Log groups.
  2. חיפוש של /aws/lambda/.
  3. מוודאים שקיימת קבוצת יומנים לכל פונקציית Lambda שאת היומנים שלה רוצים להטמיע.

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

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

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

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

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

  1. ב-AWS Console, עוברים אל 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. לוחצים על Create policy.

יצירת תפקיד 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. בשדה Role name, מזינים את הערך LambdaLogsFirehoseToS3Role.

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

יצירת מקור הנתונים של Amazon Data Firehose

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

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

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

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

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

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

הגדרת תפקיד IAM ליומני CloudWatch

כדי לשלוח נתוני יומנים לסטרימינג של Firehose, צריך תפקיד IAM ב-CloudWatch Logs.

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

  1. עוברים אל IAM > Policies > Create policy.
  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. לוחצים על Create policy.

יצירת תפקיד 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. בשדה Role name, מזינים את הערך LambdaLogsCWLtoFirehoseRole.

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

יצירת מסנן מינויים ב-CloudWatch Logs

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

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

כדי להטמיע את היומנים שנשלחו, Google SecOps צריך משתמש IAM עם גישה לקטגוריית S3.

  1. יוצרים משתמש לפי המדריך למשתמש: יצירת משתמש IAM.
  2. בוחרים את המשתמש שנוצר.
  3. לוחצים על הכרטיסייה פרטי כניסה מאובטחים.
  4. לוחצים על Create Access Key בקטע Access Keys.
  5. בקטע תרחיש לדוגמה, בוחרים באפשרות שירות של צד שלישי.
  6. לוחצים על הבא.
    • אופציונלי: מוסיפים תג תיאור.
  7. לוחצים על יצירת מפתח גישה.
  8. לוחצים על Download .csv file כדי לשמור את Access Key ואת Secret Access Key לשימוש עתידי.
  9. לוחצים על סיום.
  10. לוחצים על הכרטיסייה הרשאות.
  11. בקטע מדיניות הרשאות, לוחצים על הוספת הרשאות.
  12. לוחצים על הוספת הרשאות.
  13. בוחרים באפשרות Attach policies directly.
  14. מחפשים את המדיניות AmazonS3FullAccess.
  15. בוחרים את המדיניות.
  16. לוחצים על הבא.
  17. לוחצים על הוספת הרשאות.

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

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

טבלת מיפוי UDM

שדה ביומן מיפוי UDM Logic (פונקציה לוגית)
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 מופה: true ← AUTHTYPE_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 מופו: true ← USER_LOGIN, true ← NETWORK_HTTP, true ← NETWORK_CONNECTION, `true...
has_principal_user metadata.event_type מופה: true ← USER_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 מופה: Informational ← INFORMATIONAL
severity security_result.severity מופה: INFO ← INFORMATIONAL
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.