שילוב של AWS S3 עם Google SecOps

במאמר הזה מוסבר איך לשלב את AWS S3 עם Google Security Operations.

תרחישים לדוגמה

  1. ניהול קטגוריות
  2. הורדת קבצים מקטגוריות
  3. העלאת קבצים לקטגוריות אחסון

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

לפני שמגדירים את השילוב של AWS S3 ב-Google SecOps, צריך לוודא שסביבת הרשת ופרטי הכניסה שלכם ל-AWS עומדים בכל הדרישות המוקדמות להפעלה.

כדי להכין את הסביבה לשילוב, צריך לוודא שביצעתם את הפעולות הבאות:

  1. אימות קו הראייה של הרשת בין Google SecOps לבין נקודות הקצה של שירות אזורי ב-AWS S3.

  2. מקבלים פרטי כניסה פרוגרמטיים ל-API של AWS (מזהה מפתח גישה ומפתח גישה סודי) עם הרשאות IAM מתאימות.

  3. הגדרה ובדיקה של מופע השילוב ב-Google SecOps.

דרישות רשת

‫Google SecOps מתקשר ישירות עם שירות AWS S3 באמצעות ממשקי HTTPS REST API ו-AWS Python SDK ‏ (boto3).

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

  • גישה יוצאת ל-HTTPS: הפעלת תקשורת יוצאת ב-HTTPS ממופע Google SecOps או מסוכן מרוחק לנקודת הקצה האזורית של AWS S3 ‏ (s3.<region>.amazonaws.com או s3.amazonaws.com) דרך יציאה 443/TCP.

    מידע נוסף זמין במאמר AWS Service Endpoints במסמכי העזרה של AWS.

  • הגדרת שרת proxy: אם הארגון שלכם מנתב תעבורת נתונים יוצאת דרך שרת proxy של HTTP/HTTPS, צריך להגדיר משתני proxy של סביבת ברירת המחדל (HTTP_PROXY, ‏ HTTPS_PROXY, ‏ NO_PROXY) בשרת Google SecOps או במארח של Remote Agent.

אימות ופרטי כניסה

השילוב עם AWS S3 מחייב פרטי כניסה ל-API כדי לאמת בקשות באמצעות חתימה בגרסה 4 של AWS.

חשוב לוודא שסביבת AWS עומדת בדרישות האימות הבאות:

  • פרטי כניסה פרוגרמטיים: מקבלים מזהה מפתח גישה תקין ל-AWS ומפתח סודי ל-AWS שמשויכים למשתמש או לתפקיד ב-AWS IAM.

    מידע על יצירת זהויות IAM ויצירת פרטי כניסה מופיע במאמרים ניהול מפתחות גישה למשתמשי IAM וזהויות IAM במסמכי AWS.

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

    פרטים על המלצות בנושא אבטחה מופיעים במאמר בנושא שיטות מומלצות לשמירה על אבטחה ב-IAM במסמכי AWS.

הגדרת הרשאות לפעולות

נותנים לזהות AWS IAM שמאמתת את ההרשאות הספציפיות שנדרשות לפעולות שמחברות הפלייבוק של Google SecOps מבצעות.

בטבלה הבאה מפורטות ההרשאות המינימליות לפעולות ב-AWS S3:

שם הפעולה הרשאת AWS IAM הנדרשת (ActionName:Permission) הרשאה נדרשת תיאור / היקף המשאב
הורדת קובץ ממאגר s3:GetObject s3:ListAllMyBuckets הורדת אובייקט מקטגוריית S3. מקור: arn:aws:s3:::<bucket-name>/*.
אחזור מדיניות של קטגוריה s3:GetBucketPolicy s3:ListAllMyBuckets מאחזר את מדיניות הגישה לקטגוריה. מקור: arn:aws:s3:::<bucket-name>.
List Bucket Objects s3:ListBucket s3:ListAllMyBuckets הצגת רשימה של אובייקטים בקטגוריית S3. מקור: arn:aws:s3:::<bucket-name>.
List Buckets s3:ListAllMyBuckets — רשימה של כל קטגוריות S3 שבבעלות החשבון. מקור: *.
פינג s3:ListAllMyBuckets — מאמת את קישוריות השילוב. מקור: *.
הגדרת מדיניות של קטגוריה s3:PutBucketPolicy s3:ListAllMyBuckets הגדרת מדיניות של קטגוריית S3 או שינוי שלה. מקור: arn:aws:s3:::<bucket-name>.
העלאת קובץ ל-Bucket s3:PutObject s3:ListAllMyBuckets העלאת אובייקט לקטגוריית S3. מקור: arn:aws:s3:::<bucket-name>/*.

הסבר לסמלים שמופיעים בטבלה (ActionName:Permission)

הטבלה הבאה מפרטת בקצרה את ההרשאות הנדרשות לכל פעולה:

Ping: s3:ListAllMyBuckets
Download File From Bucket: s3:GetObject, s3:ListAllMyBuckets
Get Bucket Policy: s3:GetBucketPolicy, s3:ListAllMyBuckets
List Bucket Objects: s3:ListBucket, s3:ListAllMyBuckets
List Buckets: s3:ListAllMyBuckets
Set Bucket Policy: s3:PutBucketPolicy, s3:ListAllMyBuckets
Upload File To Bucket: s3:PutObject, s3:ListAllMyBuckets

מדיניות לדוגמה ב-IAM (הרשאות מינימליות)

מדיניות ההרשאות הבאה מציגה את ההרשאות שנדרשות כדי להריץ את כל הפעולות ב-AWS S3 ב-Google SecOps.

הוראות ליצירה ולצירוף של מדיניות IAM זמינות במאמר יצירת מדיניות IAM במסמכי התיעוד של AWS.

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "SecOpsS3Discovery",
      "Effect": "Allow",
      "Action": [
        "s3:ListAllMyBuckets"
      ],
      "Resource": "*"
    },
    {
      "Sid": "SecOpsS3BucketOperations",
      "Effect": "Allow",
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketPolicy",
        "s3:PutBucketPolicy"
      ],
      "Resource": "arn:aws:s3:::*"
    },
    {
      "Sid": "SecOpsS3ObjectOperations",
      "Effect": "Allow",
      "Action": [
        "s3:GetObject",
        "s3:PutObject"
      ],
      "Resource": "arn:aws:s3:::*/*"
    }
  ]
}

פרמטרים של שילוב

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

השם המוצג של הפרמטר סוג ערך ברירת המחדל חובה תיאור
מזהה מפתח הגישה ב-AWS String לא רלוונטי כן מזהה מפתח הגישה של AWS לשימוש בשילוב.
מפתח סודי של AWS סיסמה לא רלוונטי כן מפתח סודי של AWS לשימוש בשילוב.
אזור ברירת המחדל של AWS String לא רלוונטי כן אזור ברירת המחדל של AWS לשימוש בשילוב, לדוגמה us-west-2.
הרצה מרחוק תיבת סימון לא מסומן לא מסמנים את התיבה כדי להפעיל את השילוב שהוגדר מרחוק. אחרי שמסמנים את התיבה, מופיעה האפשרות לבחור את המשתמש המרוחק (הסוכן).

הוראות להגדרת שילוב ב-Google SecOps מופיעות במאמר הגדרת שילובים.

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

פעולות

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

הורדת קובץ מקטגוריה

הורדת קובץ מקטגוריה ב-AWS S3.

פרמטרים

השם המוצג של הפרמטר סוג ערך ברירת המחדל חובה תיאור
נתיב הקובץ בדלי String s3://{bucket_name}/{file_name} כן מציינים את הנתיב לקובץ בדלי. דוגמה: s3://siemplify/syslog/log.txt
נתיב ההורדה String לא רלוונטי כן מציינים את הנתיב שבו רוצים להוריד את הקובץ.

ריצה

הפעולה הזו לא מופעלת בישויות.

תוצאות הפעולה

תוצאת הסקריפט
שם התוצאה של הסקריפט אפשרויות ערך דוגמה
is_success נכון/לא נכון is_success:False
תוצאת JSON
{
"bucket_file_path": "s3://testsiemplify/test/123.txt"
"download_path": "/usr/bin/share/download.txt"
}

Case Wall

סוג התוצאה ערך / תיאור סוג
הודעת פלט*

הפעולה לא אמורה להיכשל או להפסיק את ההרצה של ספר ההפעלה:

If status code == 200 (is_success = true) "Successfully downloaded '{0}' from AWS S3".format(bucket_file_path)

אם קוד הסטטוס אחר (is_success=false): "לא הייתה אפשרות להוריד את {0} מ-AWS S3. הסיבה: כבר קיים קובץ עם נתיב ההורדה הזה".

הפעולה צריכה להיכשל ולהפסיק את ההרצה של מדריך ההפעלה:

אם מדובר בשגיאה קריטית, כמו פרטי כניסה שגויים, אין חיבור לשרת, שגיאות ב-SDK או שגיאות אחרות: "שגיאה בהפעלת הפעולה 'הורדת קובץ ממאגר'. הסיבה: {0}''.format(error.Stacktrace)

כללי

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

אחזור מידע על מדיניות הקטגוריה מ-AWS S3.

פרמטרים

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

ריצה

הפעולה הזו לא מופעלת בישויות.

תוצאות הפעולה

תוצאת הסקריפט
שם התוצאה של הסקריפט אפשרויות ערך דוגמה
is_success נכון/לא נכון is_success:False
תוצאת JSON
{
    "Policy": {
        "Version": "2012-10-17",
        "Statement": [
            {
                "Sid": "AddPerm",
                "Effect": "Allow",
                "Principal": "*",
                "Action": "s3:GetObject",
                "Resource": "arn:aws:s3:::testsiemplify/*"
            }
        ]
    }
Case Wall
סוג התוצאה ערך / תיאור סוג
הודעת פלט*

הפעולה לא אמורה להיכשל או להפסיק את ההרצה של ספר ההפעלה:

‫If status code == 200 (is_success = true) "Successfully retrieved information about the policy of the "{0}" bucket in AWS S3".format(bucket_name)

אם קוד הסטטוס אחר (is_success=false): "Action wasn't able to return information about the policy of the '{0}' bucket in AWS S3".format(bucket_name)

הפעולה צריכה להיכשל ולהפסיק את ההרצה של מדריך ההפעלה:

אם מדובר בשגיאה קריטית, כמו פרטי כניסה שגויים, אין חיבור לשרת, או שגיאה אחרת: "שגיאה בהפעלת הפעולה 'קבלת מדיניות הדלי'. הסיבה: {0}''.format(error.Stacktrace)

כללי

הצגת רשימת האובייקטים בקטגוריה

מאפשרת למשתמש להשבית חשבון משתמש. גוף הבקשה מכיל את המשתמש שרוצים להשבית. המאפיין enabled של החשבון צריך להיות מוגדר כ-false.

פרמטרים

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

ריצה

הפעולה הזו לא מופעלת בישויות.

תוצאות הפעולה

תוצאת הסקריפט
שם התוצאה של הסקריפט אפשרויות ערך דוגמה
is_success נכון/לא נכון is_success:False
תוצאת JSON
"Contents": [
        {
            "Key": "text.txt",
            "LastModified": %Y-%m-%dT%H:%M:%S,
            "ETag": "d41d8cd98f00b204e9800998ecf8427e",
            "Size": 0,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "lab_aws",
                "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
            }
        },
        {
            "Key": "text_1.txt",
            "LastModified": %Y-%m-%dT%H:%M:%S,
            "ETag": "d41d8cd98f00b204e9800998ecf8427e",
            "Size": 0,
            "StorageClass": "STANDARD",
            "Owner": {
                "DisplayName": "lab_aws",
                "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
            }
        }
    ]
Case Wall
סוג התוצאה ערך / תיאור סוג
הודעת פלט*

הפעולה לא אמורה להיכשל או להפסיק את ההרצה של ספר ההפעלה:

‫If status code == 200 (is_success = true) "Successfully returned objects of the "{0}" bucket in AWS S3".format(bucket_name)

אם קוד הסטטוס אחר (is_success=false): "לא הייתה אפשרות להחזיר אובייקטים מהקטגוריה '{0}' ב-AWS S3".format(bucket_name)

הפעולה צריכה להיכשל ולהפסיק את ההרצה של מדריך ההפעלה:

אם מופיעה שגיאה קריטית, כמו פרטי כניסה שגויים, אין חיבור לשרת או שגיאה אחרת: "שגיאה בהפעלת הפעולה 'רשימת אובייקטים של קטגוריות'". הסיבה: {0}''.format(error.Stacktrace)

כללי
Case Wall Table

שם הטבלה: '{0}' אובייקטים של קטגוריית Bucket

עמודות:

  • מקש (ממופה כמקש)
  • תאריך השינוי האחרון (ממופה כ-LastModified)
  • גודל (בבייטים) (ממופה כגודל)
  • בעלים (ממופה כבעלים/שם לתצוגה)
  • סוג אחסון (ממופה כסוג אחסון)
כללי

הצגת רשימה של קטגוריות

אחזור רשימה של קטגוריות מ-AWS S3.

ריצה

הפעולה הזו לא מופעלת בישויות.

תוצאות הפעולה

תוצאת הסקריפט
שם התוצאה של הסקריפט אפשרויות ערך דוגמה
is_success נכון/לא נכון is_success:False
תוצאת JSON
{
    "Buckets": [
        {
            "CreationDate": %Y-%m-%dT%H:%M:%S,
            "Name": "testsiemplify"
        }
    ],
    "Owner": {
        "DisplayName": "lab_aws",
        "ID": "935dc3fed0e1d2c5b12242cf9927370824f2438681a2d3c0523f254dbde41aba"
    },
Case Wall
סוג התוצאה ערך / תיאור סוג
הודעת פלט*

הפעולה לא אמורה להיכשל או להפסיק את ההרצה של ספר ההפעלה:

If status code == 200 (is_success = true) "Successfully listed available buckets in AWS S3".

אם קוד הסטטוס אחר (is_success=false): "לא הייתה אפשרות להציג את רשימת הקטגוריות הזמינות ב-AWS S3.

הפעולה צריכה להיכשל ולהפסיק את ההרצה של מדריך ההפעלה:

אם מופיעה שגיאה קריטית, כמו פרטי כניסה שגויים, אין חיבור לשרת או שגיאה אחרת: "שגיאה בהפעלת הפעולה 'רשימת דליים'. הסיבה: {0}''.format(error.Stacktrace)

כללי

פינג

בודקים את הקישוריות ל-AWS S3 באמצעות פרמטרים שמופיעים בדף ההגדרות של השילוב בכרטיסייה Google Security Operations Marketplace.

תרחישים לדוגמה

בדיקת הקישוריות.

ריצה

הפעולה הזו לא מופעלת בישויות.

תוצאות הפעולה

תוצאת הסקריפט
שם התוצאה של הסקריפט אפשרויות ערך דוגמה
is_success נכון/לא נכון is_success:False
Case Wall
סוג התוצאה ערך / תיאור סוג
הודעת פלט*

הפעולה לא אמורה להיכשל או להפסיק את ההרצה של ספר ההפעלה:

אם הפעולה הצליחה:

"החיבור לשרת AWS S3 בוצע בהצלחה עם פרמטרי החיבור שסופקו!"

הפעולה צריכה להיכשל ולהפסיק את ההרצה של מדריך ההפעלה:

אם התגובה נכשלה:

"החיבור לשרת AWS S3 נכשל! השגיאה היא {0}".format(exception.stacktrace)

כללי

הגדרת מדיניות של קטגוריה

מגדירים מדיניות בקטגוריה מ-AWS S3.

פרמטרים

השם המוצג של הפרמטר סוג ערך ברירת המחדל חובה תיאור
שם הקטגוריה String לא רלוונטי כן מציינים את שם הקטגוריה שרוצים לעדכן את המדיניות שלה.
אובייקט JSON של מדיניות String לא רלוונטי כן מציינים את אובייקט ה-JSON של המדיניות שרוצים להגדיר לקטגוריה. דוגמאות אפשר למצוא כאן: https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html.

ריצה

הפעולה הזו לא מופעלת בישויות.

תוצאות הפעולה

תוצאת הסקריפט
שם התוצאה של הסקריפט אפשרויות ערך דוגמה
is_success נכון/לא נכון is_success:False
תוצאת JSON
bucket_policy = {
    'Version': '2012-10-17',
    'Statement': [{
        'Sid': 'AddPerm',
        'Effect': 'Allow',
        'Principal': '*',
        'Action': ['s3:GetObject'],
        'Resource': f'arn:aws:s3:::{bucket_name}/*'
    }]
}
Case Wall
סוג התוצאה ערך / תיאור סוג
הודעת פלט*

הפעולה לא אמורה להיכשל או להפסיק את ההרצה של ספר ההפעלה:

‫If status code == 204 (is_success = true) "Successfully updated policy of the "{0}" bucket in AWS S3".format(bucket_name)

אם קוד הסטטוס אחר (is_success=false): 'לא הייתה אפשרות לעדכן את המדיניות של קטגוריית '{0}' ב-AWS S3'.format(bucket_name)

הפעולה צריכה להיכשל ולהפסיק את ההרצה של מדריך ההפעלה:

אם מופיעה שגיאה קריטית, כמו פרטי כניסה שגויים, אין חיבור לשרת, או שגיאה אחרת: "שגיאה בהפעלת הפעולה 'הגדרת מדיניות של דלי'". הסיבה: {0}''.format(error.Stacktrace)

העלאת קובץ לקטגוריית אחסון

העלאת קובץ לקטגוריה ב-AWS S3.

פרמטרים

השם המוצג של הפרמטר סוג ערך ברירת המחדל חובה תיאור
נתיב הקובץ String לא רלוונטי כן מציינים את הנתיב לקובץ שרוצים להעלות.
נתיב להעלאה של דלי String s3://{bucket_name}/{file_name} כן מציינים את הנתיב בדלי שבו רוצים להעלות את הנתיב. דוגמה: s3://siemplify/syslog/log.txt

ריצה

הפעולה הזו לא מופעלת בישויות.

תוצאות הפעולה

תוצאת הסקריפט
שם התוצאה של הסקריפט אפשרויות ערך דוגמה
is_success נכון/לא נכון is_success:False
תוצאת JSON
{
"bucket_upload_path": "s3://testsiemplify/test/123.txt"
"file_path": "/usr/bin/share/download.txt"
}
Case Wall
סוג התוצאה ערך / תיאור סוג
הודעת פלט*

הפעולה לא אמורה להיכשל או להפסיק את ההרצה של ספר ההפעלה:

If status code == 200 (is_success = true) "Successfully uploaded '{0}' to AWS S3 {1} bucket".format(file_path, bucket name aka first string after s3://)

אם הקובץ לא קיים (is_success = false) "הפעולה לא הצליחה להעלות את הקובץ '{0}' ל-AWS S3. הסיבה: לא קיים קובץ עם נתיב ההעלאה הזה".

הפעולה צריכה להיכשל ולהפסיק את ההרצה של מדריך ההפעלה:

אם מדובר בשגיאה קריטית, כמו פרטי כניסה שגויים, אין חיבור לשרת, שגיאות ב-SDK, אחר: "שגיאה בהפעלת הפעולה 'העלאת קובץ למאגר'". הסיבה: {0}''.format(error.Stacktrace)

כללי

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