במאמר הזה מוסבר על אמצעי בקרה לגישה ברמת השדה ואיך מגדירים אותם בקטגוריה של 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 זמין במאמר מכסות ומגבלות.