שילוב של AWS S3 עם Google SecOps
במאמר הזה מוסבר איך לשלב את AWS S3 עם Google Security Operations.
תרחישים לדוגמה
- ניהול קטגוריות
- הורדת קבצים מקטגוריות
- העלאת קבצים לקטגוריות אחסון
לפני שמתחילים
לפני שמגדירים את השילוב של AWS S3 ב-Google SecOps, צריך לוודא שסביבת הרשת ופרטי הכניסה שלכם ל-AWS עומדים בכל הדרישות המוקדמות להפעלה.
כדי להכין את הסביבה לשילוב, צריך לוודא שביצעתם את הפעולות הבאות:
אימות קו הראייה של הרשת בין Google SecOps לבין נקודות הקצה של שירות אזורי ב-AWS S3.
מקבלים פרטי כניסה פרוגרמטיים ל-API של AWS (מזהה מפתח גישה ומפתח גישה סודי) עם הרשאות IAM מתאימות.
הגדרה ובדיקה של מופע השילוב ב-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 עמודות:
|
כללי |
הצגת רשימה של קטגוריות
אחזור רשימה של קטגוריות מ-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.