העברת הרשאות מ-Hadoop
במאמר הזה מוסבר איך אפשר להעביר הרשאות מ-Apache Hadoop Distributed File System (HDFS), מ-Ranger HDFS ומ-Apache Hive לתפקידים בניהול הזהויות והרשאות הגישה (IAM) ב-Cloud Storage או ב-BigQuery.
תהליך העברת ההרשאות כולל את השלבים הבאים:
- יוצרים קובץ מיפוי של ישויות מורשות על ידי יצירת קובץ תצורה YAML של כללי ישויות מורשות. לאחר מכן, מריצים את כלי העברת ההרשאות עם קובץ ה-YAML של כללי המנהל הראשי ועם קובצי המטא-נתונים של HDFS או Ranger כדי ליצור קובץ מיפוי של המנהלים הראשיים.
- יוצרים קובץ מיפוי של הרשאות היעד על ידי יצירת קובץ YAML של כללי הרשאות. לאחר מכן, מריצים את כלי העברת ההרשאות עם קובץ ה-YAML של כללי ההרשאות, קובצי התצורה של מיפוי הטבלאות וקובצי המטא-נתונים של HDFS או Ranger, כדי ליצור קובץ מיפוי של הרשאות היעד.
- מריצים את כלי העברת ההרשאות עם קובץ הרשאות היעד כדי להחיל הרשאות על Cloud Storage או על BigQuery. אפשר גם להשתמש בסקריפט Python שמופיע כאן כדי ליצור קובץ Terraform שבעזרתו תוכלו להחיל הרשאות בעצמכם.
לפני שמתחילים
לפני שמעבירים הרשאות, צריך לוודא שביצעתם את הפעולות הבאות:
- מתקינים את הכלי
dwh-migration-dumper. - מריצים את
dwh-migration-dumperהכלי כדי ליצור את המטא-נתונים הנדרשים למקור הנתונים.
אפשר למצוא את סקריפט הגנרטור של 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.
- מוודאים שיש לכם Python 3.7 ואילך.
- יוצרים סביבה וירטואלית חדשה ומפעילים אותה.
מהספרייה
permissions-migration/terraform, מתקינים את התלות מקובץrequirements.txtבאמצעות הפקודה הבאה:python -m pip install -r requirements.txt
מריצים את הפקודה ליצירת קובץ:
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
- מחרוזת שמייצגת ביטוי בוליאני ב-CEL. הערכים האפשריים הם
map: סעיף שמציין את התוכן של שדה תוצאה. הערך של הסעיף הזה תלוי בסוג האובייקט שעובר עיבוד, והוא יכול להיות:-
expressionכדי להעריך כמחרוזת -
valueלמחרוזת קבועה
-
-
skip: מציין שאסור למפות את אובייקט הקלט.- הערך יכול להיות
trueאוfalse
- הערך יכול להיות
-
log: פסוקית של תנאי שעוזרת לנפות באגים או לפתח כללים- מחרוזת שמייצגת ביטוי בוליאני ב-CEL. הערכים האפשריים הם
trueאוfalse - ערך ברירת המחדל הוא
false - אם הערך הוא
true, הפלט מכיל יומן ביצוע שאפשר להשתמש בו כדי לעקוב אחרי בעיות בביצוע או לאבחן אותן.
- מחרוזת שמייצגת ביטוי בוליאני ב-CEL. הערכים האפשריים הם
יצירת קובץ 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'"