איסוף יומנים מ-AWS Security Hub
גרסת מנתח: 8.0
במאמר הזה מוסבר איך להטמיע יומנים של AWS Security Hub ב-Google Security Operations. AWS Security Hub מספק תצוגה מקיפה של התראות אבטחה וממצאים בחשבונות AWS. שליחת הממצאים האלה אל Google SecOps מאפשרת לכם להשתמש ביכולות של Google SecOps כדי לשפר את המעקב ואת זיהוי האיומים.
לפני שמתחילים
חשוב לוודא שמתקיימות דרישות הסף הבאות:
- מופע של Google SecOps
- גישה מיוחדת ל-AWS
הגדרת AWS IAM ו-S3
- יוצרים קטגוריה ב-Amazon S3 לפי המדריך למשתמש בנושא יצירת קטגוריה.
- שומרים את שם הקטגוריה ואת האזור שלה לשימוש מאוחר יותר.
- יוצרים משתמש לפי מדריך המשתמש הזה: יצירת משתמש IAM.
- בוחרים את המשתמש שנוצר.
- לוחצים על הכרטיסייה פרטי כניסה לאבטחה.
- בקטע Access Keys, לוחצים על Create Access Key.
- בוחרים באפשרות שירות של צד שלישי בתור תרחיש השימוש.
- לוחצים על הבא.
- אופציונלי: מוסיפים תג תיאור.
- לוחצים על יצירת מפתח גישה.
- לוחצים על הורדת קובץ CSV כדי לשמור את מפתח הגישה ואת מפתח הגישה הסודי לשימוש מאוחר יותר.
- לוחצים על סיום.
- לוחצים על הכרטיסייה הרשאות.
- בקטע Permissions policies, לוחצים על Add permissions.
- לוחצים על הוספת הרשאות.
- בוחרים באפשרות צירוף מדיניות ישירות.
- מחפשים את המדיניות AmazonS3FullAccess ובוחרים בה.
- לוחצים על הבא.
- לוחצים על הוספת הרשאות.
יצירת פונקציית Lambda
- נכנסים ל-AWS Management Console.
- עוברים אל Lambda.
- לוחצים על Create Function (יצירת פונקציה) ובוחרים באפשרות Author from Scratch (יצירה מאפס).
- נותנים שם לפונקציה, לדוגמה,
SecurityHubToS3. - בוחרים באפשרות Python 3.x בשביל זמן הריצה.
מזינים את קוד ה-Lambda שמעביר את הממצאים מ-EventBridge וכותב אותם לקטגוריית S3:
import json import boto3 from datetime import datetime # Initialize the S3 client s3_client = boto3.client('s3') # S3 bucket where findings will be stored bucket_name = 'aws-security-hub-findings-stream' def lambda_handler(event, context): # Extract Security Hub findings from the event findings = event['detail']['findings'] # Generate a timestamp for the file name to avoid overwriting timestamp = datetime.now().strftime('%Y-%m-%dT%H-%M-%S') # Generate the S3 object key (file name) based on the timestamp object_key = f"security_hub_findings_{timestamp}.json" # Convert findings to JSON format findings_json = json.dumps(findings) # Upload the findings to S3 try: response = s3_client.put_object( Bucket=bucket_name, Key=object_key, Body=findings_json, ContentType='application/json' ) print(f"Successfully uploaded findings to S3: {response}") except Exception as e: print(f"Error uploading findings to S3: {e}") raise e return { 'statusCode': 200, 'body': json.dumps('Successfully processed findings') }מגדירים הרשאות ל-Lambda על ידי הוספת תפקיד IAM לפונקציית Lambda עם המדיניות הבאה:
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": "arn:aws:s3:::aws-security-hub-findings-stream/*" } ] }
איך מגדירים את AWS Security Hub להעברת ממצאים באמצעות EventBridge
- נכנסים ל-AWS Management Console.
- בסרגל החיפוש, מקלידים Security Hub ובוחרים אותו מרשימת השירותים.
- לוחצים על הגדרות.
- בקטע Integrations (שילובים), מוצאים את EventBridge ולוחצים על Enable (הפעלה).
- בסרגל החיפוש, מקלידים EventBridge ובוחרים אותו מרשימת השירותים.
- במסוף EventBridge, לוחצים על Rules > Create rule.
- מזינים את הגדרת הכלל הבאה:
- שם הכלל: נותנים לכלל שם תיאורי, לדוגמה, SendSecurityHubFindingsToS3.
- מקור האירוע: בוחרים באפשרות שירותי AWS.
- Service Name: בוחרים באפשרות מרכז הבטיחות.
- סוג האירוע: בוחרים באפשרות ממצאים של מרכז הבטיחות.
- הגדרת היעד: בוחרים באפשרות פונקציית Lambda.
- בוחרים את פונקציית Lambda שיצרתם (
SecurityHubToS3).
- לוחצים על יצירה.
הגדרת פידים
יש שתי נקודות כניסה שונות להגדרת פידים בפלטפורמת Google SecOps:
- הגדרות SIEM > פידים > הוספת פיד חדש
- מרכז התוכן > חבילות תוכן > להתחלה
איך מגדירים את הפיד של AWS Security Hub
- לוחצים על החבילה Amazon Cloud Platform.
- מחפשים את סוג היומן AWS Security Hub.
מציינים את הערכים בשדות הבאים.
- סוג המקור: Amazon SQS V2
- Queue Name (שם התור): השם של תור ה-SQS שממנו ייקראו הנתונים
- S3 URI: מזהה ה-URI של הקטגוריה.
s3://your-log-bucket-name/- מחליפים את
your-log-bucket-nameבשם בפועל של קטגוריית ה-S3.
- מחליפים את
אפשרויות למחיקת מקורות: בוחרים את אפשרות המחיקה בהתאם להעדפות ההטמעה.
הגיל המקסימלי של הקובץ: כולל קבצים שעברו שינוי במספר הימים האחרון. ברירת המחדל היא 180 ימים.
SQS Queue Access Key ID (מזהה מפתח גישה לתור SQS): מפתח גישה לחשבון שהוא מחרוזת אלפאנומרית באורך 20 תווים.
מפתח גישה סודי לתור SQS: מפתח גישה לחשבון שהוא מחרוזת אלפאנומרית באורך 40 תווים.
אפשרויות מתקדמות
- שם הפיד: ערך שמאכלס מראש את השדה ומזהה את הפיד.
- מרחב השמות של הנכס: מרחב השמות שמשויך לפיד.
- תוויות הטמעה: תוויות שנוספות לכל האירועים מהפיד הזה.
לוחצים על יצירת פיד.
למידע נוסף על הגדרת כמה פידים לסוגי יומנים שונים במשפחת המוצרים הזו, ראו הגדרת פידים לפי מוצר.
טבלת מיפוי UDM
| שדה ביומן | מיפוי UDM | היגיון |
|---|---|---|
account |
principal.group.product_object_id |
מזהה החשבון ב-AWS שמשויך לממצא. |
configurationItem.ARN |
target.resource.id |
שם משאב אמזון (ARN) של פריט ההגדרה. |
configurationItem.awsAccountId |
principal.user.userid |
מזהה החשבון ב-AWS של פריט ההגדרה. |
configurationItem.awsRegion |
target.asset.location.country_or_region |
האזור ב-AWS של פריט ההגדרה. |
configurationItem.configuration.complianceType |
security_result.summary |
סוג התאימות של פריט ההגדרה. |
configurationItem.configuration.configRuleList[].complianceType |
security_result.summary |
סטטוס התאימות של כל כלל הגדרה. |
configurationItem.configuration.configRuleList[].configRuleArn |
security_result.rule_id |
מספר ה-ARN של כלל AWS Config. |
configurationItem.configuration.configRuleList[].configRuleId |
security_result.about.labels.configRuleId |
המזהה של כלל AWS Config. |
configurationItem.configuration.configRuleList[].configRuleName |
security_result.rule_name |
השם של הכלל ב-AWS Config. |
configurationItem.configuration.privateIpAddress |
target.ip |
כתובת ה-IP הפרטית של פריט ההגדרה. |
configurationItem.configuration.publicIpAddress |
target.ip |
כתובת ה-IP הציבורית של פריט ההגדרה. |
configurationItem.configurationItemCaptureTime |
target.asset.attribute.creation_time |
זמן הלכידה של פריט ההגדרה, שהומר לחותמת זמן. |
configurationItem.configurationItemStatus |
target.asset.attribute.labels.Configuration Item Status |
הסטטוס של פריט ההגדרה. |
configurationItem.relationships[].resourceId |
target.asset.attribute.cloud.vpc.id |
מזהה המשאב הקשור, שמשמש כמזהה VPC אם הוא תואם ל-vpc. |
configurationItem.resourceId |
target.resource.id |
מזהה המשאב של פריט ההגדרות האישיות. |
configurationItem.resourceName |
target.resource.name |
שם המשאב. |
configurationItem.resourceType |
target.resource.resource_subtype |
סוג המשאב של פריט ההגדרה. |
configurationItem.tags.Contact |
principal.user.user_display_name או principal.user.email_addresses |
פרטים ליצירת קשר שחולצו מתגים, נותחו לאימייל ולשם משתמש. |
configurationItem.tags.OS / configurationItem.tags.Os |
target.asset.platform_software.platform |
מערכת ההפעלה מהתגים, ממופה לפלטפורמה אם היא Windows או Linux. |
configurationItemDiff.changeType |
metadata.event_type |
סוג השינוי, שממופה ל-RESOURCE_WRITTEN או ל-RESOURCE_CREATION. |
detail.accountId |
principal.group.product_object_id |
מזהה החשבון ב-AWS שמשויך לממצא. |
detail.actionDescription detail.actionName detail.description |
sec_result.description |
תיאור הממצא. |
detail.findings[].AwsAccountId |
principal.group.product_object_id |
מזהה החשבון ב-AWS שמשויך לממצא. |
detail.findings[].CompanyName detail.findings[].CreatedAt detail.findings[].Description |
sec_result.description |
תיאור הממצא. |
detail.findings[].FindingProviderFields.Severity.Label |
sec_result.severity |
תווית החומרה של הממצא, באותיות רישיות. |
detail.findings[].FindingProviderFields.Types[] detail.findings[].FirstObservedAt detail.findings[].GeneratorId detail.findings[].Id detail.findings[].LastObservedAt detail.findings[].ProductArn detail.findings[].ProductFields. |
פרטים נוספים בהמשך | שדות שונים שמשמשים למידע על שדות נוספים, על המנהל ועל היעד. |
detail.findings[].ProductName detail.findings[].RecordState detail.findings[].Region |
target.location.name |
אזור AWS שבו נמצאה הממצא. |
detail.findings[].Resources[].Details. |
פרטים נוספים בהמשך | פרטים על המשאבים שקשורים לממצא. |
detail.findings[].Resources[].Id |
target.resource.product_object_id |
המזהה של המשאב. |
detail.findings[].Resources[].Partition detail.findings[].Resources[].Region |
target.location.name |
האזור של המשאב ב-AWS. |
detail.findings[].Resources[].Tags detail.findings[].Resources[].Type |
target.resource.resource_type, target.resource.resource_subtype, metadata.event_type |
סוג המשאב, שמשמש למיפוי של סוג המשאב, סוג המשנה וסוג האירוע. |
detail.findings[].Sample detail.findings[].SchemaVersion detail.findings[].Severity.Label detail.findings[].SourceUrl detail.findings[].Title |
sec_result.summary |
שם הממצא. |
detail.findings[].Types[] detail.findings[].UpdatedAt detail.findings[].Workflow.Status detail.findings[].WorkflowState detail-type |
metadata.product_event_type |
סוג הפרטים של האירוע. |
id |
metadata.product_log_id |
המזהה של האירוע. |
region |
target.location.name |
האזור של AWS שבו התרחש האירוע. |
resources[] source time version (היגיון של מנתח) |
metadata.event_timestamp |
זמן היצירה מרשומת היומן המקורית, שמשמש כחותמת הזמן של האירוע. |
| (Parser Logic) | metadata.log_type |
הערך שהוגדר הוא AWS_SECURITY_HUB. |
| (Parser Logic) | metadata.product_name |
הערך שהוגדר הוא AWS Security Hub. |
| (Parser Logic) | metadata.vendor_name |
הגדרת הערך AMAZON. |
| (Parser Logic) | target.asset.attribute.cloud.environment |
הערך שהוגדר הוא AMAZON_WEB_SERVICES. |
| (Parser Logic) | metadata.event_type |
הערך מוגדר ל-USER_RESOURCE_ACCESS כברירת מחדל אם הוא לא ממופה מ-Resources[].Type או מ-configurationItemDiff.changeType. הערך שמוגדר הוא STATUS_UPDATE אם configurationItems קיים ולא מוגדר סוג אירוע אחר. הערך צריך להיות RESOURCE_READ אם יש configurationItem או configurationItems והסטטוס הוא OK או ResourceDiscovered. מגדירים את הערך RESOURCE_DELETION אם configurationItem או configurationItems קיימים והסטטוס הוא ResourceDeleted. |
| (Parser Logic) | metadata.description |
אם detail.findings[].ProductFields.aws/guardduty/service/serviceName קיים, מגדירים את guardduty. |
| (Parser Logic) | target.asset.attribute.cloud.vpc.resource_type |
מגדירים את הערך VPC_NETWORK אם configurationItems.relationships[].resourceId תואם ל-vpc. |
| (Parser Logic) | target.resource.resource_type |
צריך להגדיר את הערך VIRTUAL_MACHINE אם קיים הערך configurationItem או configurationItems. אם לא מוגדר סוג משאב אחר, צריך להגדיר את הערך UNSPECIFIED. |
| (Parser Logic) | target.asset.platform_software.platform |
ההגדרה היא WINDOWS או LINUX, בהתאם לנוכחות של Windows או (Linux|LINUX) בהודעה של configurationItem. במקרה של configurationItems, ההגדרה נקבעת על סמך configItem.tags.OS או configItem.tags.Os. |
| (Parser Logic) | disambiguation_key |
השדה הזה מתווסף כשכמה אירועים נוצרים מרישום אחד ביומן. |
יומן שינויים
צפייה ביומן השינויים של כלי הניתוח הזה
הבעיה עדיין לא נפתרה? קבלת תשובות מחברי הקהילה וממומחי Google SecOps.