הגבלת מאגרי מידע מרוחקים

במאמר הזה מוסבר איך להשתמש ב-Organization Policy Service כדי להגביל את מאגר מאגרי ה-Git המרוחקים של צד שלישי שאליהם מאגרי Dataform יכולים להתחבר.

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

לפני שמגדירים או עורכים את המדיניות dataform.restrictGitRemotes, צריך למצוא את כתובות ה-URL המלאות של מאגרי ה-Git המרוחקים שרוצים להוסיף לרשימת ההיתרים.

כדי למצוא את כתובת ה-URL המלאה של מאגר Git מרוחק שכבר מחובר למאגר Dataform, פועלים לפי השלבים הבאים:

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

    מעבר אל Dataform

  2. בוחרים מאגר ואז לוחצים על הגדרות.

    חשוב לזכור שכתובות URL של מאגרי מידע מרוחקים שמוצגות בדף Dataform מקוצרות, ואי אפשר להשתמש בהן במדיניות dataform.restrictGitRemotes.

  3. בדף הגדרות, בקטע הגדרות חיבור ל-Git, מעתיקים את הערך של מקור המאגר.

    הערך של Repository source הוא כתובת ה-URL המלאה של המאגר המרוחק. אפשר להשתמש בכתובת ה-URL הזו במדיניות dataform.restrictGitRemotes.

התפקידים הנדרשים

כדי לקבל את ההרשאות שדרושות לניהול מדיניות הארגון, צריך לבקש מהאדמין להקצות לכם את תפקיד ה-IAM‏ Organization policy administrator (אדמין של מדיניות הארגון) ‏(roles/orgpolicy.policyAdmin) בארגון. כדי לקרוא הסבר על מתן תפקידים, ראו איך מנהלים את הגישה ברמת הפרויקט, התיקייה והארגון.

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

ההרשאות הנדרשות

כדי לנהל את מדיניות הארגון, נדרשות ההרשאות הבאות:

  • orgpolicy.constraints.list
  • orgpolicy.policies.create
  • orgpolicy.policies.delete
  • orgpolicy.policies.list
  • orgpolicy.policies.update
  • orgpolicy.policy.get
  • orgpolicy.policy.set

יכול להיות שתקבלו את ההרשאות האלה באמצעות תפקידים בהתאמה אישית או תפקידים מוגדרים מראש אחרים.

מידע על הגבלת מאגרי Git מרוחקים

אפשר לקשר מאגר Dataform למאגר GitHub או למאגר GitLab.

כדאי להגביל את מאגר המאגרי המרוחקים שאליהם מאגרי Dataform יכולים להתחבר, כדי למנוע מגורמים זדוניים לגשת לבסיס הקוד של Dataform ולטוקנים של גישה דרך עותקים לא מוגנים של המאגר.

אתם יכולים להשתמש בשירות מדיניות הארגון כדי ליצור מדיניות ארגונית שמגבילה את כתובות ה-URL של מאגרי Git שאליהם Dataform יכול להתחבר.

ההגבלה להגבלת מאגרי Git מרוחקים ב-Dataform היא:

constraints/dataform.restrictGitRemotes

כדי להשתמש באילוץ, יוצרים מדיניות ארגונית עם allowedValues רשימה של כתובות URL של מאגרי Git מרוחקים שיכולים להתחבר למאגר Dataform. מאגרי Git מרוחקים מזוהים לפי כתובת ה-URL המלאה שלהם.

למדיניות dataform.restrictGitRemotes יש השפעה רטרואקטיבית, כלומר ההגבלה משפיעה על מאגרי Dataform קיימים.

כשמדיניות הארגון מופעלת, מאגר Dataform יכול להתחבר רק למאגרי Git מרוחקים שמופיעים ברשימה allowedValues. מאגרי Git מרוחקים שלא הוגדרו במפורש במדיניות הארגון לא יכולים להתחבר למאגר Dataform.

אם לא מגדירים את המדיניות dataform.restrictGitRemotes, התקשורת בין מאגרי Dataform לבין מאגרי Git מרוחקים לא מוגבלת.

אפשר להשתמש במדיניות dataform.restrictGitRemotes בדרכים הבאות:

Allow all
מאגרי Dataform יכולים להתחבר לכל כתובות ה-URL של מאגרים מרוחקים. בוחרים באפשרות הזו אם הארגון לא רוצה לחסום תקשורת עם מאגרים מרוחקים. לחלופין, כדי לאפשר את כל כתובות ה-URL של מאגרי מידע מרוחקים, אפשר להשאיר את מדיניות הארגון ללא הגדרה.
allowedValues רשימת כתובות URL
מאגרי Dataform יכולים להתחבר רק למאגרים מרוחקים שנכללים ברשימת ההיתרים. בוחרים באפשרות הזו כדי למנוע זליגת מידע.
Deny all
אי אפשר לחבר מאגרי Dataform לכתובות URL מרוחקות. בוחרים באפשרות הזו אם הארגון רוצה לחסום את כל התקשורת ולהשתמש במאגרי Dataform.

הדרישות להוספת מאגרי Git מרחוק לרשימת ההיתרים

  • אפשר להחיל את הגבלת הרשימה הזו רק על מאגרי GitHub ו-GitLab.

  • מדיניות הארגון חלה באופן רטרואקטיבי ומשפיעה על מאגרי Dataform קיימים.

  • ההגבלה הזו מקבלת את הערך allowedValues, שחוסם את החיבור לכל מאגרי Git מרוחקים אחרים, או את הערך Deny all. ברירת המחדל היא Allow all – מדיניות ארגונית לא מוגדרת מאפשרת תקשורת עם כל מאגרי ה-Git המרוחקים. מומלץ להגדיר את מדיניות הארגון לערך allowedValues.

  • באחריותכם או באחריות האדמין עם ההרשאות הנדרשות לנהל ולתחזק את המדיניות. חשוב לוודא שהמידע על האדמין של המדיניות מועבר בתוך הארגון.

הגדרת האילוץ של מדיניות הארגון ברמת הארגון

המסוף

  1. עוברים לדף /Organizational Policies/Organization Policies.

    מעבר אל מדיניות הארגון

  2. אם צריך, בוחרים את הארגון הנדרש מהתפריט הנפתח של הפרויקט.
  3. לוחצים על הגבלת גישה ל-git remotes עבור repositories ב-Dataform.
  4. לוחצים על ניהול המדיניות. אם אי אפשר ללחוץ על הלחצן ניהול מדיניות, סימן שאין לכם את ההרשאות הנכונות.
  5. בוחרים באפשרות התאמה אישית כדי להגדיר את מדיניות הארגון למאגרי Git מרוחקים ספציפיים.

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

  6. בוחרים את אכיפת המדיניות וסוג המדיניות הנדרשים.

  7. בשדה ערכי מדיניות, בוחרים באפשרות בהתאמה אישית.

  8. מזינים את כתובת ה-URL המלאה של מאגר Git מרוחק.

  9. לוחצים על New policy value ומזינים כתובות URL מלאות של מאגרי Git מרוחקים לפי הצורך.

  10. לוחצים על שמירה כדי להחיל את ההגבלה.

gcloud

כדי להגדיר אילוץ למאגרי Git מרוחקים, קודם צריך לדעת את מזהה הארגון. כדי למצוא את מזהה הארגון, מריצים את הפקודה organizations list ומחפשים את המזהה המספרי בתשובה:

gcloud organizations list

ה-CLI של gcloud מחזיר רשימה של ארגונים בפורמט הבא:

DISPLAY_NAME               ID
example-organization1      29252605212
example-organization2      1234567890

משתמשים בפקודה gcloud resource-manager org-policies set-policy כדי להגדיר את מדיניות הארגון. צריך לספק את המדיניות כקובץ JSON או YAML. יוצרים קובץ JSON בפורמט הבא:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

מחליפים את ORGANIZATION_ID במזהה המספרי של הארגון.

אם אתם לא רוצים שמאגרי Dataform יוכלו להתחבר למאגרי Git מרוחקים, אתם יכולים להגדיר מדיניות ארגונית עם denyAll הגדרה ל-true:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}

מחליפים את ORGANIZATION_ID במזהה המספרי של הארגון.

API

משתמשים ב-API של setOrgPolicy() כדי להגדיר את ההגבלה. ל-Dataform יש הרשאה להתחבר לכתובות ה-URL של מאגר Git מרוחק ברשימה allowedValues שאתם מציינים.

לדוגמה, הבקשה הבאה היא להחלת האילוץ dataform.restrictGitRemotes על ארגון שבו נבחרו מאגרי Git מרוחקים שמאגרי Dataform יכולים להתחבר אליהם:

POST https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies

כאשר ORGANIZATION_ID הוא המספר המזהה של הארגון.

עכשיו, בגוף הבקשה, מציינים את מדיניות הארגון הרצויה לאילוץ הזה:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

אם אתם לא רוצים שמאגרי Dataform יוכלו להתחבר למאגרי Git מרוחקים, אתם יכולים להגדיר מדיניות ארגונית עם denyAll שמוגדר ל-true:

{
  "name": "organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "denyAll": true
      }
    ]
  }
}
 
Replace <code><var>ORGANIZATION_ID</var></code> with the numeric ID
of the organization.

אם מדיניות הארגון כבר מוגדרת, צריך להריץ את הבקשה הבאה עם הגדרת מדיניות הארגון כגוף הבקשה:

PATCH https://orgpolicy.googleapis.com/v2/organizations/ORGANIZATION_ID/policies/dataform.restrictGitRemotes

הגדרת מדיניות הארגון ברמת הפרויקט

הגדרה של מדיניות ארגונית ברמת הפרויקט מבטלת את המדיניות הארגונית ברמת הארגון או מתמזגת איתה. במקרה של מיזוג, denyAll מקבל עדיפות על פני allowedValues. לדוגמה, אם מדיניות הארגון ברמת הארגון מוגדרת ל-denyAll, ובמדיניות הממוזגת ברמת הפרויקט מופיעה כתובת URL של מאגר מרוחק ברשימה allowedValues, ל-Dataform אין הרשאה להתחבר למאגר המרוחק. במקרה כזה, מדיניות הארגון ברמת הפרויקט צריכה לבטל את המדיניות ברמת הארגון, כדי ש-Dataform יוכל להתחבר למאגר המרוחק. מידע נוסף על ההיררכיה של מדיניות הארגון זמין במאמר הסבר על הערכת ההיררכיה.

המסוף

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

בורר הפרויקטים.

gcloud

משתמשים בפקודה gcloud resource-manager org-policies set-policy כדי להגדיר את מדיניות הארגון. צריך לספק את המדיניות כקובץ JSON או YAML.

יוצרים קובץ JSON בפורמט הבא:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

מחליפים את PROJECT_ID_OR_NUMBER במזהה הפרויקט או במספר הפרויקט של מדיניות הארגון הזו.

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

gcloud resource-manager org-policies set-policy MY_POLICY.JSON --project=PROJECT_ID

API

משתמשים ב-API של setOrgPolicy() כדי להגדיר את ההגבלה. ל-Dataform יש הרשאה להתחבר לכתובות ה-URL של מאגר Git מרוחק ברשימה allowedValues שאתם מציינים.

לדוגמה, הבקשה הבאה היא להחיל את האילוץ dataform.restrictGitRemotes על ארגון שבו מאגרי Dataform יכולים להתחבר רק למאגרי Git מרוחקים שנבחרו, ומדיניות constraints/dataform.restrictGitRemotes עדיין לא הוגדרה:

POST https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies

גוף הבקשה מכיל את מדיניות הארגון הרצויה לאילוץ הזה:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

מחליפים את PROJECT_ID_OR_NUMBER במזהה הפרויקט או במספר הפרויקט של הבקשה הזו.

זוהי בקשה להחיל את האילוץ dataform.restrictGitRemotes על ארגון שבו מאגרי Dataform יכולים להתחבר רק למאגרי Git מרוחקים שנבחרו, והמדיניות constraints/dataform.restrictGitRemotes כבר מוגדרת:

PATCH https://orgpolicy.googleapis.com/v2/projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes

גוף הבקשה מכיל את מדיניות הארגון הרצויה לאילוץ הזה:

{
  "name": "projects/PROJECT_ID_OR_NUMBER/policies/dataform.restrictGitRemotes",
  "spec": {
    "rules": [
      {
        "values": {
          "allowedValues": ["https://github.com/example/allowed-repository.git"]
        }
      }
    ]
  }
}

מחליפים את PROJECT_ID_OR_NUMBER במזהה הפרויקט או במספר הפרויקט של הבקשה הזו.

שיטות מומלצות להוספת מאגרי Git מרוחקים לרשימת ההיתרים

  • כדי לצמצם את הסיכון לזליגת נתונים, צריך להגדיר במפורש את האילוץ dataform.restrictGitRemotes כדי להוסיף לרשימת ההיתרים מבחר של מאגרי Git מרוחקים מהימנים.

  • אם אתם משתמשים רק במאגרי Dataform שלא מחוברים למאגרי Git מרוחקים, צריך להגדיר את האילוץ dataform.restrictGitRemotes ל-Deny All.

  • אין להשתמש ברשימה deniedValues עם המגבלה הזו. אם מגדירים ערכים ברשימה deniedValues, המשמעות היא שרק מאגרי ה-Git המרוחקים ברשימה deniedValues מוגבלים מחיבור. זה עלול להיות בעייתי מבחינת אבטחה אם רוצים לשלוט בדיוק במאגרי ה-Git המרוחקים שאליהם Dataform יכול להתחבר. אם רוצים להסיר מאגרי Git מרוחקים מסוימים מהרשימה allowedValues, צריך לעדכן את מדיניות הארגון הקיימת כדי להסיר אותם מהרשימה allowedValues, במקום להוסיף את המאגר המרוחק לרשימה deniedValues בהיררכיה נמוכה יותר.

  • אם רוצים להגדיר מדיניות ארגונית על חלק גדול בהיררכיית המשאבים, אבל להחריג פרויקטים מסוימים, אפשר לשחזר את מדיניות הארגון שמוגדרת כברירת מחדל באמצעות השיטה setOrgPolicy. לשם כך, צריך לציין את האובייקט restoreDefault כדי לאפשר לכל מאגרי Dataform בפרויקטים להתחבר למאגרי Git מרוחקים. המדיניות שמוגדרת כרגע לפרויקטים לא מושפעת מהגדרת ברירת המחדל.

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

  • כל מאגרי Dataform בארגון או בפרויקט שבהם מדיניות הארגון מופעלת כפופים למדיניות הזו. אם זו בעיה, מומלץ להגדיר שירותים ומוצרים אחרים בפרויקט אחר שלא חלה עליו מדיניות הארגון, ולהשתמש ב-VPC משותף, אם צריך.

  • לפני שמגדירים את מדיניות dataform.restrictGitRemotes, חשוב לוודא שכל העובדים בארגון מודעים למדיניות הארגונית ולאדמין שלה. באחריותכם או באחריות האדמין עם ההרשאות הנדרשות לנהל ולתחזק את המדיניות.

המאמרים הבאים