הפלאגין Managed Service for Apache Spark Ranger Cloud Storage, שזמין בגרסאות 1.5 ו-2.0 של Managed Service for Apache Spark, מפעיל שירות הרשאה בכל מכונה וירטואלית של אשכול Managed Service for Apache Spark. שירות ההרשאות בודק את הבקשות מהמחבר של Cloud Storage בהתאם למדיניות של Ranger. אם הבקשה מאושרת, הוא מחזיר אסימון גישה לחשבון השירות של המכונה הווירטואלית באשכול.
הפלאגין Ranger Cloud Storage מסתמך על Kerberos לצורך אימות, ומשתלב עם התמיכה של המחבר ל-Cloud Storage באסימוני הקצאה. אסימוני ההקצאה מאוחסנים במסד נתונים של MySQL בצומת הראשי של האשכול. סיסמת הבסיס של מסד הנתונים מצוינת במאפייני האשכול כשיוצרים את האשכול של Managed Service for Apache Spark.
לפני שמתחילים
מקצים את התפקיד יצירת אסימונים בחשבון שירות ואת התפקיד אדמין של תפקידי IAM בחשבון השירות של המכונה הווירטואלית של Managed Service for Apache Spark בפרויקט.
התקנת הפלאגין של Ranger Cloud Storage
כדי להתקין את הפלאגין של Ranger ל-Cloud Storage כשיוצרים אשכול Managed Service for Apache Spark, מריצים את הפקודות הבאות בחלון הטרמינל המקומי או ב-Cloud Shell.
הגדרה של משתני סביבה
export CLUSTER_NAME=new-cluster-name \ export REGION=region \ export KERBEROS_KMS_KEY_URI=Kerberos-KMS-key-URI \ export KERBEROS_PASSWORD_URI=Kerberos-password-URI \ export RANGER_ADMIN_PASSWORD_KMS_KEY_URI=Ranger-admin-password-KMS-key-URI \ export RANGER_ADMIN_PASSWORD_GCS_URI=Ranger-admin-password-GCS-URI \ export RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI=MySQL-root-password-KMS-key-URI \ export RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI=MySQL-root-password-GCS-URI
הערות:
- CLUSTER_NAME: השם של האשכול החדש.
- REGION: האזור שבו ייווצר האשכול, לדוגמה
us-west1. - KERBEROS_KMS_KEY_URI ו-KERBEROS_PASSWORD_URI: ראו הגדרת הסיסמה של חשבון המשתמש הראשי ב-Kerberos.
- RANGER_ADMIN_PASSWORD_KMS_KEY_URI ו-RANGER_ADMIN_PASSWORD_GCS_URI: ראו הגדרת סיסמת האדמין של Ranger.
- RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI ו-RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI: מגדירים סיסמה ל-MySQL לפי אותו תהליך שבו השתמשתם כדי להגדיר סיסמה לאדמין של Ranger.
יצירת אשכול ב-Managed Service for Apache Spark
מריצים את הפקודה הבאה כדי ליצור אשכול Managed Service for Apache Spark ולהתקין באשכול את הפלאגין Ranger Cloud Storage.
gcloud dataproc clusters create ${CLUSTER_NAME} \
--region=${REGION} \
--scopes cloud-platform \
--enable-component-gateway \
--optional-components=SOLR,RANGER \
--kerberos-kms-key=${KERBEROS_KMS_KEY_URI} \
--kerberos-root-principal-password-uri=${KERBEROS_PASSWORD_URI} \
--properties="dataproc:ranger.gcs.plugin.enable=true, \
dataproc:ranger.kms.key.uri=${RANGER_ADMIN_PASSWORD_KMS_KEY_URI}, \
dataproc:ranger.admin.password.uri=${RANGER_ADMIN_PASSWORD_GCS_URI}, \
dataproc:ranger.gcs.plugin.mysql.kms.key.uri=${RANGER_GCS_PLUGIN_MYSQL_KMS_KEY_URI}, \
dataproc:ranger.gcs.plugin.mysql.password.uri=${RANGER_GCS_PLUGIN_MYSQL_PASSWORD_URI}"
הערות:
- גרסת תמונה 1.5: אם אתם יוצרים אשכול של גרסת תמונה 1.5 (ראו בחירת גרסאות), הוסיפו את הדגל
--metadata=GCS_CONNECTOR_VERSION="2.2.6" or higherכדי להתקין את גרסת המחבר הנדרשת.
אימות ההתקנה של הפלאגין Ranger Cloud Storage
אחרי שיוצרים את האשכול, סוג השירות GCS שנקרא gcs-dataproc מופיע בממשק האינטרנט של Ranger admin.
כללי מדיניות ברירת המחדל של הפלאגין Ranger Cloud Storage
לשירות gcs-dataproc שמוגדר כברירת מחדל יש את כללי המדיניות הבאים:
כללי מדיניות לקריאה ולכתיבה בקטגוריות הזמניות וההכנה של אשכול Managed Service for Apache Spark
מדיניות
all - bucket, object-path, שמאפשרת לכל המשתמשים לגשת למטא-נתונים של כל האובייקטים. הגישה הזו נדרשת כדי לאפשר לחיבור ל-Cloud Storage לבצע פעולות HCFS (מערכת קבצים תואמת Hadoop).
טיפים לשימוש
גישה של אפליקציות לתיקיות של קטגוריות
כדי להתאים לאפליקציות שיוצרות קובצי ביניים בקטגוריה של Cloud Storage, אתם יכולים לתת את ההרשאות Modify Objects, List Objects ו-Delete Objects בנתיב של הקטגוריה של Cloud Storage, ואז לבחור במצב recursive כדי להרחיב את ההרשאות לנתיבי משנה בנתיב שצוין.
אמצעי הגנה
כדי למנוע עקיפה של הפלאגין:
נותנים לחשבון השירות של ה-VM גישה למשאבים בקטגוריות של Cloud Storage, כדי לאפשר לו לתת גישה למשאבים האלה באמצעות טוקני גישה עם היקף מצומצם (ראו הרשאות IAM ל-Cloud Storage). בנוסף, הסירו את הגישה של המשתמשים למשאבים בקטגוריה כדי למנוע גישה ישירה של משתמשים לקטגוריה.
משביתים את
sudoואמצעים אחרים של גישת בסיס במכונות הווירטואליות של האשכול, כולל עדכון הקובץsudoer, כדי למנוע התחזות או שינויים בהגדרות של האימות וההרשאה. מידע נוסף זמין בהוראות להוספה או להסרה של הרשאות משתמש ב-sudoב-Linux.משתמשים ב-
iptableכדי לחסום בקשות גישה ישירות ל-Cloud Storage ממכונות וירטואליות באשכול. לדוגמה, אתם יכולים לחסום את הגישה לשרת המטא-נתונים של המכונה הווירטואלית כדי למנוע גישה לפרטי כניסה לחשבון השירות של המכונה הווירטואלית או לאסימון הגישה, שמשמשים לאימות ולהרשאת הגישה ל-Cloud Storage (ראוblock_vm_metadata_server.sh, סקריפט אתחול שמשתמש בכלליiptableכדי לחסום את הגישה לשרת המטא-נתונים של המכונה הווירטואלית).
משימות Spark, Hive-on-MapReduce ו-Hive-on-Tez
כדי להגן על פרטי אימות רגישים של משתמשים ולהפחית את העומס על מרכז הפצת המפתחות (KDC), מנהל ההתקן של Spark לא מפיץ את פרטי הכניסה של Kerberos למבצעים. במקום זאת, מנהל ההתקן של Spark מקבל אסימון הקצאה מהפלאגין של Ranger Cloud Storage, ואז מפיץ את אסימון ההקצאה למבצעים. מבצעי המשימות משתמשים בטוקן ההקצאה כדי לאמת את הפלאגין של Ranger Cloud Storage, ומחליפים אותו בטוקן גישה של Google שמאפשר גישה ל-Cloud Storage.
גם משימות Hive-on-MapReduce ו-Hive-on-Tez משתמשות בטוקנים כדי לגשת ל-Cloud Storage. כדי לקבל אסימונים לגישה לקטגוריות ספציפיות של Cloud Storage, צריך להשתמש במאפיינים הבאים כששולחים את סוגי המשימות הבאים:
משימות Spark:
--conf spark.yarn.access.hadoopFileSystems=gs://bucket-name,gs://bucket-name,...
משימות Hive-on-MapReduce:
--hiveconf "mapreduce.job.hdfs-servers=gs://bucket-name,gs://bucket-name,..."
משימות Hive-on-Tez:
--hiveconf "tez.job.fs-servers=gs://bucket-name,gs://bucket-name,..."
תרחיש לדוגמה של משימת Spark
משימה של ספירת מילים ב-Spark נכשלת כשמריצים אותה מחלון הטרמינל ב-VM של אשכול Managed Service for Apache Spark שמותקן בו הפלאגין Ranger Cloud Storage.
spark-submit \
--conf spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET} \
--class org.apache.spark.examples.JavaWordCount \
/usr/lib/spark/examples/jars/spark-examples.jar \
gs://bucket-name/wordcount.txt
הערות:
- FILE_BUCKET: קטגוריה של Cloud Storage לגישה ל-Spark.
פלט השגיאה:
Caused by: com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: '<USER>', Bucket: '<dataproc_temp_bucket>', Object Path: 'a97127cf-f543-40c3-9851-32f172acc53b/spark-job-history/', Action: 'LIST_OBJECTS'
הערות:
- חובה להזין ערך בשדה
spark.yarn.access.hadoopFileSystems=gs://${FILE_BUCKET}בסביבה שבה מופעל Kerberos.
פלט השגיאה:
Caused by: java.lang.RuntimeException: Failed creating a SPNEGO token. Make sure that you have run `kinit` and that your Kerberos configuration is correct. See the full Kerberos error message: No valid credentials provided (Mechanism level: No valid credentials provided)
כדי לערוך מדיניות, משתמשים ב-Access Manager בממשק האינטרנט של Ranger admin ומוסיפים את username לרשימת המשתמשים שיש להם הרשאות List Objects והרשאות אחרות לקטגוריה temp.
הפעלת המשימה יוצרת שגיאה חדשה.
פלט השגיאה:
com.google.gcs.ranger.client.shaded.io.grpc.StatusRuntimeException: PERMISSION_DENIED: Access denied by Ranger policy: User: <USER>, Bucket: '<file-bucket>', Object Path: 'wordcount.txt', Action: 'READ_OBJECTS'
נוספת מדיניות שמעניקה למשתמש גישת קריאה לנתיב של wordcount.text ב-Cloud Storage.
המשימה פועלת ומסתיימת בהצלחה.
INFO com.google.cloud.hadoop.fs.gcs.auth.GcsDelegationTokens: Using delegation token RangerGCSAuthorizationServerSessionToken owner=<USER>, renewer=yarn, realUser=, issueDate=1654116824281, maxDate=0, sequenceNumber=0, masterKeyId=0 this: 1 is: 1 a: 1 text: 1 file: 1 22/06/01 20:54:13 INFO org.sparkproject.jetty.server.AbstractConnector: Stopped