במאמר הזה מוסבר על אמצעי בקרה לגישה ברמת השדה ואיך מגדירים אותם בקטגוריה של Logging.
אמצעי בקרה לגישה ברמת השדה מאפשרים לכם להסתיר שדות ספציפיים LogEntry ממשתמשים Google Cloud בפרויקט, וכך לקבל שליטה פרטנית יותר על נתוני היומנים שהמשתמש יכול לגשת אליהם.
סקירה כללית
הרישום מתבצע באמצעות בקרת גישה ברמת השדה כדי להסתיר שדות LogEntry ממשתמשים בפרויקט Google Cloud שאין להם את ההרשאות הנדרשות לצפייה בשדות. בהשוואה לתצוגות של יומנים, שבהן מוסתרת כל LogEntry, אמצעי הבקרה על הגישה ברמת השדה מסתירים שדות ספציפיים של LogEntry. אפשר להגדיר גם בקרות גישה ברמת השדה וגם הרשאות לצפייה ביומנים בקטגוריה של Logging. אתם יכולים להגביל ולנהל את בקרת הגישה ברמת השדה באמצעות Google Cloud CLI.
כדי להגביל את הגישה לשדות ביומן, מבצעים את הפעולות הבאות:
- מגדירים את השדות המוגבלים
LogEntryבקטגוריית יומנים. - נותנים רק למשתמשים שצריכים לראות את השדות המוגבלים את תפקיד ה-IAM
logging.fieldAccessorעבור נתיב השדה הזה, או תפקיד שמכיל הרשאות דומות.
שירות Logging בודק את הרשאות ה-IAM כשמשתמש שולח שאילתה ליומנים מקטגוריה שמוגדרים בה שדות מוגבלים. הגישה לכל השדות שמוגדרים בהם ACLs נחסמת למשתמשים שלא קיבלו את ההרשאה המתאימה logging.FieldAccessor לשדה הזה, כלומר:
- אם המשתמש ינסה לבצע שאילתה ישירה בשדות המוגבלים, תופיע שגיאת דחיית הרשאה.
- בחיפושים גלובליים לא נלקח בחשבון התוכן של השדות שנדחו.
- בכל תוצאה של
LogEntryשמוחזרת, השדות המוגבלים מושמטים.
שדות מוגבלים
אתם יכולים להגביל את הגישה לשדה jsonPayload, מה שיגביל גם את הגישה לנתיבים המקוננים שלו.
אפשר גם להגביל את הגישה לשדות העלים של הרכיבים הבאים:
לדוגמה, אפשר להגביל את הגישה לשדה labels.check_id.
לפני שמתחילים
לפני שמתחילים להגדיר אמצעי בקרה לגישה ברמת השדה, צריך לבצע את הפעולות הבאות:
מוודאים שגרסה 362.0.0 ואילך מדווחת על
gcloud --version.כדי להתקין את הגרסה העדכנית של ה-CLI של gcloud, מריצים את הפקודה
gcloud components update:gcloud components updateהוראות להתקנת ה-CLI של gcloud מופיעות במאמר התקנת Google Cloud CLI.
מריצים את הפקודה
gcloud config setכדי להגדיר את פרויקט ברירת המחדלGoogle Cloud לפקודות Google Cloud CLI. לפני שמריצים את הפקודה, מחליפים את המשתנים הבאים בערכים:- PROJECT_ID: מזהה הפרויקט.
פקודה:
gcloud config set project PROJECT_IDמוודאים שיש לכם אחד מתפקידי IAM הבאים בפרויקט Google Cloud שכולל את הקטגוריה:
במדריך בקרת הגישה של Logging מוסבר איך מגדירים תפקידים ב-IAM.
הגדרת בקרת גישה ברמת השדה
הגבלות ברמת השדה מוגדרות ברמה של קטגוריית יומנים, ואפשר להחיל אותן על קטגוריית יומנים קיימת או כשיוצרים קטגוריית יומנים חדשה.
הגבלת שדות בקטגוריה חדשה
כדי להגביל את השדות ביומן כשיוצרים קטגוריה חדשה ביומן, מריצים את הפקודה
gcloud logging buckets create.
לפני שמריצים את הפקודה, מחליפים את המשתנים הבאים בערכים:
- BUCKET_ID: השם או המזהה של קטגוריה ביומן.
- LOCATION: המיקום של מאגר היומנים.
- DESCRIPTION: תיאור של מאגר יומני הגישה.
- RESTRICTED_FIELDS: רשימה מופרדת בפסיקים של השדות שמוגבלים.
פקודה:
gcloud logging buckets create BUCKET_ID --location=LOCATION \
--description=DESCRIPTION --restricted-fields=RESTRICTED_FIELDS
פקודה לדוגמה:
gcloud logging buckets create new-log-bucket --location=global \ --description="New bucket with restricted fields" --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
הגבלת שדות בקטגוריה קיימת
כדי להגביל את השדות ביומן בקטגוריית יומנים קיימת, מריצים את הפקודה gcloud logging buckets update:
gcloud logging buckets update BUCKET_ID --location=LOCATION \
--restricted-fields=RESTRICTED_FIELDS
פקודה לדוגמה:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,httpRequest.status"
אם רוצים להוסיף שדות להגבלות הקיימות, בפקודת העדכון צריך לפרט מחדש את כל השדות המוגבלים. בהמשך לדוגמה הקודמת, אם רוצים להגביל את הגישה לשדה jsonPayload.data.entryDate בנוסף לשדות jsonPayload.data.ssn ו-httpRequest.status שכבר הוגבלה אליהם הגישה, הפקודה תיראה כך:
gcloud logging buckets update my-existing-log-bucket --location=global \ --restricted-fields="jsonPayload.data.ssn,jsonPayload.data.entryDate,httpRequest.status"
אם לא תציינו מחדש את השדות שכבר הוגבלו, ותציינו רק את jsonPayload.data.entryDate, אז גם jsonPayload.data.ssn וגם httpRequest.status יוסרו מהרשימה של השדות המוגבלים.
ניהול הגישה לשדות מוגבלים
כברירת מחדל, ביומן הרישום מוסתרים כל השדות המוגבלים ממשתמשים שאין להם את התפקיד logging.fieldAccessor או תפקיד עם הרשאות דומות.
הרישום ביומן חושף את השדות המוגבלים למשתמשים שיש להם גם הרשאה לצפייה ביומנים בדלי וגם תפקיד logging.fieldAccessor.
אתם יכולים לשנות את התנהגות ברירת המחדל כדי להגביל קבוצות משנה של שדות מוגבלים למשתמשים ספציפיים.
מתן הרשאה בכל השדות המוגבלים
כדי להעניק למשתמשים הרשאה לכל השדות המוגבלים, צריך להקצות להם את התפקיד logging.fieldAccessor או תפקיד בהתאמה אישית שכולל את התפקיד logging.fieldAccessor.
המסוף
כדי להקצות למשתמשים את התפקיד logging.fieldAccessor באמצעות מסוף Google Cloud :
-
נכנסים לדף IAM במסוף Google Cloud :
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא IAM & Admin.
- בוחרים את חשבון המשתמש ולוחצים על עריכה.
- בחלונית Edit permissions, בוחרים את התפקיד Log Field Accessor.
- לוחצים על הוספת תנאי IAM.
- מזינים כותרת ותיאור בשדות כותרת ותיאור.
בוחרים בכרטיסייה Condition editor ומזינים את הביטוי הבא:
resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"לוחצים על שמירה.
הרשאות הגישה וניהול הזהויות מתעדכנות באופן מיידי.
gcloud
כדי להקצות למשתמשים את התפקיד logging.fieldAccessor באמצעות ה-CLI של gcloud, מבצעים את השלבים הבאים:
כדי לשמור את פרטי מדיניות ה-IAM הנוכחית בקובץ, מריצים את הפקודה
gcloud projects get-iam-policyושומרים את הפלט בקובץ:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonהפקודה הקודמת שומרת את המידע בקובץ בשם
policy.json.מעדכנים את הקובץ
policy.jsonעם קישורים נוספים.בדוגמה הבאה, השדה
expressionמציג רק קטגוריה ביומן. לכן, כל השדות של רשומות ביומן שמאוחסנות בקטגוריה ביומן הזו נגישים לישויות המורשות שמפורטות בקטעmembers."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/{bucket}/\") == 'BUCKET_ID'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]בדוגמה הקודמת, השדות מייצגים את המשמעויות הבאות:
- PRINCIPAL: מזהה של ישות מורשית שרוצים להקצות לה את התפקיד. בדרך כלל, מזהי החשבונות הראשיים מופיעים בפורמט הבא:
PRINCIPAL-TYPE:ID. לדוגמה,user:my-user@example.com. רשימה מלאה של הפורמטים האפשריים שלPRINCIPALמופיעה במאמר מזהים של חשבונות משתמשים. בשדהmembersשל הקובץpolicy.json, משתמשים בפורמט"PRINCIPAL-TYPE":"ID". - DESCRIPTION: תיאור של התנאי.
- TITLE: שם לתנאי.
- PRINCIPAL: מזהה של ישות מורשית שרוצים להקצות לה את התפקיד. בדרך כלל, מזהי החשבונות הראשיים מופיעים בפורמט הבא:
כדי להחיל את הקובץ המעודכן
policy.json, מריצים את הפקודהgcloud projects set-iam-policy:gcloud projects set-iam-policy PROJECT_ID policy.json
הרשאות הגישה וניהול הזהויות מתעדכנות באופן מיידי.
הענקת הרשאות לקבוצת משנה של שדות מוגבלים
כדי להעניק למשתמשים הרשאות לגבי חלק משדות המוגבלים, צריך להגדיר את השדות שהמשתמשים יכולים לגשת אליהם כשמעניקים להם את התפקיד logging.fieldAccessor או כשמגדירים תפקיד בהתאמה אישית שכולל את התפקיד logging.fieldAccessor.
שימו לב לנקודות הבאות:
האיות והשימוש באותיות רישיות בשדה המוגבל שמופיע בהגדרת הדלי צריכים להיות זהים לאיות ולשימוש באותיות רישיות בשדה המוגבל בשם הרשאת ה-IAM. לדוגמה, אם מגדירים את השדה המוגבל כ-
jsonPayload, צריך לתת הרשאה בשדהjsonPayloadולא בשדהJsonpayload.נתיבי שדות, כולל מחרוזות של מפתחות מיפוי, הם תלויי-רישיות, אבל אפשר להשתמש בנתיבי שדות של protobuf בפורמט snake_case (קו תחתון בין מילים) שהוא לא תלוי-רישיות, או בפורמט camelCase (אות גדולה בתחילת כל מילה) שהוא תלוי-רישיות.
לדוגמה,
logNameהוא שדה ב-protobufLogEntry;log_nameמתייחס לאותו שדה. השדהjsonPayload.fooBarמתייחס לשדה אחר מזה שלjsonPayload.foo_bar, כי שמות השדות מתחת ל-jsonPayloadהם מפתחות מחרוזת של מפה. עם זאת, הוא מתייחס ל-json_payload.fooBar.גם אם נתיבי השדות הם הפניות תקינות לאותו שדה, צריך להקפיד על איות, שימוש באותיות רישיות ורישיות כשמגדירים הגבלות והרשאות IAM. לדוגמה, אם מציינים הגבלה על
jsonPayload.foo, צריך להגדיר הרשאות IAM ל-jsonPayload.fooולא ל-json_payload.foo.
מידע נוסף על סוגי שדות יומן חוקיים זמין במאמר שפת שאילתות לרישום ביומן: ערכים והמרות.
המסוף
כדי לתת למשתמשים גישה לשדה מוגבל באמצעות מסוף Google Cloud :
-
נכנסים לדף IAM במסוף Google Cloud :
אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא IAM & Admin.
- בוחרים את חשבון המשתמש ולוחצים על עריכה.
- בחלונית Edit permissions, בוחרים את התפקיד Log Field Accessor.
- לוחצים על הוספת תנאי IAM.
- מזינים כותרת ותיאור בשדות כותרת ותיאור.
בוחרים בכרטיסייה Condition editor ומזינים את הביטוי הבא:
resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"לוחצים על שמירה.
הרשאות הגישה וניהול הזהויות מתעדכנות באופן מיידי.
gcloud
כדי לתת למשתמשים גישה לשדה מוגבל באמצעות ה-CLI של gcloud, מבצעים את השלבים הבאים:
כדי לשמור את פרטי ה-IAM בקובץ, מריצים את הפקודה
gcloud projects get-iam-policyושומרים את הפלט בקובץ:gcloud projects get-iam-policy PROJECT_ID --format=json > policy.jsonהפקודה הקודמת שומרת את המידע בקובץ בשם
policy.json.מעדכנים את הקובץ
policy.jsonעם קישורים נוספים.בדוגמה הבאה, השדה
expressionמפרט שדות ספציפיים. לכן, רק לגורמים שמופיעים בקטעmembersיש גישה לשדות האלה ברשומות ביומן שמאוחסנות בקטגוריית היומן שצוינה."bindings": [ { "condition": { "description": "DESCRIPTION", "expression": "resource.name.extract(\"locations/global/buckets/BUCKET_ID/fields/{field}\") == 'RESTRICTED_FIELDS'", "title": "TITLE" }, "members": [ PRINCIPAL ], "role": "roles/logging.fieldAccessor" } ]בדוגמה הקודמת, השדות מייצגים את המשמעויות הבאות:
- PRINCIPAL: מזהה של ישות מורשית שרוצים להקצות לה את התפקיד. בדרך כלל, מזהי החשבונות הראשיים מופיעים בפורמט הבא:
PRINCIPAL-TYPE:ID. לדוגמה,user:my-user@example.com. רשימה מלאה של הפורמטים האפשריים שלPRINCIPALמופיעה במאמר מזהים של חשבונות משתמשים. בשדהmembersשל הקובץpolicy.json, משתמשים בפורמט"PRINCIPAL-TYPE":"ID". - DESCRIPTION: תיאור של התנאי.
- TITLE: שם לתנאי.
- PRINCIPAL: מזהה של ישות מורשית שרוצים להקצות לה את התפקיד. בדרך כלל, מזהי החשבונות הראשיים מופיעים בפורמט הבא:
כדי להחיל את הקובץ המעודכן
policy.json, מריצים את הפקודהgcloud projects set-iam-policy:gcloud projects set-iam-policy PROJECT_ID policy.json
הרשאות הגישה וניהול הזהויות מתעדכנות באופן מיידי.
דוגמה
נניח שקטגוריה ביומן מגבילה את השדה jsonPayload, תווית ספציפית ותת-שדה ספציפי של httpRequest. מה קורה כשמשתמש בודק את הרשומות ביומן
משתמשים שיש להם הרשאה לגשת לכל השדות המוגבלים יכולים לראות את כל השדות ברשומה ביומן.
למשתמשים שיש להם הרשאה לגשת רק לשדה המוגבל
jsonPayloadLogEntry, כל השדות הלא מוגבלים גלויים, והשדהjsonPayloadגלוי.משתמשים שאין להם הרשאה לצפות באף אחד מהשדות המוגבלים, יכולים לראות רק את השדות הלא מוגבלים.
אם משתמש כותב שאילתה עם הגבלה גלובלית, רשומות ביומן שמכילות שדה מוגבל מושמטות מהתגובה.
שדות מוגבלים של כרטיס העסק
כדי לראות רשימה של השדות המוגבלים בקטגוריית יומנים, מריצים את הפקודה הבאה gcloud logging buckets describe:
gcloud logging buckets describe BUCKET_ID --location=LOCATION
פקודה לדוגמה:
gcloud logging buckets describe my-log-bucket --location=global
מכסות ומגבלות
כשמגדירים ומשתמשים בבקרת גישה ברמת השדה, חשוב לשים לב לדברים הבאים:
- מספר השדות המוגבלים: אפשר להגביל עד 20 שדות לכל קטגוריה ביומן.
- גודל השדות המוגבלים: אורך הנתיב של השדה המוגבל צריך להיות קטן מ-800 בייט.
מידע נוסף על המגבלות שעשויות לחול על השימוש שלכם ב-Cloud Logging זמין במאמר מכסות ומגבלות.