העברת הרשאות מ-Hadoop

במאמר הזה מוסבר איך אפשר להעביר הרשאות מ-Apache Hadoop Distributed File System‏ (HDFS), מ-Ranger HDFS ומ-Apache Hive לתפקידים בניהול הזהויות והרשאות הגישה (IAM) ב-Cloud Storage או ב-BigQuery.

תהליך העברת ההרשאות כולל את השלבים הבאים:

  1. יוצרים קובץ מיפוי של ישויות מורשות על ידי יצירת קובץ תצורה YAML של כללי ישויות מורשות. לאחר מכן, מריצים את כלי העברת ההרשאות עם קובץ ה-YAML של כללי המנהל הראשי ועם קובצי המטא-נתונים של HDFS או Ranger כדי ליצור קובץ מיפוי של המנהלים הראשיים.
  2. יוצרים קובץ מיפוי של הרשאות היעד על ידי יצירת קובץ YAML של כללי הרשאות. לאחר מכן, מריצים את כלי העברת ההרשאות עם קובץ ה-YAML של כללי ההרשאות, קובצי התצורה של מיפוי הטבלאות וקובצי המטא-נתונים של HDFS או Ranger, כדי ליצור קובץ מיפוי של הרשאות היעד.
  3. מריצים את כלי העברת ההרשאות עם קובץ הרשאות היעד כדי להחיל הרשאות על Cloud Storage או על BigQuery. אפשר גם להשתמש בסקריפט Python שמופיע כאן כדי ליצור קובץ Terraform שבעזרתו תוכלו להחיל הרשאות בעצמכם.

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

לפני שמעבירים הרשאות, צריך לוודא שביצעתם את הפעולות הבאות:

אפשר למצוא את סקריפט הגנרטור של Terraform גם בקובץ terraform.zip בחבילת הפריטים.

יצירת קובץ מיפוי של ישויות

קובץ מיפוי של חשבונות משתמשים מגדיר כללי מיפוי שממפים חשבונות משתמשים מהמקור שלכם לחשבונות משתמשים ב- Google Cloud IAM.

כדי ליצור קובץ מיפוי של ישויות, קודם צריך ליצור ידנית קובץ YAML של כללי ישויות כדי להגדיר איך ישויות ממופות מהמקור לישויות ב- Google Cloud IAM. בקובץ ה-YAML של כללי קבוצת המנהלים, מגדירים כללי מיפוי לכל אחד מהמקורות, ranger, HDFS או שניהם.

בדוגמה הבאה מוצג קובץ YAML של כללי חשבונות משתמשים שממפה קבוצות של Apache Ranger לחשבונות שירות ב- Google Cloud:

  ranger:
    user_rules:
      - skip: true
    group_rules:
      # Skip internal Ranger groups.
      - skip: true
        when: "group.groupSource == 0"

      # Map all roles to Google Cloud Platform service accounts.
      - map:
          type:
            value: serviceAccount
          email_address:
            expression: "group.name + 'my-service-account@my-project.iam.gserviceaccount.com'"

    role_rules:
      - skip: true

  hdfs:
    user_rules:
      - skip: true
    group_rules:
      - skip: true
    other_rules:
      - skip: true

בדוגמה הבאה מוצג קובץ YAML של כללי חשבונות משתמשים שממפה משתמשי HDFS למשתמשים ספציפיים: Google Cloud

  ranger:
    user_rules:
      - skip: true
    group_rules:
      - skip: true
    role_rules:
      - skip: true

  hdfs:
    user_rules:
      # Skip user named 'example'
      - when: "user.name == 'example'"
        skip: true
      # Map all other users to their name at google.com
      - when: "true"
        map:
          type:
            value: user
          email_address:
            expression: "user.name + '@google.com'"

    group_rules:
      - skip: true
    other_rules:
      - skip: true

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

אחרי שיוצרים קובץ YAML של כללי הרשאות, מעלים אותו לקטגוריה של Cloud Storage. צריך לכלול גם את קובץ HDFS, את קובץ Apache Ranger שנוצר על ידי הכלי dwh-migration-dumper, או את שניהם, בהתאם למקור שממנו מעבירים את ההרשאות. לאחר מכן תוכלו להפעיל את כלי העברת ההרשאות כדי ליצור את קובץ מיפוי הגורמים המורשים.

בדוגמה הבאה מוצג איך אפשר להריץ את כלי העברת ההרשאות כדי להעביר הרשאות מ-HDFS ומ-Apache Ranger. התוצאה היא קובץ מיפוי של גורמים ראשיים בשם principals.yaml.

./dwh-permissions-migration expand \
    --principal-ruleset gs://MIGRATION_BUCKET/principals-ruleset.yaml \
    --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \
    --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \
    --output-principals gs://MIGRATION_BUCKET/principals.yaml

מחליפים את MIGRATION_BUCKET בשם הקטגוריה ב-Cloud Storage שמכילה את קובצי ההעברה.

אחרי שמריצים את הכלי, בודקים את קובץ principals.yaml שנוצר כדי לוודא שהוא מכיל חשבונות משתמש מהמקור שלכם שמופים לחשבונות משתמש ב-IAM. Google Cloudאפשר לערוך את הקובץ באופן ידני לפני השלבים הבאים.

יצירת קובץ הרשאות יעד

קובץ הרשאות היעד מכיל מידע על המיפוי של הרשאות המקור שהוגדרו באשכול Hadoop לתפקידי IAM עבור תיקיות מנוהלות ב-BigQuery או ב-Cloud Storage. כדי ליצור קובץ הרשאות יעד, קודם צריך ליצור באופן ידני קובץ YAML של כללי הרשאות שמציין איך הרשאות מ-Ranger או מ-HDFS ממופות ל-Cloud Storage או ל-BigQuery.

בדוגמה הבאה, כל ההרשאות של Ranger מתקבלות ב-Cloud Storage:

gcs:
  ranger_hive_rules:
    - map: {}
      log: true

בדוגמה הבאה, כל ההרשאות של HDFS מתקבלות, מלבד העיקרון hadoop:

gcs:
  hdfs_rules:
    - when:
        source_principal.name == 'hadoop'
      skip: true
    - map: {}

בדוגמה הבאה, מיפוי התפקידים שמוגדר כברירת מחדל עבור הטבלה tab0 מוחלף, ונעשה שימוש בברירות מחדל לכל שאר ההרשאות

gcs:
  ranger_hive_rules:
    ranger_hive_rules:
      - when: table.name == 'tab0'
        map:
          role:
            value: "roles/customRole"
      - map: {}

למידע נוסף על התחביר ליצירת קובץ YAML של כללי הרשאות, אפשר לעיין במאמר קובצי YAML של כללי הרשאות.

אחרי שיוצרים קובץ YAML של כללי הרשאות, מעלים אותו לקטגוריה של Cloud Storage. צריך לכלול גם את קובץ HDFS, את קובץ Apache Ranger שנוצר על ידי הכלי dwh-migration-dumper, או את שניהם, בהתאם למקור שממנו מעבירים את ההרשאות. צריך לכלול גם את קובצי ה-YAML של הגדרות הטבלאות ואת קובץ מיפוי הגורמים.

לאחר מכן, תוכלו להפעיל את כלי העברת ההרשאות כדי ליצור את קובץ הרשאות היעד.

בדוגמה הבאה אפשר לראות איך מריצים את כלי העברת ההרשאות כדי להעביר הרשאות מ-HDFS ומ-Apache Ranger, עם קובצי התצורה של מיפוי הטבלאות וקובץ מיפוי הגורמים המורשים שנקרא principals.yaml, וכתוצאה מכך נוצר קובץ מיפוי גורמים מורשים שנקרא permissions.yaml.

./dwh-permissions-migration build \
    --permissions-ruleset gs://MIGRATION_BUCKET/permissions-config.yaml \
    --tables gs://MIGRATION_BUCKET/tables/ \
    --principals gs://MIGRATION_BUCKET/principals.yaml \
    --ranger-dumper-output gs://MIGRATION_BUCKET/ranger-dumper-output.zip \
    --hdfs-dumper-output gs://MIGRATION_BUCKET/hdfs-dumper-output.zip \
    --output-permissions gs://MIGRATION_BUCKET/permissions.yaml

מחליפים את MIGRATION_BUCKET בשם הקטגוריה של Cloud Storage שמכילה את קובצי ההעברה.

אחרי שמפעילים את הכלי, בודקים את קובץ permissions.yaml שנוצר כדי לוודא שהוא מכיל הרשאות מהמקור שמופה ל-Cloud Storage או ל-BigQuery IAM bindings. אפשר לערוך את הפרטים באופן ידני לפני שממשיכים לשלבים הבאים.

החלת הרשאות

אחרי שיוצרים קובץ הרשאות של היעד, אפשר להריץ את כלי העברת ההרשאות כדי להחיל את הרשאות ה-IAM על Cloud Storage או על BigQuery.

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

  • יצרתם את החשבונות הראשיים הנדרשים (משתמשים, קבוצות, חשבונות שירות) ב-Google Cloud.
  • יצרתם את התיקיות או הטבלאות המנוהלות ב-Cloud Storage שיארחו את הנתונים שהועברו.
  • למשתמש שמריץ את הכלי יש הרשאות לניהול תפקידים בתיקיות או בטבלאות המנוהלות ב-Cloud Storage.

כדי להחיל הרשאות, מריצים את הפקודה הבאה:

./dwh-permissions-migration apply \
--permissions gs://MIGRATION_BUCKET/permissions.yaml

כאשר MIGRATION_BUCKET הוא השם של קטגוריית Cloud Storage שמכילה את קובצי ההעברה.

החלת הרשאות כהגדרות ב-Terraform

כדי להחיל את ההרשאות שהועברו, אפשר גם להמיר את קובץ הרשאות היעד להגדרת תשתית כקוד (IaC) של Terraform ולהחיל אותה על Cloud Storage.

  1. מוודאים שיש לכם Python 3.7 ואילך.
  2. יוצרים סביבה וירטואלית חדשה ומפעילים אותה.
  3. מהספרייה permissions-migration/terraform, מתקינים את התלות מקובץ requirements.txt באמצעות הפקודה הבאה:

    python -m pip install -r requirements.txt
  4. מריצים את הפקודה ליצירת קובץ:

    python tf_generator PATH LOCATION OUTPUT

    מחליפים את מה שכתוב בשדות הבאים:

    • PATH: הנתיב לקובץ permissions.yaml שנוצר.
    • LOCATION: המיקום של הקטגוריה של Cloud Storage שבה התסריט בודק ויוצר תיקיות על סמך הגדרות ההרשאות.
    • OUTPUT: הנתיב לקובץ הפלט, main.tf.

קובצי YAML של ערכת כללים

קובצי YAML של ערכת כללים משמשים למיפוי של ישויות ותפקידים כשמעבירים הרשאות מ-HDFS או מ-Apache Ranger אלGoogle Cloud. בקובצי YAML של ערכת כללים נעשה שימוש ב-Common Expression Language ‏ (CEL) כדי לציין פרדיקטים (שבהם התוצאה היא בוליאנית) וביטויים (שבהם התוצאה היא מחרוזת).

קובצי YAML של ערכות כללים כוללים את המאפיינים הבאים:

  • כללי המיפוי מכל סוג מופעלים ברצף מלמעלה למטה עבור כל אובייקט קלט.
  • לביטויי CEL יש גישה למשתני הקשר, ומשתני ההקשר תלויים בחלק של קבוצת הכללים. לדוגמה, אפשר להשתמש במשתנה user כדי למפות לאובייקטים של משתמשים במקור, ובמשתנה group כדי למפות לקבוצות.
  • אפשר להשתמש בביטויי CEL או בערכים סטטיים כדי לשנות את ערכי ברירת המחדל. לדוגמה, כשממפים קבוצה, אפשר לשנות את ערך הפלט type מערך ברירת המחדל group לערך אחר כמו serviceAccount.
  • צריך להיות לפחות כלל אחד שתואם לכל אובייקט קלט.

במיגרציה של הרשאות HDFS או Apache Ranger, אפשר להשתמש בקובץ YAML של כללי הרשאות כדי להגדיר קובץ מיפוי של חשבונות משתמש או קובץ מיפוי של תפקידים.

כללי מיפוי בקובצי YAML של ערכת כללים

קובץ ה-YAML של קבוצת הכללים מורכב מכללי מיפוי שמציינים איך אובייקטים תואמים מהמקור ליעד במהלך העברת הרשאות. כלל מיפוי יכול להכיל את הקטעים או הסעיפים הבאים:

  • when: פסוקית של נשוא שמגבילה את תחולת הכלל
    • מחרוזת שמייצגת ביטוי בוליאני ב-CEL. הערכים האפשריים הם true או false
    • הכלל חל רק אם סעיף when שווה ל-true
    • ערך ברירת המחדל הוא true
  • map: סעיף שמציין את התוכן של שדה תוצאה. הערך של הסעיף הזה תלוי בסוג האובייקט שעובר עיבוד, והוא יכול להיות:
    • expression כדי להעריך כמחרוזת
    • value למחרוזת קבועה
  • skip: מציין שאסור למפות את אובייקט הקלט.
    • הערך יכול להיות true או false
  • log: פסוקית של תנאי שעוזרת לנפות באגים או לפתח כללים
    • מחרוזת שמייצגת ביטוי בוליאני ב-CEL. הערכים האפשריים הם true או false
    • ערך ברירת המחדל הוא false
    • אם הערך הוא true, הפלט מכיל יומן ביצוע שאפשר להשתמש בו כדי לעקוב אחרי בעיות בביצוע או לאבחן אותן.

יצירת קובץ YAML של כללי הרשאות

קובץ מיפוי של חשבונות משתמשים משמש ליצירת מזהים של חשבונות משתמשים על ידי ציון ערך ל-email_address ול-type.

  • משתמשים ב-email_address כדי לציין את כתובת האימייל של Google Cloud הגורם המרכזי.
  • משתמשים ב-type כדי לציין את אופי החשבון הראשי ב- Google Cloud. הערך של type יכול להיות user,‏ group או serviceAccount.

לכל ביטוי CEL שמשמש בכללים יש גישה למשתנים שמייצגים את האובייקט שעבר עיבוד. השדות במשתנים מבוססים על התוכן של קובצי המטא-נתונים של HDFS או Apache Ranger. המשתנים הזמינים תלויים בקטע של קבוצת הכללים:

  • בשביל user_rules, משתמשים במשתנה user
  • בשביל group_rules, משתמשים במשתנה group
  • בשביל other_rules, משתמשים במשתנה other
  • בשביל role_rules, משתמשים במשתנה role

בדוגמה הבאה ממופים משתמשים מ-HDFS למשתמשים ב- Google Cloud עם שם המשתמש שלהם, ואחריו @google.com ככתובת האימייל שלהם:

hdfs:
  user_rules:
    # Skip user named 'example'
    - when: "user.name == 'example'"
      skip: true
    # Map all other users to their name at google.com
    - when: "true"
      map:
        type:
          value: user
        email_address:
          expression: "user.name + '@google.com'"

שינוי מיפוי ברירת המחדל של התפקידים

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

בדוגמה הבאה אפשר לראות איך מדלגים על קטע של כללים:

hdfs:
  user_rules:
    - skip: true
  group_rules:
    - skip: true
  other_rules:
    - skip: true

יצירת קובץ YAML של כללי הרשאות

קובץ YAML של כללי הרשאות משמש ליצירת קובץ מיפוי הרשאות יעד. כדי ליצור קובץ YAML של כללי הרשאות, משתמשים בביטויי CEL בקובץ ה-YAML של כללי ההרשאות כדי למפות הרשאות HDFS או Apache Ranger לתפקידים ב-Cloud Storage או ב-BigQuery.

מיפוי תפקידים שמוגדר כברירת מחדל

התפקידים של קובצי HDFS נקבעים לפי ההרשאות של קובץ המקור:

  • אם הביט w מוגדר, תפקיד ברירת המחדל הוא writer
  • אם הביט r מוגדר, תפקיד ברירת המחדל הוא reader
  • אם אף אחד מהביטים לא מוגדר, התפקיד ריק

Ranger HDFS:

  • אם קבוצת הגישה מכילה את write, תפקיד ברירת המחדל הוא writer
  • אם קבוצת הגישה מכילה את read, תפקיד ברירת המחדל הוא reader
  • אם קבוצת הגישה לא מכילה אף אחת מהן, התפקיד ריק

שומר היערות:

  • אם קבוצת הגישה מכילה את update,‏ create,‏ drop,‏ alter,‏ index,‏ lock,‏ all,‏ write או refresh, תפקיד ברירת המחדל הוא writer
  • אם קבוצת ההרשאות מכילה את select או read, תפקיד ברירת המחדל הוא reader
  • אם קבוצת ההרשאות לא מכילה אף אחת מההרשאות שצוינו למעלה, התפקיד ריק

‫Cloud Storage:

  • roles/storage.objectUser – Writer
  • roles/storage.objectViewer – Reader

‫BigQuery:

  • roles/bigquery.dataOwner – Writer
  • roles/bigquery.dataViewer – Reader

בדוגמה הבאה אפשר לראות איך מאשרים מיפויים שמוגדרים כברירת מחדל בלי לבצע שינויים בקובץ ה-YAML של קבוצת הכללים:

ranger_hdfs_rules:
  - map: {}

שינוי מיפוי ברירת המחדל של התפקידים

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

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

ranger_hdfs_rules:
  - map:
    role:
      value: "roles/customRole"

מיזוג של מיפויי הרשאות

אם נוצרים כמה מיפויי הרשאות לאותו משאב יעד, המערכת משתמשת במיפוי עם הגישה הרחבה ביותר. לדוגמה, אם כלל HDFS מעניק תפקיד קריאה לישות מורשית pa1 במיקום HDFS, וכלל Ranger מעניק תפקיד כתיבה לאותה ישות מורשית באותו מיקום, אז מוקצה תפקיד הכתיבה.

שימוש במירכאות במחרוזות בביטויי CEL

משתמשים במירכאות "" כדי להקיף את כל ביטוי ה-CEL ב-YAML. בתוך ביטוי CEL, משתמשים בגרשיים '' כדי לצטט מחרוזות. לדוגמה:

"'permissions-migration-' + group.name + '@google.com'"