הגדרת גישה ברמת השדה

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

  1. נכנסים לדף IAM במסוף Google Cloud :

    כניסה לדף IAM

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא IAM & Admin.

  2. בוחרים את חשבון המשתמש ולוחצים על עריכה.
  3. בחלונית Edit permissions, בוחרים את התפקיד Log Field Accessor.
  4. לוחצים על הוספת תנאי IAM.
  5. מזינים כותרת ותיאור בשדות כותרת ותיאור.
  6. בוחרים בכרטיסייה Condition editor ומזינים את הביטוי הבא:

    resource.name.extract("locations/global/buckets/{bucket}/") == "BUCKET_ID"
    
  7. לוחצים על שמירה.

הרשאות הגישה וניהול הזהויות מתעדכנות באופן מיידי.

gcloud

כדי להקצות למשתמשים את התפקיד logging.fieldAccessor באמצעות ה-CLI של gcloud, מבצעים את השלבים הבאים:

  1. כדי לשמור את פרטי מדיניות ה-IAM הנוכחית בקובץ, מריצים את הפקודה gcloud projects get-iam-policy ושומרים את הפלט בקובץ:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    הפקודה הקודמת שומרת את המידע בקובץ בשם policy.json.

  2. מעדכנים את הקובץ 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: שם לתנאי.
  3. כדי להחיל את הקובץ המעודכן 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 הוא שדה ב-protobuf‏ LogEntry;‏ log_name מתייחס לאותו שדה. השדה jsonPayload.fooBar מתייחס לשדה אחר מזה של jsonPayload.foo_bar, כי שמות השדות מתחת ל-jsonPayload הם מפתחות מחרוזת של מפה. עם זאת, הוא מתייחס ל-json_payload.fooBar.

    גם אם נתיבי השדות הם הפניות תקינות לאותו שדה, צריך להקפיד על איות, שימוש באותיות רישיות ורישיות כשמגדירים הגבלות והרשאות IAM. לדוגמה, אם מציינים הגבלה על jsonPayload.foo, צריך להגדיר הרשאות IAM ל-jsonPayload.foo ולא ל-json_payload.foo.

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

המסוף

כדי לתת למשתמשים גישה לשדה מוגבל באמצעות מסוף Google Cloud :

  1. נכנסים לדף IAM במסוף Google Cloud :

    כניסה לדף IAM

    אם משתמשים בסרגל החיפוש כדי למצוא את הדף הזה, בוחרים בתוצאה שכותרת המשנה שלה היא IAM & Admin.

  2. בוחרים את חשבון המשתמש ולוחצים על עריכה.
  3. בחלונית Edit permissions, בוחרים את התפקיד Log Field Accessor.
  4. לוחצים על הוספת תנאי IAM.
  5. מזינים כותרת ותיאור בשדות כותרת ותיאור.
  6. בוחרים בכרטיסייה Condition editor ומזינים את הביטוי הבא:

    resource.name.extract("locations/global/buckets/BUCKET_ID/fields/{field}") == "RESTRICTED_FIELDS"
    
  7. לוחצים על שמירה.

הרשאות הגישה וניהול הזהויות מתעדכנות באופן מיידי.

gcloud

כדי לתת למשתמשים גישה לשדה מוגבל באמצעות ה-CLI של gcloud, מבצעים את השלבים הבאים:

  1. כדי לשמור את פרטי ה-IAM בקובץ, מריצים את הפקודה gcloud projects get-iam-policy ושומרים את הפלט בקובץ:

    gcloud projects get-iam-policy PROJECT_ID --format=json > policy.json
    

    הפקודה הקודמת שומרת את המידע בקובץ בשם policy.json.

  2. מעדכנים את הקובץ 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: שם לתנאי.
  3. כדי להחיל את הקובץ המעודכן policy.json, מריצים את הפקודה gcloud projects set-iam-policy:

    gcloud projects set-iam-policy PROJECT_ID policy.json
    

הרשאות הגישה וניהול הזהויות מתעדכנות באופן מיידי.

דוגמה

נניח שקטגוריה ביומן מגבילה את השדה jsonPayload, תווית ספציפית ותת-שדה ספציפי של httpRequest. מה קורה כשמשתמש בודק את הרשומות ביומן

  • משתמשים שיש להם הרשאה לגשת לכל השדות המוגבלים יכולים לראות את כל השדות ברשומה ביומן.

  • למשתמשים שיש להם הרשאה לגשת רק לשדה המוגבל jsonPayload LogEntry, כל השדות הלא מוגבלים גלויים, והשדה 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 זמין במאמר מכסות ומגבלות.