העברת הרשאות מ-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 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.
- מוודאים שמותקנת גרסה 3.7 ומעלה של Python.
- יוצרים סביבה וירטואלית חדשה ומפעילים אותה.
בספרייה
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– כותב/ת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'"