העברת הרשאות מ-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 generator גם בקובץ 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 שנוצר כדי לוודא שהוא מכיל חשבונות משתמשים מהמקור שממופים לחשבונות משתמשים ב- Google CloudIAM. אפשר לערוך את הקובץ באופן ידני לפני שממשיכים לשלבים הבאים.

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

קובץ ההרשאות של היעד מכיל מידע על המיפוי של הרשאות המקור שמוגדרות באשכול 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 שנוצר כדי לוודא שהוא מכיל הרשאות מהמקור שממופות לקישורי IAM של Cloud Storage או BigQuery. אפשר לערוך אותם באופן ידני לפני שממשיכים לשלבים הבאים.

החלת הרשאות

אחרי שיוצרים קובץ הרשאות יעד, אפשר להריץ את הכלי להעברת הרשאות כדי להחיל את הרשאות ה-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. מוודאים שמותקנת גרסה 3.7 ומעלה של Python.
  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 – כותב/ת
  • roles/storage.objectViewer – קורא

‫BigQuery:

  • roles/bigquery.dataOwner – כותב/ת
  • roles/bigquery.dataViewer – קורא

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

ranger_hdfs_rules:
  - map: {}

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

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

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

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

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

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

הוספת מירכאות למחרוזות בביטויי CEL

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

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